X-Git-Url: http://git.maemo.org/git/?p=irwi;a=blobdiff_plain;f=src%2Fsettingsdlg.cpp;h=37295d6523a39a0c0c9a7ebef7c3e27feef26f3d;hp=6dc528779e6bf331c0652ede3258d043eda2f2ee;hb=9cb0ca7e6de20439f0df7c0121061c9f17c632b4;hpb=59b973b1b99faf52829bb9f8b101e2230c18355f diff --git a/src/settingsdlg.cpp b/src/settingsdlg.cpp index 6dc5287..37295d6 100644 --- a/src/settingsdlg.cpp +++ b/src/settingsdlg.cpp @@ -1,176 +1,149 @@ #include "settingsdlg.h" +#include "advsettingsdlg.h" +#include "selectremotedlg.h" +#include "aboutdlg.h" -#include - -#include #include +#include +#include +#include +#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include SettingsDlg::SettingsDlg(QWidget *parent) : QDialog(parent) { - this->setWindowTitle(tr("Settings")); - - deviceNameMap = new QMap(); - - //TODO caching? - mfgNetAM = new QNetworkAccessManager(this); - connect(mfgNetAM, SIGNAL(finished(QNetworkReply*)), - this, SLOT(mfgListDownloadFinished(QNetworkReply*))); - - 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*))); - - settings = new QSettings(this); - - layout = new QHBoxLayout(this); - - alphabetList = new QListWidget(this); - for (char c = 'a'; c <= 'z'; ++c) - { - alphabetList->addItem(QString(c)); - } - layout->addWidget(alphabetList); - connect(alphabetList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), - this, SLOT(alphabetItemChanged(QListWidgetItem*, QListWidgetItem*))); + QSettings settings(this); + m_layout = new QVBoxLayout(this); + m_btnLayout = new QHBoxLayout(this); + m_remoteNameLayout = new QHBoxLayout(this); - 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*))); - - this->setLayout(layout); + m_advSettingsBtn = new QPushButton(tr("Advanced"), this); + m_selectRemoteBtn = new QPushButton(tr("Select remote"), this); + m_aboutBtn = new QPushButton(tr("About"), this); + m_rateUpBtn = new QPushButton( + QIcon(settings.value("rateUpIcon", + "/usr/share/icons/hicolor/48x48/hildon/chat_smiley_happy.png"). + toString()), + "", this); + m_rateDownBtn = new QPushButton( + QIcon(settings.value("rateDownIcon", + "/usr/share/icons/hicolor/48x48/hildon/chat_smiley_sad.png"). + toString()), + "", this); + m_rateUpBtn->setMaximumSize(72, 72); + m_rateDownBtn->setMaximumSize(72, 72); + + m_btnLayout->addWidget(m_advSettingsBtn); + m_btnLayout->addWidget(m_selectRemoteBtn); + m_btnLayout->addWidget(m_aboutBtn); + + m_remoteNameLabel = new QLabel(this); + m_ratingLabel = new QLabel(this); + m_ratingLabel->setText(tr("Rating")); + m_remoteNameLayout->addWidget(m_remoteNameLabel); + m_remoteNameLayout->addWidget(m_ratingLabel); + m_remoteNameLayout->addWidget(m_rateUpBtn); + m_remoteNameLayout->addWidget(m_rateDownBtn); + + connect(m_advSettingsBtn, SIGNAL(clicked()), + this, SLOT(showAdvSettingsDlg())); + connect(m_selectRemoteBtn, SIGNAL(clicked()), + this, SLOT(showSelectRemoteDlg())); + connect(m_aboutBtn, SIGNAL(clicked()), + this, SLOT(showAboutDlg())); + connect(m_rateUpBtn, SIGNAL(clicked()), + this, SLOT(rateUpClicked())); + connect(m_rateDownBtn, SIGNAL(clicked()), + this, SLOT(rateDownClicked())); + + m_layout->addLayout(m_remoteNameLayout); + m_layout->addLayout(m_btnLayout); + this->setLayout(m_layout); + + initRemote(); } SettingsDlg::~SettingsDlg() { - delete layout; - delete settings; - delete mfgNetAM; - delete modelNetAM; - delete remoteNetAM; - delete deviceNameMap; + delete m_advSettingsBtn; + delete m_selectRemoteBtn; + delete m_rateUpBtn; + delete m_rateDownBtn; + delete m_aboutBtn; + delete m_remoteNameLabel; + delete m_ratingLabel; + delete m_btnLayout; + delete m_remoteNameLayout; + delete m_layout; +} + +void SettingsDlg::showAdvSettingsDlg() +{ + AdvSettingsDlg dlg(this); + dlg.exec(); } -void SettingsDlg::beginDownload(const QString &url, QNetworkAccessManager *nam) +void SettingsDlg::showSelectRemoteDlg() { - nam->get(QNetworkRequest(QUrl(url))); + SelectRemoteDlg dlg(this); + connect(&dlg, SIGNAL(m_remoteChanged(Remote)), + this, SLOT(setRemote(Remote))); + updateRemoteInfo(); + dlg.exec(); } -void SettingsDlg::alphabetItemChanged(QListWidgetItem *current, QListWidgetItem *previous) +void SettingsDlg::showAboutDlg() { - QString url = settings->value("remoteUrl", "http://mercury.wipsl.com/irwi/remotes/").toString() - + current->text() + ".txt"; - beginDownload(url, mfgNetAM); + AboutDlg dlg(this); + dlg.exec(); } -void SettingsDlg::mfgListDownloadFinished(QNetworkReply *reply) +void SettingsDlg::initRemote() { - 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); - } + QString selectedRemote = QSettings(this).value("remoteName", "").toString(); + if (selectedRemote == "") { + m_remoteNameLabel->setText("No remote selected"); + enableRateBtns(false); } else { - //qDebug() << (int)reply->error(); + m_remote = Remote(selectedRemote); + connect(&m_remote, SIGNAL(infoUpdated()), + this, SLOT(updateRemoteInfo())); + m_remote.updateInfo(); + enableRateBtns(); } - reply->close(); - reply->deleteLater(); } -void SettingsDlg::mfgItemChanged(QListWidgetItem *current, QListWidgetItem *previous) +void SettingsDlg::setRemote(Remote r) { - 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); - } + m_remote = r; + 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); - deviceNameMap->clear(); - while (buf.canReadLine()) - { - QString str(buf.readLine()); - str.chop(1); - QStringList strlist = str.split(":"); - if (strlist.count() == 2) { - modelList->addItem(strlist[1]); - deviceNameMap->insert(strlist[1], strlist[0]); - } - } - } else { - //qDebug() << (int)reply->error(); - } - reply->close(); - reply->deleteLater(); + m_remoteNameLabel->setText(m_remote.mfg() + " " + m_remote.name()); + m_ratingLabel->setText(tr("Rating") + ": " + + QString::number(m_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() - + "/" + (*deviceNameMap)[current->text()]; - beginDownload(url, remoteNetAM); - settings->setValue("remoteName", current->text()); - } - } + m_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(); + m_remote.sendRating(Rating::Down); + enableRateBtns(false); +} - std::system("lircctl restart"); +void SettingsDlg::enableRateBtns(bool enable) +{ + m_rateUpBtn->setEnabled(enable); + m_rateDownBtn->setEnabled(enable); } +