1 #include "selectremotedlg.h"
4 #include "remotelistwidgetitem.h"
5 #include "onlinepollerthread.h"
6 #include "remotetable.h"
11 #include <QListWidget>
12 #include <QListWidgetItem>
16 #include <QMessageBox>
17 #include <QPushButton>
19 SelectRemoteDlg::SelectRemoteDlg(QWidget *parent)
22 onlinePollerThread = NULL;
23 this->setWindowTitle(tr("Select remote"));
24 this->setMinimumHeight(320);
26 layout = new QHBoxLayout(this);
28 alphabetList = new QListWidget(this);
29 alphabetList->setMaximumWidth(64);
30 layout->addWidget(alphabetList);
32 SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
34 SLOT(alphabetItemChanged(QListWidgetItem*, QListWidgetItem*)));
36 mfgList = new QListWidget(this);
37 mfgList->setMaximumWidth(192);
38 layout->addWidget(mfgList);
40 SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
42 SLOT(mfgItemChanged(QListWidgetItem*, QListWidgetItem*)));
44 modelList = new RemoteTable(this);
45 layout->addWidget(modelList);
47 downloadBtn = new QPushButton(tr("Download"), this);
48 layout->addWidget(downloadBtn);
49 connect(downloadBtn, SIGNAL(clicked()),
50 this, SLOT(downloadRemote()));
52 this->setLayout(layout);
53 connect(&remoteDBMgr, SIGNAL(dbReady(RemoteDB*)),
54 this, SLOT(setDB(RemoteDB*)));
55 connect(&remoteDBMgr, SIGNAL(downloadFailed(int)),
56 this, SLOT(onDBError(int)));
59 SelectRemoteDlg::~SelectRemoteDlg()
62 if (onlinePollerThread != NULL) {
63 delete onlinePollerThread;
64 onlinePollerThread = NULL;
68 void SelectRemoteDlg::setDB(RemoteDB *db)
71 alphabetList->addItems(remoteDB->keys());
75 void SelectRemoteDlg::setBusy(bool busy)
78 setAttribute(Qt::WA_Maemo5ShowProgressIndicator, busy);
83 void SelectRemoteDlg::alphabetItemChanged(QListWidgetItem *current,
84 QListWidgetItem * /*previous*/)
87 modelList->removeAllRows();
89 mfgList->addItems((*remoteDB)[current->text()].keys());
93 void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current,
94 QListWidgetItem * /*previous*/)
96 modelList->removeAllRows();
99 (*remoteDB)[alphabetList->currentItem()->text()][current->text()];
100 foreach(Remote *remote, remotes) {
101 modelList->addItem(remote);
106 void SelectRemoteDlg::downloadRemote()
108 Remote *currentModel = modelList->selected();
110 setResult(QDialog::Accepted);
112 connect(currentModel, SIGNAL(saveFinished()),
113 this, SLOT(close()));
114 currentModel->saveToFile();
116 emit remoteChanged(*currentModel);
120 void SelectRemoteDlg::getDB()
122 if (onlinePollerThread != NULL) {
123 delete onlinePollerThread;
124 onlinePollerThread = NULL;
126 remoteDBMgr.getDBAsync();
129 void SelectRemoteDlg::refreshDB()
132 if (onlinePollerThread != NULL) {
133 delete onlinePollerThread;
134 onlinePollerThread = NULL;
136 onlinePollerThread = new OnlinePollerThread();
137 connect(onlinePollerThread, SIGNAL(online()),
138 this, SLOT(getDB()));
139 onlinePollerThread->start();
142 void SelectRemoteDlg::showEvent(QShowEvent *event)
145 QDialog::showEvent(event);
148 void SelectRemoteDlg::onDBError(int error)
150 this->setWindowTitle(tr("Network error") + " " + QString::number(error));
152 downloadBtn->setVisible(false);