X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fsettingsdlg.cpp;h=84c72ea4aa21a08590cc5e3753c099cd122267a4;hb=HEAD;hp=de2f4f5ccd696938f8375371e6347b373d729de1;hpb=64cb6e06d096530f44eb3a128153f80a7ced0cbb;p=irwi diff --git a/src/settingsdlg.cpp b/src/settingsdlg.cpp index de2f4f5..84c72ea 100644 --- a/src/settingsdlg.cpp +++ b/src/settingsdlg.cpp @@ -1,181 +1,200 @@ #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) + , m_busy(true) + , m_netConfMan(NULL) { - this->setWindowTitle(tr("Settings")); - - //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*))); + QSettings settings(this); + m_layout = new QVBoxLayout(this); + m_btnLayout = new QHBoxLayout(); + m_remoteNameLayout = new QHBoxLayout(); - settings = new QSettings(this); - - layout = new QHBoxLayout(this); - - alphabetList = new QListWidget(this); - for (char c = 'a'; c <= 'z'; ++c) - { - alphabetList->addItem(QString(c)); + 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("symbolPath", + "/usr/share/irwi/symbols/"). + toString() + "symbol_thumbs_up.png"), + "", this); + m_rateDownBtn = new QPushButton( + QIcon(settings.value("symbolPath", + "/usr/share/irwi/symbols/"). + toString() + "symbol_thumbs_down.png"), + "", 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_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); + + QString remoteName = settings.value("remoteName", "").toString(); + if (remoteName == "") { + m_remoteNameLabel->setText(tr("No remote selected")); + } else { + // Create remote by name and update it's info if online + m_remote = Remote(remoteName); + connect(&m_remote, SIGNAL(infoUpdated()), + this, SLOT(updateRemoteInfo())); + m_remoteNameLabel->setText(settings.value("remoteMfg", "").toString() + + " " + remoteName); } - 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*))); - - this->setLayout(layout); + m_netConfMan = new QTM_PREPEND_NAMESPACE( + QNetworkConfigurationManager)(this); + connect(m_netConfMan, SIGNAL(updateCompleted()), + this, SLOT(onNetworkStatusUpdate())); + m_netConfMan->updateConfigurations(); + enableRateBtns(false); } SettingsDlg::~SettingsDlg() { - delete layout; - delete settings; - delete mfgNetAM; - delete modelNetAM; + 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; + delete m_netConfMan; } -void SettingsDlg::alphabetItemChanged(QListWidgetItem *current, QListWidgetItem *previous) +void SettingsDlg::setBusy(bool busy) { - mfgNetAM->get( - QNetworkRequest( - QUrl( - settings->value( - "remoteUrl", - "http://mercury.wipsl.com/irwi/remotes/" - ).toString() - + current->text() + ".txt" - ) - ) - ); +#ifdef Q_WS_MAEMO_5 + setAttribute(Qt::WA_Maemo5ShowProgressIndicator, busy); +#endif + m_busy = busy; } -void SettingsDlg::mfgListDownloadFinished(QNetworkReply *reply) +void SettingsDlg::showAdvSettingsDlg() { - 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(); + AdvSettingsDlg dlg; + dlg.exec(); + if (QSettings(this).value("remoteName", "").toString() == "") { + m_remoteNameLabel->setText(tr("No remote selected")); + m_ratingLabel->setText(""); + enableRateBtns(false); } - reply->close(); - reply->deleteLater(); } -void SettingsDlg::mfgItemChanged(QListWidgetItem *current, QListWidgetItem *previous) +void SettingsDlg::showSelectRemoteDlg() { - if (mfgList->currentItem() != NULL) { - modelNetAM->get( - QNetworkRequest( - QUrl( - settings->value( - "remoteUrl", - "http://mercury.wipsl.com/irwi/remotes/" - ).toString() - + alphabetList->currentItem()->text() - + "/" + current->text() + ".txt" - ) - ) - ); + SelectRemoteDlg dlg; + connect(&dlg, SIGNAL(remoteChanged(Remote)), + this, SLOT(setRemote(Remote))); + if (dlg.exec() == QDialog::Rejected) { + onNetworkStatusUpdate(); } } -void SettingsDlg::modelListDownloadFinished(QNetworkReply *reply) +void SettingsDlg::showAboutDlg() +{ + AboutDlg dlg; + dlg.exec(); +} + +void SettingsDlg::setRemote(Remote r) { - 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); - } + m_remote = r; + connect(&m_remote, SIGNAL(infoUpdated()), + this, SLOT(updateRemoteInfo())); + updateRemoteInfo(); + enableRateBtns(); +} + +void SettingsDlg::onNetworkStatusUpdate() +{ + if (m_netConfMan->isOnline() && + QSettings(this).value("remoteName", "").toString() != "") { + setBusy(); + m_remote.updateInfo(); + enableRateBtns(); + } else if (!m_netConfMan->isOnline()) { + m_ratingLabel->setText(tr("Offline")); + setBusy(false); } else { - //qDebug() << (int)reply->error(); + setBusy(false); } - reply->close(); - reply->deleteLater(); } -void SettingsDlg::modelItemChanged(QListWidgetItem *current, QListWidgetItem *previous) +void SettingsDlg::updateRemoteInfo() { - if (current) - { - if (!current->text().isEmpty()) { - remoteNetAM->get( - QNetworkRequest( - QUrl( - settings->value( - "remoteUrl", - "http://mercury.wipsl.com/irwi/remotes/" - ).toString() - + alphabetList->currentItem()->text() - + "/" + mfgList->currentItem()->text() - + "/" + current->text() - ) - ) - ); - settings->setValue("remoteName", current->text()); - } - } + setBusy(false); + m_remoteNameLabel->setText(m_remote.mfg() + " " + m_remote.name()); + m_ratingLabel->setText(tr("Rating") + ": " + + QString::number(m_remote.rating())); } -void SettingsDlg::remoteDownloadFinished(QNetworkReply *reply) +void SettingsDlg::rateUpClicked() { - 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(); + processRatingSent(); + m_remote.sendRating(Rating::Up); +} + +void SettingsDlg::rateDownClicked() +{ + processRatingSent(); + m_remote.sendRating(Rating::Down); +} + +void SettingsDlg::processRatingSent() +{ + setBusy(); + enableRateBtns(false); +} + +void SettingsDlg::enableRateBtns(bool enable) +{ + m_rateUpBtn->setEnabled(enable); + m_rateDownBtn->setEnabled(enable); +} - system("lircctl restart"); +void SettingsDlg::showEvent(QShowEvent *event) +{ + setBusy(m_busy); + QDialog::showEvent(event); } + +