| src/menusettingmultistring.cpp |
| 18 | 18 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
| 19 | 19 | ***************************************************************************/ |
| 20 | 20 | #include "menusettingmultistring.h" |
| 21 | | #include "utilities.h" |
| 22 | 21 | |
| 23 | 22 | using namespace std; |
| 24 | 23 | using namespace fastdelegate; |
| 25 | 24 | |
| 26 | | MenuSettingMultiString::MenuSettingMultiString(GMenu2X *gmenu2x, const string &name, const string &description, string *value, const vector<string> *choices) |
| 27 | | : MenuSetting(gmenu2x,name,description) |
| 25 | MenuSettingMultiString::MenuSettingMultiString( |
| 26 | GMenu2X *gmenu2x, const string &name, |
| 27 | const string &description, string *value, |
| 28 | const vector<string> *choices_) |
| 29 | : MenuSettingStringBase(gmenu2x, name, description, value) |
| 30 | , choices(choices_) |
| 28 | 31 | { |
| 29 | | IconButton *btn; |
| 32 | setSel(find(choices->begin(), choices->end(), *value) - choices->begin()); |
| 30 | 33 | |
| 31 | | this->choices = choices; |
| 32 | | this->value = value; |
| 33 | | originalValue = *value; |
| 34 | | setSel( find(choices->begin(),choices->end(),*value)-choices->begin() ); |
| 34 | IconButton *btn; |
| 35 | 35 | |
| 36 | 36 | btn = new IconButton(gmenu2x, "skin:imgs/buttons/left.png"); |
| 37 | 37 | btn->setAction(MakeDelegate(this, &MenuSettingMultiString::decSel)); |
| ... | ... | |
| 42 | 42 | buttonBox.add(btn); |
| 43 | 43 | } |
| 44 | 44 | |
| 45 | | void MenuSettingMultiString::draw(int y) |
| 46 | | { |
| 47 | | MenuSetting::draw(y); |
| 48 | | gmenu2x->s->write( gmenu2x->font, *value, 155, y+gmenu2x->font->getHalfHeight(), SFontHAlignLeft, SFontVAlignMiddle ); |
| 49 | | } |
| 50 | | |
| 51 | 45 | void MenuSettingMultiString::manageInput() |
| 52 | 46 | { |
| 53 | | if (gmenu2x->input[ACTION_LEFT ]) |
| 54 | | decSel(); |
| 55 | | if (gmenu2x->input[ACTION_RIGHT]) |
| 56 | | incSel(); |
| 47 | if (gmenu2x->input[ACTION_LEFT ]) decSel(); |
| 48 | if (gmenu2x->input[ACTION_RIGHT]) incSel(); |
| 57 | 49 | } |
| 58 | 50 | |
| 59 | 51 | void MenuSettingMultiString::incSel() |
| 60 | 52 | { |
| 61 | | setSel(selected+1); |
| 53 | setSel(selected + 1); |
| 62 | 54 | } |
| 63 | 55 | |
| 64 | 56 | void MenuSettingMultiString::decSel() |
| 65 | 57 | { |
| 66 | | setSel(selected-1); |
| 58 | setSel(selected - 1); |
| 67 | 59 | } |
| 68 | 60 | |
| 69 | 61 | void MenuSettingMultiString::setSel(int sel) |
| 70 | 62 | { |
| 71 | | if (sel < 0) |
| 63 | if (sel < 0) { |
| 72 | 64 | sel = choices->size()-1; |
| 73 | | else if (sel >= (int)choices->size()) |
| 65 | } else if (sel >= (int)choices->size()) { |
| 74 | 66 | sel = 0; |
| 67 | } |
| 75 | 68 | selected = sel; |
| 76 | | *value = (*choices)[sel]; |
| 77 | | } |
| 78 | | |
| 79 | | bool MenuSettingMultiString::edited() |
| 80 | | { |
| 81 | | return originalValue != *value; |
| 69 | setValue((*choices)[sel]); |
| 82 | 70 | } |
| src/menusettingmultistring.h |
| 20 | 20 | #ifndef MENUSETTINGMULTISTRING_H |
| 21 | 21 | #define MENUSETTINGMULTISTRING_H |
| 22 | 22 | |
| 23 | | #include "gmenu2x.h" |
| 24 | | #include "menusetting.h" |
| 23 | #include "menusettingstringbase.h" |
| 25 | 24 | |
| 26 | 25 | using std::string; |
| 27 | 26 | |
| 28 | | class MenuSettingMultiString : public MenuSetting { |
| 27 | class MenuSettingMultiString : public MenuSettingStringBase { |
| 29 | 28 | private: |
| 30 | | uint selected; |
| 31 | | string *value; |
| 32 | | string originalValue; |
| 29 | virtual void edit() { |
| 30 | /* never called because manageInput() is overridden */ |
| 31 | } |
| 32 | |
| 33 | 33 | const vector<string> *choices; |
| 34 | | IconButton *btnDec, *btnInc; |
| 34 | uint selected; |
| 35 | 35 | |
| 36 | 36 | void incSel(); |
| 37 | 37 | void decSel(); |
| 38 | | void setSel(int); |
| 38 | void setSel(int sel); |
| 39 | 39 | |
| 40 | 40 | public: |
| 41 | | MenuSettingMultiString(GMenu2X *gmenu2x, const string &name, const string &description, string *value, const vector<string> *choices); |
| 41 | MenuSettingMultiString( |
| 42 | GMenu2X *gmenu2x, const string &name, |
| 43 | const string &description, string *value, |
| 44 | const vector<string> *choices); |
| 42 | 45 | virtual ~MenuSettingMultiString() {}; |
| 43 | 46 | |
| 44 | | virtual void draw(int y); |
| 45 | 47 | virtual void manageInput(); |
| 46 | | virtual bool edited(); |
| 47 | 48 | }; |
| 48 | 49 | |
| 49 | 50 | #endif |