3f832499c4d422571187fa07532314b1e079aa39
[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 }
52
53 SelectRemoteDlg::~SelectRemoteDlg()
54 {
55     delete layout;
56 }
57
58 void SelectRemoteDlg::setDB(RemoteDB *db)
59 {
60     remoteDB = db;
61     alphabetList->addItems(remoteDB->keys());
62     setBusy(false);
63 }
64
65 void SelectRemoteDlg::setBusy(bool busy)
66 {
67     setAttribute(Qt::WA_Maemo5ShowProgressIndicator, busy);
68     setEnabled(!busy);
69 }
70
71 void SelectRemoteDlg::alphabetItemChanged(QListWidgetItem *current,
72                                       QListWidgetItem * /*previous*/)
73 {
74     mfgList->clear();
75     modelList->clear();
76     if (current)
77     {
78         mfgList->addItems((*remoteDB)[current->text()].keys());
79     }
80 }
81
82 void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current,
83                                      QListWidgetItem * /*previous*/)
84 {
85     modelList->clear();
86     if (current)
87     {
88         RemoteList remotes =
89             (*remoteDB)[alphabetList->currentItem()->text()][current->text()];
90         foreach(Remote *remote, remotes) {
91             modelList->addItem(new RemoteListWidgetItem(remote));
92         }
93     }
94 }
95
96 void SelectRemoteDlg::downloadRemote()
97 {
98     RemoteListWidgetItem *currentModel =
99         static_cast<RemoteListWidgetItem *>(modelList->currentItem());
100     if (currentModel)
101     {
102         setBusy();
103         connect(currentModel->remote(), SIGNAL(saveFinished()),
104                 this, SLOT(close()));
105         currentModel->remote()->saveToFile();
106
107         emit remoteChanged(*(currentModel->remote()));
108     }
109 }
110
111 void SelectRemoteDlg::refreshDB()
112 {
113     setBusy(true);
114     if (onlinePollerThread != NULL) {
115         delete onlinePollerThread;
116     }
117     onlinePollerThread = new OnlinePollerThread();
118     connect(onlinePollerThread, SIGNAL(online()),
119             this, SLOT(getDB()));
120     onlinePollerThread->run();
121 }
122
123 void SelectRemoteDlg::showEvent(QShowEvent *event)
124 {
125     refreshDB();
126     QDialog::showEvent(event);
127 }
128