Rating is updated if remote selection dialog is canceled
[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         mfgList->addItems((*remoteDB)[current->text()].keys());
84     }
85 }
86
87 void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current,
88                                      QListWidgetItem * /*previous*/)
89 {
90     modelList->clear();
91     if (current) {
92         RemoteList remotes =
93             (*remoteDB)[alphabetList->currentItem()->text()][current->text()];
94         foreach(Remote *remote, remotes) {
95             modelList->addItem(new RemoteListWidgetItem(remote));
96         }
97     }
98 }
99
100 void SelectRemoteDlg::downloadRemote()
101 {
102     RemoteListWidgetItem *currentModel =
103         static_cast<RemoteListWidgetItem *>(modelList->currentItem());
104     if (currentModel) {
105         setResult(QDialog::Accepted);
106         setBusy();
107         connect(currentModel->remote(), SIGNAL(saveFinished()),
108                 this, SLOT(close()));
109         currentModel->remote()->saveToFile();
110
111         emit remoteChanged(*(currentModel->remote()));
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