Conditional compilation for Maemo 5 specific code
[irwi] / src / selectremotedlg.cpp
1 #include "selectremotedlg.h"
2
3 #include "remote.h"
4 #include "remotelistwidgetitem.h"
5 #include "onlinepollerthread.h"
6 #include "remotetable.h"
7
8 #include <QHBoxLayout>
9 #include <QLabel>
10 #include <QString>
11 #include <QListWidget>
12 #include <QListWidgetItem>
13 #include <QSettings>
14 #include <QMap>
15 #include <QList>
16 #include <QMessageBox>
17 #include <QPushButton>
18
19 SelectRemoteDlg::SelectRemoteDlg(QWidget *parent)
20     : QDialog(parent)
21 {
22     onlinePollerThread = NULL;
23     this->setWindowTitle(tr("Select remote"));
24     this->setMinimumHeight(320);
25
26     layout = new QHBoxLayout(this);
27
28     alphabetList = new QListWidget(this);
29     alphabetList->setMaximumWidth(64);
30     layout->addWidget(alphabetList);
31     connect(alphabetList,
32             SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
33             this,
34             SLOT(alphabetItemChanged(QListWidgetItem*, QListWidgetItem*)));
35     
36     mfgList = new QListWidget(this);
37     mfgList->setMaximumWidth(192);
38     layout->addWidget(mfgList);
39     connect(mfgList,
40             SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
41             this,
42             SLOT(mfgItemChanged(QListWidgetItem*, QListWidgetItem*)));
43
44     modelList = new RemoteTable(this);
45     layout->addWidget(modelList);
46
47     downloadBtn = new QPushButton(tr("Download"), this);
48     layout->addWidget(downloadBtn);
49     connect(downloadBtn, SIGNAL(clicked()), 
50             this, SLOT(downloadRemote()));
51
52     this->setLayout(layout);
53     connect(&remoteDBMgr, SIGNAL(dbReady(RemoteDB*)),
54             this, SLOT(setDB(RemoteDB*)));
55     connect(&remoteDBMgr, SIGNAL(downloadFailed(int)),
56             this, SLOT(onDBError(int)));
57 }
58
59 SelectRemoteDlg::~SelectRemoteDlg()
60 {
61     delete layout;
62     if (onlinePollerThread != NULL) {
63         delete onlinePollerThread;
64         onlinePollerThread = NULL;
65     }
66 }
67
68 void SelectRemoteDlg::setDB(RemoteDB *db)
69 {
70     remoteDB = db;
71     alphabetList->addItems(remoteDB->keys());
72     setBusy(false);
73 }
74
75 void SelectRemoteDlg::setBusy(bool busy)
76 {
77 #ifdef Q_WS_MAEMO_5
78     setAttribute(Qt::WA_Maemo5ShowProgressIndicator, busy);
79 #endif
80     setEnabled(!busy);
81 }
82
83 void SelectRemoteDlg::alphabetItemChanged(QListWidgetItem *current,
84                                       QListWidgetItem * /*previous*/)
85 {
86     mfgList->clear();
87     modelList->removeAllRows();
88     if (current) {
89         mfgList->addItems((*remoteDB)[current->text()].keys());
90     }
91 }
92
93 void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current,
94                                      QListWidgetItem * /*previous*/)
95 {
96     modelList->removeAllRows();
97     if (current) {
98         RemoteList remotes =
99             (*remoteDB)[alphabetList->currentItem()->text()][current->text()];
100         foreach(Remote *remote, remotes) {
101             modelList->addItem(remote);
102         }
103     }
104 }
105
106 void SelectRemoteDlg::downloadRemote()
107 {
108     Remote *currentModel = modelList->selected();
109     if (currentModel) {
110         setResult(QDialog::Accepted);
111         setBusy();
112         connect(currentModel, SIGNAL(saveFinished()),
113                 this, SLOT(close()));
114         currentModel->saveToFile();
115
116         emit remoteChanged(*currentModel);
117     }
118 }
119
120 void SelectRemoteDlg::getDB()
121 {
122     if (onlinePollerThread != NULL) {
123         delete onlinePollerThread;
124         onlinePollerThread = NULL;
125     }
126     remoteDBMgr.getDBAsync();
127 }
128
129 void SelectRemoteDlg::refreshDB()
130 {
131     setBusy(true);
132     if (onlinePollerThread != NULL) {
133         delete onlinePollerThread;
134         onlinePollerThread = NULL;
135     }
136     onlinePollerThread = new OnlinePollerThread();
137     connect(onlinePollerThread, SIGNAL(online()),
138             this, SLOT(getDB()));
139     onlinePollerThread->start();
140 }
141
142 void SelectRemoteDlg::showEvent(QShowEvent *event)
143 {
144     refreshDB();
145     QDialog::showEvent(event);
146 }
147
148 void SelectRemoteDlg::onDBError(int error)
149 {
150     this->setWindowTitle(tr("Network error") + " " + QString::number(error));
151     setBusy(false);
152     downloadBtn->setVisible(false);
153 }
154