#include "settingsdlg.h"
+#include "advsettingsdlg.h"
+#include "selectremotedlg.h"
+#include "aboutdlg.h"
+#include "remote.h"
-#include <cstdlib>
-
-#include <QDebug>
#include <QHBoxLayout>
-#include <QLabel>
-#include <QString>
-#include <QListWidget>
-#include <QListWidgetItem>
+#include <QVBoxLayout>
+#include <QWidget>
+#include <QDialog>
+#include <QPushButton>
#include <QSettings>
-#include <QtNetwork/QNetworkAccessManager>
-#include <QtNetwork/QNetworkReply>
-#include <QBuffer>
-#include <QByteArray>
-#include <QFile>
+#include <QLabel>
+#include <QDebug>
SettingsDlg::SettingsDlg(QWidget *parent)
: QDialog(parent)
+ , remote(NULL)
{
- this->setWindowTitle(tr("Settings"));
-
- //TODO caching?
- mfgNetAM = new QNetworkAccessManager(this);
- connect(mfgNetAM, SIGNAL(finished(QNetworkReply*)),
- this, SLOT(mfgListDownloadFinished(QNetworkReply*)));
+ QSettings settings(this);
- modelNetAM = new QNetworkAccessManager(this);
- connect(modelNetAM, SIGNAL(finished(QNetworkReply*)),
- this, SLOT(modelListDownloadFinished(QNetworkReply*)));
-
- remoteNetAM = new QNetworkAccessManager(this);
- connect(remoteNetAM, SIGNAL(finished(QNetworkReply*)),
- this, SLOT(remoteDownloadFinished(QNetworkReply*)));
+ layout = new QVBoxLayout(this);
+ btnLayout = new QHBoxLayout(this);
+ remoteNameLayout = new QHBoxLayout(this);
- settings = new QSettings(this);
-
- layout = new QHBoxLayout(this);
-
- alphabetList = new QListWidget(this);
- for (char c = 'a'; c <= 'z'; ++c)
+ advSettingsBtn = new QPushButton(tr("Advanced"), this);
+ selectRemoteBtn = new QPushButton(tr("Select remote"), this);
+ aboutBtn = new QPushButton(tr("About"), this);
+ rateUpBtn = new QPushButton(
+ QIcon(settings.value("rateUpIcon",
+ "/usr/share/icons/hicolor/48x48/hildon/chat_smiley_happy.png").
+ toString()),
+ "", this);
+ rateDownBtn = new QPushButton(
+ QIcon(settings.value("rateDownIcon",
+ "/usr/share/icons/hicolor/48x48/hildon/chat_smiley_sad.png").
+ toString()),
+ "", this);
+ rateUpBtn->setMaximumSize(72, 72);
+ rateDownBtn->setMaximumSize(72, 72);
+
+ btnLayout->addWidget(advSettingsBtn);
+ btnLayout->addWidget(selectRemoteBtn);
+ btnLayout->addWidget(aboutBtn);
+
+ remoteNameLabel = new QLabel(this);
+ ratingLabel = new QLabel(this);
+ remoteNameLayout->addWidget(remoteNameLabel);
+ remoteNameLayout->addWidget(ratingLabel);
+ remoteNameLayout->addWidget(rateUpBtn);
+ remoteNameLayout->addWidget(rateDownBtn);
+
+ connect(advSettingsBtn, SIGNAL(clicked()),
+ this, SLOT(showAdvSettingsDlg()));
+ connect(selectRemoteBtn, SIGNAL(clicked()),
+ this, SLOT(showSelectRemoteDlg()));
+ connect(aboutBtn, SIGNAL(clicked()),
+ this, SLOT(showAboutDlg()));
+ connect(rateUpBtn, SIGNAL(clicked()),
+ this, SLOT(rateUpClicked()));
+ connect(rateDownBtn, SIGNAL(clicked()),
+ this, SLOT(rateDownClicked()));
+
+ QString selectedRemote = settings.value("remoteName", "").toString();
+ if (selectedRemote == "")
{
- alphabetList->addItem(QString(c));
+ remoteNameLabel->setText(tr("No remote selected"));
+ enableRateBtns(false);
+ }
+ else
+ {
+ changeRemote(selectedRemote);
}
- layout->addWidget(alphabetList);
- connect(alphabetList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
- this, SLOT(alphabetItemChanged(QListWidgetItem*, QListWidgetItem*)));
-
- mfgList = new QListWidget(this);
- layout->addWidget(mfgList);
- connect(mfgList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
- this, SLOT(mfgItemChanged(QListWidgetItem*, QListWidgetItem*)));
-
- modelList = new QListWidget(this);
- layout->addWidget(modelList);
- connect(modelList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
- this, SLOT(modelItemChanged(QListWidgetItem*, QListWidgetItem*)));
+ layout->addLayout(remoteNameLayout);
+ layout->addLayout(btnLayout);
this->setLayout(layout);
}
SettingsDlg::~SettingsDlg()
{
delete layout;
- delete settings;
- delete mfgNetAM;
- delete modelNetAM;
- delete remoteNetAM;
+ delete btnLayout;
+ delete remoteNameLayout;
+ delete advSettingsBtn;
+ delete selectRemoteBtn;
+ delete rateUpBtn;
+ delete rateDownBtn;
+ delete aboutBtn;
+ delete remoteNameLabel;
+ delete ratingLabel;
+ if (remote)
+ {
+ delete remote;
+ }
}
-void SettingsDlg::beginDownload(const QString &url, QNetworkAccessManager *nam)
+void SettingsDlg::showAdvSettingsDlg()
{
- nam->get(QNetworkRequest(QUrl(url)));
+ AdvSettingsDlg dlg(this);
+ dlg.exec();
}
-void SettingsDlg::alphabetItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
+void SettingsDlg::showSelectRemoteDlg()
{
- QString url = settings->value("remoteUrl", "http://mercury.wipsl.com/irwi/remotes/").toString()
- + current->text() + ".txt";
- beginDownload(url, mfgNetAM);
+ SelectRemoteDlg dlg(this);
+ connect(&dlg, SIGNAL(remoteChanged(QString)),
+ this, SLOT(updateRemoteInfo(QString)));
+ dlg.exec();
}
-void SettingsDlg::mfgListDownloadFinished(QNetworkReply *reply)
+void SettingsDlg::showAboutDlg()
{
- mfgList->clear();
- if (reply->error() == QNetworkReply::NoError) {
- QByteArray ba = reply->readAll();
- QBuffer buf(&ba, this);
- buf.open(QIODevice::ReadOnly);
- buf.seek(0);
- while (buf.canReadLine())
- {
- QString str(buf.readLine());
- str.chop(1);
- mfgList->addItem(str);
- }
- } else {
- //qDebug() << (int)reply->error();
- }
- reply->close();
- reply->deleteLater();
+ AboutDlg dlg(this);
+ dlg.exec();
}
-void SettingsDlg::mfgItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
+void SettingsDlg::changeRemote(const QString &name)
{
- if (mfgList->currentItem() != NULL) {
- QString url = settings->value(
- "remoteUrl", "http://mercury.wipsl.com/irwi/remotes/").toString()
- + alphabetList->currentItem()->text()
- + "/" + current->text() + ".txt";
- beginDownload(url, modelNetAM);
+ if (remote)
+ {
+ delete remote;
}
+ remote = new Remote(name);
+ connect(remote, SIGNAL(infoUpdated()),
+ this, SLOT(updateRemoteInfo()));
+ remote->updateInfo();
+ enableRateBtns();
}
-void SettingsDlg::modelListDownloadFinished(QNetworkReply *reply)
+void SettingsDlg::updateRemoteInfo()
{
- modelList->clear();
- if (reply->error() == QNetworkReply::NoError) {
- QByteArray ba = reply->readAll();
- QBuffer buf(&ba, this);
- buf.open(QIODevice::ReadOnly);
- buf.seek(0);
- while (buf.canReadLine())
- {
- QString str(buf.readLine());
- str.chop(1);
- modelList->addItem(str);
- }
- } else {
- //qDebug() << (int)reply->error();
- }
- reply->close();
- reply->deleteLater();
+ remoteNameLabel->setText(remote->mfg() + " " + remote->name());
+ ratingLabel->setText(tr("Rating") + ": " + remote->rating());
}
-void SettingsDlg::modelItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
+void SettingsDlg::rateUpClicked()
{
- if (current)
- {
- if (!current->text().isEmpty()) {
- QString url = settings->value(
- "remoteUrl", "http://mercury.wipsl.com/irwi/remotes/").toString()
- + alphabetList->currentItem()->text()
- + "/" + mfgList->currentItem()->text()
- + "/" + current->text();
- beginDownload(url, remoteNetAM);
- settings->setValue("remoteName", current->text());
- }
- }
+ remote->sendRating(Rating::Up);
+ enableRateBtns(false);
}
-void SettingsDlg::remoteDownloadFinished(QNetworkReply *reply)
+void SettingsDlg::rateDownClicked()
{
- if (reply->error() == QNetworkReply::NoError) {
- QFile file("/etc/lircd.conf");
- if(file.open(QIODevice::WriteOnly))
- {
- file.write(reply->readAll());
- file.close();
- }
- }
- reply->close();
- reply->deleteLater();
+ remote->sendRating(Rating::Down);
+ enableRateBtns(false);
+}
- std::system("lircctl restart");
+void SettingsDlg::enableRateBtns(bool enable)
+{
+ rateUpBtn->setEnabled(enable);
+ rateDownBtn->setEnabled(enable);
}
+