[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