source: src-qt4/pc-bugreport/mainwindow.cpp @ 777517e

releng/10.0.1releng/10.0.2
Last change on this file since 777517e was 777517e, checked in by yurkis <yurkis@…>, 6 months ago

Bug report tool: Add Cinnamon page

  • Property mode set to 100644
File size: 9.3 KB
Line 
1#include "mainwindow.h"
2#include "ui_mainwindow.h"
3
4#include "report_places.h"
5
6#include <QDebug>
7#include <QProcess>
8
9#include "pcbsd-utils.h"
10
11static MainWindow* pMainWindow = NULL;
12
13typedef enum{
14        EMAIN_PAGE = 0,
15        EFREEBSD_BASE_PAGE,
16        EPCBSD_BASE_PAGE,
17        EXORG_PAGE,
18        EDE_PAGE,
19    EGNOME_PAGE,
20    EKDE_PAGE,
21    EXFCE_PAGE,
22    ELXDE_PAGE,
23    EMATE_PAGE,
24    ECINNAMON_PAGE,
25    EUNSUPPORTED_DE_PAGE,
26    EFREEBSDSOFT_PAGE,
27    EPBISELECT_PAGE,
28    EPBIIREPORT_PAGE,
29}EPageNumber;
30
31
32
33MainWindow::MainWindow(QWidget *parent) :
34        QWizard(parent),
35        ui(new Ui::MainWindow)
36{
37    ui->setupUi(this);
38
39    pMainWindow = this;
40
41    setOption(QWizard::HaveFinishButtonOnEarlyPages);
42
43        ui->FreeBSDSendPRW->setup(FREEBSD_SEND_PR);
44        ui->FreeBSDBugsLW->setup(FREEBSD_BUGS_MAILLIST);
45
46        ui->PCBSDTrackWidget->setup(PCBSD_TRAC);
47        ui->PCBSDTestingLW->setup(PCBSD_TESTING_MAILLIST);
48
49        ui->FreedesktopBugzillaWidget->setup(XORG_BUGZILLA);
50        ui->XORGLW->setup(XORG_MAILLIST);
51        ui->FreeBSDX11LW->setup(FREEBSD_X11_MAILLIST);
52        ui->PCBSDTestingLW_2->setup(PCBSD_TESTING_MAILLIST);
53
54    ui->GnomeFreeBSDLW->setup(FREEBSD_GNOME_MAILLIST);
55    ui->PCBSDTestingLW_3->setup(PCBSD_TESTING_MAILLIST);
56
57    ui->KDEBugs->setup(KDE_BUGTRACKER);
58    ui->KDEFreeBSDLW->setup(KDE_FREEBSD_MAILLIST);
59    ui->PCBSDTestingLW_4->setup(PCBSD_TESTING_MAILLIST);
60
61    ui->XFCEBugzillaWidget->setup(XFCE_BUGZILLA);
62    ui->XFCEFreeBSDLW->setup(FREEBSD_XFCE_MAILLIST);
63    ui->PCBSDTestingLW_5->setup(PCBSD_TESTING_MAILLIST);
64
65    ui->LXDEBugtrackerWidget->setup(LXDE_BUGTRACKER);
66    ui->PCBSDTestingLW_6->setup(PCBSD_TESTING_MAILLIST);
67
68    ui->PCBSDTestingLW_7->setup(PCBSD_TESTING_MAILLIST);
69
70    ui->FreeBSDPortsBugsLW->setup(FREEBSD_PORTS_BUGS_MAILLIST);
71
72    ui->PCBSDTPBIBugsLW->setup(PCBSD_PBI_BUGS_MAILLIST);
73
74    ui->MATEGitHubWidget->setup(MATE_GITHUB_URL);
75    ui->PCBSDTestingLW_8->setup(PCBSD_TESTING_MAILLIST);
76
77    ui->CinnamonBugTrackerWidget->setup(CINNAMON_BUGTRACKER_GITHUB);
78    ui->PCBSDTestingLW_9->setup(PCBSD_TESTING_MAILLIST);
79
80        QObject::connect(this, SIGNAL(currentIdChanged(int)),
81                                         this, SLOT(on_MainWindow_currentIdChanged(int)));
82
83}
84
85MainWindow::~MainWindow()
86{
87    delete ui;
88}
89
90void MainWindow::changeEvent(QEvent *e)
91{
92        QWizard::changeEvent(e);
93    switch (e->type()) {
94    case QEvent::LanguageChange:
95        ui->retranslateUi(this);
96        break;
97    default:
98        break;
99    }
100}
101
102int MainWindow::nextId() const
103{
104        int curr= currentId();
105        if (curr == EMAIN_PAGE)
106        {
107                if (ui->FreeBSDBaseRB->isChecked())
108                                                //pMainWindow->setupButtons(true);
109                        return EFREEBSD_BASE_PAGE;
110                if (ui->PCBSDBaseRB->isChecked())
111                                                //pMainWindow->setupButtons(true);
112                        return EPCBSD_BASE_PAGE;
113                if (ui->XORGCB->isChecked())
114                                                //pMainWindow->setupButtons(true);
115                        return EXORG_PAGE;
116        if (ui->DERB->isChecked())
117        {
118                        pMainWindow->fillDEList();
119                        pMainWindow->setupButtons(false);                       
120                        return EDE_PAGE;                       
121                }
122
123        if (ui->FreeBSDSoftRB->isChecked())
124        {
125            return EFREEBSDSOFT_PAGE;
126        }
127
128        if (ui->PBIRB->isChecked())
129        {
130                        //pMainWindow->fillPBIList();
131                        return EPBISELECT_PAGE;
132        }
133        return curr+1;
134    }
135    if (curr == EDE_PAGE)
136    {
137        QTreeWidgetItem* item = ui->DEList->currentItem();
138        if (!item)
139            return EUNSUPPORTED_DE_PAGE;
140        return item->data(0, Qt::UserRole).toInt();
141    }
142
143    if (curr == EPBISELECT_PAGE)
144    {
145        QString name;
146        QString website;
147        QIcon ico;
148        if (ui->PBIList->currentItem())
149        {
150            name= ui->PBIList->currentItem()->text(1);
151            website = ui->PBIList->currentItem()->data(0, Qt::UserRole).toString();
152            ico = ui->PBIList->currentItem()->icon(0);
153        }
154
155        ui->PBISoftSiteWidget->setup(website, &ico);
156        page(EPBIIREPORT_PAGE)->setTitle(tr("PBI software: ") + name);
157    }
158
159    switch (curr)
160    {
161        case EFREEBSD_BASE_PAGE:
162        case EPCBSD_BASE_PAGE:
163        case EXORG_PAGE:
164        case EGNOME_PAGE:
165        case EKDE_PAGE:
166        case EPBIIREPORT_PAGE:
167        case EFREEBSDSOFT_PAGE:
168        case EMATE_PAGE:
169        case ECINNAMON_PAGE:
170            return -1;
171    }
172    return curr+1;
173}
174
175void MainWindow::on_MainWindow_currentIdChanged(int id)
176{
177        switch (id)
178        {
179                        case EMAIN_PAGE:
180                        {
181                                QList<QWizard::WizardButton> layout;
182                                layout<< QWizard::Stretch<<QWizard::NextButton<<QWizard::CancelButton;
183                                setButtonLayout(layout);
184                                break;
185                        }
186                        case EFREEBSD_BASE_PAGE:
187                        case EPCBSD_BASE_PAGE:
188                        case EXORG_PAGE:
189            case EGNOME_PAGE:
190            case EKDE_PAGE:
191            case EXFCE_PAGE:
192            case ELXDE_PAGE:
193            case EUNSUPPORTED_DE_PAGE:
194            case EPBIIREPORT_PAGE:
195            case EFREEBSDSOFT_PAGE:
196            case EMATE_PAGE:
197            case ECINNAMON_PAGE:
198                                pMainWindow->setupButtons(true);
199                                break;
200            case EPBISELECT_PAGE:
201                fillPBIList();
202                pMainWindow->setupButtons(true);
203                        default:
204                                pMainWindow->setupButtons(false);
205                                break;
206        }
207}
208
209void MainWindow::setupButtons(bool isLast)
210{
211    QList<QWizard::WizardButton> layout;
212    if (isLast)
213    {
214        layout<<QWizard::Stretch<<QWizard::BackButton;
215        layout<<QWizard::FinishButton;
216                setButtonLayout(layout);
217    }
218    else
219    {
220                layout<< QWizard::Stretch<<QWizard::BackButton<<QWizard::NextButton<<QWizard::CancelButton;
221                setButtonLayout(layout);
222    }
223
224}
225
226void MainWindow::fillDEList()
227{
228    //InstalledDEList.refresh(true);
229    QVector<pcbsd::DesktopEnvironmentInfo> InstalledDEList = pcbsd::Utils::installedDesktops();
230
231    ui->DEList->clear();
232
233    typedef struct SDEEntry
234    {
235        QString name;
236        QString ico;
237        EPageNumber page;
238
239    };
240
241    static SDEEntry DE[] =
242    {
243        {QString("KDE"),QString(":/images/kde.png"), EKDE_PAGE},
244        {QString("gnome"),QString(":/images/gnome.png"), EGNOME_PAGE},
245        {QString("xfce"),QString(":/images/xfce.png"), EXFCE_PAGE},
246        {QString("lxde"),QString(":/images/lxde.png"), ELXDE_PAGE},
247        {QString("cinnamon"),QString(":/images/cinnamon.png"), ECINNAMON_PAGE},
248        {QString("mate"),QString(":/images/mate.png"), EMATE_PAGE},
249    };
250
251    const int DE_SIZE = 6;
252
253    bool hasActiveDesktop = false;
254
255    for (int i=0; i<InstalledDEList.size(); i++)
256    {
257        if (InstalledDEList[i].isInstalled)
258        {
259            QString ico;
260            EPageNumber page = EUNSUPPORTED_DE_PAGE;
261
262            for(int j=0; j<DE_SIZE; j++)
263            {
264                if (DE[j].name.trimmed().toLower() == InstalledDEList[i].Name.trimmed().toLower())
265                {
266                    ico = DE[j].ico;
267                    page = DE[j].page;
268                }               
269            }
270            if (!ico.length())
271            {
272                ico = ":/images/unsupported_de.png";
273            }
274
275            QTreeWidgetItem* item = new QTreeWidgetItem;
276            QIcon anIcon(ico);
277
278            item->setText(1, InstalledDEList[i].Name);
279            item->setIcon(0, anIcon);
280            item->setData(0, Qt::UserRole, page);
281            ui->DEList->setIconSize(QSize(48,48));
282
283            ui->DEList->addTopLevelItem(item);
284
285            if (InstalledDEList[i].isActive)
286            {
287                item->setSelected(true);
288                hasActiveDesktop = true;
289            }//if active
290        }//if installed
291    }//for all installed
292
293    QTreeWidgetItem* item = new QTreeWidgetItem;
294    item->setText(1, tr("Not listed here?"));
295    item->setIcon(0, QIcon(":/images/unsupported_de.png"));
296    item->setSelected(hasActiveDesktop == false);
297    item->setData(0, Qt::UserRole, EUNSUPPORTED_DE_PAGE);
298    ui->DEList->addTopLevelItem(item);
299}
300
301void MainWindow::fillPBIList()
302{
303    ui->PBIList->clear();   
304    QProcess* loadPBIs = new QProcess();
305    loadPBIs->setProcessChannelMode(QProcess::MergedChannels);
306    loadPBIs->start(QString("pbi_info"), QStringList() << "-v");
307    loadPBIs->waitForFinished(-1);
308
309    QString line;
310    QString name;
311    QString version;
312    QString website;
313    QString icon;
314    while ( loadPBIs->canReadLine() )
315    {
316        line = loadPBIs->readLine().simplified(); // line of text excluding '\n'
317
318        if (line.indexOf("PBI Information for:" ) ==  0 )
319        {
320            if (name.length() && website.length())
321            {
322                QTreeWidgetItem* item = new QTreeWidgetItem;
323                QPixmap ico(icon);
324                item->setIcon(0, ico.scaled(42, 42));
325                item->setText(1, name);
326                item->setText(2, version);
327                item->setData(0, Qt::UserRole, website);
328                ui->PBIList->addTopLevelItem(item);
329            }
330
331            name.clear();
332            icon.clear();
333            version.clear();
334            website.clear();
335            icon.clear();
336            continue;
337        }
338
339        if (line.indexOf("Name: " ) ==  0 )
340              name = line.replace("Name: ", "");
341
342        if ( line.indexOf("Version: ") == 0)
343          version = line.replace("Version: ", "");
344
345
346        if ( line.indexOf("Icon:") == 0)
347                icon = line.replace("Icon: ", "");
348
349
350        if ( line.indexOf("Website:") == 0)
351              website = line.replace("Website: ", "");
352    }//for all pbis
353}
Note: See TracBrowser for help on using the repository browser.