You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdegames/kbackgammon/engines/generic/kbgengine.h

301 lines
5.9 KiB

/* Yo Emacs, this -*- C++ -*-
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 <config.h>
#endif
#include <tqobject.h>
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 <jens@hoefkens.com>
*
*/
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