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

9.2-releasereleng/10.0releng/10.0.1releng/10.0.2
Last change on this file since 7ba4ea7 was 7ba4ea7, checked in by Ken Moore <ken@…>, 10 months ago

Change the about gui to use "hw.physmem" instead of "hw.realmem" for the memory size output. This should fix the problem of reporting more memory than the system actually has.

  • 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", "gnome2-lite"},
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(pcbsd::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 = pcbsd::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(pcbsd::Utils::sysctl("hw.model"));
109
110    // memory
111    ui->MemoryLabel->setText(pcbsd::Utils::bytesToHumanReadable(pcbsd::Utils::sysctlAsInt("hw.physmem")));
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 = pcbsd::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 = pcbsd::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.