/*
* The ManaPlus Client
* Copyright (C) 2011-2012 The ManaPlus Developers
*
* This file is part of The ManaPlus Client.
*
* 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
* 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, see .
*/
#ifndef SETUPITEM_H
#define SETUPITEM_H
#include "gui/widgets/tabbedarea.h"
#include "guichanfwd.h"
#include "gui/widgets/setuptabscroll.h"
#include "gui/widgets/window.h"
#include
#include
#include
class CheckBox;
class Configuration;
class ContainerPlacer;
class DropDown;
class EditDialog;
class HorizontContainer;
class IntTextField;
class Label;
class Slider;
class SliderList;
class TextField;
class SetupItem : public gcn::ActionListener
{
public:
enum
{
VBOOL = 0,
VSTR,
VINT,
VNONE
};
SetupItem(std::string text, std::string description,
std::string keyName, SetupTabScroll *parent,
std::string eventName, bool mainConfig);
SetupItem(std::string text, std::string description,
std::string keyName, SetupTabScroll *parent,
std::string eventName, std::string def, bool mainConfig);
~SetupItem();
void load();
void save();
virtual void fromWidget() = 0;
virtual void toWidget() = 0;
void setWidget(gcn::Widget *widget)
{ mWidget = widget; }
gcn::Widget *getWidget() const
{ return mWidget; }
Configuration *getConfig();
virtual std::string getActionEventId();
virtual void action(const gcn::ActionEvent &event);
virtual void action();
virtual void apply(std::string eventName);
virtual void cancel(std::string eventName);
virtual void externalUpdated(std::string eventName);
bool isMainConfig() const
{ return mMainConfig; }
protected:
std::string mText;
std::string mDescription;
std::string mKeyName;
SetupTabScroll *mParent;
std::string mEventName;
bool mMainConfig;
bool mUseDefault;
std::string mValue;
std::string mDefault;
gcn::Widget *mWidget;
std::list mTempWidgets;
int mValueType;
};
class SetupItemCheckBox : public SetupItem
{
public:
SetupItemCheckBox(std::string text, std::string description,
std::string keyName, SetupTabScroll *parent,
std::string eventName, bool mainConfig = true);
SetupItemCheckBox(std::string text, std::string description,
std::string keyName, SetupTabScroll *parent,
std::string eventName, std::string def,
bool mainConfig = true);
~SetupItemCheckBox();
void createControls();
void fromWidget();
void toWidget();
protected:
CheckBox *mCheckBox;
};
class SetupItemTextField : public SetupItem
{
public:
SetupItemTextField(std::string text, std::string description,
std::string keyName, SetupTabScroll *parent,
std::string eventName, bool mainConfig = true);
SetupItemTextField(std::string text, std::string description,
std::string keyName, SetupTabScroll *parent,
std::string eventName, std::string def,
bool mainConfig = true);
~SetupItemTextField();
void createControls();
void fromWidget();
void toWidget();
void action(const gcn::ActionEvent &event);
void apply(std::string eventName);
protected:
HorizontContainer *mHorizont;
Label *mLabel;
TextField *mTextField;
Button *mButton;
EditDialog *mEditDialog;
};
class SetupItemIntTextField : public SetupItem
{
public:
SetupItemIntTextField(std::string text, std::string description,
std::string keyName, SetupTabScroll *parent,
std::string eventName, int min, int max,
bool mainConfig = true);
SetupItemIntTextField(std::string text, std::string description,
std::string keyName, SetupTabScroll *parent,
std::string eventName, int min, int max,
std::string def, bool mainConfig = true);
~SetupItemIntTextField();
void createControls();
void fromWidget();
void toWidget();
void action(const gcn::ActionEvent &event);
void apply(std::string eventName);
protected:
HorizontContainer *mHorizont;
Label *mLabel;
IntTextField *mTextField;
Button *mButton;
int mMin;
int mMax;
EditDialog *mEditDialog;
};
class SetupItemLabel : public SetupItem
{
public:
SetupItemLabel(std::string text, std::string description,
SetupTabScroll *parent, bool separator = true);
~SetupItemLabel();
void createControls();
void fromWidget();
void toWidget();
void action(const gcn::ActionEvent &event);
void apply(std::string eventName);
protected:
Label *mLabel;
bool mIsSeparator;
};
class SetupItemDropDown : public SetupItem
{
public:
SetupItemDropDown(std::string text, std::string description,
std::string keyName, SetupTabScroll *parent,
std::string eventName, gcn::ListModel *model,
bool mainConfig = true);
SetupItemDropDown(std::string text, std::string description,
std::string keyName, SetupTabScroll *parent,
std::string eventName, gcn::ListModel *model,
std::string def, bool mainConfig = true);
~SetupItemDropDown();
void createControls();
void fromWidget();
void toWidget();
protected:
HorizontContainer *mHorizont;
Label *mLabel;
gcn::ListModel *mModel;
DropDown *mDropDown;
};
class SetupItemSlider : public SetupItem
{
public:
SetupItemSlider(std::string text, std::string description,
std::string keyName, SetupTabScroll *parent,
std::string eventName, double min, double max,
int width = 150, bool onTheFly = false,
bool mainConfig = true);
SetupItemSlider(std::string text, std::string description,
std::string keyName, SetupTabScroll *parent,
std::string eventName, double min, double max,
std::string def, int width = 150,
bool onTheFly = false, bool mainConfig = true);
~SetupItemSlider();
void createControls();
void fromWidget();
void toWidget();
void action(const gcn::ActionEvent &event);
void apply(std::string eventName);
void updateLabel();
protected:
HorizontContainer *mHorizont;
Label *mLabel;
Slider *mSlider;
double mMin;
double mMax;
int mWidth;
bool mOnTheFly;
};
typedef std::vector SetupItemNames;
typedef SetupItemNames::iterator SetupItemNamesIter;
typedef SetupItemNames::const_iterator SetupItemNamesConstIter;
class SetupItemSlider2 : public SetupItem
{
public:
SetupItemSlider2(std::string text, std::string description,
std::string keyName, SetupTabScroll *parent,
std::string eventName, int min, int max,
SetupItemNames *values, bool onTheFly = false,
bool mainConfig = true);
SetupItemSlider2(std::string text, std::string description,
std::string keyName, SetupTabScroll *parent,
std::string eventName, int min, int max,
SetupItemNames *values, std::string def,
bool onTheFly = false, bool mainConfig = true);
~SetupItemSlider2();
void createControls();
void fromWidget();
void toWidget();
void action(const gcn::ActionEvent &event);
void apply(std::string eventName);
void setInvertValue(int v);
protected:
void updateLabel();
int getMaxWidth();
HorizontContainer *mHorizont;
Label *mLabel;
Label *mLabel2;
Slider *mSlider;
SetupItemNames *mValues;
int mMin;
int mMax;
bool mInvert;
int mInvertValue;
bool mOnTheFly;
};
class SetupItemSliderList : public SetupItem
{
public:
SetupItemSliderList(std::string text, std::string description,
std::string keyName, SetupTabScroll *parent,
std::string eventName, gcn::ListModel *model,
int width = 150, bool onTheFly = false,
bool mainConfig = true);
SetupItemSliderList(std::string text, std::string description,
std::string keyName, SetupTabScroll *parent,
std::string eventName, gcn::ListModel *model,
std::string def, int width = 150,
bool onTheFly = false, bool mainConfig = true);
~SetupItemSliderList();
void createControls();
void fromWidget();
void toWidget();
void action(const gcn::ActionEvent &event);
void apply(std::string eventName);
protected:
HorizontContainer *mHorizont;
Label *mLabel;
SliderList *mSlider;
gcn::ListModel *mModel;
int mWidth;
bool mOnTheFly;
};
#endif