diff options
-rw-r--r-- | engines/titanic/core/view_item.cpp | 3 | ||||
-rw-r--r-- | engines/titanic/messages/messages.h | 30 | ||||
-rw-r--r-- | engines/titanic/messages/mouse_messages.h | 32 |
3 files changed, 64 insertions, 1 deletions
diff --git a/engines/titanic/core/view_item.cpp b/engines/titanic/core/view_item.cpp index 485062db27..cc8ba49ba9 100644 --- a/engines/titanic/core/view_item.cpp +++ b/engines/titanic/core/view_item.cpp @@ -210,7 +210,8 @@ bool CViewItem::mouseChange(const CMouseMsg *msg, bool flag) { return true; } - // TODO + if (CMouseMsg::isSupportedBy(gameObjects[idx])) + result = true; } return result; diff --git a/engines/titanic/messages/messages.h b/engines/titanic/messages/messages.h index 54581a7b07..317cde52c6 100644 --- a/engines/titanic/messages/messages.h +++ b/engines/titanic/messages/messages.h @@ -94,6 +94,10 @@ public: CEditControlMsg() : _field4(0), _field8(0), _field18(0), _field1C(0), _field20(0) {} + static bool isSupportedBy(const CTreeItem *item) { + return dynamic_cast<const CEditControlMsg *>(item) != nullptr; + } + virtual bool perform(CTreeItem *treeItem) const { CEditControlMsg *dest = dynamic_cast<CEditControlMsg *>(treeItem); return dest != nullptr && dest->handleMessage(*this); @@ -114,6 +118,10 @@ public: CLightsMsg() : CMessage(), _field4(0), _field8(0), _fieldC(0), _field10(0) {} + static bool isSupportedBy(const CTreeItem *item) { + return dynamic_cast<const CLightsMsg *>(item) != nullptr; + } + virtual bool perform(CTreeItem *treeItem) const { CLightsMsg *dest = dynamic_cast<CLightsMsg *>(treeItem); return dest != nullptr && dest->handleMessage(*this); @@ -136,6 +144,10 @@ public: CIsHookedOnMsg() : CMessage(), _field4(0), _field8(0), _field18(0), _field1C(0), _field20(0) {} + static bool isSupportedBy(const CTreeItem *item) { + return dynamic_cast<const CIsHookedOnMsg *>(item) != nullptr; + } + virtual bool perform(CTreeItem *treeItem) const { CIsHookedOnMsg *dest = dynamic_cast<CIsHookedOnMsg *>(treeItem); return dest != nullptr && dest->handleMessage(*this); @@ -153,6 +165,10 @@ public: CLASSDEF CSubAcceptCCarryMsg() : _value1(0), _value2(0), _value3(0) {} + static bool isSupportedBy(const CTreeItem *item) { + return dynamic_cast<const CSubAcceptCCarryMsg *>(item) != nullptr; + } + virtual bool perform(CTreeItem *treeItem) const { CSubAcceptCCarryMsg *dest = dynamic_cast<CSubAcceptCCarryMsg *>(treeItem); return dest != nullptr && dest->handleMessage(*this); @@ -170,6 +186,10 @@ public: CLASSDEF CTransportMsg() : _value1(0), _value2(0) {} + static bool isSupportedBy(const CTreeItem *item) { + return dynamic_cast<const CTransportMsg *>(item) != nullptr; + } + virtual bool perform(CTreeItem *treeItem) const { CTransportMsg *dest = dynamic_cast<CTransportMsg *>(treeItem); return dest != nullptr && dest->handleMessage(*this); @@ -180,6 +200,8 @@ public: class NAME: public CMessage { \ 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); \ @@ -191,6 +213,8 @@ public: NAME() : CMessage(), _##N1(V1) {} \ 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; } \ virtual bool perform(CTreeItem *treeItem) { \ NAME *dest = dynamic_cast<NAME *>(treeItem); \ @@ -202,6 +226,8 @@ public: NAME() : CMessage(), _##N1(V1), _##N2(V2) {} \ 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; } \ virtual bool perform(CTreeItem *treeItem) { \ NAME *dest = dynamic_cast<NAME *>(treeItem); \ @@ -213,6 +239,8 @@ public: NAME() : CMessage(), _##N1(V1), _##N2(V2), _##N3(V3) {} \ 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; } \ virtual bool perform(CTreeItem *treeItem) { \ NAME *dest = dynamic_cast<NAME *>(treeItem); \ @@ -224,6 +252,8 @@ public: NAME() : CMessage(), _##N1(V1), _##N2(V2), _##N3(V3), _##N4(V4) {} \ 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; } \ virtual bool perform(CTreeItem *treeItem) { \ NAME *dest = dynamic_cast<NAME *>(treeItem); \ diff --git a/engines/titanic/messages/mouse_messages.h b/engines/titanic/messages/mouse_messages.h index fff392e465..84d7b8f61c 100644 --- a/engines/titanic/messages/mouse_messages.h +++ b/engines/titanic/messages/mouse_messages.h @@ -36,6 +36,9 @@ public: Common::Point _mousePos; public: CLASSDEF + static bool isSupportedBy(const CTreeItem *item) { + return dynamic_cast<const CMouseMsg *>(item) != nullptr; + } CMouseMsg() : _buttons(0) {} CMouseMsg(const Common::Point &pt, int buttons) : _mousePos(pt), _buttons(buttons) {} @@ -48,6 +51,9 @@ public: CMouseMoveMsg() : CMouseMsg() {} CMouseMoveMsg(const Common::Point &pt, int buttons) : CMouseMsg(pt, buttons) {} + static bool isSupportedBy(const CTreeItem *item) { + return dynamic_cast<const CMouseMoveMsg *>(item) != nullptr; + } virtual bool handleMessage(const CMouseMoveMsg &msg) { return false; } virtual bool perform(CTreeItem *treeItem) { CMouseMoveMsg *dest = dynamic_cast<CMouseMoveMsg *>(treeItem); @@ -62,6 +68,10 @@ public: CLASSDEF CMouseButtonMsg() : CMouseMsg(), _field10(0) {} CMouseButtonMsg(const Common::Point &pt, int buttons) : CMouseMsg(pt, buttons) {} + + static bool isSupportedBy(const CTreeItem *item) { + return dynamic_cast<const CMouseButtonMsg *>(item) != nullptr; + } }; MSGTARGET(CMouseButtonDownMsg); @@ -71,6 +81,9 @@ public: CMouseButtonDownMsg() : CMouseButtonMsg() {} CMouseButtonDownMsg(const Common::Point &pt, int buttons) : CMouseButtonMsg(pt, buttons) {} + static bool isSupportedBy(const CTreeItem *item) { + return dynamic_cast<const CMouseButtonDownMsg *>(item) != nullptr; + } virtual bool handleMessage(const CMouseButtonDownMsg &msg) { return false; } virtual bool perform(CTreeItem *treeItem) { CMouseButtonDownMsg *dest = dynamic_cast<CMouseButtonDownMsg *>(treeItem); @@ -85,6 +98,9 @@ public: CMouseButtonUpMsg() : CMouseButtonMsg() {} CMouseButtonUpMsg(const Common::Point &pt, int buttons) : CMouseButtonMsg(pt, buttons) {} + 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); @@ -99,6 +115,9 @@ public: CMouseButtonDoubleClickMsg() : CMouseButtonMsg() {} CMouseButtonDoubleClickMsg(const Common::Point &pt, int buttons) : CMouseButtonMsg(pt, buttons) {} + static bool isSupportedBy(const CTreeItem *item) { + return dynamic_cast<const CMouseButtonDoubleClickMsg *>(item) != nullptr; + } virtual bool handleMessage(const CMouseButtonDoubleClickMsg &msg) { return false; } virtual bool perform(CTreeItem *treeItem) { CMouseButtonDoubleClickMsg *dest = dynamic_cast<CMouseButtonDoubleClickMsg *>(treeItem); @@ -111,6 +130,10 @@ public: CLASSDEF CMouseDragMsg() : CMouseMsg() {} CMouseDragMsg(const Common::Point &pt) : CMouseMsg(pt, 0) {} + + static bool isSupportedBy(const CTreeItem *item) { + return dynamic_cast<const CMouseDragMsg *>(item) != nullptr; + } }; class CMouseDragMoveMsg : public CMouseDragMsg { @@ -119,6 +142,9 @@ public: CMouseDragMoveMsg() : CMouseDragMsg() {} CMouseDragMoveMsg(const Common::Point &pt) : CMouseDragMsg(pt) {} + static bool isSupportedBy(const CTreeItem *item) { + return dynamic_cast<const CMouseDragMoveMsg *>(item) != nullptr; + } virtual bool handleMessage(const CMouseDragMoveMsg &msg) { return false; } virtual bool perform(CTreeItem *treeItem) { CMouseDragMoveMsg *dest = dynamic_cast<CMouseDragMoveMsg *>(treeItem); @@ -137,6 +163,9 @@ public: CMouseDragStartMsg(const Common::Point &pt) : CMouseDragMsg(pt), _dragItem(nullptr), _field14(0) {} + static bool isSupportedBy(const CTreeItem *item) { + return dynamic_cast<const CMouseDragStartMsg *>(item) != nullptr; + } virtual bool handleMessage(const CMouseDragStartMsg &msg) { return false; } virtual bool perform(CTreeItem *treeItem) { CMouseDragStartMsg *dest = dynamic_cast<CMouseDragStartMsg *>(treeItem); @@ -154,6 +183,9 @@ public: CMouseDragEndMsg(const Common::Point &pt, CTreeItem *dragItem = nullptr) : CMouseDragMsg(pt), _dragItem(dragItem) {} + static bool isSupportedBy(const CTreeItem *item) { + return dynamic_cast<const CMouseDragEndMsg *>(item) != nullptr; + } virtual bool handleMessage(const CMouseDragEndMsg &msg) { return false; } virtual bool perform(CTreeItem *treeItem) { CMouseDragEndMsg *dest = dynamic_cast<CMouseDragEndMsg *>(treeItem); |