aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/game/chev_panel.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2016-08-17 23:56:20 -0400
committerPaul Gilbert2016-08-17 23:56:20 -0400
commit912b3b15d2f11f12303d8dd7beb20c5f8716ea51 (patch)
treebaa57737ff53716da0712083e571bc9ac1a9453b /engines/titanic/game/chev_panel.cpp
parent69083ae71f2fe111a64206f234011013fcfd2ba4 (diff)
downloadscummvm-rg350-912b3b15d2f11f12303d8dd7beb20c5f8716ea51.tar.gz
scummvm-rg350-912b3b15d2f11f12303d8dd7beb20c5f8716ea51.tar.bz2
scummvm-rg350-912b3b15d2f11f12303d8dd7beb20c5f8716ea51.zip
TITANIC: Implemented CChevPanel class
Diffstat (limited to 'engines/titanic/game/chev_panel.cpp')
-rw-r--r--engines/titanic/game/chev_panel.cpp88
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