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

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

Bug report tool: Add MATE page

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