source: src-qt4/pc-controlpanel/mainwnd.cpp @ 11d9290

releng/10.0.1releng/10.0.2releng/10.0.3
Last change on this file since 11d9290 was 11d9290, checked in by Ken Moore <ken@…>, 8 months ago

Enable a bit of debugging within the control panel.

  • Property mode set to 100644
File size: 15.8 KB
Line 
1/**************************************************************************
2*   Copyright (C) 2011 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
25#include <QDebug>
26#include "mainwnd.h"
27#include "ui_mainwnd.h"
28#include "deinfo.h"
29#include "../config.h"
30#include <unistd.h>
31
32#include <QFile>
33#include <iostream>
34
35
36#define ITEMS_PREFIX   PREFIX + "/share/pcbsd/pc-controlpanel/items/"
37#define SOFTWARE_DIR   ITEMS_PREFIX + "software"
38#define SYSTEM_DIR     ITEMS_PREFIX + "system"
39#define HARDWARE_DIR   ITEMS_PREFIX + "hardware"
40#define NETWORKING_DIR ITEMS_PREFIX + "network"
41#define TOOLS_DIR      ITEMS_PREFIX + "tools"
42#define DE_DIR         ITEMS_PREFIX + "de"
43
44#define PBI_INSTALLED_DIRECTORY "/var/db/pbi/installed"
45
46static QString DETEXT;
47
48///////////////////////////////////////////////////////////////////////////////
49MainWnd::MainWnd(QWidget *parent) :
50    QMainWindow(parent),
51    ui(new Ui::MainWnd)
52{
53    ui->setupUi(this);
54
55    misWheelGroup= checkUserGroup("wheel");
56    misOperatorGroup = checkUserGroup("operator");
57
58    setupGroups();
59
60    InstalledDEList.refresh();
61    if (InstalledDEList.active())
62    {
63        mCurrentDE = *InstalledDEList.active();
64        mvEnabledDE.push_back(mCurrentDE.mName);
65        qDebug() << "Current DE: " << mCurrentDE.mName;
66    }   
67
68    DETEXT = tr("Desktop environment");
69
70    DEChoiseMenu = new QMenu("", this);
71    setupDEChooser();
72    fillGroups();
73
74}
75
76///////////////////////////////////////////////////////////////////////////////
77MainWnd::~MainWnd()
78{
79    delete ui;
80}
81
82///////////////////////////////////////////////////////////////////////////////
83void MainWnd::changeEvent(QEvent *e)
84{
85    QMainWindow::changeEvent(e);
86    switch (e->type()) {
87    case QEvent::LanguageChange:
88        ui->retranslateUi(this);
89        break;
90    default:
91        break;
92    }
93}
94
95///////////////////////////////////////////////////////////////////////////////
96void MainWnd::setupGroups()
97{
98
99    //qDebug() << "Running setup groups";
100    setupGroup(&SoftwareList, ui->SoftwareGBox);
101    setupGroup(&SystemList, ui->SystemGBox);
102    setupGroup(&HardwareList, ui->HardwareGBox);
103    setupGroup(&NetworkingList, ui->NetworkingGBox);
104    setupGroup(&ToolsList, ui->ToolsGBox);
105    setupGroup(&DEList, ui->DEGBox);
106}
107
108///////////////////////////////////////////////////////////////////////////////
109void MainWnd::setupGroup(QGroupList** List, QWidget* Parrent)
110{
111        QGridLayout *layout = new QGridLayout(Parrent);
112        (*List)=new QGroupList(Parrent);
113        layout->addWidget(*List);
114        Parrent->setLayout(layout); 
115        //qDebug() << "SetupGroup";
116    QObject::connect(*List, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(on_itemActivated(QListWidgetItem*)));
117}
118
119///////////////////////////////////////////////////////////////////////////////
120void MainWnd::fillGroups()
121{
122        //qDebug() << "Running fillGroups";
123    mRefreshMutex.lock();
124
125    bool isVisible;
126
127    ui->centralWidget->setEnabled(false);
128    ui->statusBar->showMessage(tr("Reading items..."));
129    QApplication::processEvents();
130
131    bool isSu = misWheelGroup || misOperatorGroup;
132    bool isSudo = misWheelGroup || misOperatorGroup;
133
134    InstalledPBIs.refresh();
135
136    isVisible = (bool)SoftwareList->read(SOFTWARE_DIR, mvEnabledDE, isSudo, isSu);
137        ui->SoftwareGBox->setVisible(isVisible);
138        ui->SoftwareLine->setVisible(isVisible);
139
140    isVisible = (bool)SystemList->read(SYSTEM_DIR, mvEnabledDE, isSudo, isSu);
141        ui->SystemGBox->setVisible(isVisible);
142        ui->SystemLine->setVisible(isVisible);
143
144    isVisible = (bool)HardwareList->read(HARDWARE_DIR, mvEnabledDE, isSudo, isSu);
145        ui->HardwareGBox->setVisible(isVisible);
146        ui->HardwareLine->setVisible(isVisible);
147
148    isVisible = (bool)NetworkingList->read(NETWORKING_DIR, mvEnabledDE, isSudo, isSu);
149        ui->NetworkingGBox->setVisible(isVisible);
150        ui->NetworkingLine->setVisible(isVisible);
151
152    isVisible = (bool)ToolsList->read(TOOLS_DIR, mvEnabledDE, isSudo, isSu);
153        ui->ToolsGBox->setVisible(isVisible);
154        ui->ToolsLine->setVisible(isVisible);
155
156    isVisible = (bool)DEList->read(DE_DIR, mvEnabledDE, isSudo, isSu);
157    ui->DEGBox->setVisible(isVisible);
158    ui->DELine->setVisible(isVisible);
159
160    ui->statusBar->clearMessage();
161    ui->centralWidget->setEnabled(true);
162
163    if( NetworkingList->sizeHintForRow(0) > 0 ) {
164          SystemList->setGridSize(QSize(NetworkingList->sizeHintForColumn(0), NetworkingList->sizeHintForRow(0)));
165          SoftwareList->setGridSize(QSize(NetworkingList->sizeHintForColumn(0), NetworkingList->sizeHintForRow(0)));
166          HardwareList->setGridSize(QSize(NetworkingList->sizeHintForColumn(0), NetworkingList->sizeHintForRow(0)));
167          ToolsList->setGridSize(QSize(NetworkingList->sizeHintForColumn(0), NetworkingList->sizeHintForRow(0)));
168          DEList->setGridSize(QSize(NetworkingList->sizeHintForColumn(0), NetworkingList->sizeHintForRow(0)));
169          NetworkingList->setGridSize(QSize(NetworkingList->sizeHintForColumn(0), NetworkingList->sizeHintForRow(0)));
170          SystemList->update();
171          SoftwareList->update();
172          HardwareList->update();
173          ToolsList->update();
174          DEList->update();
175          NetworkingList->update();
176          //qDebug() << NetworkingList->sizeHintForRow(0);
177          //qDebug() << NetworkingList->sizeHintForColumn(0);
178    }
179
180    mRefreshMutex.unlock();
181}
182
183///////////////////////////////////////////////////////////////////////////////
184void MainWnd::on_itemActivated ( QListWidgetItem* item )
185{
186    if( item )
187    {
188        ((QCPItem*)item)->launch();
189    }
190}
191
192///////////////////////////////////////////////////////////////////////////////
193void MainWnd::on_lineEdit_textChanged(QString Text)
194{
195        bool isVisible;
196
197    Text=Text.trimmed();
198
199        isVisible = SoftwareList->setFilter(Text);
200        ui->SoftwareGBox->setVisible(isVisible);
201        ui->SoftwareLine->setVisible(isVisible);
202    SoftwareList->setDisplayDEName(misDisplayDEName);
203
204        isVisible = SystemList->setFilter(Text);
205        ui->SystemGBox->setVisible(isVisible);
206        ui->SystemLine->setVisible(isVisible);
207    SystemList->setDisplayDEName(misDisplayDEName);
208
209        isVisible = NetworkingList->setFilter(Text);
210        ui->NetworkingGBox->setVisible(isVisible);
211        ui->NetworkingLine->setVisible(isVisible);
212    NetworkingList->setDisplayDEName(misDisplayDEName);
213
214        isVisible = ToolsList->setFilter(Text);
215        ui->ToolsGBox->setVisible(isVisible);
216        ui->ToolsLine->setVisible(isVisible);
217    ToolsList->setDisplayDEName(misDisplayDEName);
218
219        isVisible = HardwareList->setFilter(Text);
220        ui->HardwareGBox->setVisible(isVisible);
221        ui->HardwareLine->setVisible(isVisible);
222    HardwareList->setDisplayDEName(misDisplayDEName);
223
224    isVisible = DEList->setFilter(Text);
225    ui->DEGBox->setVisible(isVisible);
226    ui->DELine->setVisible(isVisible);
227    DEList->setDisplayDEName(misDisplayDEName);
228
229}
230
231///////////////////////////////////////////////////////////////////////////////
232void MainWnd::on_toolButton_2_clicked()
233{
234        fillGroups();
235        on_lineEdit_textChanged(ui->lineEdit->text());
236}
237
238///////////////////////////////////////////////////////////////////////////////
239void MainWnd::setupDEChooser()
240{
241    DEChoiseMenu->addAction(ui->actionAll);
242    DEChoiseMenu->addAction(ui->actionKDE);
243    DEChoiseMenu->addAction(ui->actionGnome);
244    DEChoiseMenu->addAction(ui->actionMate);
245    DEChoiseMenu->addAction(ui->actionCinnamon);
246    DEChoiseMenu->addAction(ui->actionXFCE);
247    DEChoiseMenu->addAction(ui->actionLXDE);
248    DEChoiseMenu->addAction(ui->actionEnlightenment);
249    DEChoiseMenu->addAction(ui->actionUnsupported);
250
251    ui->DEChooserButton->setMenu(DEChoiseMenu);
252
253    QString Current =  tr("(current)");
254    QString Unsupported= tr("Unsupported DE");
255
256#define SETUP_ACTION(action_name, DEName)\
257    if (InstalledDEList.byName(DEName))\
258    {\
259        ui->action_name->setVisible(true);\
260        if (InstalledDEList.byName(DEName)->misActive){\
261            ui->action_name->setText(QString(DEName) + Current);\
262            ui->DEChooserButton->setIcon(ui->action_name->icon());}\
263        else\
264            ui->action_name->setText(QString(DEName));\
265        }else{ui->action_name->setVisible(false);}
266
267SETUP_ACTION( actionKDE, "KDE" );
268SETUP_ACTION( actionGnome, "Gnome" );
269SETUP_ACTION( actionXFCE, "XFCE" );
270SETUP_ACTION( actionLXDE, "LXDE" );
271SETUP_ACTION( actionEnlightenment, "Enlightenment" );
272SETUP_ACTION( actionMate, "Mate" );
273SETUP_ACTION( actionCinnamon, "Cinnamon" );
274
275#undef SETUP_ACTION
276
277        if (!InstalledDEList.active())
278        {
279                qDebug() << "Unsupported DE";
280                ui->actionUnsupported->setText(Unsupported + Current);
281                ui->DEChooserButton->setIcon(ui->actionUnsupported->icon());
282                ui->actionUnsupported->setVisible(true);
283        }else{
284                qDebug() << "Supported DE";
285                ui->actionUnsupported->setVisible(false);
286        }
287
288        ui->DEChooserButton->setVisible(InstalledDEList.size()>1);
289
290}
291
292///////////////////////////////////////////////////////////////////////////////
293void MainWnd::on_actionAll_triggered()
294{
295    ui->DEChooserButton->setIcon(ui->actionAll->icon());
296
297    mvEnabledDE.clear();
298    for (int i=0; i<InstalledDEList.size(); i++)
299    {
300        mvEnabledDE.push_back(InstalledDEList[i].mName);
301    }
302
303    ui->DEGBox->setTitle(DETEXT + " " + tr ("(All installed)"));
304
305    misDisplayDEName = true;
306
307    //refresh
308    on_toolButton_2_clicked();
309}
310
311///////////////////////////////////////////////////////////////////////////////
312void MainWnd::on_actionKDE_triggered()
313{
314    ui->DEChooserButton->setIcon(ui->actionKDE->icon());
315    if (mCurrentDE.mName.trimmed().compare("KDE", Qt::CaseInsensitive))
316        ui->DEGBox->setTitle(DETEXT + " " + tr ("(KDE)"));
317    else
318        ui->DEGBox->setTitle(DETEXT);
319
320     mvEnabledDE.clear();
321     mvEnabledDE.push_back("KDE");
322
323    misDisplayDEName = false;
324
325    //refresh
326    on_toolButton_2_clicked();
327}
328
329///////////////////////////////////////////////////////////////////////////////
330void MainWnd::on_actionLXDE_triggered()
331{
332    ui->DEChooserButton->setIcon(ui->actionLXDE->icon());
333    if (mCurrentDE.mName.trimmed().compare("LXDE", Qt::CaseInsensitive))
334        ui->DEGBox->setTitle(DETEXT + " " + tr ("(LXDE)"));
335    else
336        ui->DEGBox->setTitle(DETEXT);
337
338    mvEnabledDE.clear();
339    mvEnabledDE.push_back("LXDE");
340
341    misDisplayDEName = false;
342
343    //refresh
344    on_toolButton_2_clicked();
345}
346
347///////////////////////////////////////////////////////////////////////////////
348void MainWnd::on_actionGnome_triggered()
349{
350    ui->DEChooserButton->setIcon(ui->actionGnome->icon());
351    if (mCurrentDE.mName.trimmed().compare("gnome", Qt::CaseInsensitive))
352        ui->DEGBox->setTitle(DETEXT + " " + tr ("(Gnome)"));
353    else
354        ui->DEGBox->setTitle(DETEXT);
355
356    mvEnabledDE.clear();
357    mvEnabledDE.push_back("Gnome");
358
359    misDisplayDEName = false;
360
361    //refresh
362    on_toolButton_2_clicked();
363}
364
365///////////////////////////////////////////////////////////////////////////////
366void MainWnd::on_actionEnlightenment_triggered()
367{
368    ui->DEChooserButton->setIcon(ui->actionEnlightenment->icon());
369    if (mCurrentDE.mName.trimmed().compare("Enlightenment", Qt::CaseInsensitive))
370        ui->DEGBox->setTitle(DETEXT + " " + tr ("(Enlightenment)"));
371    else
372        ui->DEGBox->setTitle(DETEXT);
373
374    mvEnabledDE.clear();
375    mvEnabledDE.push_back("Enlightenment");
376    mvEnabledDE.push_back("E16");
377
378    misDisplayDEName = false;
379
380    //refresh
381    on_toolButton_2_clicked();
382}
383
384///////////////////////////////////////////////////////////////////////////////
385void MainWnd::on_actionMate_triggered()
386{
387    ui->DEChooserButton->setIcon(ui->actionMate->icon());
388    if (mCurrentDE.mName.trimmed().compare("Mate", Qt::CaseInsensitive))
389        ui->DEGBox->setTitle(DETEXT + " " + tr ("(Mate)"));
390    else
391        ui->DEGBox->setTitle(DETEXT);
392
393    mvEnabledDE.clear();
394    mvEnabledDE.push_back("Mate");
395
396    misDisplayDEName = false;
397
398    //refresh
399    on_toolButton_2_clicked();
400}
401
402///////////////////////////////////////////////////////////////////////////////
403void MainWnd::on_actionCinnamon_triggered()
404{
405    ui->DEChooserButton->setIcon(ui->actionCinnamon->icon());
406    if (mCurrentDE.mName.trimmed().compare("Cinnamon", Qt::CaseInsensitive))
407        ui->DEGBox->setTitle(DETEXT + " " + tr ("(Cinnamon)"));
408    else
409        ui->DEGBox->setTitle(DETEXT);
410
411    mvEnabledDE.clear();
412    mvEnabledDE.push_back("Cinnamon");
413
414    misDisplayDEName = false;
415
416    //refresh
417    on_toolButton_2_clicked();
418}
419
420///////////////////////////////////////////////////////////////////////////////
421void MainWnd::on_actionXFCE_triggered()
422{
423    ui->DEChooserButton->setIcon(ui->actionXFCE->icon());
424    if (mCurrentDE.mName.trimmed().compare("XFCE", Qt::CaseInsensitive))
425        ui->DEGBox->setTitle(DETEXT + " " + tr ("(XFCE)"));
426    else
427        ui->DEGBox->setTitle(DETEXT);
428
429    mvEnabledDE.clear();
430    mvEnabledDE.push_back("XFCE");
431
432    misDisplayDEName = false;
433    //refresh
434    on_toolButton_2_clicked();
435}
436
437///////////////////////////////////////////////////////////////////////////////
438void MainWnd::on_actionUnsupported_triggered()
439{
440        mvEnabledDE.clear();
441
442        misDisplayDEName = false;
443        //refresh
444        on_toolButton_2_clicked();
445}
446
447///////////////////////////////////////////////////////////////////////////////
448void MainWnd::slotSingleInstance()
449{
450   this->hide();
451   this->showNormal();
452   this->activateWindow();
453   this->raise();
454}
455
456///////////////////////////////////////////////////////////////////////////////
457void MainWnd::onDirectoryChanged(const QString& path)
458{
459    //Refresh if items or installed pbis dir was changed
460    QObject::disconnect(&mDirWatcher,0,0,0);
461    //qDebug() << "onDirectoryChanged";
462    on_toolButton_2_clicked();
463    QObject::connect(&mDirWatcher, SIGNAL(directoryChanged(const QString &)),
464                     this, SLOT(onDirectoryChanged(const QString &)));
465    QString junk = path; //to get rid of compilation warning about unused variable
466}
467
468///////////////////////////////////////////////////////////////////////////////
469bool MainWnd::checkUserGroup(QString groupName)
470{
471   QString loginName = getlogin();
472   QStringList gNames;
473   if ( loginName == "root" )
474     return true;
475
476   QString tmp;
477   QFile iFile("/etc/group");
478   if ( ! iFile.open(QIODevice::ReadOnly | QIODevice::Text))
479     return true; //or FALSE?
480               
481   while ( !iFile.atEnd() ) {
482     tmp = iFile.readLine().simplified();
483     if ( tmp.indexOf(groupName) == 0 ) {
484        gNames = tmp.section(":", 3, 3).split(",");
485        break;
486     }
487   }
488   iFile.close();
489       
490   for ( int i = 0; i < gNames.size(); ++i )
491      if ( gNames.at(i).indexOf(loginName) == 0 )
492            return true;
493
494   return false;
495}
Note: See TracBrowser for help on using the repository browser.