c88da36290346b8dec68ec3fbfee947ade10b57e
[irwi] / src / settingsdlg.cpp
1 #include "settingsdlg.h"
2 #include "advsettingsdlg.h"
3 #include "selectremotedlg.h"
4 #include "aboutdlg.h"
5
6 #include <QHBoxLayout>
7 #include <QVBoxLayout>
8 #include <QWidget>
9 #include <QDialog>
10 #include <QPushButton>
11 #include <QLabel>
12 #include <QDebug>
13
14 SettingsDlg::SettingsDlg(QWidget *parent)
15     : QDialog(parent)
16 {
17     QSettings settings(this);
18     m_layout = new QVBoxLayout(this);
19     m_btnLayout = new QHBoxLayout();
20     m_remoteNameLayout = new QHBoxLayout();
21     
22     m_advSettingsBtn = new QPushButton(tr("Advanced"), this);
23     m_selectRemoteBtn = new QPushButton(tr("Select remote"), this);
24     m_aboutBtn = new QPushButton(tr("About"), this);
25     m_rateUpBtn = new QPushButton(
26             QIcon(settings.value("rateUpIcon",
27                 "/usr/share/icons/hicolor/48x48/hildon/chat_smiley_happy.png").
28                 toString()),
29             "", this);
30     m_rateDownBtn = new QPushButton(
31             QIcon(settings.value("rateDownIcon",
32                 "/usr/share/icons/hicolor/48x48/hildon/chat_smiley_sad.png").
33                 toString()),
34             "", this);
35     m_rateUpBtn->setMaximumSize(72, 72);
36     m_rateDownBtn->setMaximumSize(72, 72);
37
38     m_btnLayout->addWidget(m_advSettingsBtn);
39     m_btnLayout->addWidget(m_selectRemoteBtn);
40     m_btnLayout->addWidget(m_aboutBtn);
41
42     m_remoteNameLabel = new QLabel(this);
43     m_ratingLabel = new QLabel(this);
44     m_remoteNameLayout->addWidget(m_remoteNameLabel);
45     m_remoteNameLayout->addWidget(m_ratingLabel);
46     m_remoteNameLayout->addWidget(m_rateUpBtn);
47     m_remoteNameLayout->addWidget(m_rateDownBtn);
48
49     connect(m_advSettingsBtn, SIGNAL(clicked()),
50             this, SLOT(showAdvSettingsDlg()));
51     connect(m_selectRemoteBtn, SIGNAL(clicked()),
52             this, SLOT(showSelectRemoteDlg()));
53     connect(m_aboutBtn, SIGNAL(clicked()),
54             this, SLOT(showAboutDlg()));
55     connect(m_rateUpBtn, SIGNAL(clicked()),
56             this, SLOT(rateUpClicked()));
57     connect(m_rateDownBtn, SIGNAL(clicked()),
58             this, SLOT(rateDownClicked()));
59  
60     m_layout->addLayout(m_remoteNameLayout);
61     m_layout->addLayout(m_btnLayout);
62     this->setLayout(m_layout);
63
64     QString selectedRemote = QSettings(this).value("remoteName", "").toString();
65     if (selectedRemote == "") {
66         m_remoteNameLabel->setText("No remote selected");
67         enableRateBtns(false);
68     } else {
69         setRemote(selectedRemote);
70         setBusy();
71     }
72 }
73
74 SettingsDlg::~SettingsDlg()
75 {
76     delete m_advSettingsBtn;
77     delete m_selectRemoteBtn;
78     delete m_rateUpBtn;
79     delete m_rateDownBtn;
80     delete m_aboutBtn;
81     delete m_remoteNameLabel;
82     delete m_ratingLabel;
83     delete m_btnLayout;
84     delete m_remoteNameLayout;
85     delete m_layout;
86 }
87
88 void SettingsDlg::setBusy(bool busy)
89 {
90     setAttribute(Qt::WA_Maemo5ShowProgressIndicator, busy);
91     setEnabled(!busy);
92 }
93
94 void SettingsDlg::showAdvSettingsDlg()
95 {
96     AdvSettingsDlg dlg;
97     dlg.exec();
98 }
99
100 void SettingsDlg::showSelectRemoteDlg()
101 {
102     SelectRemoteDlg dlg;
103     connect(&dlg, SIGNAL(remoteChanged(Remote)),
104             this, SLOT(setRemote(Remote)));
105     dlg.exec();
106 }
107
108 void SettingsDlg::showAboutDlg()
109 {
110     AboutDlg dlg;
111     dlg.exec();
112 }
113
114 void SettingsDlg::setRemote(Remote r)
115 {
116     m_remote = r;
117     processRemoteChange();
118     updateRemoteInfo();
119 }
120
121 void SettingsDlg::setRemote(const QString &name)
122 {
123     setBusy();
124     m_remote = Remote(name);
125     processRemoteChange();
126     m_remote.updateInfo();  // request update from server
127 }
128
129 void SettingsDlg::processRemoteChange()
130 {
131     connect(&m_remote, SIGNAL(infoUpdated()),
132             this, SLOT(updateRemoteInfo()));
133     enableRateBtns();
134 }
135
136 void SettingsDlg::updateRemoteInfo()
137 {
138     setBusy(false);
139     m_remoteNameLabel->setText(m_remote.mfg() + " " + m_remote.name());
140     m_ratingLabel->setText(tr("Rating") + ": "
141             + QString::number(m_remote.rating()));
142 }
143
144 void SettingsDlg::rateUpClicked()
145 {
146     m_remote.sendRating(Rating::Up);
147     processRatingSent();
148 }
149
150 void SettingsDlg::rateDownClicked()
151 {
152     m_remote.sendRating(Rating::Down);
153     processRatingSent();
154 }
155
156 void SettingsDlg::processRatingSent()
157 {
158     enableRateBtns(false);
159     m_remote.updateInfo();
160 }
161
162 void SettingsDlg::enableRateBtns(bool enable)
163 {
164     m_rateUpBtn->setEnabled(enable);
165     m_rateDownBtn->setEnabled(enable);
166 }
167
168