Switched to using QStateMachine.
authorIonutz Borcoman <iborco@gmail.com>
Wed, 2 Feb 2011 19:03:14 +0000 (21:03 +0200)
committerIonutz Borcoman <iborco@gmail.com>
Thu, 10 Mar 2011 08:10:13 +0000 (10:10 +0200)
src/mainwindow.cpp
src/mainwindow.h
src/mainwindow.ui

index ef57d3b..8fcae21 100644 (file)
@@ -31,12 +31,12 @@ MainWindow::MainWindow(QWidget *parent)
 {
     ui->setupUi(this);
 
-    connect(&serverSocket, SIGNAL(connected()), this, SLOT(serverConnected()));
-    connect(&serverSocket, SIGNAL(disconnected()), this, SLOT(serverDisconnected()));
-    connect(&serverSocket, SIGNAL(readyRead()), this, SLOT(serverDataAvailable()));
-    connect(&serverSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(serverError()));
+    createStates();
+    createTransitions();
+    createConnections();
 
-    connectToServer();
+    stateMachine.setInitialState(disconnectedState);
+    QTimer::singleShot(0, &stateMachine, SLOT(start()));
 }
 
 MainWindow::~MainWindow()
@@ -117,49 +117,41 @@ void MainWindow::disconnectFromServer()
     serverSocket.disconnectFromHost();
 }
 
-void MainWindow::serverConnected()
+void MainWindow::createStates()
 {
-    ui->testButton->setEnabled(true);
-    ui->actionConnect->setChecked(true);
-}
+    disconnectedState = new QState(&stateMachine);
+    disconnectedState->assignProperty(ui->networkButton, "text", "Connect");
+    disconnectedState->assignProperty(ui->networkButton, "enabled", true);
 
-void MainWindow::serverDisconnected()
-{
-    ui->testButton->setEnabled(false);
-    ui->actionConnect->setChecked(false);
-}
+    connectedState = new QState(&stateMachine);
 
-void MainWindow::serverDataAvailable()
-{
-    QTextStream stream(&serverSocket);
-    ui->textEdit->setText(stream.readAll());
-}
+    connectingState = new QState(connectedState);
+    connectingState->assignProperty(ui->networkButton, "text", "Connecting");
+    connectingState->assignProperty(ui->networkButton, "enabled", false);
 
-void MainWindow::serverError()
-{
-    ui->textEdit->setText(serverSocket.errorString());
-    ui->actionConnect->setChecked(serverSocket.state() == QTcpSocket::ConnectedState);
-    // clean the error window after 2 secs
-    QTimer::singleShot(2000, this, SLOT(cleanError()));
-}
+    normalState = new QState(connectedState);
+    normalState->assignProperty(ui->networkButton, "text", "Disconnect");
+    normalState->assignProperty(ui->networkButton, "enabled", true);
 
-void MainWindow::cleanError()
-{
-    ui->textEdit->clear();
+    disconnectingState = new QState(connectedState);
+    disconnectingState->assignProperty(ui->networkButton, "text", "Disconnecting");
+    disconnectingState->assignProperty(ui->networkButton, "enabled", false);
 }
 
-void MainWindow::on_testButton_clicked()
+void MainWindow::createTransitions()
 {
-    QTextStream stream(&serverSocket);
-    stream << JsonEngine().playerGetActivePlayers();
+    disconnectedState->addTransition(ui->networkButton, SIGNAL(clicked()), connectingState);
+
+    connectedState->addTransition(&serverSocket, SIGNAL(disconnected()), disconnectedState);
+
+    connectingState->addTransition(&serverSocket, SIGNAL(connected()), normalState);
+    connectingState->addTransition(&serverSocket, SIGNAL(error(QAbstractSocket::SocketError)), disconnectedState);
+
+    normalState->addTransition(ui->networkButton, SIGNAL(clicked()), disconnectingState);
 }
 
-void MainWindow::on_actionConnect_triggered(bool checked)
+void MainWindow::createConnections()
 {
-    qDebug("menu state: %d", checked);
-    if (checked) {
-        connectToServer();
-    } else {
-        disconnectFromServer();
-    }
+    connect(connectingState, SIGNAL(entered()), this, SLOT(connectToServer()));
+    connect(disconnectingState, SIGNAL(entered()), this, SLOT(disconnectFromServer()));
 }
index 001368a..4db21b3 100644 (file)
@@ -12,6 +12,8 @@
 
 #include <QtGui/QMainWindow>
 #include <QtNetwork/QTcpSocket>
+#include <QStateMachine>
+#include <QState>
 
 namespace Ui {
     class MainWindow;
@@ -35,25 +37,28 @@ public:
 
 private slots:
     // manual connected slots
-    void serverConnected();
-    void serverDisconnected();
-    void serverDataAvailable();
-    void serverError();
-    void cleanError();
+    void connectToServer();
+    void disconnectFromServer();
 
     // auto-connected slots
     void on_actionSetup_triggered();
-    void on_actionConnect_triggered(bool checked);
-    void on_testButton_clicked();
 
 private:
     void pendingNetworkOperation(bool pending);
 
-    void connectToServer();
-    void disconnectFromServer();
+    void createStates();
+    void createTransitions();
+    void createConnections();
 
     QTcpSocket serverSocket;
     Ui::MainWindow *ui;
+
+    QStateMachine stateMachine;
+    QState* disconnectedState;
+    QState* connectedState;
+    QState* disconnectingState;
+    QState* normalState;
+    QState* connectingState;
 };
 
 #endif // MAINWINDOW_H
index 731518d..fa7ff30 100644 (file)
    <string>XBMC Net Movies RC</string>
   </property>
   <widget class="QWidget" name="centralWidget">
-   <layout class="QVBoxLayout" name="verticalLayout">
+   <layout class="QVBoxLayout" name="verticalLayout_2">
     <item>
-     <widget class="QPushButton" name="testButton">
-      <property name="enabled">
-       <bool>false</bool>
-      </property>
+     <widget class="QPushButton" name="networkButton">
       <property name="text">
-       <string>test</string>
+       <string>PushButton</string>
       </property>
      </widget>
     </item>
     <item>
-     <widget class="QTextEdit" name="textEdit">
-      <property name="enabled">
-       <bool>false</bool>
+     <widget class="QStackedWidget" name="stackedWidget">
+      <property name="currentIndex">
+       <number>0</number>
       </property>
+      <widget class="QWidget" name="infoPage">
+       <layout class="QVBoxLayout" name="verticalLayout">
+        <property name="margin">
+         <number>0</number>
+        </property>
+        <item>
+         <widget class="QTextEdit" name="textEdit">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </widget>
      </widget>
     </item>
    </layout>
@@ -48,7 +59,6 @@
      <string>MainMenu</string>
     </property>
     <addaction name="actionSetup"/>
-    <addaction name="actionConnect"/>
    </widget>
    <addaction name="menuSetup"/>
   </widget>