Improvements to selectremotedlg etc
[irwi] / src / selectremotedlg.cpp
1 #include "selectremotedlg.h"
2
3 #include "remote.h"
4 #include "remotelistwidgetitem.h"
5
6 #include <QHBoxLayout>
7 #include <QLabel>
8 #include <QString>
9 #include <QListWidget>
10 #include <QListWidgetItem>
11 #include <QSettings>
12 #include <QMap>
13 #include <QList>
14 #include <QMessageBox>
15 #include <QPushButton>
16
17 SelectRemoteDlg::SelectRemoteDlg(QWidget *parent)
18     : QDialog(parent)
19 {
20     this->setWindowTitle(tr("Select remote"));
21     this->setMinimumHeight(320);
22
23     layout = new QHBoxLayout(this);
24
25     alphabetList = new QListWidget(this);
26     alphabetList->setMaximumWidth(96);
27     layout->addWidget(alphabetList);
28     connect(alphabetList,
29             SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
30             this,
31             SLOT(alphabetItemChanged(QListWidgetItem*, QListWidgetItem*)));
32     
33     mfgList = new QListWidget(this);
34     layout->addWidget(mfgList);
35     connect(mfgList,
36             SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
37             this,
38             SLOT(mfgItemChanged(QListWidgetItem*, QListWidgetItem*)));
39
40     modelList = new QListWidget(this);
41     layout->addWidget(modelList);
42
43     downloadBtn = new QPushButton(tr("Download"), this);
44     layout->addWidget(downloadBtn);
45     connect(downloadBtn, SIGNAL(clicked()), 
46             this, SLOT(downloadRemote()));
47
48     this->setLayout(layout);
49     connect(&remoteDBMgr, SIGNAL(dbReady(RemoteDB*)),
50             this, SLOT(setDB(RemoteDB*)));
51     remoteDBMgr.getDBAsync();
52     setBusy(true);
53 }
54
55
56 SelectRemoteDlg::~SelectRemoteDlg()
57 {
58     delete layout;
59 }
60
61 void SelectRemoteDlg::setDB(RemoteDB *db)
62 {
63     remoteDB = db;
64     alphabetList->addItems(remoteDB->keys());
65     setBusy(false);
66 }
67
68 void SelectRemoteDlg::setBusy(bool busy)
69 {
70     setAttribute(Qt::WA_Maemo5ShowProgressIndicator, busy);
71     setEnabled(!busy);
72 }
73
74 void SelectRemoteDlg::alphabetItemChanged(QListWidgetItem *current,
75                                       QListWidgetItem * /*previous*/)
76 {
77     mfgList->clear();
78     modelList->clear();
79     if (current)
80     {
81         mfgList->addItems((*remoteDB)[current->text()].keys());
82     }
83 }
84
85 void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current,
86                                      QListWidgetItem * /*previous*/)
87 {
88     modelList->clear();
89     if (current)
90     {
91         QList <Remote> remotes =
92            (*remoteDB)[alphabetList->currentItem()->text()][current->text()];
93         foreach(Remote remote, remotes) {
94             modelList->addItem(new RemoteListWidgetItem(remote));
95         }
96     }
97 }
98
99 void SelectRemoteDlg::downloadRemote()
100 {
101     RemoteListWidgetItem *currentModel =
102         static_cast<RemoteListWidgetItem *>(modelList->currentItem());
103     if (currentModel)
104     {
105         currentModel->remote().saveToFile();
106     }
107 }
108