diff options
Diffstat (limited to 'libkdegames/kgame/kgamepropertyhandler.h')
-rw-r--r-- | libkdegames/kgame/kgamepropertyhandler.h | 354 |
1 files changed, 0 insertions, 354 deletions
diff --git a/libkdegames/kgame/kgamepropertyhandler.h b/libkdegames/kgame/kgamepropertyhandler.h deleted file mode 100644 index c2a3429f..00000000 --- a/libkdegames/kgame/kgamepropertyhandler.h +++ /dev/null @@ -1,354 +0,0 @@ -/* - This file is part of the KDE games library - Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de) - Copyright (C) 2001 Martin Heni (martin@heni-online.de) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef __KGAMEPROPERTYHANDLER_H_ -#define __KGAMEPROPERTYHANDLER_H_ - -#include <tqobject.h> -#include <tqintdict.h> - -#include "kgameproperty.h" -#include <kdemacros.h> - -class TQDataStream; -class KGame; -class KPlayer; -//class KGamePropertyBase; - -class KGamePropertyHandlerPrivate; // wow - what a name ;-) - -/** - * @short A collection class for KGameProperty objects - * - * The KGamePropertyHandler class is some kind of a collection class for - * KGameProperty. You usually don't have to create one yourself, as both - * KPlayer and KGame provide a handler. In most cases you do not even have - * to care about the KGamePropertHandler. KGame and KPlayer implement - * all features of KGamePropertyHandler so you will rather use it there. - * - * You have to use the KGamePropertyHandler as parent for all KGameProperty - * objects but you can also use KPlayer or KGame as parent - then - * KPlayer::dataHandler or KGame::dataHandler will be used. - * - * Every KGamePropertyHandler must have - just like every KGameProperty - - * a unique ID. This ID is provided either in the constructor or in - * registerHandler. The ID is used to assign an incoming message (e.g. a changed - * property) to the correct handler. Inside the handler the property ID is used - * to change the correct property. - * - * The constructor or registerHandler takes 3 addittional arguments: a - * receiver and two slots. The first slot is connected to - * signalSendMessage, the second to signalPropertyChanged. You must provide - * these in order to use the KGamePropertyHandler. - * - * The most important function of KGamePropertyHandler is processMessage - * which assigns an incoming value to the correct property. - * - * A KGamePropertyHandler is also used - indirectly using emitSignal - to - * emit a signal when the value of a property changes. This is done this way - * because a KGameProperty does not inherit TQObject because of memory - * advantages. Many games can have dozens or even hundreds of KGameProperty - * objects so every additional variable in KGameProperty would be - * multiplied. - * - **/ -class KDE_EXPORT KGamePropertyHandler : public TQObject -{ - Q_OBJECT - TQ_OBJECT - -public: - /** - * Construct an unregistered KGamePropertyHandler - * - * You have to call registerHandler before you can use this - * handler! - **/ - KGamePropertyHandler(TQObject* parent = 0); - - /** - * Construct a registered handler. - * - * @see registerHandler - **/ - KGamePropertyHandler(int id, const TQObject* receiver, const char* sendf, const char* emitf, TQObject* parent = 0); - ~KGamePropertyHandler(); - - /** - * Register the handler with a parent. This is to use - * if the constructor without arguments has been chosen. - * Otherwise you need not call this. - * - * @param id The id of the message to listen for - * @param receiver The object that will receive the signals of - * KGamePropertyHandler - * @param send A slot that is being connected to signalSendMessage - * @param emit A slot that is being connected to signalPropertyChanged - **/ - void registerHandler(int id, const TQObject *receiver, const char * send, const char *emit); - - /** - * Main message process function. This has to be called by - * the parent's message event handler. If the id of the message - * agrees with the id of the handler, the message is extracted - * and processed. Otherwise false is returned. - * Example: - * \code - * if (mProperties.processMessage(stream,msgid,sender==gameId())) return ; - * \endcode - * - * @param stream The data stream containing the message - * @param id the message id of the message - * @param isSender Whether the receiver is also the sender - * @return true on message processed otherwise false - **/ - bool processMessage(TQDataStream &stream, int id, bool isSender ); - - /** - * @return the id of the handler - **/ - int id() const; - - /** - * Adds a KGameProperty property to the handler - * @param data the property - * @param name A description of the property, which will be returned by - * propertyName. This is used for debugging, e.g. in KGameDebugDialog - * @return true on success - **/ - bool addProperty(KGamePropertyBase *data, TQString name=0); - - /** - * Removes a property from the handler - * @param data the property - * @return true on success - **/ - bool removeProperty(KGamePropertyBase *data); - - /** - * returns a unique property ID starting called usually with a base of - * KGamePropertyBase::IdAutomatic. This is used internally by - * the property base to assign automtic id's. Not much need to - * call this yourself. - **/ - int uniquePropertyId(); - - - /** - * Loads properties from the datastream - * - * @param stream the datastream to load from - * @return true on success otherwise false - **/ - virtual bool load(TQDataStream &stream); - - /** - * Saves properties into the datastream - * - * @param stream the datastream to save to - * @return true on success otherwise false - **/ - virtual bool save(TQDataStream &stream); - - /** - * called by a property to send itself into the - * datastream. This call is simply forwarded to - * the parent object - **/ - bool sendProperty(TQDataStream &s); - - void sendLocked(bool l); - - /** - * called by a property to emit a signal - * This call is simply forwarded to - * the parent object - **/ - void emitSignal(KGamePropertyBase *data); - - /** - * @param id The ID of the property - * @return A name of the property which can be used for debugging. Don't - * depend on this function! It it possible not to provide a name or to - * provide the same name for multiple properties! - **/ - TQString propertyName(int id) const; - - /** - * @param id The ID of the property. See KGamePropertyBase::id - * @return The KGameProperty this ID is assigned to - **/ - KGamePropertyBase *find(int id); - - /** - * Clear the KGamePropertyHandler. Note that the properties are - * <em>not</em> deleted so if you created your KGameProperty - * objects dynamically like - * \code - * KGamePropertyInt* myProperty = new KGamePropertyInt(id, dataHandler()); - * \endcode - * you also have to delete it: - * \code - * dataHandler()->clear(); - * delete myProperty; - * \endcode - **/ - void clear(); - - /** - * Use id as new ID for this KGamePropertyHandler. This is used - * internally only. - **/ - void setId(int id);//AB: TODO: make this protected in KGamePropertyHandler!! - - /** - * Calls KGamePropertyBase::setReadOnly(false) for all properties of this - * player. See also lockProperties - **/ - void unlockProperties(); - - /** - * Set the policy for all kgame variables which are currently registerd in - * the KGame proeprty handler. See KGamePropertyBase::setPolicy - * - * @param p is the new policy for all properties of this handler - * @param userspace if userspace is true (default) only user properties are changed. - * Otherwise the system properties are also changed. - **/ - void setPolicy(KGamePropertyBase::PropertyPolicy p, bool userspace=true); - - /** - * Called by the KGame or KPlayer object or the handler itself to delay - * emmiting of signals. Lockign keeps a counter and unlock is only achieved - * when every lock is canceld by an unlock. - * While this is set signals are quequed and only emmited after this - * is reset. Its deeper meaning is to prevent inconsistencies in a game - * load or network transfer where a emit could access a property not - * yet loaded or transmitted. Calling this by yourself you better know - * what your are doing. - **/ - void lockDirectEmit(); - - /** - * Removes the lock from the emitting of property signals. Corresponds to - * the lockIndirectEmits - **/ - void unlockDirectEmit(); - - /** - * Returns the default policy for this property handler. All properties - * registered newly, will have this property. - **/ - KGamePropertyBase::PropertyPolicy policy(); - - /** - * Calls KGamePropertyBase::setReadOnly(true) for all properties of this - * handler - * - * Use with care! This will even lock the core properties, like name, - * group and myTurn!! - * - * @see unlockProperties - **/ - void lockProperties(); - - /** - * Sends all properties which are marked dirty over the network. This will - * make a forced synchornisation of the properties and mark them all not dirty. - **/ - void flush(); - - /** - * Reference to the internal dictionary - **/ - TQIntDict<KGamePropertyBase> &dict() const; - - /** - * In several situations you just want to have a TQString of a - * KGameProperty object. This is the case in the - * KGameDebugDialog where the value of all properties is displayed. This - * function will provide you with such a TQString for all the types - * used inside of all KGame classes. If you have a non-standard - * property (probably a self defined class or something like this) you - * also need to connect to signalRequestValue to make this function - * useful. - * @param property Return the value of this KGameProperty - * @return The value of a KGameProperty - **/ - TQString propertyValue(KGamePropertyBase* property); - - - /** - * Writes some debug output to the console. - **/ - void Debug(); - - -signals: - /** - * This is emitted by a property. KGamePropertyBase::emitSignal - * calls emitSignal which emits this signal. - * - * This signal is emitted whenever the property is changed. Note that - * you can switch off this behaviour using - * KGamePropertyBase::setEmittingSignal in favor of performance. Note - * that you won't experience any performance loss using signals unless - * you use dozens or hundreds of properties which change very often. - **/ - void signalPropertyChanged(KGamePropertyBase *); - - /** - * This signal is emitted when a property needs to be sent. Only the - * parent has to react to this. - * @param msgid The id of the handler - * @param sent set this to true if the property was sent successfully - - * otherwise don't touch - **/ - void signalSendMessage(int msgid, TQDataStream &, bool* sent); // AB shall we change bool* into bool& again? - - /** - * If you call propertyValue with a non-standard KGameProperty - * it is possible that the value cannot automatically be converted into a - * TQString. Then this signal is emitted and asks you to provide the - * correct value. You probably want to use something like this to achieve - * this: - * \code - * #include <typeinfo> - * void slotRequestValue(KGamePropertyBase* p, TQString& value) - * { - * if (*(p->typeinfo()) == typeid(MyType) { - * value = TQString(((KGameProperty<MyType>*)p)->value()); - * } - * } - * \endcode - * - * @param property The KGamePropertyBase the value is requested for - * @param value The value of this property. You have to set this. - **/ - void signalRequestValue(KGamePropertyBase* property, TQString& value); - -private: - void init(); - -private: - KGamePropertyHandlerPrivate* d; -}; - -#endif |