#include "advsettingsdlg.h"
#include "settingstable.h"
+#include "iengine.h"
-AdvSettingsDlg::AdvSettingsDlg(QDialog *parent)
+AdvSettingsDlg::AdvSettingsDlg(QDialog *parent, IEngine *engine)
: QDialog(parent)
+ , engine(engine)
, layout(NULL)
, btnLayout(NULL)
, settings(NULL)
class QVBoxLayout;
class QHBoxLayout;
class SettingsTable;
+class IEngine;
class AdvSettingsDlg : public QDialog
{
Q_OBJECT
public:
- AdvSettingsDlg(QDialog *parent = 0);
+ AdvSettingsDlg(QDialog *parent, IEngine *engine);
~AdvSettingsDlg();
private:
void save();
private:
+ IEngine *engine;
QHBoxLayout *layout;
QVBoxLayout *btnLayout;
QSettings *settings;
--- /dev/null
+#include "engine.h"
+#include "remote.h"
+#include "iremote.h"
+#include "remotedbparser.h"
+#include "netio.h"
+
+#include <QDomDocument>
+
+Engine::Engine()
+ : netIO(new NetIO())
+ , currentRemote(NULL)
+{
+}
+
+Engine::~Engine()
+{
+ delete netIO;
+ if (currentRemote)
+ delete currentRemote;
+}
+
+void Engine::setRemote(const QString &id)
+{
+ if (currentRemote)
+ delete currentRemote;
+
+ currentRemote = new Remote(id, netIO);
+}
+
+RemoteDbParser Engine::availableRemotes()
+{
+ // TODO download db.xml
+
+ QDomDocument doc;
+ return RemoteDbParser(doc);
+}
+
+IRemote *Engine::remote()
+{
+ return currentRemote;
+}
+
+
+
--- /dev/null
+#ifndef _ENGINE_H_
+#define _ENGINE_H_
+
+#include "iengine.h"
+
+class NetIO;
+class Remote;
+class IRemote;
+class RemoteDbParser;
+
+class Engine : public IEngine
+{
+public:
+ Engine();
+ ~Engine();
+ RemoteDbParser availableRemotes();
+ void setRemote(const QString &id);
+ IRemote *remote();
+
+private:
+ NetIO *netIO;
+ Remote *currentRemote;
+};
+
+#endif // _ENGINE_H_
+
+
--- /dev/null
+#ifndef _IENGINE_H_
+#define _IENGINE_H_
+
+#include <QString>
+
+class IRemote;
+class RemoteDbParser;
+
+class IEngine
+{
+public:
+ IEngine() {}
+ virtual ~IEngine() {}
+ virtual RemoteDbParser availableRemotes() = 0;
+ virtual void setRemote(const QString &id) = 0;
+ virtual IRemote *remote() = 0;
+};
+
+#endif // _IENGINE_H_
+
+#include <cstdlib>
+
#include <QSettings>
+#include <QTimer>
+
#include "irctrl.h"
-#include "irctrl_p.h"
IrCtrl::IrCtrl(QObject *parent)
: QObject(parent)
- , d_ptr(new IrCtrlPrivate())
{
- Q_D(IrCtrl);
- d->q_ptr = this;
}
-
-IrCtrl::IrCtrl(IrCtrlPrivate &dd, QObject *parent)
- : QObject(parent)
- , d_ptr(&dd)
-{
- Q_D(IrCtrl);
- d->q_ptr = this;
-}
-
+
IrCtrl::~IrCtrl()
{
- delete d_ptr;
}
-void IrCtrl::sendCmd0()
+void IrCtrl::sendCmd(const QString &remoteName, const QString &cmd)
{
- Q_D(IrCtrl);
- d->genericSendCmd(d->settings->value("cmd0", "VOLUP").toString());
-}
+ if (!killLircTimer->isActive()) {
+ startLirc();
+ } else {
+ killLircTimer->stop();
+ }
-void IrCtrl::sendCmd1()
-{
- Q_D(IrCtrl);
- d->genericSendCmd(d->settings->value("cmd1", "VOLDOWN-").toString());
-}
+// QTcpSocket sock;
+// QSettings settings(this);
+// sock.setSocketOption(QAbstractSocket::LowDelayOption, 1);
+// sock.connectToHost(QHostAddress::LocalHost,
+// settings.value("lircPort", LIRC_PORT).toInt(),
+// QIODevice::WriteOnly|QIODevice::Unbuffered);
+// sock.waitForConnected();
+// QString cmdStr = "SEND_ONCE " + cmd.remoteName + " " + cmd.cmd + "\n";
+// sock.write(cmdStr.toAscii());
+// sock.waitForBytesWritten();
+// sock.close();
-void IrCtrl::sendCmd2()
-{
- Q_D(IrCtrl);
- d->genericSendCmd(d->settings->value("cmd2", "CHUP").toString());
+ killLircTimer->start();
}
-void IrCtrl::sendCmd3()
-{
- Q_D(IrCtrl);
- d->genericSendCmd(d->settings->value("cmd3", "CHDOWN").toString());
-}
-void IrCtrl::sendCmd4()
+void IrCtrl::stopLirc()
{
- Q_D(IrCtrl);
- d->genericSendCmd(d->settings->value("cmd4", "POWER").toString());
+ std::system("sudo /etc/init.d/lirc stop");
}
-void IrCtrl::sendCmd5()
+void IrCtrl::startLirc()
{
- Q_D(IrCtrl);
- d->genericSendCmd(d->settings->value("cmd5", "MUTE").toString());
+ std::system("sudo /etc/init.d/lirc start");
}
#include <QObject>
#include <QString>
-class IrCtrlPrivate;
+class QTimer;
class IrCtrl : public QObject
{
~IrCtrl();
public slots:
- void sendCmd0();
- void sendCmd1();
- void sendCmd2();
- void sendCmd3();
- void sendCmd4();
- void sendCmd5();
+ void sendCmd(const QString &remoteName, const QString &cmd);
-protected:
- IrCtrlPrivate *const d_ptr;
- IrCtrl(IrCtrlPrivate &dd, QObject *parent);
+private:
+ void startLirc();
+ void stopLirc();
private:
- Q_DECLARE_PRIVATE(IrCtrl);
+ static const quint16 LIRC_PORT = 8765;
+ QTimer *killLircTimer;
};
#endif
+++ /dev/null
-#include <cstdlib>
-
-#include <QTcpSocket>
-#include <QHostAddress>
-#include <QAbstractSocket>
-#include <QSettings>
-#include <QTimer>
-
-#include "irctrl_p.h"
-
-IrCtrlPrivate::IrCtrlPrivate()
- : settings(NULL)
-{
- settings = new QSettings(this);
-
- killLircTimer = new QTimer(this);
- killLircTimer->setInterval(
- settings->value("idleTimeout", 300).toInt() * 1000);
- killLircTimer->setSingleShot(true);
- connect(killLircTimer, SIGNAL(timeout()), this, SLOT(stopLirc()));
- startLirc();
- killLircTimer->start();
-}
-
-IrCtrlPrivate::~IrCtrlPrivate()
-{
- delete settings;
- settings = NULL;
- delete killLircTimer;
- stopLirc();
-}
-
-void IrCtrlPrivate::stopLirc()
-{
- std::system("sudo /etc/init.d/lirc stop");
-}
-
-void IrCtrlPrivate::startLirc()
-{
- std::system("sudo /etc/init.d/lirc start");
-}
-
-void IrCtrlPrivate::genericSendCmd(const QString &commandName)
-{
- if (!killLircTimer->isActive()) {
- startLirc();
- } else {
- killLircTimer->stop();
- }
-
- QTcpSocket sock;
- sock.setSocketOption(QAbstractSocket::LowDelayOption, 1);
- sock.connectToHost(QHostAddress::LocalHost,
- settings->value("lircPort", LIRC_PORT).toInt(),
- QIODevice::WriteOnly|QIODevice::Unbuffered);
- sock.waitForConnected();
- QString remoteName =
- settings->value("remoteName", "REMOTE_NAME_MISSING").toString();
- QString cmd = "SEND_ONCE " + remoteName + " " + commandName + "\n";
- sock.write(cmd.toAscii());
- sock.waitForBytesWritten();
- sock.close();
-
- killLircTimer->start();
-}
-
-
+++ /dev/null
-#ifndef _IRCTRLPRIVATE_H_
-#define _IRCTRLPRIVATE_H_
-
-#include <QString>
-#include <QObject>
-#include "irctrl.h"
-
-class QSettings;
-class QTimer;
-
-class IrCtrlPrivate : public QObject
-{
- Q_OBJECT
-public:
- IrCtrlPrivate();
- virtual ~IrCtrlPrivate();
-
-protected:
- void genericSendCmd(const QString &commandName);
- void startLirc();
-
-protected:
- IrCtrl *q_ptr;
- QSettings *settings;
- static const quint16 LIRC_PORT = 8765;
- QTimer *killLircTimer;
-
-protected slots:
- void stopLirc();
-
-private:
- IrCtrlPrivate(const IrCtrlPrivate &);
- Q_DECLARE_PUBLIC(IrCtrl);
-};
-
-#endif // _IRCTRLPRIVATE_H_
-
--- /dev/null
+#ifndef _IREMOTE_H_
+#define _IREMOTE_H_
+
+#include <QObject>
+
+class IRemote : public QObject
+{
+ Q_OBJECT
+
+public:
+ enum RemoteCmd
+ {
+ VOLUMEUP,
+ VOLUMEDOWN,
+ CHANNELUP,
+ CHANNELDOWN,
+ POWER,
+ MUTE
+ };
+
+ IRemote() {}
+ virtual ~IRemote() {}
+
+ virtual void updateRating() = 0;
+ virtual void sendRating(bool) = 0;
+ virtual void sendCmd(RemoteCmd) = 0;
+
+signals:
+ void ratingChanged(int rating);
+};
+
+#endif // _IREMOTE_H_
+
#include "mainwidget.h"
+#include "engine.h"
+#include "iengine.h"
+#include "settingsdlg.h"
#include <QInputDialog>
#include <QPainter>
#include <QToolButton>
#include <QSettings>
-#include "settingsdlg.h"
-
MainWidget::MainWidget (QWidget *parent)
: QWidget(parent)
+ , engine(new Engine())
{
+ engine->setRemote("1");
+
layout = new QGridLayout(this);
settings = new QSettings(this);
layout->addWidget(button, i%2, i/2);
}
- connect(buttons[0], SIGNAL(clicked()), &irCtrl, SLOT(sendCmd0()));
- connect(buttons[1], SIGNAL(clicked()), &irCtrl, SLOT(sendCmd1()));
- connect(buttons[2], SIGNAL(clicked()), &irCtrl, SLOT(sendCmd2()));
- connect(buttons[3], SIGNAL(clicked()), &irCtrl, SLOT(sendCmd3()));
- connect(buttons[4], SIGNAL(clicked()), &irCtrl, SLOT(sendCmd4()));
- connect(buttons[5], SIGNAL(clicked()), &irCtrl, SLOT(sendCmd5()));
-
+ connect(buttons[0], SIGNAL(clicked()),
+ this, SLOT(sendCmdClicked(IRemote::VOLUMEUP)));
+
this->setContentsMargins(0, 0, 0, 0);
layout->setContentsMargins(0, 0, 0, 0);
this->setLayout(layout);
this->setAttribute(Qt::WA_TranslucentBackground);
this->setAttribute(Qt::WA_OpaquePaintEvent);
resize();
+
+
+ showSettingsDialog();
}
MainWidget::~MainWidget()
{
delete settings;
+ delete engine;
}
void MainWidget::paintEvent(QPaintEvent*)
void MainWidget::showSettingsDialog()
{
- SettingsDlg dlg;
+ SettingsDlg dlg(this, engine);
dlg.exec();
update(); // Repaint required if bgAlpha value was changed
resize();
QWidget::resize(w, h);
}
+void MainWidget::sendCmdClicked(IRemote::RemoteCmd cmd)
+{
+ engine->remote()->sendCmd(cmd);
+
+}
+
+
-#ifndef MAINWIDGET_H
-#define MAINWIDGET_H
+#ifndef _MAINWIDGET_H_
+#define _MAINWIDGET_H_
#include <QWidget>
-#include "irctrl.h"
+#include "iremote.h"
+class IEngine;
class QGridLayout;
class QToolButton;
class QSettings;
class MainWidget : public QWidget
{
Q_OBJECT
+
public:
MainWidget (QWidget *parent = NULL);
~MainWidget();
public slots:
void showSettingsDialog();
+private slots:
+ void sendCmdClicked(IRemote::RemoteCmd cmd);
+
protected:
void paintEvent(QPaintEvent *event);
private:
void resize();
+
+private:
+ IEngine *engine;
+ QSettings *settings;
static const int BUTTON_COUNT = 6;
QGridLayout *layout;
QToolButton *buttons[BUTTON_COUNT];
- IrCtrl irCtrl;
- QSettings *settings;
};
#endif
{
}
- Model(const QString &name, const QString &file)
+ Model(const QString &name, const QString &id)
: name(name)
- , file(file)
+ , id(id)
{
}
Model(const Model &m)
: name(m.name)
- , file(m.file)
+ , id(m.id)
{
}
QString name;
- QString file;
+ QString id;
};
#endif // _MODEL_H_
--- /dev/null
+#include <QString>
+
+#include "netio.h"
+
+NetIO::NetIO()
+{
+}
+
+NetIO::~NetIO()
+{
+}
+
+void NetIO::ratingById(const QString &id)
+{
+ emit ratingDownloaded(1234);
+}
+
+
--- /dev/null
+#ifndef _NETIO_H_
+#define _NETIO_H_
+
+#include <QObject>
+
+class QString;
+
+class NetIO : public QObject
+{
+ Q_OBJECT
+
+public:
+ NetIO();
+ ~NetIO();
+
+ void ratingById(const QString &id);
+
+signals:
+ void ratingDownloaded(int);
+};
+
+#endif // _NETIO_H_
+
--- /dev/null
+#include "irctrl.h"
+#include "remote.h"
+#include "netio.h"
+
+#include <QSettings>
+
+Remote::Remote()
+ : rated(false)
+ , model("", "")
+ , settings(new QSettings())
+ , irCtrl(new IrCtrl())
+ , netIO(NULL)
+{
+}
+
+Remote::Remote(const QString &id, NetIO *netIO)
+ : rated(false)
+ , settings(new QSettings())
+ , irCtrl(new IrCtrl())
+ , netIO(netIO)
+{
+ setId(id);
+}
+
+Remote::~Remote()
+{
+ delete settings;
+ delete irCtrl;
+}
+
+const QString &Remote::id() const
+{
+ return model.id;
+}
+
+void Remote::setId(const QString &id)
+{
+ model.id = id;
+}
+
+void Remote::setNetIO(NetIO *netIO)
+{
+ this->netIO = netIO;
+}
+
+void Remote::updateRating()
+{
+ connect(netIO, SIGNAL(ratingDownloaded(int)),
+ this, SIGNAL(ratingChanged(int)));
+ netIO->ratingById(model.id);
+}
+
+void Remote::sendRating(bool)
+{
+}
+
+void Remote::sendCmd(RemoteCmd cmd)
+{
+ switch (cmd)
+ {
+ case VOLUMEUP:
+ irCtrl->sendCmd(
+ model.name,
+ settings->value("cmdVolumeUp", "VOLUP").toString());
+ break;
+
+ case VOLUMEDOWN:
+ irCtrl->sendCmd(
+ model.name,
+ settings->value("cmdVolumeDown", "VOLUP").toString());
+ break;
+
+ case CHANNELUP:
+ irCtrl->sendCmd(
+ model.name,
+ settings->value("cmdChannelUp", "CHUP").toString());
+ break;
+
+ case CHANNELDOWN:
+ irCtrl->sendCmd(
+ model.name,
+ settings->value("cmdChannelDown", "CHDOWN").toString());
+ break;
+
+ case POWER:
+ irCtrl->sendCmd(
+ model.name,
+ settings->value("cmdPower", "POWER").toString());
+ break;
+
+ case MUTE:
+ irCtrl->sendCmd(
+ model.name,
+ settings->value("cmdMute", "MUTE").toString());
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+
--- /dev/null
+#ifndef _REMOTE_H_
+#define _REMOTE_H_
+
+#include "iremote.h"
+#include "model.h"
+
+#include <QString>
+
+class IrCtrl;
+class NetIO;
+class QSettings;
+
+class Remote : public IRemote
+{
+public:
+ Remote();
+ Remote(const QString &id, NetIO *);
+ ~Remote();
+
+ const QString &id() const;
+ void setId(const QString &id);
+ void setNetIO(NetIO *);
+
+ // visible for gui
+ void updateRating();
+ void sendRating(bool good);
+ void sendCmd(RemoteCmd);
+
+private:
+ Remote(const Remote &remote);
+
+private:
+ bool rated;
+ Model model;
+ QSettings *settings;
+ IrCtrl *irCtrl;
+ NetIO *netIO;
+};
+
+#endif // _REMOTE_H_
+
+
+
--- /dev/null
+#include "remotedbparser.h"
+
+#include <QFile>
+#include <QDomElement>
+#include <QDomNodeList>
+#include <QDebug>
+
+RemoteDbParser::RemoteDbParser()
+ : valid(false)
+{
+}
+
+RemoteDbParser::RemoteDbParser(const RemoteDbParser &r)
+ : valid(r.valid)
+ , mfgMap(r.mfgMap)
+ , modelMap(r.modelMap)
+{
+}
+
+RemoteDbParser::RemoteDbParser(QDomDocument &doc)
+{
+ parse(doc);
+}
+
+RemoteDbParser::~RemoteDbParser()
+{
+}
+
+void RemoteDbParser::setContent(QDomDocument &doc)
+{
+ mfgMap.clear();
+ modelMap.clear();
+ parse(doc);
+}
+
+bool RemoteDbParser::isValid()
+{
+ return valid;
+}
+
+QStringList RemoteDbParser::letters()
+{
+ return mfgMap.keys();
+}
+
+QStringList RemoteDbParser::manufacturers(const QString &letter)
+{
+ return mfgMap.value(letter);
+}
+
+QList<Model> RemoteDbParser::models(const QString &manufacturer)
+{
+ return modelMap.value(manufacturer);
+}
+
+void RemoteDbParser::parse(QDomDocument &doc)
+{
+ QDomNodeList chars = doc.elementsByTagName("char");
+
+ for (int i = 0; i < chars.size(); ++i)
+ {
+ QDomElement charEl = chars.at(i).toElement();
+ if (!charEl.isNull())
+ {
+ if (charEl.hasAttribute("id"))
+ mfgMap.insert(charEl.attribute("id").at(0), parseMfgs(charEl));
+ }
+ }
+
+ // TODO: more error handling
+ valid = (mfgMap.size() > 0 &&
+ modelMap.size() > 0);
+}
+
+QStringList RemoteDbParser::parseMfgs(QDomElement &charEl)
+{
+ QStringList mfgStrings;
+ QDomNodeList mfgs = charEl.elementsByTagName("mfg");
+
+ for (int i = 0; i < mfgs.size(); ++i)
+ {
+ QDomElement mfgEl = mfgs.at(i).toElement();
+ if (!mfgEl.isNull())
+ {
+ if (mfgEl.hasAttribute("id"))
+ {
+ mfgStrings.append(mfgEl.attribute("id"));
+ modelMap.insert(mfgStrings.last(), parseModels(mfgEl));
+ }
+ }
+ }
+ return mfgStrings;
+}
+
+QList<Model> RemoteDbParser::parseModels(QDomElement &mfgEl)
+{
+ QList<Model> modelList;
+ QDomNodeList models = mfgEl.elementsByTagName("model");
+
+ for (int i = 0; i < models.size(); ++i)
+ {
+ QDomElement modelEl = models.at(i).toElement();
+ if (!modelEl.isNull())
+ {
+ if (modelEl.hasAttribute("name") && modelEl.hasAttribute("id"))
+ {
+ modelList.append(Model(modelEl.attribute("name"),
+ modelEl.attribute("id")));
+ }
+ }
+ }
+ return modelList;
+}
+
--- /dev/null
+#ifndef _REMOTEDBPARSER_H_
+#define _REMOTEDBPARSER_H_
+
+#include <QDomDocument>
+#include <QStringList>
+#include <QMap>
+#include <QList>
+#include "model.h"
+
+class RemoteDbParser
+{
+public:
+ RemoteDbParser();
+ RemoteDbParser(const RemoteDbParser &);
+ RemoteDbParser(QDomDocument &);
+ ~RemoteDbParser();
+
+ void setContent(QDomDocument &);
+
+ // Returns false if document is not set or it's invalid
+ bool isValid();
+
+ QStringList letters();
+ QStringList manufacturers(const QString &letter);
+ QList<Model> models(const QString &manufacturer);
+
+private:
+ void parse(QDomDocument &doc);
+ QStringList parseMfgs(QDomElement &charEl);
+ QList<Model> parseModels(QDomElement &mfgEl);
+
+private:
+ bool valid;
+ QMap<QString, QStringList> mfgMap;
+ QMap<QString, QList<Model> > modelMap;
+};
+
+#endif // _REMOTEDBPARSER_H_
+
+
+++ /dev/null
-#include "remotelist.h"
-
-#include <QFile>
-#include <QDomElement>
-#include <QDomNodeList>
-#include <QDebug>
-
-RemoteList::RemoteList()
- : valid(false)
-{
-}
-
-RemoteList::RemoteList(const RemoteList &r)
- : valid(r.valid)
- , mfgMap(r.mfgMap)
- , modelMap(r.modelMap)
-{
-}
-
-RemoteList::RemoteList(QDomDocument &doc)
-{
- parse(doc);
-}
-
-RemoteList::~RemoteList()
-{
-}
-
-void RemoteList::setContent(QDomDocument &doc)
-{
- mfgMap.clear();
- modelMap.clear();
- parse(doc);
-}
-
-bool RemoteList::isValid()
-{
- return valid;
-}
-
-QStringList RemoteList::letters()
-{
- return mfgMap.keys();
-}
-
-QStringList RemoteList::manufacturers(const QString &letter)
-{
- return mfgMap.value(letter);
-}
-
-QList<Model> RemoteList::models(const QString &manufacturer)
-{
- return modelMap.value(manufacturer);
-}
-
-void RemoteList::parse(QDomDocument &doc)
-{
- QDomNodeList chars = doc.elementsByTagName("char");
-
- for (int i = 0; i < chars.size(); ++i)
- {
- QDomElement charEl = chars.at(i).toElement();
- if (!charEl.isNull())
- {
- if (charEl.hasAttribute("id"))
- mfgMap.insert(charEl.attribute("id").at(0), parseMfgs(charEl));
- }
- }
-
- // TODO: more error handling
- valid = (mfgMap.size() > 0 &&
- modelMap.size() > 0);
-}
-
-QStringList RemoteList::parseMfgs(QDomElement &charEl)
-{
- QStringList mfgStrings;
- QDomNodeList mfgs = charEl.elementsByTagName("mfg");
-
- for (int i = 0; i < mfgs.size(); ++i)
- {
- QDomElement mfgEl = mfgs.at(i).toElement();
- if (!mfgEl.isNull())
- {
- if (mfgEl.hasAttribute("id"))
- {
- mfgStrings.append(mfgEl.attribute("id"));
- modelMap.insert(mfgStrings.last(), parseModels(mfgEl));
- }
- }
- }
- return mfgStrings;
-}
-
-QList<Model> RemoteList::parseModels(QDomElement &mfgEl)
-{
- QList<Model> modelList;
- QDomNodeList models = mfgEl.elementsByTagName("model");
-
- for (int i = 0; i < models.size(); ++i)
- {
- QDomElement modelEl = models.at(i).toElement();
- if (!modelEl.isNull())
- {
- if (modelEl.hasAttribute("name") && modelEl.hasAttribute("file"))
- {
- modelList.append(Model(modelEl.attribute("name"),
- modelEl.attribute("file")));
- }
- }
- }
- return modelList;
-}
-
+++ /dev/null
-#ifndef _REMOTELIST_H_
-#define _REMOTELIST_H_
-
-#include <QDomDocument>
-#include <QStringList>
-#include <QMap>
-#include <QList>
-#include "model.h"
-
-class RemoteList
-{
-public:
- RemoteList();
- RemoteList(const RemoteList &);
- RemoteList(QDomDocument &);
- ~RemoteList();
-
- void setContent(QDomDocument &);
-
- // Returns false if document is not set or it's invalid
- bool isValid();
-
- QStringList letters();
- QStringList manufacturers(const QString &letter);
- QList<Model> models(const QString &manufacturer);
-
-private:
- void parse(QDomDocument &doc);
- QStringList parseMfgs(QDomElement &charEl);
- QList<Model> parseModels(QDomElement &mfgEl);
-
-private:
- bool valid;
- QMap<QString, QStringList> mfgMap;
- QMap<QString, QList<Model> > modelMap;
-};
-
-#endif // _REMOTELIST_H_
-
-
-
#include "selectremotedlg.h"
-#include "remotelist.h"
+#include "remotedbparser.h"
#include "model.h"
+#include "iengine.h"
#include <cstdlib>
#include <QListWidgetItem>
#include <QDomDocument>
-SelectRemoteDlg::SelectRemoteDlg(QWidget *parent)
+SelectRemoteDlg::SelectRemoteDlg(QWidget *parent, IEngine *engine)
: QDialog(parent)
{
- this->setWindowTitle(tr("Select remote"));
- this->setMinimumHeight(320);
-
- deviceNameMap = new QMap<QString, QString>();
- settings = new QSettings(this);
- remoteList = NULL;
-
- layout = new QHBoxLayout(this);
-
- alphabetList = new QListWidget(this);
- alphabetList->setMaximumWidth(96);
- 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);
-
- downloadBtn = new QPushButton(tr("Download"), this);
- layout->addWidget(downloadBtn);
- connect(downloadBtn, SIGNAL(clicked()),
- this, SLOT(downloadRemote()));
-
- this->setLayout(layout);
-
- //TODO caching?
- listNetAM = new QNetworkAccessManager(this);
- connect(listNetAM, SIGNAL(finished(QNetworkReply*)),
- this, SLOT(listDownloadFinished(QNetworkReply*)));
-
- remoteNetAM = new QNetworkAccessManager(this);
- connect(remoteNetAM, SIGNAL(finished(QNetworkReply*)),
- this, SLOT(remoteDownloadFinished(QNetworkReply*)));
- beginDownload(settings->value("dbUrl",
- "http://mercury.wipsl.com/irwi/db.xml").toString(), listNetAM);
+// this->setWindowTitle(tr("Select remote"));
+// this->setMinimumHeight(320);
+//
+// deviceNameMap = new QMap<QString, QString>();
+// settings = new QSettings(this);
+// remoteList = NULL;
+//
+// layout = new QHBoxLayout(this);
+//
+// alphabetList = new QListWidget(this);
+// alphabetList->setMaximumWidth(96);
+// 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);
+//
+// downloadBtn = new QPushButton(tr("Download"), this);
+// layout->addWidget(downloadBtn);
+// connect(downloadBtn, SIGNAL(clicked()),
+// this, SLOT(downloadRemote()));
+//
+// this->setLayout(layout);
+//
+// //TODO caching?
+// listNetAM = new QNetworkAccessManager(this);
+// connect(listNetAM, SIGNAL(finished(QNetworkReply*)),
+// this, SLOT(listDownloadFinished(QNetworkReply*)));
+//
+// remoteNetAM = new QNetworkAccessManager(this);
+// connect(remoteNetAM, SIGNAL(finished(QNetworkReply*)),
+// this, SLOT(remoteDownloadFinished(QNetworkReply*)));
+// beginDownload(settings->value("dbUrl",
+// "http://mercury.wipsl.com/irwi/db.xml").toString(), listNetAM);
}
+
SelectRemoteDlg::~SelectRemoteDlg()
{
- delete layout;
- delete settings;
- delete listNetAM;
- delete remoteNetAM;
- delete deviceNameMap;
- if (remoteList)
- {
- delete remoteList;
- }
+// delete layout;
+// delete settings;
+// delete listNetAM;
+// delete remoteNetAM;
+// delete deviceNameMap;
+// if (remoteList)
+// {
+// delete remoteList;
+// }
}
void SelectRemoteDlg::setBusy(bool busy)
{
- setAttribute(Qt::WA_Maemo5ShowProgressIndicator, busy);
- setEnabled(!busy);
+// setAttribute(Qt::WA_Maemo5ShowProgressIndicator, busy);
+// setEnabled(!busy);
}
void SelectRemoteDlg::beginDownload(const QString &url,
void SelectRemoteDlg::alphabetItemChanged(QListWidgetItem *current,
QListWidgetItem * /*previous*/)
{
- mfgList->clear();
- modelList->clear();
- if (current)
- {
- mfgList->addItems(remoteList->manufacturers(current->text()));
- }
+// mfgList->clear();
+// modelList->clear();
+// if (current)
+// {
+// mfgList->addItems(remoteList->manufacturers(current->text()));
+// }
}
void SelectRemoteDlg::listDownloadFinished(QNetworkReply *reply)
{
- if (reply->error() == QNetworkReply::NoError) {
- QByteArray ba = reply->readAll();
- QBuffer buf(&ba, this);
- buf.open(QIODevice::ReadOnly);
- buf.seek(0);
- QDomDocument doc;
- doc.setContent(&buf);
- remoteList = new RemoteList(doc);
- QStringList alist = remoteList->letters();
- for (int i = 0; i < alist.size(); ++i)
- {
- alphabetList->addItem(QString(alist[i]));
- }
- } else {
- //qDebug() << (int)reply->error();
- }
- reply->close();
- reply->deleteLater();
- setBusy(false);
+// if (reply->error() == QNetworkReply::NoError) {
+// QByteArray ba = reply->readAll();
+// QBuffer buf(&ba, this);
+// buf.open(QIODevice::ReadOnly);
+// buf.seek(0);
+// QDomDocument doc;
+// doc.setContent(&buf);
+// remoteList = new RemoteList(doc);
+// QStringList alist = remoteList->letters();
+// for (int i = 0; i < alist.size(); ++i)
+// {
+// alphabetList->addItem(QString(alist[i]));
+// }
+// } else {
+// //qDebug() << (int)reply->error();
+// }
+// reply->close();
+// reply->deleteLater();
+// setBusy(false);
}
void SelectRemoteDlg::mfgItemChanged(QListWidgetItem *current,
QListWidgetItem * /*previous*/)
{
- modelList->clear();
- deviceNameMap->clear();
- if (current)
- {
- QList<Model> models = remoteList->models(current->text());
- for (int i = 0; i < models.size(); ++i)
- {
- modelList->addItem(models[i].name);
- deviceNameMap->insert(models[i].name, models[i].file);
- }
-
- }
+// modelList->clear();
+// deviceNameMap->clear();
+// if (current)
+// {
+// QList<Model> models = remoteList->models(current->text());
+// for (int i = 0; i < models.size(); ++i)
+// {
+// modelList->addItem(models[i].name);
+// deviceNameMap->insert(models[i].name, models[i].file);
+// }
+//
+// }
}
void SelectRemoteDlg::downloadRemote()
{
- QListWidgetItem *currentModel = modelList->currentItem();
- if (currentModel)
- {
- QString name = currentModel->text();
- if (!name.isEmpty()) {
- QString url = settings->value(
- "remoteUrl",
- "http://mercury.wipsl.com/irwi/uploaded/").toString()
- + (*deviceNameMap)[name];
- beginDownload(url, remoteNetAM);
- settings->setValue("remoteName", name);
- }
- }
+// QListWidgetItem *currentModel = modelList->currentItem();
+// if (currentModel)
+// {
+// QString name = currentModel->text();
+// if (!name.isEmpty()) {
+// QString url = settings->value(
+// "remoteUrl",
+// "http://mercury.wipsl.com/irwi/uploaded/").toString()
+// + (*deviceNameMap)[name];
+// beginDownload(url, remoteNetAM);
+// settings->setValue("remoteName", name);
+// }
+// }
}
void SelectRemoteDlg::remoteDownloadFinished(QNetworkReply *reply)
{
- if (reply->error() == QNetworkReply::NoError) {
- QFile file(settings->value("lircConf", "/etc/lircd.conf").toString());
- if(file.open(QIODevice::WriteOnly))
- {
- file.write(reply->readAll());
- file.close();
- }
- }
- reply->close();
- reply->deleteLater();
-
- std::system("sudo /etc/init.d/lirc reload");
-
- emit remoteDownloaded();
- setBusy(false);
- QMessageBox mbox(QMessageBox::Information, tr("Success"),
- tr("Remote downloaded"), QMessageBox::Ok, this);
- mbox.exec();
- this->close();
+// if (reply->error() == QNetworkReply::NoError) {
+// QFile file(settings->value("lircConf", "/etc/lircd.conf").toString());
+// if(file.open(QIODevice::WriteOnly))
+// {
+// file.write(reply->readAll());
+// file.close();
+// }
+// }
+// reply->close();
+// reply->deleteLater();
+//
+// std::system("sudo /etc/init.d/lirc reload");
+//
+// emit remoteDownloaded();
+// setBusy(false);
+// QMessageBox mbox(QMessageBox::Information, tr("Success"),
+// tr("Remote downloaded"), QMessageBox::Ok, this);
+// mbox.exec();
+// this->close();
}
+
class QPushButton;
class QLabel;
class RemoteList;
+class IEngine;
class SelectRemoteDlg : public QDialog
{
Q_OBJECT
+
public:
- SelectRemoteDlg(QWidget *parent = 0);
+ SelectRemoteDlg(QWidget *parent, IEngine *engine);
~SelectRemoteDlg();
signals:
void remoteDownloadFinished(QNetworkReply *reply);
private:
+ IEngine *engine;
QHBoxLayout *layout;
QListWidget *alphabetList;
QListWidget *mfgList;
#include "advsettingsdlg.h"
#include "selectremotedlg.h"
#include "aboutdlg.h"
+#include "iengine.h"
+#include "iremote.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QPushButton>
#include <QSettings>
#include <QLabel>
+#include <QDebug>
-SettingsDlg::SettingsDlg(QWidget *parent)
+SettingsDlg::SettingsDlg(QWidget *parent, IEngine *engine)
: QDialog(parent)
+ , engine(engine)
{
layout = new QVBoxLayout(this);
btnLayout = new QHBoxLayout(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);
this, SLOT(showAboutDlg()));
remoteNameLabel = new QLabel(
- settings.value("remoteName",
- tr("<no remote selected>")).toString(), this);
+ settings.value("remoteName",
+ tr("<no remote selected>")).toString(), this);
remoteNameLayout->addWidget(new QLabel(tr("Remote name: "), this));
remoteNameLayout->addWidget(remoteNameLabel);
+ remoteNameLayout->addWidget(rateUpBtn);
+ remoteNameLayout->addWidget(rateDownBtn);
layout->addLayout(remoteNameLayout);
layout->addLayout(btnLayout);
this->setLayout(layout);
updateRemoteName();
+
+ connect(engine->remote(), SIGNAL(ratingChanged(int)),
+ this, SLOT(setRating(int)));
+ engine->remote()->updateRating();
}
SettingsDlg::~SettingsDlg()
delete advSettingsBtn;
delete selectRemoteBtn;
delete aboutBtn;
+ delete rateUpBtn;
+ delete rateDownBtn;
delete remoteNameLabel;
delete remoteNameLayout;
delete btnLayout;
void SettingsDlg::showAdvSettingsDlg()
{
- AdvSettingsDlg dlg(this);
+ AdvSettingsDlg dlg(this, engine);
dlg.exec();
updateRemoteName();
}
void SettingsDlg::showSelectRemoteDlg()
{
- SelectRemoteDlg dlg(this);
+ SelectRemoteDlg dlg(this, engine);
connect(&dlg, SIGNAL(remoteDownloaded()),
this, SLOT(updateRemoteName()));
dlg.exec();
{
QSettings settings(this);
remoteNameLabel->setText(settings.value("remoteName",
- tr("Select remote")).toString());
+ tr("Select remote")).toString());
+}
+
+void SettingsDlg::setRating(int rating)
+{
+ qDebug() << rating;
}
class QVBoxLayout;
class QPushButton;
class QLabel;
+class IEngine;
class SettingsDlg : public QDialog
{
Q_OBJECT
public:
- SettingsDlg(QWidget *parent = 0);
+ SettingsDlg(QWidget *parent, IEngine *engine);
~SettingsDlg();
public slots:
void showAdvSettingsDlg();
void showSelectRemoteDlg();
void showAboutDlg();
+ void setRating(int);
private:
+ IEngine *engine;
QVBoxLayout *layout;
QHBoxLayout *btnLayout;
QHBoxLayout *remoteNameLayout;
QPushButton *advSettingsBtn;
QPushButton *selectRemoteBtn;
+ QPushButton *rateUpBtn;
+ QPushButton *rateDownBtn;
QPushButton *aboutBtn;
QLabel *remoteNameLabel;
+ QLabel *ratingLabel;
};
#endif
SOURCES += main.cpp
SOURCES += mainwidget.cpp
SOURCES += irctrl.cpp
-SOURCES += irctrl_p.cpp
+SOURCES += remote.cpp
+SOURCES += engine.cpp
+SOURCES += remotedbparser.cpp
+SOURCES += netio.cpp
SOURCES += settingsdlg.cpp
SOURCES += selectremotedlg.cpp
SOURCES += advsettingsdlg.cpp
SOURCES += settingstable.cpp
SOURCES += aboutdlg.cpp
-SOURCES += remotelist.cpp
HEADERS += mainwidget.h
HEADERS += irctrl.h
-HEADERS += irctrl_p.h
+HEADERS += remote.h
+HEADERS += iremote.h
+HEADERS += engine.h
+HEADERS += iengine.h
+HEADERS += remotedbparser.h
+HEADERS += netio.h
HEADERS += settingsdlg.h
HEADERS += selectremotedlg.h
HEADERS += advsettingsdlg.h
HEADERS += settingstable.h
HEADERS += aboutdlg.h
-HEADERS += remotelist.h
-
include(qmaemo5homescreenadaptor/qmaemo5homescreenadaptor.pri)
+OBJECTS_DIR = obj
+MOC_DIR = moc
QT += network
QT += xml