source: src-qt4/about-gui/mainwindow.cpp @ 7d0456b

releng/10.0releng/10.0.1releng/10.0.2releng/10.0.3
Last change on this file since 7d0456b was 7d0456b, checked in by Kris Moore <kris@…>, 10 months ago

Add some extra desktops to detect in the about dialog

  • Property mode set to 100644
File size: 8.7 KB
Line 
1/**************************************************************************
2*   Copyright (C) 2012 by Yuri Momotyuk                                   *
3*   yurkis@gmail.com                                                      *
4*                                                                         *
5*   Permission is hereby granted, free of charge, to any person obtaining *
6*   a copy of this software and associated documentation files (the       *
7*   "Software"), to deal in the Software without restriction, including   *
8*   without limitation the rights to use, copy, modify, merge, publish,   *
9*   distribute, sublicense, and/or sell copies of the Software, and to    *
10*   permit persons to whom the Software is furnished to do so, subject to *
11*   the following conditions:                                             *
12*                                                                         *
13*   The above copyright notice and this permission notice shall be        *
14*   included in all copies or substantial portions of the Software.       *
15*                                                                         *
16*   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       *
17*   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    *
18*   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*
19*   IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR     *
20*   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
21*   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR *
22*   OTHER DEALINGS IN THE SOFTWARE.                                       *
23***************************************************************************/
24#include "mainwindow.h"
25#include "ui_mainwindow.h"
26
27#include <QProcess>
28#include <QStringList>
29#include <QDate>
30#include <pcbsd-utils.h>
31
32#include <iostream>
33
34typedef struct _SComponent
35{
36    QString Name;
37    QString Prefix;
38}SComponent;
39
40const SComponent DEComponents[] ={
41    {"KDE", "kde-runtime-"},
42    {"Gnome", "gnome2-lite-"},
43    {"LXDE", "lxde-meta-"},
44    {"XFCE", "xfce-"}
45};
46
47const SComponent DEComponentsNG[]={
48    {"KDE", "kde-workspace"},
49    {"Gnome", "pcbsd-meta-gnome"},
50    {"Cinnamon", "pcbsd-meta-cinnamon"},
51    {"Mate", "pcbsd-meta-mate"},
52    {"LXDE", "lxde-meta"},
53    {"XFCE", "xfce"},
54    {"e17", "enlightenment"},
55    {"Awesome", "awesome"},
56    {"FVWM", "fvwm2"}
57};
58
59const int DEComponents_size = sizeof(DEComponents) / sizeof(SComponent);
60const int DEComponentsNG_size = sizeof(DEComponentsNG) / sizeof(SComponent);
61
62const char* const PCBSD_UTILS_PACKAGE = "pcbsd-utils";
63const char* const PCBSD_UTILS_QT_PACKAGE = "pcbsd-utils-qt4";
64
65////////////////////////////////////////////////////////////////////////////
66MainWindow::MainWindow(QWidget *parent) :
67    QDialog(parent),
68    ui(new Ui::MainWindow)
69{
70    pkginfo = 0;
71    ui->setupUi(this);
72
73    QString Arch;
74    QString Ver;
75
76    //uname
77    QStringList unameParsed = QString(pcbsd::Utils::runShellCommand("uname -imnr").at(0)).split(" ", QString::SkipEmptyParts);
78    if (unameParsed.size()== 4)
79    {
80        ui->HostnameLabel->setText(unameParsed.at(0));
81        ui->FreeBSDVerLabel->setText(unameParsed.at(1));
82        Arch = unameParsed.at(2);
83        ui->ArchLabel->setText(unameParsed.at(2));
84        ui->IdentLabel->setText(unameParsed.at(3));
85    }
86
87    // pcbsd version
88    Ver = pcbsd::Utils::runShellCommand("uname -r").at(0);
89    ui->VersionLabel->setText(Ver+" ("+Arch+")");
90    ui->UnstableLabel->setVisible(false);
91    Ver = Ver.trimmed();
92    int idx = Ver.lastIndexOf("-");
93    if (idx>=0)
94    {
95        QString SnapDate = Ver.mid(idx+1);
96        if (SnapDate.length() == 8)
97        {
98            int year = SnapDate.left(4).toInt();
99            int month= SnapDate.mid(4,2).toInt();
100            int day= SnapDate.right(2).toInt();
101            QString SnapshotText = QString(
102                        tr("Testing snapshot %1. May be unstable!")).arg(
103                        QDate(year,month,day).toString(Qt::SystemLocaleShortDate));
104            ui->UnstableLabel->setText(SnapshotText);
105            ui->UnstableLabel->setVisible(true);
106        }
107    }
108
109    // CPU
110    ui->CPUInfoLabel->setText(pcbsd::Utils::sysctl("hw.model"));
111
112    // memory
113    ui->MemoryLabel->setText(pcbsd::Utils::bytesToHumanReadable(pcbsd::Utils::sysctlAsInt("hw.physmem")));
114    //this->setFixedSize(this->geometry().width(),this->geometry().height());
115}
116
117////////////////////////////////////////////////////////////////////////////
118MainWindow::~MainWindow()
119{
120    delete ui;
121}
122
123////////////////////////////////////////////////////////////////////////////
124bool MainWindow::checkNG()
125{
126    return QFile::exists("/usr/local/sbin/pkg2ng");
127}
128
129////////////////////////////////////////////////////////////////////////////
130bool MainWindow::checkNGPackage(QString name, QString &outVer)
131{
132    outVer="";
133    QStringList out = pcbsd::Utils::runShellCommand(QString("pkg info -f ") + name);
134    if (!out.size())
135        return false;
136    for (int i=0; i<out.size(); i++)
137    {
138        if (out[i].contains("Version"))
139        {
140            outVer = out[i];
141            outVer.replace("Version        : ","");
142            qDebug()<<out[i];
143            break;
144        }
145    }
146    return ( outVer.length() > 0 );
147}
148
149////////////////////////////////////////////////////////////////////////////
150void MainWindow::addDEItem(QString name, QString version)
151{
152    QTreeWidgetItem* item = new QTreeWidgetItem(ui->DEList);
153    item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
154    QFont font = item->font(0);
155    font.setBold(true);
156    item->setFont(0, font);
157    item->setText(0, name);
158    item->setText(1, version);
159
160    ui->DEList->addTopLevelItem(item);
161}
162
163////////////////////////////////////////////////////////////////////////////
164void MainWindow::slotSingleInstance()
165{
166    this->hide();
167    this->showNormal();
168    this->activateWindow();
169    this->raise();
170}
171
172////////////////////////////////////////////////////////////////////////////
173void MainWindow::on_pushButton_2_clicked()
174{
175    //X.org version
176    QStringList xorgver = pcbsd::Utils::runShellCommand("Xorg -version");
177    for(int i=0; i<xorgver.size(); i++)
178    {
179        QString str = xorgver.at(i);
180        std::cout<<str.toStdString();
181        if ( str.indexOf("X.Org X Server ") == 0)
182        {
183            ui->XorgLabel->setText(str.replace("X.Org X Server ",""));
184            break;
185        }
186    }
187
188    if (checkNG())
189    {
190        QString ver;
191        if (checkNGPackage(PCBSD_UTILS_PACKAGE, ver))
192        {
193            ui->pcbsd_utils->setText(QString("r") + ver);
194        }
195        if (checkNGPackage(PCBSD_UTILS_QT_PACKAGE, ver))
196        {
197            ui->pcbsd_utils_qt->setText(QString("r") + ver);
198        }
199    }
200    ui->MainStack->setCurrentIndex(2);
201}
202
203////////////////////////////////////////////////////////////////////////////
204void MainWindow::on_BackButton_clicked()
205{
206    ui->MainStack->setCurrentIndex(0);
207}
208
209////////////////////////////////////////////////////////////////////////////
210void MainWindow::slotReadPkg()
211{
212    QString line;
213    while(pkginfo->canReadLine() )
214    {
215        line = pkginfo->readLine().simplified();
216        //std::cout<<line.toStdString()<<"\n";
217        for(int i=0 ; i<DEComponents_size; i++)
218        {
219            if (0 == line.indexOf(DEComponents[i].Prefix, Qt::CaseInsensitive))
220            {
221                line = line.replace(DEComponents[i].Prefix, "");
222                line= line.left(line.indexOf(" "));
223                addDEItem(DEComponents[i].Name, line);
224            }//if got DE
225        }//for all DEs
226    }// while can read line
227}
228
229////////////////////////////////////////////////////////////////////////////
230void MainWindow::slotPackagesFinished()
231{
232    ui->WaitTextLabel->setVisible(false);
233}
234
235////////////////////////////////////////////////////////////////////////////
236void MainWindow::on_pushButton_clicked()
237{
238    ui->DEList->clear();
239
240    if (!checkNG())
241    {
242        pkginfo = new QProcess(this);
243        pkginfo->setProcessChannelMode(QProcess::MergedChannels);
244        connect( pkginfo, SIGNAL(readyRead()), this, SLOT(slotReadPkg() ) );
245        connect( pkginfo, SIGNAL(finished ( int, QProcess::ExitStatus)), this, SLOT(slotPackagesFinished()));
246        pkginfo->start("pkg_info");
247        ui->WaitTextLabel->setVisible(true);
248    }
249    else
250    {
251        ui->WaitTextLabel->setVisible(false);
252        for(int i=0 ; i<DEComponentsNG_size; i++)
253        {
254            QString ver;
255            if (checkNGPackage(DEComponentsNG[i].Prefix, ver))
256            {
257                addDEItem(DEComponentsNG[i].Name, ver);
258            }
259        }//for all DEs
260    }//if pkgng installed
261
262    ui->MainStack->setCurrentIndex(1);
263}
264
265void MainWindow::on_BackButton_2_clicked()
266{
267    ui->MainStack->setCurrentIndex(0);
268}
Note: See TracBrowser for help on using the repository browser.