diff options
Diffstat (limited to 'gui/Actions.cpp')
-rw-r--r-- | gui/Actions.cpp | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/gui/Actions.cpp b/gui/Actions.cpp new file mode 100644 index 0000000000..58f96e7bbb --- /dev/null +++ b/gui/Actions.cpp @@ -0,0 +1,169 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2005 The ScummVM project + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Header$ + * + */ + +#include "stdafx.h" +#include "gui/Actions.h" +#include "gui/message.h" +#include "scumm/scumm.h" +#include "common/config-manager.h" + +#ifdef _WIN32_WCE + #include "backends/wince/CEActionsPocket.h" + #include "backends/wince/CEActionsSmartphone.h" +#elif defined(__SYMBIAN32__) + #include "backends/epoc/SymbianActions.h" +#endif + +namespace GUI { + +Actions* Actions::Instance() { + return _instance; +} + +Actions::Actions(GameDetector &detector) : + _detector(&detector), _mapping_active(false), _initialized(false) +{ +} + + +Actions::~Actions() { +} + +// call the correct object creator function according to the Factory Pattern +void Actions::init(GameDetector &detector) { +#ifdef _WIN32_WCE + // For WinCE: now use software + Factory pattern to create correct objects + if (!CEDevice::hasSmartphoneResolution()) + CEActionsPocket::init(detector); + else + CEActionsSmartphone::init(detector); +#elif defined(__SYMBIAN32__) + SymbianActions::init(detector); +#endif +} + +void Actions::initInstanceMain(OSystem *mainSystem) { + _mainSystem = mainSystem; +} + +void Actions::initInstanceGame() { + _instance->_initialized = true; +} + + +bool Actions::initialized() { + return _initialized; +} + +bool Actions::isActive(ActionType action) { + return false; +} + +bool Actions::isEnabled(ActionType action) { + return _action_enabled[action]; +} + +void Actions::beginMapping(bool start) { + _mapping_active = start; +} + +bool Actions::mappingActive() { + return _mapping_active; +} + +bool Actions::performMapped(unsigned int keyCode, bool pushed) { + int i; + + for (i=0; i<size(); i++) { + if (_action_mapping[i] == keyCode && _action_enabled[i]) + return perform((ActionType)i, pushed); + } + + return false; +} + +bool Actions::loadMapping() { + const char *tempo; + int current_version; + int i; + current_version = ConfMan.getInt("action_mapping_version", domain()); + if (current_version != version()) + return false; + tempo = ConfMan.get("action_mapping", domain()).c_str(); + if (tempo && strlen(tempo)) { + for (i=0; i<size(); i++) { + char x[7]; + int j; + memset(x, 0, sizeof(x)); + memcpy(x, tempo + 5 * i, 4); + sscanf(x, "%x", &j); + _action_mapping[i] = j; + } + return true; + } + else + return false; +} + +bool Actions::saveMapping() { + char tempo[200]; + int i; + tempo[0] = '\0'; + ConfMan.set("action_mapping_version", version(), domain()); + for (i=0; i<size(); i++) { + char x[10]; + sprintf(x, "%.4x ", _action_mapping[i]); + strcat(tempo, x); + } + ConfMan.set("action_mapping", tempo, domain()); + ConfMan.flushToDisk(); + return true; +} + +unsigned int Actions::getMapping(ActionType action) { + return _action_mapping[action]; +} + + +void Actions::setMapping(ActionType action, unsigned int keyCode) { + int i; + + for (i=0; i<size(); i++) { + if (_action_mapping[i] == keyCode) + _action_mapping[i] = 0; + } + + _action_mapping[action] = keyCode; +} + +Key& Actions::getKeyAction(ActionType action) +{ + return _key_action[action]; +} + +// Game detector +GameDetector& Actions::gameDetector(){ + return *_detector; +} +Actions *Actions::_instance = NULL; + + +} // namespace GUI |