30e86cd63af200d749334f98987c5da66693522b
[irwi] / src / selectremotedlg.cpp
1 #include "selectremotedlg.h"
2
3 #include "remote.h"
4 #include "remotelistwidgetitem.h"
5
6 #include <QHBoxLayout>
7 #include <QLabel>
8 #include <QString>
9 #include <QListWidget>
10 #include <QListWidgetItem>
11 #include <QSettings>
12 #include <QMap>
13 #include <QList>
14 #include <QMessageBox>
15 #include <QPushButton>
16
17 SelectRemoteDlg::SelectRemoteDlg(QWidget *parent)
18     : QDialog(parent)
19 {
20     this->setWindowTitle(tr("Select remote"));
21     this->setMinimumHeight(320);
22
23     layout = new QHBoxLayout(this);
24
25     alphabetList = new QListWidget(this);
26     alphabetList->setMaximumWidth(96);
27     layout->addWidget(alphabetList);
28     connect(alphabetList,
29             SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
30             this,
31             SLOT(alphabetItemChanged(QListWidgetItem*, QListWidgetItem*)));
32     
33     mfgList = new QListWidget(this);
34     layout->addWidget(mfgList);
35     connect(mfgList,
36             SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
37             this,
38             SLOT(mfgItemChanged(QListWidgetItem*, QListWidgetItem*)));
39
40     modelList = new QListWidget(this);
41     layout->addWidget(modelList);
42
43     downloadBtn = new QPushButton(tr("Download"), this);
44     layout->addWidget(downloadBtn);
45     connect(downloadBtn, SIGNAL(clicked()), 
46             this, SLOT(downloadRemote()));
47
48     this->setLayout(layout);
49     connect(&remoteDBMgr, SIGNAL(dbReady(RemoteDB*)),
50             this, SLOT(setDB(RemoteDB*)));
51     remoteDBMgr.getDBAsync();
52     setBusy(true);
53 }
54
55
56 SelectRemoteDlg::~SelectRemoteDlg()
57 {
58     delete layout;
59 }
60
61 void SelectRemoteDlg::setDB(RemoteDB *db)
62 {
63     remoteDB = db;
64     setBusy(false);
65 }
66
67 void SelectRemoteDlg::setBusy(bool busy)
68 {
69     setAttribute(Qt::WA_Maemo5ShowProgressIndicator, busy);
70     setEnabled(!busy);
71 }
72
73 void SelectRemoteDlg::alphabetItemChanged(QListWidgetItem *current,
74                                       QListWidgetItem * /*previous*/)
75 {
76     mfgList->clear();
77     modelList->clear();
78     if (current)
79     {
80         mfgList->addItems((*remoteDB)[current->text()].keys());
81     }
82 }
83
84 void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current,
85                                      QListWidgetItem * /*previous*/)
86 {
87     modelList->clear();
88     if (current)
89     {
90         QList <Remote> remotes =
91            (*remoteDB)[alphabetList->currentItem()->text()][current->text()];
92         foreach(Remote remote, remotes) {
93             modelList->addItem(new RemoteListWidgetItem(remote));
94         }
95     }
96 }
97
98 void SelectRemoteDlg::downloadRemote()
99 {
100     RemoteListWidgetItem *currentModel =
101         static_cast<RemoteListWidgetItem *>(modelList->currentItem());
102     if (currentModel)
103     {
104         currentModel->remote().saveToFile();
105     }
106 }
107