source: src-qt4/about-gui/mainwindow.cpp @ 1f0939e

9.1-release9.2-releasereleng/10.0releng/10.0.1releng/10.0.2releng/10.0.3
Last change on this file since 1f0939e was 1f0939e, checked in by Kris Moore <kris@…>, 19 months ago
  • Initial merge of code from PC-BSD SVN repo for my private (pre-release) hacking
  • Property mode set to 100644
File size: 8.6 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", "gnome-desktop"},
50    {"LXDE", "lxde-meta"},
51    {"XFCE", "xfce"},
52    {"e17", "enlightenment"},
53    {"Awesome", "awesome"},
54    {"FVWM", "fvwm2"}
55};
56
57const int DEComponents_size = sizeof(DEComponents) / sizeof(SComponent);
58const int DEComponentsNG_size = sizeof(DEComponentsNG) / sizeof(SComponent);
59
60const char* const PCBSD_UTILS_PACKAGE = "pcbsd-utils";
61const char* const PCBSD_UTILS_QT_PACKAGE = "pcbsd-utils-qt4";
62
63////////////////////////////////////////////////////////////////////////////
64MainWindow::MainWindow(QWidget *parent) :
65    QDialog(parent),
66    ui(new Ui::MainWindow)
67{
68    pkginfo = 0;
69    ui->setupUi(this);
70
71    QString Arch;
72    QString Ver;
73
74    //uname
75    QStringList unameParsed = QString(Utils::runShellCommand("uname -imnr").at(0)).split(" ", QString::SkipEmptyParts);
76    if (unameParsed.size()== 4)
77    {
78        ui->HostnameLabel->setText(unameParsed.at(0));
79        ui->FreeBSDVerLabel->setText(unameParsed.at(1));
80        Arch = unameParsed.at(2);
81        ui->ArchLabel->setText(unameParsed.at(2));
82        ui->IdentLabel->setText(unameParsed.at(3));
83    }
84
85    // pcbsd version
86    Ver = Utils::runShellCommand("uname -r").at(0);
87    ui->VersionLabel->setText(Ver+" ("+Arch+")");
88    ui->UnstableLabel->setVisible(false);
89    Ver = Ver.trimmed();
90    int idx = Ver.lastIndexOf("-");
91    if (idx>=0)
92    {
93        QString SnapDate = Ver.mid(idx+1);
94        if (SnapDate.length() == 8)
95        {
96            int year = SnapDate.left(4).toInt();
97            int month= SnapDate.mid(4,2).toInt();
98            int day= SnapDate.right(2).toInt();
99            QString SnapshotText = QString(
100                        tr("Testing snapshot %1. May be unstable!")).arg(
101                        QDate(year,month,day).toString(Qt::SystemLocaleShortDate));
102            ui->UnstableLabel->setText(SnapshotText);
103            ui->UnstableLabel->setVisible(true);
104        }
105    }
106
107    // CPU
108    ui->CPUInfoLabel->setText(Utils::sysctl("hw.model"));
109
110    // memory
111    ui->MemoryLabel->setText(Utils::bytesToHumanReadable(Utils::sysctlAsInt("hw.realmem")));
112    //this->setFixedSize(this->geometry().width(),this->geometry().height());
113}
114
115////////////////////////////////////////////////////////////////////////////
116MainWindow::~MainWindow()
117{
118    delete ui;
119}
120
121////////////////////////////////////////////////////////////////////////////
122bool MainWindow::checkNG()
123{
124    return QFile::exists("/usr/local/sbin/pkg2ng");
125}
126
127////////////////////////////////////////////////////////////////////////////
128bool MainWindow::checkNGPackage(QString name, QString &outVer)
129{
130    outVer="";
131    QStringList out = Utils::runShellCommand(QString("pkg info -f ") + name);
132    if (!out.size())
133        return false;
134    for (int i=0; i<out.size(); i++)
135    {
136        if (out[i].contains("Version"))
137        {
138            outVer = out[i];
139            outVer.replace("Version        : ","");
140            qDebug()<<out[i];
141            break;
142        }
143    }
144    return ( outVer.length() > 0 );
145}
146
147////////////////////////////////////////////////////////////////////////////
148void MainWindow::addDEItem(QString name, QString version)
149{
150    QTreeWidgetItem* item = new QTreeWidgetItem(ui->DEList);
151    item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
152    QFont font = item->font(0);
153    font.setBold(true);
154    item->setFont(0, font);
155    item->setText(0, name);
156    item->setText(1, version);
157
158    ui->DEList->addTopLevelItem(item);
159}
160
161////////////////////////////////////////////////////////////////////////////
162void MainWindow::slotSingleInstance()
163{
164    this->hide();
165    this->showNormal();
166    this->activateWindow();
167    this->raise();
168}
169
170////////////////////////////////////////////////////////////////////////////
171void MainWindow::on_pushButton_2_clicked()
172{
173    //X.org version
174    QStringList xorgver = Utils::runShellCommand("Xorg -version");
175    for(int i=0; i<xorgver.size(); i++)
176    {
177        QString str = xorgver.at(i);
178        std::cout<<str.toStdString();
179        if ( str.indexOf("X.Org X Server ") == 0)
180        {
181            ui->XorgLabel->setText(str.replace("X.Org X Server ",""));
182            break;
183        }
184    }
185
186    if (checkNG())
187    {
188        QString ver;
189        if (checkNGPackage(PCBSD_UTILS_PACKAGE, ver))
190        {
191            ui->pcbsd_utils->setText(QString("r") + ver);
192        }
193        if (checkNGPackage(PCBSD_UTILS_QT_PACKAGE, ver))
194        {
195            ui->pcbsd_utils_qt->setText(QString("r") + ver);
196        }
197    }
198    ui->MainStack->setCurrentIndex(2);
199}
200
201////////////////////////////////////////////////////////////////////////////
202void MainWindow::on_BackButton_clicked()
203{
204    ui->MainStack->setCurrentIndex(0);
205}
206
207////////////////////////////////////////////////////////////////////////////
208void MainWindow::slotReadPkg()
209{
210    QString line;
211    while(pkginfo->canReadLine() )
212    {
213        line = pkginfo->readLine().simplified();
214        //std::cout<<line.toStdString()<<"\n";
215        for(int i=0 ; i<DEComponents_size; i++)
216        {
217            if (0 == line.indexOf(DEComponents[i].Prefix, Qt::CaseInsensitive))
218            {
219                line = line.replace(DEComponents[i].Prefix, "");
220                line= line.left(line.indexOf(" "));
221                addDEItem(DEComponents[i].Name, line);
222            }//if got DE
223        }//for all DEs
224    }// while can read line
225}
226
227////////////////////////////////////////////////////////////////////////////
228void MainWindow::slotPackagesFinished(int exitCode, QProcess::ExitStatus exitStatus)
229{
230    ui->WaitTextLabel->setVisible(false);
231}
232
233////////////////////////////////////////////////////////////////////////////
234void MainWindow::on_pushButton_clicked()
235{
236    ui->DEList->clear();
237
238    if (!checkNG())
239    {
240        pkginfo = new QProcess(this);
241        pkginfo->setProcessChannelMode(QProcess::MergedChannels);
242        connect( pkginfo, SIGNAL(readyRead()), this, SLOT(slotReadPkg() ) );
243        connect( pkginfo, SIGNAL(finished ( int, QProcess::ExitStatus)), this, SLOT(slotPackagesFinished(int, QProcess::ExitStatus)));
244        pkginfo->start("pkg_info");
245        ui->WaitTextLabel->setVisible(true);
246    }
247    else
248    {
249        ui->WaitTextLabel->setVisible(false);
250        for(int i=0 ; i<DEComponentsNG_size; i++)
251        {
252            QString ver;
253            if (checkNGPackage(DEComponentsNG[i].Prefix, ver))
254            {
255                addDEItem(DEComponentsNG[i].Name, ver);
256            }
257        }//for all DEs
258    }//if pkgng installed
259
260    ui->MainStack->setCurrentIndex(1);
261}
262
263void MainWindow::on_BackButton_2_clicked()
264{
265    ui->MainStack->setCurrentIndex(0);
266}
Note: See TracBrowser for help on using the repository browser.