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

releng/10.0releng/10.0.1releng/10.0.2releng/10.0.3
Last change on this file since d2b761b was d2b761b, checked in by Kris Moore <kris@…>, 9 months ago

Update the pc-controlpanel to include icons for mate / cinnamon

Also update de-info with profiles for the above

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