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