diff options
author | Andrei Karas <akaras@inbox.ru> | 2012-12-31 19:26:21 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2012-12-31 19:26:21 +0300 |
commit | f355fe070293a3f80b33ee0bc0154b2fe767fc4d (patch) | |
tree | 2a7a3015791dabcae946f2b12259233b4e38876c | |
parent | 6fbb71142de5b2b12c2153b41a21b6dc34284343 (diff) | |
download | manaplus-f355fe070293a3f80b33ee0bc0154b2fe767fc4d.tar.gz manaplus-f355fe070293a3f80b33ee0bc0154b2fe767fc4d.tar.bz2 manaplus-f355fe070293a3f80b33ee0bc0154b2fe767fc4d.tar.xz manaplus-f355fe070293a3f80b33ee0bc0154b2fe767fc4d.zip |
Sort onscreen keyboard actions list.
-rw-r--r-- | src/gui/widgets/setuptouchitem.cpp | 57 | ||||
-rw-r--r-- | src/gui/widgets/setuptouchitem.h | 41 |
2 files changed, 64 insertions, 34 deletions
diff --git a/src/gui/widgets/setuptouchitem.cpp b/src/gui/widgets/setuptouchitem.cpp index 59f33b6a5..06faf7b19 100644 --- a/src/gui/widgets/setuptouchitem.cpp +++ b/src/gui/widgets/setuptouchitem.cpp @@ -27,6 +27,62 @@ #include "debug.h" +class SortTouchActionFunctor final +{ + public: + bool operator() (const SetupActionData *const data1, + const SetupActionData *const data2) const + { + if (!data1 || !data2) + return false; + return data1->name < data2->name; + } +} touchActionSorter; + +TouchActionsModel::TouchActionsModel() +{ + std::vector<SetupActionData*> data; + + for (int f = 0, sz = touchActionDataSize; f < sz; f ++) + { + int k = 0; + while (!touchActionData[f][k].name.empty()) + { + data.push_back(&touchActionData[f][k]); + k ++; + } + } + + std::sort(data.begin(), data.end(), touchActionSorter); + int cnt = 0; + for (std::vector<SetupActionData*>::iterator it = data.begin(), + it_end = data.end(); it != it_end; ++ it) + { + const SetupActionData *data1 = *it; + mNames.push_back(data1->name); + mActionId.push_back(data1->actionId); + mActionToSelection[data1->actionId] = cnt; + cnt ++; + } +} + +int TouchActionsModel::getActionFromSelection(int sel) +{ + if (sel < 0 || sel > mActionId.size()) + return -1; + return mActionId[sel]; +} + +int TouchActionsModel::getSelectionFromAction(int action) +{ + std::map<int, int>::const_iterator it + = mActionToSelection.find(action); + if (it == mActionToSelection.end()) + return 0; + return (*it).second; +} + + SetupActionDropDown::SetupActionDropDown(std::string text, std::string description, std::string keyName, @@ -89,7 +145,6 @@ void SetupActionDropDown::createControls() atoi(mValue.c_str()))); mWidget = mDropDown; -// mTextField->setWidth(50); fixFirstItemSize(mLabel); mHorizont->add(mLabel); mHorizont->add(mDropDown); diff --git a/src/gui/widgets/setuptouchitem.h b/src/gui/widgets/setuptouchitem.h index 2f5cf7805..77eff2ae6 100644 --- a/src/gui/widgets/setuptouchitem.h +++ b/src/gui/widgets/setuptouchitem.h @@ -26,46 +26,21 @@ #include "gui/widgets/namesmodel.h" #include "gui/widgets/setupitem.h" +#include <algorithm> + class TouchActionsModel final : public NamesModel { public: - TouchActionsModel() : - NamesModel() - { - int cnt = 0; - for (int f = 0, sz = touchActionDataSize; f < sz; f ++) - { - int k = 0; - while (!touchActionData[f][k].name.empty()) - { - const SetupActionData &data = touchActionData[f][k]; - mNames.push_back(data.name); - mActionId.push_back(data.actionId); - mActionToSelection[data.actionId] = cnt; - k ++; - cnt ++; - } - } - } + TouchActionsModel(); + + A_DELETE_COPY(TouchActionsModel) virtual ~TouchActionsModel() { } - int getActionFromSelection(int sel) - { - if (sel < 0 || sel > mActionId.size()) - return -1; - return mActionId[sel]; - } - - int getSelectionFromAction(int action) - { - std::map<int, int>::const_iterator it - = mActionToSelection.find(action); - if (it == mActionToSelection.end()) - return 0; - return (*it).second; - } + int getActionFromSelection(int sel); + + int getSelectionFromAction(int action); private: std::vector<int> mActionId; |