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