aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/messages
diff options
context:
space:
mode:
authorPaul Gilbert2016-03-24 07:49:59 -0400
committerPaul Gilbert2016-03-24 07:49:59 -0400
commit66e198d665a8aacd1724848a40e6533f3d5cfebc (patch)
tree549c1414ea83683eb9c75ba5eea7d3d07733009a /engines/titanic/messages
parent2f532c086d5cd466a54763fc4fee14d0940e0abb (diff)
downloadscummvm-rg350-66e198d665a8aacd1724848a40e6533f3d5cfebc.tar.gz
scummvm-rg350-66e198d665a8aacd1724848a40e6533f3d5cfebc.tar.bz2
scummvm-rg350-66e198d665a8aacd1724848a40e6533f3d5cfebc.zip
TITANIC: Cleanup and fixes for message hierarchy
Diffstat (limited to 'engines/titanic/messages')
-rw-r--r--engines/titanic/messages/bilge_dispensor_event.cpp2
-rw-r--r--engines/titanic/messages/bilge_dispensor_event.h2
-rw-r--r--engines/titanic/messages/messages.cpp4
-rw-r--r--engines/titanic/messages/messages.h81
-rw-r--r--engines/titanic/messages/mouse_messages.h44
5 files changed, 60 insertions, 73 deletions
diff --git a/engines/titanic/messages/bilge_dispensor_event.cpp b/engines/titanic/messages/bilge_dispensor_event.cpp
index c20fe10992..e17494c5e2 100644
--- a/engines/titanic/messages/bilge_dispensor_event.cpp
+++ b/engines/titanic/messages/bilge_dispensor_event.cpp
@@ -34,7 +34,7 @@ void CBilgeDispensorEvent::load(SimpleFile *file) {
CAutoSoundEvent::load(file);
}
-bool CBilgeDispensorEvent::handleEvent(CEnterRoomMsg &msg) {
+bool CBilgeDispensorEvent::handleMessage(CEnterRoomMsg &msg) {
_value1 = 0;
return true;
}
diff --git a/engines/titanic/messages/bilge_dispensor_event.h b/engines/titanic/messages/bilge_dispensor_event.h
index 9f91b61ef9..de8705f604 100644
--- a/engines/titanic/messages/bilge_dispensor_event.h
+++ b/engines/titanic/messages/bilge_dispensor_event.h
@@ -30,7 +30,7 @@ namespace Titanic {
class CBilgeDispensorEvent : public CAutoSoundEvent {
protected:
- virtual bool handleEvent(CEnterRoomMsg &msg);
+ virtual bool handleMessage(CEnterRoomMsg &msg);
public:
CLASSDEF
diff --git a/engines/titanic/messages/messages.cpp b/engines/titanic/messages/messages.cpp
index 9202305353..28b8856578 100644
--- a/engines/titanic/messages/messages.cpp
+++ b/engines/titanic/messages/messages.cpp
@@ -39,7 +39,7 @@ void CMessage::load(SimpleFile *file) {
CSaveableObject::load(file);
}
-bool CMessage::execute(CTreeItem *target, const ClassDef *classDef, int flags) const {
+bool CMessage::execute(CTreeItem *target, const ClassDef *classDef, int flags) {
// If no target was specified, then there's nothing to do
if (!target)
return false;
@@ -51,7 +51,7 @@ bool CMessage::execute(CTreeItem *target, const ClassDef *classDef, int flags) c
if (flags & MSGFLAG_SCAN)
nextItem = item->scan(target);
- if (!(flags & MSGFLAG_CLASS_DEF) || item->isInstanceOf(classDef)) {
+ if (!classDef || item->isInstanceOf(classDef)) {
bool handled = perform(item);
if (handled) {
diff --git a/engines/titanic/messages/messages.h b/engines/titanic/messages/messages.h
index ccea453a26..c945ad7736 100644
--- a/engines/titanic/messages/messages.h
+++ b/engines/titanic/messages/messages.h
@@ -35,7 +35,7 @@ enum MessageFlag {
};
#define MSGTARGET(NAME) class NAME; class NAME##Target { public: \
- virtual bool handleEvent(NAME &msg) = 0; }
+ virtual bool handleMessage(NAME &msg) = 0; }
class CGameObject;
class CRoomItem;
@@ -47,10 +47,14 @@ public:
CLASSDEF
CMessage();
+ /**
+ * Executes the message, passing it on to the designated target,
+ * and optionally it's children
+ */
bool execute(CTreeItem *target, const ClassDef *classDef = nullptr,
- int flags = MSGFLAG_SCAN | MSGFLAG_BREAK_IF_HANDLED) const;
+ int flags = MSGFLAG_SCAN | MSGFLAG_BREAK_IF_HANDLED);
- virtual bool perform(CTreeItem *treeItem) const { return false; }
+ virtual bool perform(CTreeItem *treeItem) { return false; }
/**
* Save the data for the class to file
@@ -80,8 +84,6 @@ public:
MSGTARGET(CEditControlMsg);
class CEditControlMsg : public CMessage {
-protected:
- virtual bool handleMessage(const CEditControlMsg &msg) { return false; }
public:
int _field4;
int _field8;
@@ -95,19 +97,17 @@ public:
_field1C(0), _field20(0) {}
static bool isSupportedBy(const CTreeItem *item) {
- return dynamic_cast<const CEditControlMsg *>(item) != nullptr;
+ return dynamic_cast<const CEditControlMsgTarget *>(item) != nullptr;
}
- virtual bool perform(CTreeItem *treeItem) const {
- CEditControlMsg *dest = dynamic_cast<CEditControlMsg *>(treeItem);
+ virtual bool perform(CTreeItem *treeItem) {
+ CEditControlMsgTarget *dest = dynamic_cast<CEditControlMsgTarget *>(treeItem);
return dest != nullptr && dest->handleMessage(*this);
}
};
MSGTARGET(CLightsMsg);
class CLightsMsg : public CMessage {
-protected:
- virtual bool handleMessage(const CLightsMsg &msg) { return false; }
public:
int _field4;
int _field8;
@@ -119,19 +119,16 @@ public:
_fieldC(0), _field10(0) {}
static bool isSupportedBy(const CTreeItem *item) {
- return dynamic_cast<const CLightsMsg *>(item) != nullptr;
+ return dynamic_cast<const CLightsMsgTarget *>(item) != nullptr;
}
-
- virtual bool perform(CTreeItem *treeItem) const {
- CLightsMsg *dest = dynamic_cast<CLightsMsg *>(treeItem);
+ virtual bool perform(CTreeItem *treeItem) {
+ CLightsMsgTarget *dest = dynamic_cast<CLightsMsgTarget *>(treeItem);
return dest != nullptr && dest->handleMessage(*this);
}
};
MSGTARGET(CIsHookedOnMsg);
class CIsHookedOnMsg : public CMessage {
-protected:
- virtual bool handleMessage(const CIsHookedOnMsg &msg) { return false; }
public:
int _field4;
int _field8;
@@ -145,19 +142,16 @@ public:
_field18(0), _field1C(0), _field20(0) {}
static bool isSupportedBy(const CTreeItem *item) {
- return dynamic_cast<const CIsHookedOnMsg *>(item) != nullptr;
+ return dynamic_cast<const CIsHookedOnMsgTarget *>(item) != nullptr;
}
-
- virtual bool perform(CTreeItem *treeItem) const {
- CIsHookedOnMsg *dest = dynamic_cast<CIsHookedOnMsg *>(treeItem);
+ virtual bool perform(CTreeItem *treeItem) {
+ CIsHookedOnMsgTarget *dest = dynamic_cast<CIsHookedOnMsgTarget *>(treeItem);
return dest != nullptr && dest->handleMessage(*this);
}
};
MSGTARGET(CSubAcceptCCarryMsg);
class CSubAcceptCCarryMsg : public CMessage {
-protected:
- virtual bool handleMessage(const CSubAcceptCCarryMsg &msg) { return false; }
public:
CString _string1;
int _value1, _value2, _value3;
@@ -166,19 +160,16 @@ public:
CSubAcceptCCarryMsg() : _value1(0), _value2(0), _value3(0) {}
static bool isSupportedBy(const CTreeItem *item) {
- return dynamic_cast<const CSubAcceptCCarryMsg *>(item) != nullptr;
+ return dynamic_cast<const CSubAcceptCCarryMsgTarget *>(item) != nullptr;
}
-
- virtual bool perform(CTreeItem *treeItem) const {
- CSubAcceptCCarryMsg *dest = dynamic_cast<CSubAcceptCCarryMsg *>(treeItem);
+ virtual bool perform(CTreeItem *treeItem) {
+ CSubAcceptCCarryMsgTarget *dest = dynamic_cast<CSubAcceptCCarryMsgTarget *>(treeItem);
return dest != nullptr && dest->handleMessage(*this);
}
};
MSGTARGET(CTransportMsg);
class CTransportMsg : public CMessage {
-protected:
- virtual bool handleMessage(const CTransportMsg &msg) { return false; }
public:
CString _string;
int _value1, _value2;
@@ -187,11 +178,10 @@ public:
CTransportMsg() : _value1(0), _value2(0) {}
static bool isSupportedBy(const CTreeItem *item) {
- return dynamic_cast<const CTransportMsg *>(item) != nullptr;
+ return dynamic_cast<const CTransportMsgTarget *>(item) != nullptr;
}
-
- virtual bool perform(CTreeItem *treeItem) const {
- CTransportMsg *dest = dynamic_cast<CTransportMsg *>(treeItem);
+ virtual bool perform(CTreeItem *treeItem) {
+ CTransportMsgTarget *dest = dynamic_cast<CTransportMsgTarget *>(treeItem);
return dest != nullptr && dest->handleMessage(*this);
}
};
@@ -201,10 +191,9 @@ public:
public: NAME() : CMessage() {} \
CLASSDEF \
static bool isSupportedBy(const CTreeItem *item) { \
- return dynamic_cast<const NAME *>(item) != nullptr; } \
- virtual bool handleMessage(const NAME &msg) { return false; } \
- virtual bool perform(CTreeItem *treeItem) const { \
- NAME *dest = dynamic_cast<NAME *>(treeItem); \
+ return dynamic_cast<const NAME##Target *>(item) != nullptr; } \
+ virtual bool perform(CTreeItem *treeItem) { \
+ NAME##Target *dest = dynamic_cast<NAME##Target *>(treeItem); \
return dest != nullptr && dest->handleMessage(*this); \
} }
#define MESSAGE1(NAME, F1, N1, V1) MSGTARGET(NAME); \
@@ -214,10 +203,9 @@ public:
NAME(F1 N1) : CMessage(), _##N1(N1) {} \
CLASSDEF \
static bool isSupportedBy(const CTreeItem *item) { \
- return dynamic_cast<const NAME *>(item) != nullptr; } \
- virtual bool handleMessage(const NAME &msg) { return false; } \
+ return dynamic_cast<const NAME##Target *>(item) != nullptr; } \
virtual bool perform(CTreeItem *treeItem) { \
- NAME *dest = dynamic_cast<NAME *>(treeItem); \
+ NAME##Target *dest = dynamic_cast<NAME##Target *>(treeItem); \
return dest != nullptr && dest->handleMessage(*this); \
} }
#define MESSAGE2(NAME, F1, N1, V1, F2, N2, V2) MSGTARGET(NAME); \
@@ -227,10 +215,9 @@ public:
NAME(F1 N1, F2 N2) : CMessage(), _##N1(N1), _##N2(N2) {} \
CLASSDEF \
static bool isSupportedBy(const CTreeItem *item) { \
- return dynamic_cast<const NAME *>(item) != nullptr; } \
- virtual bool handleMessage(const NAME &msg) { return false; } \
+ return dynamic_cast<const NAME##Target *>(item) != nullptr; } \
virtual bool perform(CTreeItem *treeItem) { \
- NAME *dest = dynamic_cast<NAME *>(treeItem); \
+ NAME##Target *dest = dynamic_cast<NAME##Target *>(treeItem); \
return dest != nullptr && dest->handleMessage(*this); \
} }
#define MESSAGE3(NAME, F1, N1, V1, F2, N2, V2, F3, N3, V3) MSGTARGET(NAME); \
@@ -240,10 +227,9 @@ public:
NAME(F1 N1, F2 N2, F3 N3) : CMessage(), _##N1(N1), _##N2(N2), _##N3(N3) {} \
CLASSDEF \
static bool isSupportedBy(const CTreeItem *item) { \
- return dynamic_cast<const NAME *>(item) != nullptr; } \
- virtual bool handleMessage(const NAME &msg) { return false; } \
+ return dynamic_cast<const NAME##Target *>(item) != nullptr; } \
virtual bool perform(CTreeItem *treeItem) { \
- NAME *dest = dynamic_cast<NAME *>(treeItem); \
+ NAME##Target *dest = dynamic_cast<NAME##Target *>(treeItem); \
return dest != nullptr && dest->handleMessage(*this); \
} }
#define MESSAGE4(NAME, F1, N1, V1, F2, N2, V2, F3, N3, V3, F4, N4, V4) MSGTARGET(NAME); \
@@ -253,10 +239,9 @@ public:
NAME(F1 N1, F2 N2, F3 N3, F4 N4) : CMessage(), _##N1(N1), _##N2(N2), _##N3(N3), _##N4(N4) {} \
CLASSDEF \
static bool isSupportedBy(const CTreeItem *item) { \
- return dynamic_cast<const NAME *>(item) != nullptr; } \
- virtual bool handleMessage(const NAME &msg) { return false; } \
+ return dynamic_cast<const NAME##Target *>(item) != nullptr; } \
virtual bool perform(CTreeItem *treeItem) { \
- NAME *dest = dynamic_cast<NAME *>(treeItem); \
+ NAME##Target *dest = dynamic_cast<NAME##Target *>(treeItem); \
return dest != nullptr && dest->handleMessage(*this); \
} }
diff --git a/engines/titanic/messages/mouse_messages.h b/engines/titanic/messages/mouse_messages.h
index 6e2a74a046..7fe7ef960f 100644
--- a/engines/titanic/messages/mouse_messages.h
+++ b/engines/titanic/messages/mouse_messages.h
@@ -30,6 +30,7 @@ namespace Titanic {
enum MouseButton { MB_LEFT = 1, MB_MIDDLE = 2, MB_RIGHT = 4 };
+MSGTARGET(CMouseMsg);
class CMouseMsg : public CMessage {
public:
int _buttons;
@@ -39,6 +40,11 @@ public:
static bool isSupportedBy(const CTreeItem *item) {
return dynamic_cast<const CMouseMsg *>(item) != nullptr;
}
+ virtual bool perform(CTreeItem *treeItem) {
+ CMouseMsgTarget *dest = dynamic_cast<CMouseMsgTarget *>(treeItem);
+ return dest != nullptr && dest->handleMessage(*this);
+ }
+
CMouseMsg() : _buttons(0) {}
CMouseMsg(const Point &pt, int buttons) :
_mousePos(pt), _buttons(buttons) {}
@@ -52,15 +58,15 @@ public:
CMouseMoveMsg(const Point &pt, int buttons) : CMouseMsg(pt, buttons) {}
static bool isSupportedBy(const CTreeItem *item) {
- return dynamic_cast<const CMouseMoveMsg *>(item) != nullptr;
+ return dynamic_cast<const CMouseMoveMsgTarget *>(item) != nullptr;
}
- virtual bool handleMessage(const CMouseMoveMsg &msg) { return false; }
virtual bool perform(CTreeItem *treeItem) {
- CMouseMoveMsg *dest = dynamic_cast<CMouseMoveMsg *>(treeItem);
+ CMouseMoveMsgTarget *dest = dynamic_cast<CMouseMoveMsgTarget *>(treeItem);
return dest != nullptr && dest->handleMessage(*this);
}
};
+MSGTARGET(CMouseButtonMsg);
class CMouseButtonMsg : public CMouseMsg {
public:
int _field10;
@@ -70,7 +76,7 @@ public:
CMouseButtonMsg(const Point &pt, int buttons) : CMouseMsg(pt, buttons) {}
static bool isSupportedBy(const CTreeItem *item) {
- return dynamic_cast<const CMouseButtonMsg *>(item) != nullptr;
+ return dynamic_cast<const CMouseButtonMsgTarget *>(item) != nullptr;
}
};
@@ -82,11 +88,10 @@ public:
CMouseButtonDownMsg(const Point &pt, int buttons) : CMouseButtonMsg(pt, buttons) {}
static bool isSupportedBy(const CTreeItem *item) {
- return dynamic_cast<const CMouseButtonDownMsg *>(item) != nullptr;
+ return dynamic_cast<const CMouseButtonDownMsgTarget *>(item) != nullptr;
}
- virtual bool handleMessage(const CMouseButtonDownMsg &msg) { return false; }
virtual bool perform(CTreeItem *treeItem) {
- CMouseButtonDownMsg *dest = dynamic_cast<CMouseButtonDownMsg *>(treeItem);
+ CMouseButtonDownMsgTarget *dest = dynamic_cast<CMouseButtonDownMsgTarget *>(treeItem);
return dest != nullptr && dest->handleMessage(*this);
}
};
@@ -101,9 +106,8 @@ public:
static bool isSupportedBy(const CTreeItem *item) {
return dynamic_cast<const CMouseButtonUpMsg *>(item) != nullptr;
}
- virtual bool handleMessage(const CMouseButtonUpMsg &msg) { return false; }
virtual bool perform(CTreeItem *treeItem) {
- CMouseButtonUpMsg *dest = dynamic_cast<CMouseButtonUpMsg *>(treeItem);
+ CMouseButtonUpMsgTarget *dest = dynamic_cast<CMouseButtonUpMsgTarget *>(treeItem);
return dest != nullptr && dest->handleMessage(*this);
}
};
@@ -116,15 +120,15 @@ public:
CMouseDoubleClickMsg(const Point &pt, int buttons) : CMouseButtonMsg(pt, buttons) {}
static bool isSupportedBy(const CTreeItem *item) {
- return dynamic_cast<const CMouseDoubleClickMsg *>(item) != nullptr;
+ return dynamic_cast<const CMouseDoubleClickMsgTarget *>(item) != nullptr;
}
- virtual bool handleMessage(const CMouseDoubleClickMsg &msg) { return false; }
virtual bool perform(CTreeItem *treeItem) {
- CMouseDoubleClickMsg *dest = dynamic_cast<CMouseDoubleClickMsg *>(treeItem);
+ CMouseDoubleClickMsgTarget *dest = dynamic_cast<CMouseDoubleClickMsgTarget *>(treeItem);
return dest != nullptr && dest->handleMessage(*this);
}
};
+MSGTARGET(CMouseDragMsg);
class CMouseDragMsg : public CMouseMsg {
public:
CLASSDEF
@@ -136,6 +140,7 @@ public:
}
};
+MSGTARGET(CMouseDragMoveMsg);
class CMouseDragMoveMsg : public CMouseDragMsg {
public:
CLASSDEF
@@ -143,11 +148,10 @@ public:
CMouseDragMoveMsg(const Point &pt) : CMouseDragMsg(pt) {}
static bool isSupportedBy(const CTreeItem *item) {
- return dynamic_cast<const CMouseDragMoveMsg *>(item) != nullptr;
+ return dynamic_cast<const CMouseDragMoveMsgTarget *>(item) != nullptr;
}
- virtual bool handleMessage(const CMouseDragMoveMsg &msg) { return false; }
virtual bool perform(CTreeItem *treeItem) {
- CMouseDragMoveMsg *dest = dynamic_cast<CMouseDragMoveMsg *>(treeItem);
+ CMouseDragMoveMsgTarget *dest = dynamic_cast<CMouseDragMoveMsgTarget *>(treeItem);
return dest != nullptr && dest->handleMessage(*this);
}
};
@@ -164,11 +168,10 @@ public:
_dragItem(nullptr), _field14(0) {}
static bool isSupportedBy(const CTreeItem *item) {
- return dynamic_cast<const CMouseDragStartMsg *>(item) != nullptr;
+ return dynamic_cast<const CMouseDragStartMsgTarget *>(item) != nullptr;
}
- virtual bool handleMessage(const CMouseDragStartMsg &msg) { return false; }
virtual bool perform(CTreeItem *treeItem) {
- CMouseDragStartMsg *dest = dynamic_cast<CMouseDragStartMsg *>(treeItem);
+ CMouseDragStartMsgTarget *dest = dynamic_cast<CMouseDragStartMsgTarget *>(treeItem);
return dest != nullptr && dest->handleMessage(*this);
}
};
@@ -184,11 +187,10 @@ public:
CMouseDragMsg(pt), _dragItem(dragItem) {}
static bool isSupportedBy(const CTreeItem *item) {
- return dynamic_cast<const CMouseDragEndMsg *>(item) != nullptr;
+ return dynamic_cast<const CMouseDragEndMsgTarget *>(item) != nullptr;
}
- virtual bool handleMessage(const CMouseDragEndMsg &msg) { return false; }
virtual bool perform(CTreeItem *treeItem) {
- CMouseDragEndMsg *dest = dynamic_cast<CMouseDragEndMsg *>(treeItem);
+ CMouseDragEndMsgTarget *dest = dynamic_cast<CMouseDragEndMsgTarget *>(treeItem);
return dest != nullptr && dest->handleMessage(*this);
}
};