implemented screen inhibit.
[simple-xmbc-rem] / src / mainwindow.cpp
index 320f7fd..5ef8368 100644 (file)
 #include "mainwindow.h"
 #include "ui_mainwindow.h"
 
-#include "constants.h"
 #include "setupdialog.h"
-#include "json.h"
+#include "xbmc.h"
+#include "constants.h"
 
-#include <QtCore/QCoreApplication>
-#include <QtCore/QSettings>
-#include <QtCore/QTimer>
-#include <QtCore/QTextStream>
+#include <QSettings>
+#include <QCoreApplication>
 
 #if defined(Q_OS_SYMBIAN) && defined(ORIENTATIONLOCK)
 #include <eikenv.h>
@@ -30,20 +28,48 @@ MainWindow::MainWindow(QWidget *parent)
     : QMainWindow(parent), m_ui(new Ui::MainWindow)
 {
     m_ui->setupUi(this);
+    m_xbmc = new Xbmc(this);
 
-    createStates();
-    createTransitions();
-    createConnections();
+#ifdef Q_WS_MAEMO_5
+    m_screenSaver = 0;
+#endif
 
-    m_stateMachine.setInitialState(m_disconnectedState);
-    QTimer::singleShot(0, &m_stateMachine, SLOT(start()));
+    setupScreen();
 }
 
 MainWindow::~MainWindow()
 {
+#ifdef Q_WS_MAEMO_5
+    delete m_screenSaver;
+#endif
+
+    delete m_xbmc;
     delete m_ui;
 }
 
+void MainWindow::setupScreen()
+{
+#ifdef Q_WS_MAEMO_5
+    QSettings settings;
+
+    bool disable_screensaver = settings.value(SETUP_SCREEN_DISABLE_SCREENSAVER, SETUP_SCREEN_DISABLE_SCREENSAVER_DEFAULT).toBool();
+
+    if (disable_screensaver) {
+        if (m_screenSaver == 0) {
+            m_screenSaver = new QSystemScreenSaver(this);
+            bool result = m_screenSaver->setScreenSaverInhibit();
+            qDebug("disabling the screensaver: %s", (result?"ok":"failed"));
+        }
+    } else {
+        if (m_screenSaver) {
+            delete m_screenSaver;
+            m_screenSaver = 0;
+            qDebug("screensaver enabled");
+        }
+    }
+#endif
+}
+
 void MainWindow::setOrientation(ScreenOrientation orientation)
 {
 #ifdef Q_OS_SYMBIAN
@@ -100,150 +126,81 @@ void MainWindow::on_actionSetup_triggered()
     if(dialog.exec() == QDialog::Accepted) {
         dialog.save();
     }
-}
 
-void MainWindow::createStates()
-{
-    m_disconnectedState = new DisconnectedState(m_ui->networkButton, &m_serverSocket, &m_stateMachine);
-    m_connectingState = new ConnectingState(m_ui->networkButton, &m_serverSocket, &m_stateMachine);
-    m_connectedState = new ConnectedState(m_ui->networkButton, &m_serverSocket, &m_stateMachine);
-    m_disconnectingState = new DisconnectingState(m_ui->networkButton, &m_serverSocket, &m_stateMachine);
+    setupScreen();
 }
 
-void MainWindow::createTransitions()
+void MainWindow::on_rightBtn_clicked()
 {
-    m_disconnectedState->addTransition(m_ui->networkButton, SIGNAL(clicked()), m_connectingState);
-
-    m_connectingState->addTransition(m_connectingState, SIGNAL(connected()), m_connectedState);
-    m_connectingState->addTransition(m_connectingState, SIGNAL(failed()), m_disconnectedState);
-
-    m_connectedState->addTransition(m_ui->networkButton, SIGNAL(clicked()), m_disconnectingState);
-    m_connectedState->addTransition(m_connectedState, SIGNAL(disconnected()), m_disconnectedState);
-
-    m_disconnectingState->addTransition(m_disconnectingState, SIGNAL(disconnected()), m_disconnectedState);
+    m_xbmc->actionRight();
 }
 
-void MainWindow::createConnections()
+void MainWindow::on_leftBtn_clicked()
 {
+    m_xbmc->actionLeft();
 }
 
-/////////////////////////////////////////////////////////////////////
-//
-DisconnectedState::DisconnectedState(QAbstractButton *button, QTcpSocket* socket, QState *parent)
-    : QState(parent), m_socket(socket)
+void MainWindow::on_upBtn_clicked()
 {
-    assignProperty(button, "text", "Connect");
-    assignProperty(button, "enabled", true);
+    m_xbmc->actionUp();
 }
 
-void DisconnectedState::onEntry(QEvent */*event*/)
+void MainWindow::on_downBtn_clicked()
 {
-    qDebug("DisconnectedState::onEntry");
+    m_xbmc->actionDown();
 }
 
-void DisconnectedState::onExit(QEvent */*event*/)
+void MainWindow::on_playBtn_clicked()
 {
-    qDebug("DisconnectedState::onExit");
+    m_xbmc->actionPlay();
 }
 
