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(64);
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     mfgList->setMaximumWidth(192);
38     layout->addWidget(mfgList);
39     connect(mfgList,
40             SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
41             this,
42             SLOT(mfgItemChanged(QListWidgetItem*, QListWidgetItem*)));
43
44     modelList = new RemoteTable(this);
45     layout->addWidget(modelList);
46
47     downloadBtn = new QPushButton(tr("Download"), this);
48     layout->addWidget(downloadBtn);
49     connect(downloadBtn, SIGNAL(clicked()), 
50             this, SLOT(downloadRemote()));
51
52     this->setLayout(layout);
53     connect(&remoteDBMgr, SIGNAL(dbReady(RemoteDB*)),
54             this, SLOT(setDB(RemoteDB*)));
55 }
56
57 SelectRemoteDlg::~SelectRemoteDlg()
58 {
59     delete layout;
60     if (onlinePollerThread != NULL) {
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->removeAllRows();
84     if (current) {
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         RemoteList remotes =
95             (*remoteDB)[alphabetList->currentItem()->text()][current->text()];
96         foreach(Remote *remote, remotes) {
97             modelList->addItem(remote);
98         }
99     }
100 }
101
102 void SelectRemoteDlg::downloadRemote()
103 {
104     Remote *currentModel = modelList->selected();
105     if (currentModel) {
106         setResult(QDialog::Accepted);
107         setBusy();
108         connect(currentModel, SIGNAL(saveFinished()),
109                 this, SLOT(close()));
110         currentModel->saveToFile();
111
112         emit remoteChanged(*currentModel);
113     }
114 }
115
116 void SelectRemoteDlg::getDB()
117 {
118     if (onlinePollerThread != NULL) {
119         delete onlinePollerThread;
120         onlinePollerThread = NULL;
121     }
122     remoteDBMgr.getDBAsync();
123 }
124
125 void SelectRemoteDlg::refreshDB()
126 {
127     setBusy(true);
128     if (onlinePollerThread != NULL) {
129         delete onlinePollerThread;
130         onlinePollerThread = NULL;
131     }
132     onlinePollerThread = new OnlinePollerThread();
133     connect(onlinePollerThread, SIGNAL(online()),
134             this, SLOT(getDB()));
135     onlinePollerThread->start();
136 }
137
138 void SelectRemoteDlg::showEvent(QShowEvent *event)
139 {
140     refreshDB();
141     QDialog::showEvent(event);
142 }
143