Fixed a broken merge
[irwi] / src / selectremotedlg.cpp
1 #include "selectremotedlg.h"
2
3 #include "remote.h"
4 #include "remotelistwidgetitem.h"
5 #include "onlinepollerthread.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(96);
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     layout->addWidget(mfgList);
37     connect(mfgList,
38             SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
39             this,
40             SLOT(mfgItemChanged(QListWidgetItem*, QListWidgetItem*)));
41
42     modelList = new QListWidget(this);
43     layout->addWidget(modelList);
44
45     downloadBtn = new QPushButton(tr("Download"), this);
46     layout->addWidget(downloadBtn);
47     connect(downloadBtn, SIGNAL(clicked()), 
48             this, SLOT(downloadRemote()));
49
50     this->setLayout(layout);
51     connect(&remoteDBMgr, SIGNAL(dbReady(RemoteDB*)),
52             this, SLOT(setDB(RemoteDB*)));
53 }
54
55 SelectRemoteDlg::~SelectRemoteDlg()
56 {
57     delete layout;
58     if (onlinePollerThread != NULL) {
59         onlinePollerThread->stop();
60         onlinePollerThread->wait();
61         delete onlinePollerThread;
62         onlinePollerThread = NULL;
63     }
64 }
65
66 void SelectRemoteDlg::setDB(RemoteDB *db)
67 {
68     remoteDB = db;
69     alphabetList->addItems(remoteDB->keys());
70     setBusy(false);
71 }
72
73 void SelectRemoteDlg::setBusy(bool busy)
74 {
75     setAttribute(Qt::WA_Maemo5ShowProgressIndicator, busy);
76     setEnabled(!busy);
77 }
78
79 void SelectRemoteDlg::alphabetItemChanged(QListWidgetItem *current,
80                                       QListWidgetItem * /*previous*/)
81 {
82     mfgList->clear();
83     modelList->clear();
84     if (current)
85     {
86         mfgList->addItems((*remoteDB)[current->text()].keys());
87     }
88 }
89
90 void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current,
91                                      QListWidgetItem * /*previous*/)
92 {
93     modelList->clear();
94     if (current)
95     {
96         RemoteList remotes =
97             (*remoteDB)[alphabetList->currentItem()->text()][current->text()];
98         foreach(Remote *remote, remotes) {
99             modelList->addItem(new RemoteListWidgetItem(remote));
100         }
101     }
102 }
103
104 void SelectRemoteDlg::downloadRemote()
105 {
106     RemoteListWidgetItem *currentModel =
107         static_cast<RemoteListWidgetItem *>(modelList->currentItem());
108     if (currentModel)
109     {
110         setBusy();
111         connect(currentModel->remote(), SIGNAL(saveFinished()),
112                 this, SLOT(close()));
113         currentModel->remote()->saveToFile();
114
115         emit remoteChanged(*(currentModel->remote()));
116     }
117 }
118
119 void SelectRemoteDlg::getDB()
120 {
121     if (onlinePollerThread != NULL) {
122         onlinePollerThread->stop();
123         onlinePollerThread->wait();
124         delete onlinePollerThread;
125         onlinePollerThread = NULL;
126     }
127     remoteDBMgr.getDBAsync();
128 }
129
130 void SelectRemoteDlg::refreshDB()
131 {
132     setBusy(true);
133     if (onlinePollerThread != NULL) {
134         onlinePollerThread->stop();
135         onlinePollerThread->wait();
136         delete onlinePollerThread;
137         onlinePollerThread = NULL;
138     }
139     onlinePollerThread = new OnlinePollerThread();
140     connect(onlinePollerThread, SIGNAL(online()),
141             this, SLOT(getDB()));
142     onlinePollerThread->run();
143 }
144
145 void SelectRemoteDlg::showEvent(QShowEvent *event)
146 {
147     refreshDB();
148     QDialog::showEvent(event);
149 }
150