File indexing completed on 2024-04-14 14:32:16

0001 //
0002 // C++ Interface: cActionBase
0003 //
0004 // Description: action base
0005 //
0006 /*
0007 Copyright 2005-2011 Tomas Mecir <kmuddy@kmuddy.com>
0008 
0009 This program is free software; you can redistribute it and/or
0010 modify it under the terms of the GNU General Public License as
0011 published by the Free Software Foundation; either version 2 of 
0012 the License, or (at your option) any later version.
0013 
0014 This program is distributed in the hope that it will be useful,
0015 but WITHOUT ANY WARRANTY; without even the implied warranty of
0016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0017 GNU General Public License for more details.
0018 
0019 You should have received a copy of the GNU General Public License
0020 along with this program.  If not, see <http://www.gnu.org/licenses/>.
0021 */
0022 
0023 #ifndef CACTIONBASE_H
0024 #define CACTIONBASE_H
0025 
0026 #include <qstring.h>
0027 
0028 #include <kmuddy_export.h>
0029 
0030 struct cActionBasePrivate;
0031 
0032 class cProfileSettings;
0033 class cTextChunk;
0034 enum ParamType { PT_INT, PT_STRING, PT_NOTHING, PT_TEXTCHUNK, PT_POINTER };
0035 
0036 /**
0037 Base class for every object that wants to use cActionManager.
0038 
0039 @author Tomas Mecir
0040 */
0041 
0042 class KMUDDY_EXPORT cActionBase {
0043 public:
0044   /** Constructor. Registers itself with cActionManager, if session >= 0 */
0045   cActionBase (const QString &name, int session = -1);
0046   /** destructor */
0047   virtual ~cActionBase ();
0048 
0049   /** object's name */
0050   QString objName () { return _name; };
0051   /** session number */
0052   int sess ();
0053 
0054   int attrib (const QString &name);
0055   void setAttrib (const QString &name, int value);
0056   QString strAttrib (const QString &name);
0057   void setStrAttrib (const QString &name, const QString &value);
0058 protected:
0059   void addEventHandler (QString name, int priority, ParamType pt);
0060   void removeEventHandler (QString name);
0061   void addGlobalEventHandler (QString name, int priority, ParamType pt);
0062   void removeGlobalEventHandler (QString name);
0063 
0064   /** Returns the settings of the session. Provided for convenience. */
0065   cProfileSettings *settings ();
0066 
0067   cActionBase *object (const QString &name, int session = -1);
0068 
0069 // the following 10 methods exist so that we don't have to #include cActionManager everywhere
0070   /** call an object's action - PT_INT parameter */
0071   QString callAction (QString objectName, QString action, int session, int par1, int par2=0);
0072   /** call an object's action - PT_STRING parameter */
0073   QString callAction (QString objectName, QString action, int session,
0074       QString &par1, const QString &par2=QString());
0075   /** as above, but with const string */
0076   QString callAction (QString objectName, QString action, int session,
0077       const QString &par1, const QString &par2=QString());
0078   /** call an object's action - PT_NOTHING parameter */
0079   QString callAction (QString objectName, QString action, int session);
0080   /** call an object's action - PT_TEXTCHUNK parameter */
0081   QString callAction (QString objectName, QString action, int session, cTextChunk *par);
0082   /** call an object's action - PT_POINTER parameter */
0083   QString callAction (QString objectName, QString action, int session, void *par);
0084   /** invoke an event - PT_INT parameter */
0085   void invokeEvent (QString event, int session, int par1, int par2 = 0);
0086   /** invoke an event - PT_STRING parameter */
0087   void invokeEvent (QString event, int session, QString &par1,
0088       const QString &par2 = QString());
0089   /** as above, but const param - so that passing constant strings works */
0090   void invokeEvent (QString event, int session, const QString &par1,
0091       const QString &par2 = QString());
0092   /** invoke an event - PT_NOTHING parameter */
0093   void invokeEvent (QString event, int session);
0094   /** invoke an event - PT_TEXTCHUNK parameter */
0095   void invokeEvent (QString event, int session, cTextChunk *par);
0096   /** invoke an event - PT_POINTER parameter */
0097   void invokeEvent (QString event, int session, void *par);
0098 
0099     
0100   virtual QString actionIntHandler (QString /*action*/, int /*session*/, int /*par1*/, int /*par2*/)
0101       { return QString(); };
0102   virtual QString actionStringHandler (QString /*action*/, int /*session*/,
0103       QString &/*par1*/, const QString &/*par2*/)
0104       { return QString(); };
0105   virtual QString actionNothingHandler (QString /*action*/, int /*session*/)
0106       { return QString(); };
0107   virtual QString actionChunkHandler (QString /*action*/, int /*session*/, cTextChunk * /*par*/)
0108       { return QString(); };
0109   virtual QString actionVoidHandler (QString /*action*/, int /*session*/, void * /*par*/)
0110       { return QString(); };
0111 
0112   virtual void eventNothingHandler (QString /*event*/, int /*session*/);
0113   virtual void eventIntHandler (QString /*event*/, int /*session*/, int /*par1*/, int /*par2*/);
0114   virtual void eventStringHandler (QString /*event*/, int /*session*/,
0115       QString &/*par1*/, const QString &/*par2*/);
0116   virtual void eventChunkHandler (QString /*event*/, int /*session*/, cTextChunk * /*par*/);
0117   virtual void eventVoidHandler (QString /*event*/, int /*session*/, void * /*par*/);
0118 
0119   QString _name;
0120   cActionBasePrivate *d;
0121 
0122   // cActionManager will want to access event handlers ...
0123   friend class cActionManager;
0124 };
0125 
0126 #endif