Switched to using QStateMachine.
[simple-xmbc-rem] / src / mainwindow.cpp
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()));
 }