source: src-qt4/about-gui/mainwindow.cpp @ 695798b

enter/10releng/10.0.1releng/10.0.2releng/10.0.3releng/10.1releng/10.1.1releng/10.1.2
Last change on this file since 695798b was 695798b, checked in by Kris Moore <kris@…>, 15 months ago

Add a new PCBSDVERSION #define, which will be set to the current PC-BSD
specific version number we are creating. This number may differ from the
FreeBSD base version when we roll updated ISOs or quarterly package
updates. I.E. 10.0.1

  • Property mode set to 100644
File size: 8.4 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#include "../config.h"
27
28#include <QProcess>
29#include <QStringList>
30#include <QDate>
31#include <pcbsd-utils.h>
32
33#include <iostream>
34
35typedef struct _SComponent
36{
37    QString Name;
38    QString Prefix;
39}SComponent;
40
41const SComponent DEComponents[] ={
42    {"KDE", "kde-runtime-"},
43    {"Gnome", "gnome2-lite-"},
44    {"LXDE", "lxde-meta-"},
45    {"XFCE", "xfce-"}
46};
47
48const SComponent DEComponentsNG[]={
49    {"KDE", "kde-workspace"},
50    {"Gnome", "pcbsd-meta-gnome"},
51    {"Cinnamon", "pcbsd-meta-cinnamon"},
52    {"Mate", "pcbsd-meta-mate"},
53    {"LXDE", "lxde-meta"},
54    {"XFCE", "xfce"},
55    {"e17", "enlightenment"},
56    {"Awesome", "awesome"},
57    {"FVWM", "fvwm2"}
58};
59
60const int DEComponents_size = sizeof(DEComponents) / sizeof(SComponent);
61const int DEComponentsNG_size = sizeof(DEComponentsNG) / sizeof(SComponent);
62
63const char* const PCBSD_UTILS_PACKAGE = "pcbsd-utils";
64const char* const PCBSD_UTILS_QT_PACKAGE = "pcbsd-utils-qt4";
65
66////////////////////////////////////////////////////////////////////////////
67MainWindow::MainWindow(QWidget *parent) :
68    QDialog(parent),
69    ui(new Ui::MainWindow)
70{
71    pkginfo = 0;
72    ui->setupUi(this);
73
74    QString Arch;
75    QString Ver;
76
77    //uname
78    QStringList unameParsed = QString(pcbsd::Utils::runShellCommand("uname -imnr").at(0)).split(" ", QString::SkipEmptyParts);
79    if (unameParsed.size()== 4)
80    {
81        ui->HostnameLabel->setText(unameParsed.at(0));
82        ui->FreeBSDVerLabel->setText(unameParsed.at(1));
83        Arch = unameParsed.at(2);
84        ui->ArchLabel->setText(unameParsed.at(2));
85        ui->IdentLabel->setText(unameParsed.at(3));
86    }
87
88    // pcbsd version
89    ui->VersionLabel->setText(PCBSDVERSION);
90
91    // Utils version
92    ui->UtilsLabel->setText(pcbsd::Utils::runShellCommand("pkg query '%v' pcbsd-utils-qt4").at(0).section("'", 1, 1));
93
94    QString PkgSet = pcbsd::Utils::getValFromPCBSDConf("PACKAGE_SET");
95    PkgSet="PRODUCTION";
96    if (PkgSet.toUpper().trimmed() == "EDGE")
97    {
98        PkgSet="EDGE";
99        PkgSet+=QString(" ") + tr("(unstable)");
100    }
101    ui->PkgSetLabel->setText(PkgSet);
102
103
104    // CPU
105    ui->CPUInfoLabel->setText(pcbsd::Utils::sysctl("hw.model"));
106
107    // memory
108    ui->MemoryLabel->setText(pcbsd::Utils::bytesToHumanReadable(pcbsd::Utils::sysctlAsInt("hw.physmem")));
109    //this->setFixedSize(this->geometry().width(),this->geometry().height());
110}
111
112////////////////////////////////////////////////////////////////////////////
113MainWindow::~MainWindow()
114{
115    delete ui;
116}
117
118////////////////////////////////////////////////////////////////////////////
119bool MainWindow::checkNG()
120{
121    return QFile::exists("/usr/local/sbin/pkg2ng");
122}
123
124////////////////////////////////////////////////////////////////////////////
125bool MainWindow::checkNGPackage(QString name, QString &outVer)
126{
127    outVer="";
128    QStringList out = pcbsd::Utils::runShellCommand(QString("pkg info -f ") + name);
129    if (!out.size())
130        return false;
131    for (int i=0; i<out.size(); i++)
132    {
133        if (out[i].contains("Version"))
134        {
135            outVer = out[i];
136            outVer.replace("Version        : ","");
137            qDebug()<<out[i];
138            break;
139        }
140    }
141    return ( outVer.length() > 0 );
142}
143
144////////////////////////////////////////////////////////////////////////////
145void MainWindow::addDEItem(QString name, QString version)
146{
147    QTreeWidgetItem* item = new QTreeWidgetItem(ui->DEList);
148    item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
149    QFont font = item->font(0);
150    font.setBold(true);
151    item->setFont(0, font);
152    item->setText(0, name);
153    item->setText(1, version);
154
155    ui->DEList->addTopLevelItem(item);
156}
157
158////////////////////////////////////////////////////////////////////////////
159void MainWindow::slotSingleInstance()
160{
161    this->hide();
162    this->showNormal();
163    this->activateWindow();
164    this->raise();
165}
166
167////////////////////////////////////////////////////////////////////////////
168void MainWindow::on_pushButton_2_clicked()
169{
170    //X.org version
171    QStringList xorgver = pcbsd::Utils::runShellCommand("Xorg -version");
172    for(int i=0; i<xorgver.size(); i++)
173    {
174        QString str = xorgver.at(i);
175        std::cout<<str.toStdString();
176        if ( str.indexOf("X.Org X Server ") == 0)
177        {
178            ui->XorgLabel->setText(str.replace("X.Org X Server ",""));
179            break;
180        }
181    }
182
183    if (checkNG())
184    {
185        QString ver;
186        if (checkNGPackage(PCBSD_UTILS_PACKAGE, ver))
187        {
188            ui->pcbsd_utils->setText(QString("r") + ver);
189        }
190        if (checkNGPackage(PCBSD_UTILS_QT_PACKAGE, ver))
191        {
192            ui->pcbsd_utils_qt->setText(QString("r") + ver);
193        }
194    }
195    ui->MainStack->setCurrentIndex(2);
196}
197
198////////////////////////////////////////////////////////////////////////////
199void MainWindow::on_BackButton_clicked()
200{
201    ui->MainStack->setCurrentIndex(0);
202}
203
204////////////////////////////////////////////////////////////////////////////
205void MainWindow::slotReadPkg()
206{
207    QString line;
208    while(pkginfo->canReadLine() )
209    {
210        line = pkginfo->readLine().simplified();
211        //std::cout<<line.toStdString()<<"\n";
212        for(int i=0 ; i<DEComponents_size; i++)
213        {
214            if (0 == line.indexOf(DEComponents[i].Prefix, Qt::CaseInsensitive))
215            {
216                line = line.replace(DEComponents[i].Prefix, "");
217                line= line.left(line.indexOf(" "));
218                addDEItem(DEComponents[i].Name, line);
219            }//if got DE
220        }//for all DEs
221    }// while can read line
222}
223
224////////////////////////////////////////////////////////////////////////////
225void MainWindow::slotPackagesFinished()
226{
227    ui->WaitTextLabel->setVisible(false);
228}
229
230////////////////////////////////////////////////////////////////////////////
231void MainWindow::on_pushButton_clicked()
232{
233    ui->DEList->clear();
234
235    if (!checkNG())
236    {
237        pkginfo = new QProcess(this);
238        pkginfo->setProcessChannelMode(QProcess::MergedChannels);
239        connect( pkginfo, SIGNAL(readyRead()), this, SLOT(slotReadPkg() ) );
240        connect( pkginfo, SIGNAL(finished ( int, QProcess::ExitStatus)), this, SLOT(slotPackagesFinished()));
241        pkginfo->start("pkg_info");
242        ui->WaitTextLabel->setVisible(true);
243    }
244    else
245    {
246        ui->WaitTextLabel->setVisible(false);
247        for(int i=0 ; i<DEComponentsNG_size; i++)
248        {
249            QString ver;
250            if (checkNGPackage(DEComponentsNG[i].Prefix, ver))
251            {
252                addDEItem(DEComponentsNG[i].Name, ver);
253            }
254        }//for all DEs
255    }//if pkgng installed
256
257    ui->MainStack->setCurrentIndex(1);
258}
259
260void MainWindow::on_BackButton_2_clicked()
261{
262    ui->MainStack->setCurrentIndex(0);
263}
Note: See TracBrowser for help on using the repository browser.