Merge branch 'master' of ssh://mercury/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         mfgList->addItems((*remoteDB)[current->text()].keys());
85     }
86 }
87
88 void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current,
89                                      QListWidgetItem * /*previous*/)
90 {
91     modelList->removeAllRows();
92     if (current) {
93         RemoteList remotes =
94             (*remoteDB)[alphabetList->currentItem()->text()][current->text()];
95         foreach(Remote *remote, remotes) {
96             modelList->addItem(remote);
97         }
98     }
99 }
100
101 void SelectRemoteDlg::downloadRemote()
102 {
103     Remote *currentModel = modelList->selected();
104     if (currentModel) {
105         setResult(QDialog::Accepted);
106         setBusy();
107         connect(currentModel, SIGNAL(saveFinished()),
108                 this, SLOT(close()));
109         currentModel->saveToFile();
110
111         emit remoteChanged(*currentModel);
112     }
113 }
114
115 void SelectRemoteDlg::getDB()
116 {
117     if (onlinePollerThread != NULL) {
118         delete onlinePollerThread;
119         onlinePollerThread = NULL;
120     }
121     remoteDBMgr.getDBAsync();
122 }
123
124 void SelectRemoteDlg::refreshDB()
125 {
126     setBusy(true);
127     if (onlinePollerThread != NULL) {
128         delete onlinePollerThread;
129         onlinePollerThread = NULL;
130     }
131     onlinePollerThread = new OnlinePollerThread();
132     connect(onlinePollerThread, SIGNAL(online()),
133             this, SLOT(getDB()));
134     onlinePollerThread->start();
135 }
136
137 void SelectRemoteDlg::showEvent(QShowEvent *event)
138 {
139     refreshDB();
140     QDialog::showEvent(event);
141 }
142