/* Copyright (C) 1999-2001 Jens Hoefkens jens@hoefkens.com This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. $Id$ */ #ifndef __KBGENGINE_H #define __KBGENGINE_H #ifdef HAVE_CONFIG_H #include #endif #include class TQTimer; class TQPopupMenu; class KDialogBase; class KBgStatus; /** * * Abstract class for a generic backgammon engine. Real engines have * to inherit this and implement the interfaces. * * Engines can and will use the following global events described in * the file eventsrc: * * "game over l" * "game over w" * * "roll" * "roll or double" * * "move" * "invitation" * * @short Abstract base class for backgammon engines * @author Jens Hoefkens * */ class KBgEngine:public TQObject { Q_OBJECT public: enum Command { Redo, Undo, Roll, Cube, Done, Load }; /** * Constructor */ KBgEngine (TQWidget * parent = 0, TQString * name = 0, TQPopupMenu * pmenu = 0); /** * Destructor */ virtual ~KBgEngine (); /** * Fills the engine-specific page into the notebook */ virtual void getSetupPages (KDialogBase * nb) = 0; /** * Called after the user clicked ok in the setup dialog. Time * to save settings. */ virtual void setupOk () = 0; /** * The user cancelled the setup */ virtual void setupCancel () = 0; /** * Set engine defaults */ virtual void setupDefault () = 0; /** * Called when the windows are about to be hidden. Engines * should hide all their child windows. * * The default implementation does nothing. */ virtual void hideEvent () { } /** * Called when the windows are about to be shown. Engines * should show all visible child windows. * * The default implementation does nothing. */ virtual void showEvent () { } /** * Start the engine. This is called pretty much right after * the constructor. While the constructor may not have any * user interaction, it is possible to display dialogs in * start. * * The default implementation does nothing. */ virtual void start () { } /** * Check with the engine if we can quit. This may require user * interaction. * * The default implementation returns true. */ virtual bool queryClose () { return true; } /** * About to be closed. Let the engine exit properly. * * The default implementation returns true. */ virtual bool queryExit () { return true; } /** * Set the length of the commit timeout. Negative values * disable the feature. */ void setCommit (const double com = 2.5); public slots: /** * Read user settings from the config file */ virtual void readConfig () = 0; /** * Save user settings to the config file */ virtual void saveConfig () = 0; /** * Roll dice for the player w */ virtual void rollDice (const int w) = 0; /** * Double the cube of player w */ virtual void doubleCube (const int w) = 0; /** * A move has been made on the board - see the board class * for the format of the string s */ virtual void handleMove (TQString * s) = 0; /** * Undo the last move */ virtual void undo () = 0; /** * Redo the last move */ virtual void redo () = 0; /** * Roll dice for whoevers turn it is */ virtual void roll () = 0; /** * Double the cube for whoevers can double right now */ virtual void cube () = 0; /** * Reload the board to the last known sane state */ virtual void load () = 0; /** * Commit a move */ virtual void done () = 0; /** * Process the string cmd */ virtual void handleCommand (const TQString & cmd) = 0; /** * Start a new game */ virtual void newGame () { } /** * Can we start a new game? */ virtual bool haveNewGame () { return false; } signals: /** * The text identifies the current game status - could be put * into the main window caption */ void statText (const TQString & msg); /** * Text that should be displayed in the ongoing message window */ void infoText (const TQString & msg); /** * Emit the most recent game state */ void newState (const KBgStatus &); /** * Tell the board that we need the current state of the board. */ void getState (KBgStatus *); /** * Starts/ends the edit mode of the board */ void setEditMode (const bool f); /** * Toggle RO/RW flag of the board */ void allowMoving (const bool fl); /** * Announce that we will accept/reject the command cmd from * now on */ void allowCommand (int cmd, bool f); /** * Tell the board to undo the last move */ void undoMove (); /** * Tell the board to redo the last undone move */ void redoMove (); protected: /** * Context menu for the board */ TQPopupMenu * menu; /** * Commit timer */ TQTimer *ct; int cl; }; #endif // __KBGENGINE_H