00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "Root.h"
00023 #include "ParseNode.h"
00024 #include "BaseClasses.h"
00025 #include "Ingredients.h"
00026 #include "Engine.h"
00027 #include "Logging.h"
00028
00029
00030 void MHRoot::Initialise(MHParseNode *p, MHEngine *engine)
00031 {
00032 MHParseNode *pArg = p->GetArgN(0);
00033
00034 m_ObjectReference.Initialise(pArg, engine);
00035 }
00036
00037
00038 void MHRoot::PrintMe(FILE *fd, int nTabs) const
00039 {
00040 m_ObjectReference.PrintMe(fd, nTabs);
00041 fprintf(fd, "\n");
00042 }
00043
00044
00045 void MHRoot::InvalidAction(const char *actionName)
00046 {
00047 MHLOG(MHLogWarning, QString("Action \"%1\" is not understood by class \"%2\"").arg(actionName).arg(ClassName()));
00048 throw "Invalid Action";
00049 }
00050
00051
00052 void MHRoot::Preparation(MHEngine *engine)
00053 {
00054 if (m_fAvailable) return;
00055
00056
00057 m_fAvailable = true;
00058 engine->EventTriggered(this, EventIsAvailable);
00059
00060
00061 ContentPreparation(engine);
00062 }
00063
00064
00065 void MHRoot::Activation(MHEngine *engine)
00066 {
00067 if (m_fRunning) return;
00068 if (! m_fAvailable) Preparation(engine);
00069
00070 }
00071
00072
00073 void MHRoot::Deactivation(MHEngine *engine)
00074 {
00075 if (! m_fRunning) return;
00076 m_fRunning = false;
00077 engine->EventTriggered(this, EventIsStopped);
00078 }
00079
00080
00081 void MHRoot::Destruction(MHEngine *engine)
00082 {
00083 if (! m_fAvailable) return;
00084 if (m_fRunning) Deactivation(engine);
00085
00086 m_fAvailable = false;
00087 engine->EventTriggered(this, EventIsDeleted);
00088 }
00089
00090
00091 MHRoot *MHRoot::FindByObjectNo(int n)
00092 {
00093 if (n == m_ObjectReference.m_nObjectNo) return this;
00094 else return NULL;
00095 }
00096
00097 void MHGetAvailabilityStatus::Initialise(MHParseNode *p, MHEngine *engine)
00098 {
00099 MHElemAction::Initialise(p, engine);
00100 m_ResultVar.Initialise(p->GetArgN(1), engine);
00101 }
00102
00103 void MHGetAvailabilityStatus::Perform(MHEngine *engine)
00104 {
00105
00106 MHObjectRef target;
00107 m_Target.GetValue(target, engine);
00108 MHRoot *pObject = engine->FindObject(target, false);
00109 bool fResult = false;
00110 if (pObject) fResult = pObject->GetAvailabilityStatus();
00111 engine->FindObject(m_ResultVar)->SetVariableValue(fResult);
00112 }