Date:2010-07-28 02:06:49 (13 years 4 months ago)
Author:Maarten ter Huurne
Commit:961e0306700a0ce60f257b58cb45f42c4a08eada
Message:Made MenuSettingMultiString a subclass of MenuSettingStringBase.

Files: src/menusettingmultistring.cpp (2 diffs)
src/menusettingmultistring.h (1 diff)

Change Details

src/menusettingmultistring.cpp
1818 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
1919 ***************************************************************************/
2020#include "menusettingmultistring.h"
21#include "utilities.h"
2221
2322using namespace std;
2423using namespace fastdelegate;
2524
26MenuSettingMultiString::MenuSettingMultiString(GMenu2X *gmenu2x, const string &name, const string &description, string *value, const vector<string> *choices)
27    : MenuSetting(gmenu2x,name,description)
25MenuSettingMultiString::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_)
2831{
29    IconButton *btn;
32    setSel(find(choices->begin(), choices->end(), *value) - choices->begin());
3033
31    this->choices = choices;
32    this->value = value;
33    originalValue = *value;
34    setSel( find(choices->begin(),choices->end(),*value)-choices->begin() );
34    IconButton *btn;
3535
3636    btn = new IconButton(gmenu2x, "skin:imgs/buttons/left.png");
3737    btn->setAction(MakeDelegate(this, &MenuSettingMultiString::decSel));
...... 
4242    buttonBox.add(btn);
4343}
4444
45void 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
5145void MenuSettingMultiString::manageInput()
5246{
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();
5749}
5850
5951void MenuSettingMultiString::incSel()
6052{
61    setSel(selected+1);
53    setSel(selected + 1);
6254}
6355
6456void MenuSettingMultiString::decSel()
6557{
66    setSel(selected-1);
58    setSel(selected - 1);
6759}
6860
6961void MenuSettingMultiString::setSel(int sel)
7062{
71    if (sel < 0)
63    if (sel < 0) {
7264        sel = choices->size()-1;
73    else if (sel >= (int)choices->size())
65    } else if (sel >= (int)choices->size()) {
7466        sel = 0;
67    }
7568    selected = sel;
76    *value = (*choices)[sel];
77}
78
79bool MenuSettingMultiString::edited()
80{
81    return originalValue != *value;
69    setValue((*choices)[sel]);
8270}
src/menusettingmultistring.h
2020#ifndef MENUSETTINGMULTISTRING_H
2121#define MENUSETTINGMULTISTRING_H
2222
23#include "gmenu2x.h"
24#include "menusetting.h"
23#include "menusettingstringbase.h"
2524
2625using std::string;
2726
28class MenuSettingMultiString : public MenuSetting {
27class MenuSettingMultiString : public MenuSettingStringBase {
2928private:
30    uint selected;
31    string *value;
32    string originalValue;
29    virtual void edit() {
30        /* never called because manageInput() is overridden */
31    }
32
3333    const vector<string> *choices;
34    IconButton *btnDec, *btnInc;
34    uint selected;
3535
3636    void incSel();
3737    void decSel();
38    void setSel(int);
38    void setSel(int sel);
3939
4040public:
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);
4245    virtual ~MenuSettingMultiString() {};
4346
44    virtual void draw(int y);
4547    virtual void manageInput();
46    virtual bool edited();
4748};
4849
4950#endif

Archive Download the corresponding diff file



interactive