[Scummvm-cvs-logs] scummvm master -> 449d8a02e05754e889e13ff721ff2c0cb995c486

dreammaster dreammaster at scummvm.org
Sat Aug 20 04:05:21 CEST 2016


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
449d8a02e0 TITANIC: Implemented CEditControl class


Commit: 449d8a02e05754e889e13ff721ff2c0cb995c486
    https://github.com/scummvm/scummvm/commit/449d8a02e05754e889e13ff721ff2c0cb995c486
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2016-08-19T22:05:15-04:00

Commit Message:
TITANIC: Implemented CEditControl class

Changed paths:
    engines/titanic/gfx/edit_control.cpp
    engines/titanic/gfx/edit_control.h
    engines/titanic/messages/messages.h



diff --git a/engines/titanic/gfx/edit_control.cpp b/engines/titanic/gfx/edit_control.cpp
index 3b611e9..4098220 100644
--- a/engines/titanic/gfx/edit_control.cpp
+++ b/engines/titanic/gfx/edit_control.cpp
@@ -24,26 +24,27 @@
 
 namespace Titanic {
 
-CEditControl::CEditControl() : CGameObject(), _fieldBC(0),  _fieldC0(0),
-		_fieldC4(0), _fieldC8(0), _fieldCC(0), _fieldD0(0), _fieldD4(2),
-		_fieldD8(0), _fieldDC(0), _fieldE0(0), _fieldF0(0), _fieldF4(0)
+BEGIN_MESSAGE_MAP(CEditControl, CGameObject)
+	ON_MESSAGE(EditControlMsg)
+END_MESSAGE_MAP()
 
-{
+CEditControl::CEditControl() : CGameObject(), _fieldBC(false),  _fontNumber(0), _fieldD4(2),
+		_textR(0), _textG(0), _textB(0), _fieldF0(0), _fieldF4(0) {
 }
 
 void CEditControl::save(SimpleFile *file, int indent) {
 	file->writeNumberLine(1, indent);
 	file->writeNumberLine(_fieldBC, indent);
-	file->writeNumberLine(_fieldC0, indent);
-	file->writeNumberLine(_fieldC4, indent);
-	file->writeNumberLine(_fieldC8, indent);
-	file->writeNumberLine(_fieldCC, indent);
-	file->writeNumberLine(_fieldD0, indent);
+	file->writeNumberLine(_editLeft, indent);
+	file->writeNumberLine(_editBottom, indent);
+	file->writeNumberLine(_editHeight, indent);
+	file->writeNumberLine(_maxTextChars, indent);
+	file->writeNumberLine(_fontNumber, indent);
 	file->writeNumberLine(_fieldD4, indent);
-	file->writeNumberLine(_fieldD8, indent);
-	file->writeNumberLine(_fieldDC, indent);
-	file->writeNumberLine(_fieldC0, indent);
-	file->writeQuotedLine(_string1, indent);
+	file->writeNumberLine(_textR, indent);
+	file->writeNumberLine(_textG, indent);
+	file->writeNumberLine(_textB, indent);
+	file->writeQuotedLine(_text, indent);
 	file->writeNumberLine(_fieldF0, indent);
 	file->writeNumberLine(_fieldF4, indent);
 
@@ -53,20 +54,169 @@ void CEditControl::save(SimpleFile *file, int indent) {
 void CEditControl::load(SimpleFile *file) {
 	file->readNumber();
 	_fieldBC = file->readNumber();
-	_fieldC0 = file->readNumber();
-	_fieldC4 = file->readNumber();
-	_fieldC8 = file->readNumber();
-	_fieldCC = file->readNumber();
-	_fieldD0 = file->readNumber();
+	_editLeft = file->readNumber();
+	_editBottom = file->readNumber();
+	_editHeight = file->readNumber();
+	_maxTextChars = file->readNumber();
+	_fontNumber = file->readNumber();
 	_fieldD4 = file->readNumber();
-	_fieldD8 = file->readNumber();
-	_fieldDC = file->readNumber();
-	_fieldE0 = file->readNumber();
-	_string1 = file->readString();
+	_textR = file->readNumber();
+	_textG = file->readNumber();
+	_textB = file->readNumber();
+	_text = file->readString();
 	_fieldF0 = file->readNumber();
 	_fieldF4 = file->readNumber();
 
 	CGameObject::load(file);
 }
 
+bool CEditControl::EditControlMsg(CEditControlMsg *msg) {
+	switch (msg->_mode) {
+	case 0:
+		if (!_editLeft) {
+			_editHeight = _bounds.height();
+			_editBottom = _bounds.bottom;
+			_editLeft = _bounds.left + _bounds.width() / 2;
+			_maxTextChars = msg->_param;
+			setTextFontNumber(_fontNumber);
+
+			CEditControlMsg ctlMsg;
+			ctlMsg._mode = 10;
+			ctlMsg._param = _fieldD4;
+			ctlMsg.execute(this);
+
+			ctlMsg._mode = 11;
+			ctlMsg._textR = _textR;
+			ctlMsg._textG = _textG;
+			ctlMsg._textB = _textB;
+			ctlMsg.execute(this);
+		}
+		break;
+
+	case 1: {
+		_text = "";
+		CEditControlMsg ctlMsg;
+		ctlMsg._mode = 14;
+		ctlMsg.execute(this);
+		break;
+	}
+
+	case 2: {
+		_text = msg->_text;
+		CEditControlMsg ctlMsg;
+		ctlMsg._mode = 14;
+		ctlMsg.execute(this);
+		break;
+	}
+
+	case 3:
+		msg->_text = _text;
+		break;
+
+	case 4:
+		msg->_param = _text.size();
+		break;
+
+	case 5:
+		_maxTextChars = msg->_param;
+		break;
+
+	case 6:
+		if (msg->_param == 8 && !_text.empty()) {
+			_text = _text.left(_text.size() - 1);
+			CEditControlMsg ctlMsg;
+			ctlMsg._mode = 14;
+			ctlMsg.execute(this);
+		} else if (msg->_param == 13) {
+			msg->_param = 1000;
+		} else if (msg->_param >= 32 && msg->_param < 127
+				&& _text.size() < _maxTextChars) {
+			char c = (char)msg->_param;
+			_text += c;
+
+			CEditControlMsg ctlMsg;
+			ctlMsg._mode = 14;
+			ctlMsg.execute(this);
+		}
+		break;
+
+	case 7:
+		setTextFontNumber(msg->_param);
+		break;
+
+	case 8:
+		if (!_fieldBC) {
+			_fieldBC = true;
+			CEditControlMsg ctlMsg;
+			ctlMsg._mode = 14;
+			ctlMsg.execute(this);
+		}
+		break;
+
+	case 9:
+		if (_fieldBC) {
+			_fieldBC = false;
+			getTextCursor()->hide();
+		}
+		break;
+
+	case 10: {
+		setTextHasBorders((msg->_param & 1) != 0);
+		if (msg->_param & 4)
+			_fieldF0 = 1;
+		else if (msg->_param & 8)
+			_fieldF0 = 2;
+		else
+			_fieldF0 = 0;
+
+		_fieldF4 = msg->_param & 0x10;
+		CEditControlMsg ctlMsg;
+		ctlMsg._mode = 14;
+		ctlMsg.execute(this);
+		break;
+	}
+
+	case 11:
+		setTextColor(msg->_textR, msg->_textG, msg->_textB);
+		break;
+
+	case 12:
+		setVisible(true);
+		break;
+
+	case 13:
+		setVisible(false);
+		break;
+
+	case 14: {
+		makeDirty();
+		CString borderName = _fieldF4 ? CString('*', _text.size()) : _text;
+		setTextBorder(borderName);
+
+		int textWidth = getTextWidth();
+		if (_fieldF0 == 2) {
+			_bounds.left = _editLeft - textWidth / 2;
+			_bounds.setWidth(textWidth + 16);
+			setTextBounds();
+			makeDirty();
+		}
+
+		if (_fieldBC) {
+			CTextCursor *textCursor = getTextCursor();
+			textCursor->show();
+			textCursor->setPos(Point(_bounds.left + textWidth + 1, _bounds.top + 3));
+			textCursor->setSize(Point(2, _editHeight - 6));
+			textCursor->setColor(0xff, 0xff, 0xff);
+			textCursor->clearBounds();
+		}
+		break;
+	}
+
+	default:
+		break;
+	}
+
+	return true;
+}
+
 } // End of namespace Titanic
diff --git a/engines/titanic/gfx/edit_control.h b/engines/titanic/gfx/edit_control.h
index 77d03cb..6c02f7a 100644
--- a/engines/titanic/gfx/edit_control.h
+++ b/engines/titanic/gfx/edit_control.h
@@ -28,18 +28,20 @@
 namespace Titanic {
 
 class CEditControl : public CGameObject {
+	DECLARE_MESSAGE_MAP;
+	bool EditControlMsg(CEditControlMsg *msg);
 protected:
-	int _fieldBC;
-	int _fieldC0;
-	int _fieldC4;
-	int _fieldC8;
-	int _fieldCC;
-	int _fieldD0;
+	bool _fieldBC;
+	int _editLeft;
+	int _editBottom;
+	int _editHeight;
+	uint _maxTextChars;
+	int _fontNumber;
 	int _fieldD4;
-	int _fieldD8;
-	int _fieldDC;
-	int _fieldE0;
-	CString _string1;
+	byte _textR;
+	byte _textG;
+	byte _textB;
+	CString _text;
 	int _fieldF0;
 	int _fieldF4;
 public:
diff --git a/engines/titanic/messages/messages.h b/engines/titanic/messages/messages.h
index e6d494e..4c1fb4f 100644
--- a/engines/titanic/messages/messages.h
+++ b/engines/titanic/messages/messages.h
@@ -149,16 +149,15 @@ public:
 
 class CEditControlMsg : public CMessage {
 public:
-	int _field4;
-	int _field8;
-	CString _string1;
-	int _field18;
-	int _field1C;
-	int _field20;
+	int _mode;
+	int _param;
+	CString _text;
+	byte _textR;
+	byte _textG;
+	byte _textB;
 public:
 	CLASSDEF;
-	CEditControlMsg() : _field4(0), _field8(0), _field18(0),
-		_field1C(0), _field20(0) {}
+	CEditControlMsg() : _mode(0), _param(0), _textR(0), _textG(0), _textB(0) {}
 
 	static bool isSupportedBy(const CTreeItem *item) {
 		return CMessage::supports(item, _type);






More information about the Scummvm-git-logs mailing list