diff options
Diffstat (limited to 'engines/titanic/game/chev_panel.cpp')
-rw-r--r-- | engines/titanic/game/chev_panel.cpp | 88 |
1 files changed, 82 insertions, 6 deletions
diff --git a/engines/titanic/game/chev_panel.cpp b/engines/titanic/game/chev_panel.cpp index 245968e356..c644776bc9 100644 --- a/engines/titanic/game/chev_panel.cpp +++ b/engines/titanic/game/chev_panel.cpp @@ -21,25 +21,101 @@ */ #include "titanic/game/chev_panel.h" +#include "titanic/game/chev_code.h" namespace Titanic { +BEGIN_MESSAGE_MAP(CChevPanel, CGameObject) + ON_MESSAGE(MouseDragStartMsg) + ON_MESSAGE(MouseDragMoveMsg) + ON_MESSAGE(MouseButtonUpMsg) + ON_MESSAGE(SetChevPanelBitMsg) + ON_MESSAGE(MouseDragEndMsg) + ON_MESSAGE(ClearChevPanelBits) + ON_MESSAGE(MouseButtonDownMsg) + ON_MESSAGE(SetChevPanelButtonsMsg) +END_MESSAGE_MAP() + void CChevPanel::save(SimpleFile *file, int indent) { file->writeNumberLine(1, indent); - file->writeNumberLine(_fieldBC, indent); - file->writeNumberLine(_fieldC0, indent); - file->writeNumberLine(_fieldC4, indent); + file->writeNumberLine(_startPos.x, indent); + file->writeNumberLine(_startPos.y, indent); + file->writeNumberLine(_chevCode, indent); CGameObject::save(file, indent); } void CChevPanel::load(SimpleFile *file) { file->readNumber(); - _fieldBC = file->readNumber(); - _fieldC0 = file->readNumber(); - _fieldC4 = file->readNumber(); + _startPos.x = file->readNumber(); + _startPos.y = file->readNumber(); + _chevCode = file->readNumber(); CGameObject::load(file); } +bool CChevPanel::MouseDragStartMsg(CMouseDragStartMsg *msg) { + if (checkStartDragging(msg)) { + _startPos = Point(msg->_mousePos.x - _bounds.left, + msg->_mousePos.y - _bounds.top); + CChildDragStartMsg dragMsg(_startPos); + dragMsg.execute(this, nullptr, MSGFLAG_SCAN); + } + + return true; +} + +bool CChevPanel::MouseDragMoveMsg(CMouseDragMoveMsg *msg) { + CChildDragMoveMsg dragMsg(_startPos); + dragMsg.execute(this, nullptr, MSGFLAG_SCAN); + + setPosition(msg->_mousePos - _startPos); + return true; +} + +bool CChevPanel::MouseButtonUpMsg(CMouseButtonUpMsg *msg) { + CChevCode chevCode; + chevCode._chevCode = _chevCode; + CCheckChevCode checkCode; + checkCode.execute(this); + CClearChevPanelBits panelBits; + panelBits.execute(this, nullptr, MSGFLAG_SCAN); + CSetChevPanelButtonsMsg setMsg; + setMsg._chevCode = checkCode._chevCode; + setMsg.execute(this); + + return true; +} + +bool CChevPanel::SetChevPanelBitMsg(CSetChevPanelBitMsg *msg) { + _chevCode = _chevCode & ~(1 << msg->_value1) | (msg->_value2 << msg->_value1); + return true; +} + +bool CChevPanel::MouseDragEndMsg(CMouseDragEndMsg *msg) { + setPosition(msg->_mousePos - _startPos); + return true; +} + +bool CChevPanel::ClearChevPanelBits(CClearChevPanelBits *msg) { + CSetChevPanelButtonsMsg setMsg; + setMsg._chevCode = 0; + setMsg.execute(this); + + return true; +} + +bool CChevPanel::MouseButtonDownMsg(CMouseButtonDownMsg *msg) { + return true; +} + +bool CChevPanel::SetChevPanelButtonsMsg(CSetChevPanelButtonsMsg *msg) { + _chevCode = msg->_chevCode; + CSetChevButtonImageMsg setMsg; + setMsg._value2 = 1; + setMsg.execute(this, nullptr, MSGFLAG_SCAN); + + return true; +} + } // End of namespace Titanic |