Merge branch 'master' of mercury.wipsl.com:/var/git/irwi
[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(96);
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     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 }
55
56 SelectRemoteDlg::~SelectRemoteDlg()
57 {
58     delete layout;
59     if (onlinePollerThread != NULL) {
60         delete onlinePollerThread;
61         onlinePollerThread = NULL;
62     }
63 }
64
65 void SelectRemoteDlg::setDB(RemoteDB *db)
66 {
67     remoteDB = db;
68     alphabetList->addItems(remoteDB->keys());
69     setBusy(false);
70 }
71
72 void SelectRemoteDlg::setBusy(bool busy)
73 {
74     setAttribute(Qt::WA_Maemo5ShowProgressIndicator, busy);
75     setEnabled(!busy);
76 }
77
78 void SelectRemoteDlg::alphabetItemChanged(QListWidgetItem *current,
79                                       QListWidgetItem * /*previous*/)
80 {
81     mfgList->clear();
82     modelList->removeAllRows();
83     if (current)
84     {
85         mfgList->addItems((*remoteDB)[current->text()].keys());
86     }
87 }
88
89 void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current,
90                                      QListWidgetItem * /*previous*/)
91 {
92     modelList->removeAllRows();
93     if (current)
94     {
95         RemoteList remotes =
96             (*remoteDB)[alphabetList->currentItem()->text()][current->text()];
97         foreach(Remote *remote, remotes) {
98             modelList->addItem(remote);
99         }
100     }
101 }
102
103 void SelectRemoteDlg::downloadRemote()
104 {
105     Remote *currentModel = modelList->selected();
106     if (currentModel)
107     {
108         setBusy();
109         connect(currentModel, SIGNAL(saveFinished()),
110                 this, SLOT(close()));
111         currentModel->saveToFile();
112
113         emit remoteChanged(*currentModel);
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