diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/setup.cpp | 4 | ||||
-rw-r--r-- | src/gui/setup_keyboard.cpp | 123 | ||||
-rw-r--r-- | src/gui/setup_keyboard.h | 15 | ||||
-rw-r--r-- | src/keyboardconfig.cpp | 9 | ||||
-rw-r--r-- | src/keyboardconfig.h | 19 | ||||
-rw-r--r-- | src/main.cpp | 3 |
6 files changed, 90 insertions, 83 deletions
diff --git a/src/gui/setup.cpp b/src/gui/setup.cpp index b936f688..1c17c50e 100644 --- a/src/gui/setup.cpp +++ b/src/gui/setup.cpp @@ -44,7 +44,7 @@ Setup::Setup(): Window("Setup") { int width = 260; - int height = 305; + int height = 245; setContentSize(width, height); const char *buttonNames[] = { @@ -59,7 +59,7 @@ Setup::Setup(): } TabbedContainer *panel = new TabbedContainer(); - panel->setDimension(gcn::Rectangle(5, 5, 250, 265)); + panel->setDimension(gcn::Rectangle(5, 5, 250, 205)); panel->setOpaque(false); SetupTab *tab; diff --git a/src/gui/setup_keyboard.cpp b/src/gui/setup_keyboard.cpp index 6a89ce8f..2929cab6 100644 --- a/src/gui/setup_keyboard.cpp +++ b/src/gui/setup_keyboard.cpp @@ -24,9 +24,12 @@ #include "setup_keyboard.h" #include <guichan/widgets/label.hpp> +#include <guichan/listmodel.hpp> #include "button.h" +#include "listbox.h" #include "ok_dialog.h" +#include "scrollarea.h" #include "../configuration.h" #include "../keyboardconfig.h" @@ -35,38 +38,71 @@ #include <SDL_keyboard.h> -Setup_Keyboard::Setup_Keyboard() +/** + * The list model for key function list. + * + * \ingroup Interface + */ +class KeyListModel : public gcn::ListModel { - setOpaque(false); + public: + /** + * Returns the number of elements in container. + */ + int getNumberOfElements() { return keyboard.KEY_TOTAL; } + + /** + * Returns element from container. + */ + std::string getElementAt(int i) { return mKeyFunctions[i]; } + + /** + * Sets element from container. + */ + void setElementAt(int i, std::string caption) + { + mKeyFunctions[i] = caption; + } + + private: + std::string mKeyFunctions[keyboard.KEY_TOTAL]; +}; +Setup_Keyboard::Setup_Keyboard(): + mKeyListModel(new KeyListModel()), + mKeyList(new ListBox(mKeyListModel)) +{ keyboard.setSetupKeyboard(this); + setOpaque(false); - mKeyLabel = new gcn::Label[keyboard.KEY_TOTAL]; - mKeyButton = new Button[keyboard.KEY_TOTAL]; + refreshKeys(); + + mKeyList->setDimension(gcn::Rectangle(0, 0, 180, 140)); + mKeyList->addActionListener(this); + mKeyList->setSelected(-1); + + ScrollArea *scrollArea = new ScrollArea(mKeyList); + scrollArea->setDimension(gcn::Rectangle(10, 10, 180, 140)); + add(scrollArea); + + mAssignKeyButton = new Button("Assign", "assign", this); + mAssignKeyButton->setPosition(145, 155); + mAssignKeyButton->addActionListener(this); + mAssignKeyButton->setEnabled(false); + add(mAssignKeyButton); - for (int i = 0; i < keyboard.KEY_TOTAL; i++) - { - refreshAssignedKey(i); - mKeyLabel[i].setPosition(10, 10+(i*20)); - add(&mKeyLabel[i]); - - mKeyButton[i].setCaption("Set"); - mKeyButton[i].adjustSize(); - mKeyButton[i].addActionListener(this); - mKeyButton[i].setActionEventId("sk"+toString(i)); - mKeyButton[i].setPosition(150,5+(i*20)); - add(&mKeyButton[i]); - } mMakeDefaultButton = new Button("Default", "makeDefault", this); - mMakeDefaultButton->setPosition(200, 5); + mMakeDefaultButton->setPosition(10, 155); mMakeDefaultButton->addActionListener(this); add(mMakeDefaultButton); } Setup_Keyboard::~Setup_Keyboard() { - delete [] mKeyLabel; - delete [] mKeyButton; + delete mKeyList; + delete mKeyListModel; + + delete mAssignKeyButton; delete mMakeDefaultButton; } @@ -75,9 +111,7 @@ void Setup_Keyboard::apply() if (keyboard.hasConflicts()) { new OkDialog("Key Conflict(s) Detected.", - "One or more key conflicts has been detected. " - "Resolve them immediately, " - "or gameplay might result in unpredictable behaviour"); + "Resolve them, or gameplay may result in strange behaviour."); } keyboard.setEnabled(true); keyboard.store(); @@ -92,50 +126,43 @@ void Setup_Keyboard::cancel() void Setup_Keyboard::action(const gcn::ActionEvent &event) { - if (event.getId() == "makeDefault") + if (event.getSource() == mKeyList) { - keyboard.makeDefault(); - refreshKeys(); - return; + mAssignKeyButton->setEnabled(true); } - for (int i = 0; i < keyboard.KEY_TOTAL; i++) + else if (event.getId() == "assign") { - if (event.getId() == "sk"+toString(i)) - { - keyboard.setEnabled(false); - keyboard.setNewKeyIndex(i); - enableSetButtons(false); - mKeyLabel[i].setCaption(keyboard.getKeyCaption(i) + ": ?"); - } + int i(mKeyList->getSelected()); + mAssignKeyButton->setEnabled(false); + keyboard.setEnabled(false); + keyboard.setNewKeyIndex(i); + mKeyListModel->setElementAt(i, keyboard.getKeyCaption(i) + ": ?"); } -} - -void Setup_Keyboard::enableSetButtons(bool bValue) -{ - for (int i = 0; i < keyboard.KEY_TOTAL; i++) + else if (event.getId() == "makeDefault") { - mKeyButton[i].setEnabled(bValue); + keyboard.makeDefault(); + refreshKeys(); } } -void Setup_Keyboard::refreshAssignedKey(const int index) +void Setup_Keyboard::refreshAssignedKey(int index) { + std::string caption; char *temp = SDL_GetKeyName( (SDLKey) keyboard.getKeyValue(index)); - mKeyLabel[index].setCaption( - keyboard.getKeyCaption(index) + ": " + toString(temp)); - mKeyLabel[index].adjustSize(); + caption = keyboard.getKeyCaption(index) + ": " + toString(temp); + mKeyListModel->setElementAt(index, caption); } -void Setup_Keyboard::newKeyCallback(const int index) +void Setup_Keyboard::newKeyCallback(int index) { refreshAssignedKey(index); - enableSetButtons(true); + mAssignKeyButton->setEnabled(true); } void Setup_Keyboard::refreshKeys() { - for (int i = 0; i < keyboard.KEY_TOTAL; i++) + for(int i = 0; i < keyboard.KEY_TOTAL; i++) { refreshAssignedKey(i); } diff --git a/src/gui/setup_keyboard.h b/src/gui/setup_keyboard.h index 4701487b..ccc2558f 100644 --- a/src/gui/setup_keyboard.h +++ b/src/gui/setup_keyboard.h @@ -52,19 +52,14 @@ class Setup_Keyboard : public SetupTab, public gcn::ActionListener void action(const gcn::ActionEvent &event); /** - * Easy way to disable/enable all the set buttons. - */ - void enableSetButtons(bool bValue); - - /** * Get an update on the assigned key. */ - void refreshAssignedKey(const int index); + void refreshAssignedKey(int index); /** * The callback function when a new key has been pressed. */ - void newKeyCallback(const int index); + void newKeyCallback(int index); /** * Shorthand method to update all the keys. @@ -72,10 +67,10 @@ class Setup_Keyboard : public SetupTab, public gcn::ActionListener void refreshKeys(); private: - gcn::Label *mKeyLabel; - - Button *mKeyButton; + class KeyListModel *mKeyListModel; + gcn::ListBox *mKeyList; + gcn::Button *mAssignKeyButton; gcn::Button *mMakeDefaultButton; }; diff --git a/src/keyboardconfig.cpp b/src/keyboardconfig.cpp index 277fbcd3..73912000 100644 --- a/src/keyboardconfig.cpp +++ b/src/keyboardconfig.cpp @@ -56,13 +56,6 @@ void KeyboardConfig::init() retrieve(); } -void KeyboardConfig::destroy() -{ - store(); - - delete [] mActiveKeys; -} - void KeyboardConfig::retrieve() { for (int i = 0; i < KEY_TOTAL; i++) @@ -109,7 +102,7 @@ void KeyboardConfig::callbackNewKey() mSetupKey->newKeyCallback(mNewKeyIndex); } -int KeyboardConfig::getKeyIndex(const int keyValue) const +int KeyboardConfig::getKeyIndex(int keyValue) const { for (int i = 0; i < KEY_TOTAL; i++) { diff --git a/src/keyboardconfig.h b/src/keyboardconfig.h index e2eef385..64d80629 100644 --- a/src/keyboardconfig.h +++ b/src/keyboardconfig.h @@ -60,11 +60,6 @@ class KeyboardConfig void init(); /** - * Destroys the keyboard config explicitly. - */ - void destroy(); - - /** * Retrieve the key values from config file. */ void retrieve(); @@ -110,7 +105,7 @@ class KeyboardConfig /** * Get the key caption, providing more meaning to the user. */ - std::string& getKeyCaption(int index) + std::string const &getKeyCaption(int index) const { return mKey[index].caption; } /** @@ -145,7 +140,7 @@ class KeyboardConfig /** * Checks if the key is active, by providing the key function index. */ - bool isKeyActive(const int index); + bool isKeyActive(int index); /** * Takes a snapshot of all the active keys. @@ -178,14 +173,14 @@ class KeyboardConfig }; private: - int mNewKeyIndex; /** Index of new key to be assigned */ - bool mEnabled; /** Flag to determine respond to key input */ + int mNewKeyIndex; /**< Index of new key to be assigned */ + bool mEnabled; /**< Flag to respond to key input */ - Setup_Keyboard *mSetupKey; /** Reference to setup window */ + Setup_Keyboard *mSetupKey; /**< Reference to setup window */ - KeyFunction mKey[KEY_TOTAL]; /** Pointer to all the key data */ + KeyFunction mKey[KEY_TOTAL]; /**< Pointer to all the key data */ - Uint8 *mActiveKeys; /** Stores a list of all the keys */ + Uint8 *mActiveKeys; /**< Stores a list of all the keys */ }; extern KeyboardConfig keyboard; diff --git a/src/main.cpp b/src/main.cpp index 112c5b6e..613d78a7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -328,9 +328,6 @@ void init_engine(const Options &options) /** Clear the engine */ void exit_engine() { - // Remove Keyboard configuration. - keyboard.destroy(); - config.write(); delete gui; |