[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdegames/kmines
From:       Dmitry Suzdalev <dimsuz () gmail ! com>
Date:       2008-04-16 22:06:32
Message-ID: 1208383592.424483.6536.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 797871 by dimsuz:

Add the ability to pause a running game.
Thanks for the patch, GnuShi!



 M  +24 -0     mainwindow.cpp  
 M  +3 -0      mainwindow.h  
 M  +15 -0     scene.cpp  
 M  +5 -0      scene.h  


--- trunk/KDE/kdegames/kmines/mainwindow.cpp #797870:797871
@@ -23,6 +23,7 @@
 #include <KGameClock>
 #include <KStandardGameAction>
 #include <KActionCollection>
+#include <KToggleAction>
 #include <KStatusBar>
 #include <KScoreDialog>
 #include <KConfigDialog>
@@ -87,6 +88,7 @@
 
     KStandardGameAction::quit(this, SLOT(close()), actionCollection());
     KStandardAction::preferences( this, SLOT( configureSettings() ), actionCollection() );
+    m_actionPause = KStandardGameAction::pause( this, SLOT(pauseGame(bool)), actionCollection() );
 
     KGameDifficulty::init(this, this, SLOT(levelChanged(KGameDifficulty::standardLevel)),
                          SLOT(customLevelChanged(int)));
@@ -118,6 +120,15 @@
 {
     m_gameClock->restart();
     m_gameClock->pause(); // start only with the 1st click
+    
+    // some things to manage pause
+    if( m_actionPause->isChecked() )
+    {
+            m_scene->setGamePaused(false);
+            m_actionPause->setChecked(false);
+    }
+    m_actionPause->setEnabled(false);
+    
     KGameDifficulty::setRunning(false);
     switch(KGameDifficulty::level())
     {
@@ -144,6 +155,7 @@
 void KMinesMainWindow::onGameOver(bool won)
 {
     m_gameClock->pause();
+    m_actionPause->setEnabled(false);
     KGameDifficulty::setRunning(false);
     if(won)
     {
@@ -171,6 +183,9 @@
 
 void KMinesMainWindow::onFirstClick()
 {
+    // enable pause action
+    m_actionPause->setEnabled(true);
+    // start clock
     m_gameClock->resume();
     KGameDifficulty::setRunning(true);
 }
@@ -193,6 +208,15 @@
     dialog->show();
 }
 
+void KMinesMainWindow::pauseGame(bool paused)
+{
+    m_scene->setGamePaused( paused );
+    if( paused )
+        m_gameClock->pause();
+    else
+        m_gameClock->resume();
+}
+
 void KMinesMainWindow::loadSettings()
 {
     if ( !KMinesRenderer::self()->loadTheme(Settings::theme()) )
--- trunk/KDE/kdegames/kmines/mainwindow.h #797870:797871
@@ -25,6 +25,7 @@
 class KMinesView;
 class KGameClock;
 class KScoreDialog;
+class KToggleAction;
 
 class KMinesMainWindow : public KXmlGuiWindow
 {
@@ -41,6 +42,7 @@
     void onFirstClick();
     void showHighscores();
     void configureSettings();
+    void pauseGame(bool paused);
     void loadSettings();
 private:
     void setupActions();
@@ -48,5 +50,6 @@
     KMinesView* m_view;
     KGameClock* m_gameClock;
     KScoreDialog* m_scoreDialog;
+    KToggleAction* m_actionPause;
 };
 #endif
--- trunk/KDE/kdegames/kmines/scene.cpp #797870:797871
@@ -54,6 +54,12 @@
     m_messageItem->setMessageOpacity(0.9);
     m_messageItem->setMessageTimeout(4000);
     addItem(m_messageItem);
+
+    m_gamePausedMessageItem = new KGamePopupItem;
+    m_gamePausedMessageItem->setMessageOpacity(0.9);
+    m_gamePausedMessageItem->setMessageTimeout(0);
+    m_gamePausedMessageItem->setHideOnMouseClick(false);
+    addItem(m_gamePausedMessageItem);
 }
 
 void KMinesScene::resizeScene(int width, int height)
@@ -81,6 +87,15 @@
     return m_fieldItem->minesCount();
 }
 
+void KMinesScene::setGamePaused(bool paused)
+{
+    m_fieldItem->setVisible(!paused);
+    if(paused)
+        m_gamePausedMessageItem->showMessage(i18n("Game is paused."), KGamePopupItem::Center);
+    else
+        m_gamePausedMessageItem->forceHide();
+}
+
 void KMinesScene::onGameOver(bool won)
 {
     if(won)
--- trunk/KDE/kdegames/kmines/scene.h #797870:797871
@@ -47,6 +47,10 @@
      * Starts new game
      */
     void startNewGame(int rows, int cols, int numMines);
+    /**
+     * Toggles paused state for all cells in the field item
+     */
+    void setGamePaused(bool paused);
 signals:
     void minesCountChanged(int);
     void gameOver(bool);
@@ -64,6 +68,7 @@
      */
     MineFieldItem* m_fieldItem;
     KGamePopupItem* m_messageItem;
+    KGamePopupItem* m_gamePausedMessageItem;
 };
 
 class QResizeEvent;
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic