[Scummvm-cvs-logs] SF.net SVN: scummvm:[33843] scummvm/branches/gsoc2008-vkeybd/backends

kenny-d at users.sourceforge.net kenny-d at users.sourceforge.net
Wed Aug 13 21:24:56 CEST 2008


Revision: 33843
          http://scummvm.svn.sourceforge.net/scummvm/?rev=33843&view=rev
Author:   kenny-d
Date:     2008-08-13 19:24:52 +0000 (Wed, 13 Aug 2008)

Log Message:
-----------
RemapDialog now properly uses reflowLayout() and open(), so that the same instance can be reopened

Modified Paths:
--------------
    scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.h
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.h
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/remap-dialog.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/remap-dialog.h
    scummvm/branches/gsoc2008-vkeybd/backends/platform/sdl/events.cpp

Modified: scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.cpp	2008-08-13 19:20:45 UTC (rev 33842)
+++ scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.cpp	2008-08-13 19:24:52 UTC (rev 33843)
@@ -198,6 +198,7 @@
 
 	_vk = new Common::VirtualKeyboard();
 	_keymapper = new Common::Keymapper(this);
+	_remap = false;
 }
 
 DefaultEventManager::~DefaultEventManager() {
@@ -429,8 +430,15 @@
 					result = false;
 				}
 			} else if (event.kbd.keycode == Common::KEYCODE_F7 && event.kbd.flags == 0) {
-				Common::RemapDialog dialog;
-				dialog.runModal();
+				if (!_remap) {
+					_remap = true;
+					Common::RemapDialog _remapDialog;
+					bool isPaused = (g_engine) ? g_engine->isPaused() : true;
+					if (!isPaused) g_engine->pauseEngine(true);
+					_remapDialog.runModal();
+					if (!isPaused) g_engine->pauseEngine(false);
+					_remap = false;
+				}
 			}
 
 			break;

Modified: scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.h	2008-08-13 19:20:45 UTC (rev 33842)
+++ scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.h	2008-08-13 19:24:52 UTC (rev 33843)
@@ -31,6 +31,7 @@
 #include "common/savefile.h"
 
 namespace Common {
+	class Keymapper;
 	class VirtualKeyboard;
 }
 
@@ -51,6 +52,7 @@
 
 	Common::VirtualKeyboard *_vk;
 	Common::Keymapper *_keymapper;
+	bool _remap;
 
 	Common::Queue<Common::Event> _artificialEventQueue;
 	int _artificialEventCounter;

Modified: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.h	2008-08-13 19:20:45 UTC (rev 33842)
+++ scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.h	2008-08-13 19:24:52 UTC (rev 33843)
@@ -36,9 +36,12 @@
 namespace Common {
 
 class Keymapper {
-	friend class RemapDialog;
-
 public:
+	
+	struct MapRecord {
+		Keymap* keymap;
+		bool inherit;
+	};
 
 	Keymapper(EventManager *eventMan);
 	~Keymapper();
@@ -105,6 +108,9 @@
 
 	void setEnabled(bool enabled) { _enabled = enabled; }
 
+	KeymapManager *getManager() { return _keymapMan; }
+	Stack<MapRecord>& getActiveStack() { return _activeMaps; }
+
 private:
 
 	void pushKeymap(Keymap *newMap, bool inherit);
@@ -116,11 +122,6 @@
 
 	bool _enabled;
 
-	struct MapRecord {
-		Keymap* keymap;
-		bool inherit;
-	};
-
 	Stack<MapRecord> _activeMaps;
 
 };

Modified: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/remap-dialog.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/keymapper/remap-dialog.cpp	2008-08-13 19:20:45 UTC (rev 33842)
+++ scummvm/branches/gsoc2008-vkeybd/backends/keymapper/remap-dialog.cpp	2008-08-13 19:24:52 UTC (rev 33843)
@@ -35,39 +35,49 @@
 };
 
 RemapDialog::RemapDialog()
-	: Dialog("remap"), _activeRemapAction(0), _topAction(0), _remapTimeout(0) {
+	: Dialog("remap"), _keymapTable(0), _activeRemapAction(0), _topAction(0), _remapTimeout(0) {
 
 	const int screenW = g_system->getOverlayWidth();
 	const int screenH = g_system->getOverlayHeight();
 
 	_keymapper = g_system->getEventManager()->getKeymapper();
 	assert(_keymapper);
-	_activeKeymaps = &_keymapper->_activeMaps;
 
+	int labelWidth = g_gui.evaluator()->getVar("remap_popup_labelW");
+	_kmPopUp = new GUI::PopUpWidget(this, "remap_popup", "Keymap: ", labelWidth);
 
-	KeymapManager::Domain *_globalKeymaps = &_keymapper->_keymapMan->getGlobalDomain();
+	_scrollBar = new GUI::ScrollBarWidget(this, 0, 0, 0, 0);
+}
+
+RemapDialog::~RemapDialog() {
+	if (_keymapTable) free(_keymapTable);
+}
+
+void RemapDialog::open() {
+	_activeKeymaps = &_keymapper->getActiveStack();
+	if (_activeKeymaps->size() > 0) {
+		_kmPopUp->appendEntry(_activeKeymaps->top().keymap->getName() + " (Active)");
+	}
+
+	KeymapManager::Domain *_globalKeymaps = &_keymapper->getManager()->getGlobalDomain();
 	KeymapManager::Domain *_gameKeymaps = 0;
+
 	int keymapCount = 0;
-	if (_globalKeymaps->count() == 0) {
+	if (_globalKeymaps->count() == 0)
 		_globalKeymaps = 0;
-	} else {
+	else
 		keymapCount += _globalKeymaps->count();
-	}
+
 	if (ConfMan.getActiveDomain() != 0) {
-		_gameKeymaps = &_keymapper->_keymapMan->getGameDomain();
-		if (_gameKeymaps->count() == 0) {
+		_gameKeymaps = &_keymapper->getManager()->getGameDomain();
+		if (_gameKeymaps->count() == 0)
 			_gameKeymaps = 0;
-		} else {
+		else
 			keymapCount += _gameKeymaps->count();
-		}
 	}
+
 	_keymapTable = (Keymap**)malloc(sizeof(Keymap*) * keymapCount);
 
-	int labelWidth = g_gui.evaluator()->getVar("remap_popup_labelW");
-	_kmPopUp = new GUI::PopUpWidget(this, "remap_popup", "Keymap: ", labelWidth);
-	if (_activeKeymaps->size() > 0) {
-		_kmPopUp->appendEntry(_activeKeymaps->top().keymap->getName() + " (Active)");
-	}
 	KeymapManager::Domain::iterator it;
 	uint32 idx = 0;
 	if (_globalKeymaps) {
@@ -85,20 +95,81 @@
 		}
 	}
 
-	setupWidgets();
-}
-
-RemapDialog::~RemapDialog() {
-	free(_keymapTable);
-}
-
-void RemapDialog::open() {
 	Dialog::open();
 	
 	_kmPopUp->setSelected(0);
 	loadKeymap();
 }
 
+void RemapDialog::close() {
+	_kmPopUp->clearEntries();
+	if (_keymapTable) {
+		free(_keymapTable);
+		_keymapTable = 0;
+	}
+	Dialog::close();
+}
+
+void RemapDialog::reflowLayout() {
+	int labelWidth = g_gui.evaluator()->getVar("remap_popup_labelW");
+	_kmPopUp->changeLabelWidth(labelWidth);
+
+	int scrollbarWidth, buttonHeight;
+	if (g_gui.getWidgetSize() == GUI::kBigWidgetSize) {
+		buttonHeight = GUI::kBigButtonHeight;
+		scrollbarWidth = GUI::kBigScrollBarWidth;
+	} else {
+		buttonHeight = GUI::kButtonHeight;
+		scrollbarWidth = GUI::kNormalScrollBarWidth;
+	}
+	int areaX = g_gui.evaluator()->getVar("remap_keymap_area.x");
+	int areaY = g_gui.evaluator()->getVar("remap_keymap_area.y");
+	int areaW = g_gui.evaluator()->getVar("remap_keymap_area.w");
+	int areaH = g_gui.evaluator()->getVar("remap_keymap_area.h");
+	int spacing = g_gui.evaluator()->getVar("remap_spacing");
+	_colCount = g_gui.evaluator()->getVar("remap_col_count");
+	if (_colCount <= 0) 
+		error("remap_col_count must be >= 0");
+	_rowCount = (areaH + spacing) / (buttonHeight + spacing);
+	if (_rowCount <= 0) 
+		error("Remap dialog too small to display any keymaps!");
+	int colWidth = (areaW - scrollbarWidth - _colCount * spacing) / _colCount;
+
+	_scrollBar->resize(areaX + areaW - scrollbarWidth, areaY, scrollbarWidth, areaH);
+	_scrollBar->_entriesPerPage = _rowCount;
+	_scrollBar->_numEntries = 1;
+	_scrollBar->recalc();
+
+	uint textYOff = (buttonHeight - kLineHeight) / 2;
+	uint oldSize = _keymapWidgets.size();
+	uint newSize = _rowCount * _colCount;
+	_keymapWidgets.reserve(newSize);
+	for (uint i = 0; i < newSize; i++) {
+		ActionWidgets widg;
+		if (i >= _keymapWidgets.size()) {
+			widg.actionText = 
+				new GUI::StaticTextWidget(this, 0, 0, 0, 0, "", Graphics::kTextAlignRight);
+			widg.keyButton = 
+				new GUI::ButtonWidget(this, 0, 0, 0, 0, "", kRemapCmd + i);
+			_keymapWidgets.push_back(widg);
+		} else {
+			widg = _keymapWidgets[i];
+		}
+		uint x = areaX + (i % _colCount) * (colWidth + spacing);
+		uint y = areaY + (i / _colCount) * (buttonHeight + spacing);
+		widg.actionText->resize(x, y + textYOff, colWidth / 2, kLineHeight);
+		widg.keyButton->resize(x + colWidth / 2, y, colWidth / 2, buttonHeight);
+	}
+	while (oldSize > newSize) {
+		ActionWidgets widg = _keymapWidgets.remove_at(--oldSize);
+		removeWidget(widg.actionText);
+		delete widg.actionText;
+		removeWidget(widg.keyButton);
+		delete widg.keyButton;
+	}
+	Dialog::reflowLayout();
+}
+
 void RemapDialog::handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) {
 	if (cmd >= kRemapCmd && cmd < kRemapCmd + _keymapWidgets.size()) {
 		startRemapping(cmd - kRemapCmd);
@@ -155,7 +226,7 @@
 void RemapDialog::loadKeymap() {
 	_currentActions.clear();
 	if (_activeKeymaps->size() > 0 && _kmPopUp->getSelected() == 0) {
-		List<const HardwareKey*> freeKeys (_keymapper->_keymapMan->getHardwareKeySet()->getHardwareKeys());
+		List<const HardwareKey*> freeKeys (_keymapper->getManager()->getHardwareKeySet()->getHardwareKeys());
 
 		// add most active keymap's keys
 		Keymapper::MapRecord top = _activeKeymaps->top();
@@ -242,47 +313,5 @@
 	draw();
 }
 
-void RemapDialog::setupWidgets() {
 
-	int scrollbarWidth, buttonHeight;
-	if (g_gui.getWidgetSize() == GUI::kBigWidgetSize) {
-		buttonHeight = GUI::kBigButtonHeight;
-		scrollbarWidth = GUI::kBigScrollBarWidth;
-	} else {
-		buttonHeight = GUI::kButtonHeight;
-		scrollbarWidth = GUI::kNormalScrollBarWidth;
-	}
-	int areaX = g_gui.evaluator()->getVar("remap_keymap_area.x");
-	int areaY = g_gui.evaluator()->getVar("remap_keymap_area.y");
-	int areaW = g_gui.evaluator()->getVar("remap_keymap_area.w");
-	int areaH = g_gui.evaluator()->getVar("remap_keymap_area.h");
-	int spacing = g_gui.evaluator()->getVar("remap_spacing");
-
-	_colCount = g_gui.evaluator()->getVar("remap_col_count");
-	_rowCount = (areaH + spacing) / (buttonHeight + spacing);
-	int colWidth = (areaW - scrollbarWidth - _colCount * spacing) / _colCount;
-
-	//_container = new GUI::ContainerWidget(this, areaX, areaY, areaW, areaH);
-	//_container->setHints(GUI::THEME_HINT_USE_SHADOW);
-
-	_scrollBar = new GUI::ScrollBarWidget(this, 
-		areaX + areaW - scrollbarWidth, areaY, scrollbarWidth, areaH);
-	_scrollBar->_entriesPerPage = _rowCount;
-	_scrollBar->_numEntries = 1;
-	_scrollBar->recalc();
-
-	uint textYOff = (buttonHeight - kLineHeight) / 2;
-	int n = _rowCount * _colCount;
-	for (int i = 0; i < n; i++) {
-		uint x = areaX + (i % _colCount) * (colWidth + spacing);
-		uint y = areaY + (i / _colCount) * (buttonHeight + spacing);
-		ActionWidgets widg;
-		widg.actionText = new GUI::StaticTextWidget(this, x, y + textYOff, 
-			colWidth / 2, kLineHeight, "", Graphics::kTextAlignRight);
-		widg.keyButton = new GUI::ButtonWidget(this, x + colWidth / 2,
-			y, colWidth / 2, buttonHeight, "", kRemapCmd + i);
-		_keymapWidgets.push_back(widg);
-	}
-}
-
 } // end of namespace Common

Modified: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/remap-dialog.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/keymapper/remap-dialog.h	2008-08-13 19:20:45 UTC (rev 33842)
+++ scummvm/branches/gsoc2008-vkeybd/backends/keymapper/remap-dialog.h	2008-08-13 19:24:52 UTC (rev 33843)
@@ -40,6 +40,8 @@
 	RemapDialog();
 	virtual ~RemapDialog();
 	virtual void open();
+	virtual void close();
+	virtual void reflowLayout();
 	virtual void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data);
 	virtual void handleKeyUp(Common::KeyState state);
 	virtual void handleMouseDown(int x, int y, int button, int clickCount);
@@ -58,7 +60,6 @@
 
 	void loadKeymap();
 	void refreshKeymap();
-	void setupWidgets();
 	void startRemapping(uint i);
 	void stopRemapping();
 

Modified: scummvm/branches/gsoc2008-vkeybd/backends/platform/sdl/events.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/platform/sdl/events.cpp	2008-08-13 19:20:45 UTC (rev 33842)
+++ scummvm/branches/gsoc2008-vkeybd/backends/platform/sdl/events.cpp	2008-08-13 19:24:52 UTC (rev 33843)
@@ -566,6 +566,10 @@
 	ADD_KEYDOWN_EVENT(KEYCODE_d, 'd', 0);
 	specific->addAction(act);
 
+	act = new Action('RUN_', "Run");
+	ADD_KEYDOWN_EVENT(KEYCODE_r, 'r', 0);
+	specific->addAction(act);
+
 	#undef ADD_KEYDOWN_EVENT
 
 	mapper->addGlobalKeymap(global);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list