SVN commit 574325 by dimsuz: Disable undo action when it's nothing to undo M +4 -0 kreversigame.h M +12 -2 mainwindow.cpp M +3 -0 mainwindow.h --- branches/work/kreversi_rewrite/kreversigame.h #574324:574325 @@ -88,6 +88,10 @@ */ void undo(); /** + * @return if undo is possible + */ + bool canUndo() const { return !m_undoStack.isEmpty(); } + /** * Returns a hint to current player */ KReversiMove getHint() const; --- branches/work/kreversi_rewrite/mainwindow.cpp #574324:574325 @@ -32,7 +32,8 @@ { KAction *newGameAct = KStdAction::openNew(this, SLOT(slotNewGame()), actionCollection(), "new_game"); KAction *quitAct = KStdAction::quit(this, SLOT(close()), actionCollection(), "quit"); - KAction *undoAct = KStdAction::undo( this, SLOT(slotUndo()), actionCollection(), "undo" ); + m_undoAct = KStdAction::undo( this, SLOT(slotUndo()), actionCollection(), "undo" ); + m_undoAct->setEnabled( false ); // nothing to undo at the start of the game KAction *hintAct = new KAction( KIcon("wizard"), i18n("Hint"), actionCollection(), "hint" ); hintAct->setShortcut( Qt::Key_H ); connect( hintAct, SIGNAL(triggered(bool)), m_scene, SLOT(slotHint()) ); @@ -59,7 +60,7 @@ addAction(newGameAct); addAction(quitAct); - addAction(undoAct); + addAction(m_undoAct); addAction(hintAct); } @@ -82,6 +83,7 @@ { delete m_game; m_game = new KReversiGame; + connect( m_game, SIGNAL(moveFinished()), SLOT(slotMoveFinished()) ); if(m_scene == 0) // if called first time { @@ -94,11 +96,19 @@ } } +void KReversiMainWindow::slotMoveFinished() +{ + m_undoAct->setEnabled( m_game->canUndo() ); +} + void KReversiMainWindow::slotUndo() { if( !m_scene->isBusy() ) + { // scene will automatically notice that it needs to update m_game->undo(); + m_undoAct->setEnabled( m_game->canUndo() ); + } } #include "mainwindow.moc" --- branches/work/kreversi_rewrite/mainwindow.h #574324:574325 @@ -17,11 +17,14 @@ void slotNewGame(); void slotBackgroundChanged(const QString& text); void slotUndo(); + void slotMoveFinished(); private: void setupActions(); KReversiScene *m_scene; KReversiView *m_view; KReversiGame *m_game; + + KAction* m_undoAct; }; #endif