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

9.1-release9.2-releasereleng/10.0releng/10.0.1releng/10.0.2
Last change on this file since 1620346 was 1620346, checked in by Kris Moore <kris@…>, 16 months ago

Initial import of PC-BSD /current/ SVN repo

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