ArtMOO
|
00001 #ifndef VERB_H 00002 #define VERB_H 00003 00004 #include <QString> 00005 #include <QDataStream> 00006 #include <QStringList> 00007 00008 #include <lua.hpp> 00009 00010 #include "mooglobal.h" 00011 #include "func.h" 00012 00013 class Verb : public Func 00014 { 00015 public: 00016 void save( QDataStream &pData ) const; 00017 void load( QDataStream &pData ); 00018 00019 void initialise(); 00020 00021 typedef enum ArgObj 00022 { 00023 THIS, ANY, NONE 00024 } ArgObj; 00025 00026 static QStringList parse( const QString &pInput, QString &pArgStr ); 00027 00028 static bool matchName( const QString &pPattern, const QString &pMatch ); 00029 00030 bool matchPreposition( const QString &pPreposition ); 00031 00032 bool matchArgs( ObjectId pObjectId, ObjectId DirectObjectId, const QString &pPreposition, ObjectId IndirectObjectId ); 00033 00034 public: 00035 inline ArgObj directObject( void ) const 00036 { 00037 return( mDirectObject ); 00038 } 00039 00040 inline ArgObj indirectObject( void ) const 00041 { 00042 return( mIndirectObject ); 00043 } 00044 00045 inline const QString &preposition( void ) const 00046 { 00047 return( mPreposition ); 00048 } 00049 00050 inline ArgObj prepositionType( void ) const 00051 { 00052 return( mPrepositionType ); 00053 } 00054 00055 inline void setDirectObjectArgument( ArgObj pArg ) 00056 { 00057 mDirectObject = pArg; 00058 } 00059 00060 inline void setIndirectObjectArgument( ArgObj pArg ) 00061 { 00062 mIndirectObject = pArg; 00063 } 00064 00065 inline void setPrepositionArgument( ArgObj pArg ) 00066 { 00067 Q_ASSERT( pArg == Verb::ANY || pArg == Verb::NONE ); 00068 00069 mPrepositionType = pArg; 00070 mPreposition.clear(); 00071 } 00072 00073 inline void setPrepositionArgument( const QString &pArg ) 00074 { 00075 mPrepositionType = Verb::THIS; 00076 mPreposition = pArg; 00077 } 00078 00079 const QString &aliases( void ) const 00080 { 00081 return( mAliases ); 00082 } 00083 00084 void addAlias( const QString &pAlias ); 00085 void remAlias( const QString &pAlias ); 00086 00087 private: 00088 ArgObj mDirectObject; 00089 ArgObj mIndirectObject; 00090 ArgObj mPrepositionType; 00091 QString mPreposition; 00092 QString mAliases; 00093 }; 00094 00095 00096 #endif // VERB_H