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