-/////////////////////////////////////////////////////////////////////
-//
-ConnectingState::ConnectingState(QAbstractButton *button, QTcpSocket* socket, QState *parent)
-    : QState(parent), m_socket(socket)
+void MainWindow::on_muteBtn_clicked()
 {
-    assignProperty(button, "text", "Connecting");
-    assignProperty(button, "enabled", false);
+    m_xbmc->actionMute();
 }
 
-void ConnectingState::onEntry(QEvent */*event*/)
+void MainWindow::on_volumeUpBtn_clicked()
 {
-    qDebug("ConnectingState::onEntry");
-
-    connect(m_socket, SIGNAL(connected()), this, SIGNAL(connected()));
-    connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onSocketError(QAbstractSocket::SocketError)));
-
-    // TODO: we asume the socket is not already connected
-    // TODO: we should add code to do nothing if the connection is ok, or close and open a new one if the server or port changed
-    QSettings settings;
-
-    m_socket->connectToHost(settings.value(SETUP_XBMC_SERVER, SETUP_XBMC_SERVER_DEFAULT).toString(),
-                            settings.value(SETUP_XBMC_PORT, SETUP_XBMC_PORT_DEFAULT).toInt());
-}
-
-void ConnectingState::onExit(QEvent */*event*/)
-{
-    disconnect(m_socket, 0, this, 0);
-    qDebug("ConnectingState::onExit");
-}
-
-void ConnectingState::onSocketError(QAbstractSocket::SocketError)
-{
-    qDebug("ConnectingState::onSocketError: %s", qPrintable(m_socket->errorString()));
-    emit failed();
+    m_xbmc->actionVolumeUp();
 }
 
-/////////////////////////////////////////////////////////////////////
-//
-ConnectedState::ConnectedState(QAbstractButton *button, QTcpSocket* socket, QState *parent)
-    : QState(parent), m_socket(socket)
+void MainWindow::on_volumeDownBtn_clicked()
 {
-    assignProperty(button, "text", "Disconnect");
-    assignProperty(button, "enabled", true);
-
+    m_xbmc->actionVolumeDown();
 }
 
-void ConnectedState::onEntry(QEvent */*event*/)
+void MainWindow::on_nextSubtitleBtn_clicked()
 {
-    qDebug("ConnectedState::onEntry");
-
-    connect(m_socket, SIGNAL(disconnected()), this, SIGNAL(disconnected()));
-    connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onSocketError(QAbstractSocket::SocketError)));
+    m_xbmc->actionNextSubtitle();
 }
 
-void ConnectedState::onExit(QEvent */*event*/)
+void MainWindow::on_nextLanguageBtn_clicked()
 {
-    disconnect(m_socket, 0, this, 0);
-    qDebug("ConnectedState::onExit");
+    m_xbmc->actionNextLanguage();
 }
 
-void ConnectedState::onSocketError(QAbstractSocket::SocketError)
+void MainWindow::on_selectButton_clicked()
 {
-    qDebug("ConnectedState::onSocketError: %s", qPrintable(m_socket->errorString()));
+    m_xbmc->actionSelect();
 }
 
-/////////////////////////////////////////////////////////////////////
-//
-DisconnectingState::DisconnectingState(QAbstractButton *button, QTcpSocket* socket, QState *parent)
-    : QState(parent), m_socket(socket)
+void MainWindow::on_stopBtn_clicked()
 {
-    assignProperty(button, "text", "Disconnecting");
-    assignProperty(button, "enabled", false);
+    m_xbmc->actionStop();
 }
 
-void DisconnectingState::onEntry(QEvent */*event*/)
+void MainWindow::on_showGuiBtn_clicked()
 {
-    qDebug("DisconnectingState::onEntry");
-
-    connect(m_socket, SIGNAL(disconnected()), this, SIGNAL(disconnected()));
-    connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onSocketError(QAbstractSocket::SocketError)));
-
-    if (m_socket->state() != QTcpSocket::UnconnectedState) {
-        qDebug("DisconnectingState::disconnectFromHost");
-        m_socket->disconnectFromHost();
-    }
-    else {
-        qDebug("DisconnectingState::disconnect");
-        QTimer::singleShot(0, this, SIGNAL(disconnected()));
-    }
+    m_xbmc->actionShowGui();
 }
 
-void DisconnectingState::onExit(QEvent */*event*/)
+void MainWindow::on_contextMenuBtn_clicked()
 {
-    disconnect(m_socket, 0, this, 0);
-    qDebug("DisconnectingState::onExit");
+    m_xbmc->actionContextMenu();
 }
 
-void DisconnectingState::onSocketError(QAbstractSocket::SocketError)
+void MainWindow::on_sendEscKeyBtn_clicked()
 {
-    qDebug("DisconnectingState::onSocketError: %s", qPrintable(m_socket->errorString()));
+    m_xbmc->actionSendKeyEsc();
 }