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

releng/10.0.1releng/10.0.2releng/10.0.3releng/10.1releng/10.1.1
Last change on this file since 1a4fc7a was 1a4fc7a, checked in by yurkis <yurkis@…>, 14 months ago

About UI - Added package set displaying; Remove depricated unstable snapshot detection

  • Property mode set to 100644
File size: 8.2 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
91    QString PkgSet = pcbsd::Utils::getValFromPCBSDConf("PACKAGE_SET");
92    if (PkgSet.toUpper().trimmed() == "EDGE")
93    {
94        PkgSet+=QString(" ") + tr("(unstable)");
95    }
96    ui->PkgSetLabel->setText(PkgSet);
97
98
99    // CPU
100    ui->CPUInfoLabel->setText(pcbsd::Utils::sysctl("hw.model"));
101
102    // memory
103    ui->MemoryLabel->setText(pcbsd::Utils::bytesToHumanReadable(pcbsd::Utils::sysctlAsInt("hw.physmem")));
104    //this->setFixedSize(this->geometry().width(),this->geometry().height());
105}
106
107////////////////////////////////////////////////////////////////////////////
108MainWindow::~MainWindow()
109{
110    delete ui;
111}
112
113////////////////////////////////////////////////////////////////////////////
114bool MainWindow::checkNG()
115{
116    return QFile::exists("/usr/local/sbin/pkg2ng");
117}
118
119////////////////////////////////////////////////////////////////////////////
120bool MainWindow::checkNGPackage(QString name, QString &outVer)
121{
122    outVer="";
123    QStringList out = pcbsd::Utils::runShellCommand(QString("pkg info -f ") + name);
124    if (!out.size())
125        return false;
126    for (int i=0; i<out.size(); i++)
127    {
128        if (out[i].contains("Version"))
129        {
130            outVer = out[i];
131            outVer.replace("Version        : ","");
132            qDebug()<<out[i];
133            break;
134        }
135    }
136    return ( outVer.length() > 0 );
137}
138
139////////////////////////////////////////////////////////////////////////////
140void MainWindow::addDEItem(QString name, QString version)
141{
142    QTreeWidgetItem* item = new QTreeWidgetItem(ui->DEList);
143    item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
144    QFont font = item->font(0);
145    font.setBold(true);
146    item->setFont(0, font);
147    item->setText(0, name);
148    item->setText(1, version);
149
150    ui->DEList->addTopLevelItem(item);
151}
152
153////////////////////////////////////////////////////////////////////////////
154void MainWindow::slotSingleInstance()
155{
156    this->hide();
157    this->showNormal();
158    this->activateWindow();
159    this->raise();
160}
161
162////////////////////////////////////////////////////////////////////////////
163void MainWindow::on_pushButton_2_clicked()
164{
165    //X.org version
166    QStringList xorgver = pcbsd::Utils::runShellCommand("Xorg -version");
167    for(int i=0; i<xorgver.size(); i++)
168    {
169        QString str = xorgver.at(i);
170        std::cout<<str.toStdString();
171        if ( str.indexOf("X.Org X Server ") == 0)
172        {
173            ui->XorgLabel->setText(str.replace("X.Org X Server ",""));
174            break;
175        }
176    }
177
178    if (checkNG())
179    {
180        QString ver;
181        if (checkNGPackage(PCBSD_UTILS_PACKAGE, ver))
182        {
183            ui->pcbsd_utils->setText(QString("r") + ver);
184        }
185        if (checkNGPackage(PCBSD_UTILS_QT_PACKAGE, ver))
186        {
187            ui->pcbsd_utils_qt->setText(QString("r") + ver);
188        }
189    }
190    ui->MainStack->setCurrentIndex(2);
191}
192
193////////////////////////////////////////////////////////////////////////////
194void MainWindow::on_BackButton_clicked()
195{
196    ui->MainStack->setCurrentIndex(0);
197}
198
199////////////////////////////////////////////////////////////////////////////
200void MainWindow::slotReadPkg()
201{
202    QString line;
203    while(pkginfo->canReadLine() )
204    {
205        line = pkginfo->readLine().simplified();
206        //std::cout<<line.toStdString()<<"\n";
207        for(int i=0 ; i<DEComponents_size; i++)
208        {
209            if (0 == line.indexOf(DEComponents[i].Prefix, Qt::CaseInsensitive))
210            {
211                line = line.replace(DEComponents[i].Prefix, "");
212                line= line.left(line.indexOf(" "));
213                addDEItem(DEComponents[i].Name, line);
214            }//if got DE
215        }//for all DEs
216    }// while can read line
217}
218
219////////////////////////////////////////////////////////////////////////////
220void MainWindow::slotPackagesFinished()
221{
222    ui->WaitTextLabel->setVisible(false);
223}
224
225////////////////////////////////////////////////////////////////////////////
226void MainWindow::on_pushButton_clicked()
227{
228    ui->DEList->clear();
229
230    if (!checkNG())
231    {
232        pkginfo = new QProcess(this);
233        pkginfo->setProcessChannelMode(QProcess::MergedChannels);
234        connect( pkginfo, SIGNAL(readyRead()), this, SLOT(slotReadPkg() ) );
235        connect( pkginfo, SIGNAL(finished ( int, QProcess::ExitStatus)), this, SLOT(slotPackagesFinished()));
236        pkginfo->start("pkg_info");
237        ui->WaitTextLabel->setVisible(true);
238    }
239    else
240    {
241        ui->WaitTextLabel->setVisible(false);
242        for(int i=0 ; i<DEComponentsNG_size; i++)
243        {
244            QString ver;
245            if (checkNGPackage(DEComponentsNG[i].Prefix, ver))
246            {
247                addDEItem(DEComponentsNG[i].Name, ver);
248            }
249        }//for all DEs
250    }//if pkgng installed
251
252    ui->MainStack->setCurrentIndex(1);
253}
254
255void MainWindow::on_BackButton_2_clicked()
256{
257    ui->MainStack->setCurrentIndex(0);
258}
Note: See TracBrowser for help on using the repository browser.