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