summaryrefslogtreecommitdiff
path: root/src/gui/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/widgets')
-rw-r--r--src/gui/widgets/setupitem.cpp507
-rw-r--r--src/gui/widgets/setupitem.h244
-rw-r--r--src/gui/widgets/setuptabscroll.cpp3
3 files changed, 752 insertions, 2 deletions
diff --git a/src/gui/widgets/setupitem.cpp b/src/gui/widgets/setupitem.cpp
new file mode 100644
index 000000000..fd2c937dc
--- /dev/null
+++ b/src/gui/widgets/setupitem.cpp
@@ -0,0 +1,507 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2011 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "gui/widgets/setupitem.h"
+
+#include "configuration.h"
+#include "main.h"
+#include "logger.h"
+
+#include "gui/editdialog.h"
+
+#include "gui/widgets/button.h"
+#include "gui/widgets/checkbox.h"
+#include "gui/widgets/horizontcontainer.h"
+#include "gui/widgets/inttextfield.h"
+#include "gui/widgets/label.h"
+#include "gui/widgets/layouthelper.h"
+#include "gui/widgets/tabbedarea.h"
+#include "gui/widgets/textfield.h"
+#include "gui/widgets/vertcontainer.h"
+
+#include "utils/dtor.h"
+#include "utils/gettext.h"
+
+
+SetupItem::SetupItem(std::string text, std::string description,
+ std::string keyName, SetupTabScroll *parent,
+ std::string eventName, bool mainConfig) :
+ mText(text),
+ mDescription(description),
+ mKeyName(keyName),
+ mParent(parent),
+ mEventName(eventName),
+ mMainConfig(mainConfig),
+ mUseDefault(false),
+ mValue(""),
+ mDefault(""),
+ mWidget(0),
+ mValueType(VBOOL)
+{
+}
+
+SetupItem::SetupItem(std::string text, std::string description,
+ std::string keyName, SetupTabScroll *parent,
+ std::string eventName, std::string def, bool mainConfig) :
+ mText(text),
+ mDescription(description),
+ mKeyName(keyName),
+ mParent(parent),
+ mEventName(eventName),
+ mMainConfig(mainConfig),
+ mUseDefault(true),
+ mValue(""),
+ mDefault(def),
+ mWidget(0),
+ mValueType(VBOOL)
+{
+}
+
+SetupItem::~SetupItem()
+{
+
+}
+
+Configuration *SetupItem::getConfig()
+{
+ if (mMainConfig)
+ return &config;
+ else
+ return &serverConfig;
+}
+
+void SetupItem::load()
+{
+ Configuration *cfg = getConfig();
+ if (mUseDefault)
+ {
+ mValue = cfg->getValue(mKeyName, mDefault);
+ }
+ else
+ {
+ switch (mValueType)
+ {
+ case VBOOL:
+ if (cfg->getBoolValue(mKeyName))
+ mValue = "1";
+ else
+ mValue = "0";
+ break;
+ case VSTR:
+ default:
+ mValue = cfg->getStringValue(mKeyName);
+ break;
+ case VINT:
+ mValue = toString(cfg->getIntValue(mKeyName));
+ break;
+ case VNONE:
+ break;
+ }
+ }
+}
+
+void SetupItem::save()
+{
+ Configuration *cfg = getConfig();
+ cfg->setValue(mKeyName, mValue);
+}
+
+std::string SetupItem::getActionEventId()
+{
+ if (!mWidget)
+ return "";
+
+ return mWidget->getActionEventId();
+}
+
+void SetupItem::action(const gcn::ActionEvent &event)
+{
+ if (!mWidget)
+ return;
+
+ if (event.getId() == mWidget->getActionEventId())
+ action();
+}
+
+void SetupItem::action()
+{
+ fromWidget();
+}
+
+void SetupItem::apply(std::string eventName A_UNUSED)
+{
+ save();
+}
+
+void SetupItem::cancel(std::string eventName A_UNUSED)
+{
+ load();
+ toWidget();
+}
+
+void SetupItem::externalUpdated(std::string eventName A_UNUSED)
+{
+ load();
+ toWidget();
+}
+
+SetupItemCheckBox::SetupItemCheckBox(std::string text, std::string description,
+ std::string keyName,
+ SetupTabScroll *parent,
+ std::string eventName, bool mainConfig) :
+ SetupItem(text, description, keyName, parent, eventName, mainConfig)
+{
+ createControls();
+}
+
+SetupItemCheckBox::SetupItemCheckBox(std::string text, std::string description,
+ std::string keyName,
+ SetupTabScroll *parent,
+ std::string eventName, std::string def,
+ bool mainConfig) :
+ SetupItem(text, description, keyName, parent, eventName, def, mainConfig)
+{
+ createControls();
+}
+
+SetupItemCheckBox::~SetupItemCheckBox()
+{
+ mWidget = 0;
+}
+
+void SetupItemCheckBox::createControls()
+{
+ load();
+ mCheckBox = new CheckBox(mText, mValue != "0", mParent, mEventName);
+ mWidget = mCheckBox;
+ mParent->getContainer()->add(mWidget);
+ mParent->addControl(this);
+ mParent->addActionListener(this);
+ mWidget->addActionListener(this);
+}
+
+void SetupItemCheckBox::fromWidget()
+{
+ if (!mCheckBox)
+ return;
+
+ if (mCheckBox->isSelected())
+ mValue = "1";
+ else
+ mValue = "0";
+}
+
+void SetupItemCheckBox::toWidget()
+{
+ if (!mCheckBox)
+ return;
+
+ mCheckBox->setSelected(mValue != "0");
+}
+
+
+SetupItemTextField::SetupItemTextField(std::string text,
+ std::string description,
+ std::string keyName,
+ SetupTabScroll *parent,
+ std::string eventName,
+ bool mainConfig) :
+ SetupItem(text, description, keyName, parent, eventName, mainConfig),
+ mHorizont(0),
+ mLabel(0),
+ mTextField(0),
+ mButton(0),
+ mEditDialog(0)
+{
+ mValueType = VSTR;
+ createControls();
+}
+
+SetupItemTextField::SetupItemTextField(std::string text,
+ std::string description,
+ std::string keyName,
+ SetupTabScroll *parent,
+ std::string eventName, std::string def,
+ bool mainConfig) :
+ SetupItem(text, description, keyName, parent, eventName, def, mainConfig),
+ mHorizont(0),
+ mLabel(0),
+ mTextField(0),
+ mButton(0),
+ mEditDialog(0)
+{
+ mValueType = VSTR;
+ createControls();
+}
+
+SetupItemTextField::~SetupItemTextField()
+{
+ mHorizont = 0;
+ mWidget = 0;
+ mTextField = 0;
+ mLabel = 0;
+ mButton = 0;
+}
+
+void SetupItemTextField::createControls()
+{
+ load();
+ mHorizont = new HorizontContainer(32, 2);
+
+ mLabel = new Label(mText);
+ mTextField = new TextField(mValue, true, mParent, mEventName);
+ mButton = new Button(_("Edit"), mEventName + "_EDIT", mParent);
+ mWidget = mTextField;
+ mTextField->setWidth(200);
+ mHorizont->add(mLabel);
+ mHorizont->add(mTextField);
+ mHorizont->add(mButton);
+
+ mParent->getContainer()->add(mHorizont, true, 4);
+ mParent->addControl(this);
+ mParent->addControl(this, mEventName + "_EDIT");
+ mParent->addControl(this, mEventName + "_EDIT_OK");
+ mParent->addActionListener(this);
+ mWidget->addActionListener(this);
+ mButton->addActionListener(this);
+}
+
+void SetupItemTextField::fromWidget()
+{
+ if (!mTextField)
+ return;
+
+ mValue = mTextField->getText();
+}
+
+void SetupItemTextField::toWidget()
+{
+ if (!mTextField)
+ return;
+
+ mTextField->setText(mValue);
+}
+
+void SetupItemTextField::action(const gcn::ActionEvent &event)
+{
+ if (!mTextField)
+ return;
+
+ if (event.getId() == mWidget->getActionEventId())
+ {
+ fromWidget();
+ }
+ else if (event.getId() == mEventName + "_EDIT")
+ {
+ mEditDialog = new EditDialog(mText, mTextField->getText(),
+ mEventName + "_EDIT_OK");
+ mEditDialog->addActionListener(this);
+ }
+ else if (event.getId() == mEventName + "_EDIT_OK")
+ {
+ mTextField->setText(mEditDialog->getMsg());
+ mEditDialog = 0;
+ }
+}
+
+void SetupItemTextField::apply(std::string eventName)
+{
+ if (eventName != mEventName)
+ return;
+
+ fromWidget();
+ save();
+}
+
+
+SetupItemIntTextField::SetupItemIntTextField(std::string text,
+ std::string description,
+ std::string keyName,
+ SetupTabScroll *parent,
+ std::string eventName,
+ int min, int max,
+ bool mainConfig) :
+ SetupItem(text, description, keyName, parent, eventName, mainConfig),
+ mHorizont(0),
+ mLabel(0),
+ mTextField(0),
+ mButton(0),
+ mMin(min),
+ mMax(max),
+ mEditDialog(0)
+{
+ mValueType = VSTR;
+ createControls();
+}
+
+SetupItemIntTextField::SetupItemIntTextField(std::string text,
+ std::string description,
+ std::string keyName,
+ SetupTabScroll *parent,
+ std::string eventName,
+ int min, int max,
+ std::string def,
+ bool mainConfig) :
+ SetupItem(text, description, keyName, parent, eventName, def, mainConfig),
+ mHorizont(0),
+ mLabel(0),
+ mTextField(0),
+ mButton(0),
+ mMin(min),
+ mMax(max),
+ mEditDialog(0)
+{
+ mValueType = VSTR;
+ createControls();
+}
+
+SetupItemIntTextField::~SetupItemIntTextField()
+{
+ mHorizont = 0;
+ mWidget = 0;
+ mTextField = 0;
+ mLabel = 0;
+ mButton = 0;
+}
+
+void SetupItemIntTextField::createControls()
+{
+ load();
+ mHorizont = new HorizontContainer(32, 2);
+
+ mLabel = new Label(mText);
+ mTextField = new IntTextField(atoi(mValue.c_str()), mMin, mMax, true, 30);
+ mTextField->setActionEventId(mEventName);
+ mTextField->addActionListener(mParent);
+
+ mButton = new Button(_("Edit"), mEventName + "_EDIT", mParent);
+ mWidget = mTextField;
+ mTextField->setWidth(50);
+ mHorizont->add(mLabel);
+ mHorizont->add(mTextField);
+ mHorizont->add(mButton);
+
+ mParent->getContainer()->add(mHorizont, true, 4);
+ mParent->addControl(this);
+ mParent->addControl(this, mEventName + "_EDIT");
+ mParent->addControl(this, mEventName + "_EDIT_OK");
+ mParent->addActionListener(this);
+ mWidget->addActionListener(this);
+ mButton->addActionListener(this);
+}
+
+void SetupItemIntTextField::fromWidget()
+{
+ if (!mTextField)
+ return;
+
+ mValue = mTextField->getText();
+}
+
+void SetupItemIntTextField::toWidget()
+{
+ if (!mTextField)
+ return;
+
+ mTextField->setText(mValue);
+}
+
+void SetupItemIntTextField::action(const gcn::ActionEvent &event)
+{
+ if (!mTextField)
+ return;
+
+ if (event.getId() == mWidget->getActionEventId())
+ {
+ fromWidget();
+ }
+ else if (event.getId() == mEventName + "_EDIT")
+ {
+ mEditDialog = new EditDialog(mText, mTextField->getText(),
+ mEventName + "_EDIT_OK");
+ mEditDialog->addActionListener(this);
+ }
+ else if (event.getId() == mEventName + "_EDIT_OK")
+ {
+ mTextField->setValue(atoi(mEditDialog->getMsg().c_str()));
+ mEditDialog = 0;
+ }
+}
+
+void SetupItemIntTextField::apply(std::string eventName)
+{
+ if (eventName != mEventName)
+ return;
+
+ fromWidget();
+ save();
+}
+
+SetupItemLabel::SetupItemLabel(std::string text, std::string description,
+ SetupTabScroll *parent, bool separator) :
+ SetupItem(text, description, "", parent, "", "", true),
+ mLabel(0),
+ mIsSeparator(separator)
+{
+ mValueType = VNONE;
+ createControls();
+}
+
+SetupItemLabel::~SetupItemLabel()
+{
+ mWidget = 0;
+ mLabel = 0;
+}
+
+void SetupItemLabel::createControls()
+{
+ if (mIsSeparator)
+ {
+ const std::string str = " \342\200\225\342\200\225\342\200\225"
+ "\342\200\225\342\200\225 ";
+ mLabel = new Label(str + mText + str);
+ }
+ else
+ {
+ mLabel = new Label(mText);
+ }
+
+ mWidget = mLabel;
+ mParent->getContainer()->add(mWidget);
+ mParent->addControl(this);
+ mParent->addActionListener(this);
+ mWidget->addActionListener(this);
+}
+
+void SetupItemLabel::fromWidget()
+{
+}
+
+void SetupItemLabel::toWidget()
+{
+}
+
+void SetupItemLabel::action(const gcn::ActionEvent &event A_UNUSED)
+{
+}
+
+void SetupItemLabel::apply(std::string eventName A_UNUSED)
+{
+}
diff --git a/src/gui/widgets/setupitem.h b/src/gui/widgets/setupitem.h
new file mode 100644
index 000000000..3396edea3
--- /dev/null
+++ b/src/gui/widgets/setupitem.h
@@ -0,0 +1,244 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2011 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 <http://www.gnu.org/licenses/>.
+ */
+
+#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 <guichan/actionlistener.hpp>
+#include <guichan/widget.hpp>
+
+#include <list>
+
+#ifdef __GNUC__
+#define A_UNUSED __attribute__ ((unused))
+#else
+#define A_UNUSED
+#endif
+
+class CheckBox;
+class Configuration;
+class ContainerPlacer;
+class EditDialog;
+class HorizontContainer;
+class IntTextField;
+class Label;
+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()
+ { 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);
+// virtual int add(ContainerPlacer &place, int x, int y, int width);
+
+ bool isMainConfig()
+ { 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<gcn::Widget*> 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;
+};
+
+#endif
diff --git a/src/gui/widgets/setuptabscroll.cpp b/src/gui/widgets/setuptabscroll.cpp
index 805c0c8c7..30bb66469 100644
--- a/src/gui/widgets/setuptabscroll.cpp
+++ b/src/gui/widgets/setuptabscroll.cpp
@@ -20,10 +20,9 @@
#include "gui/widgets/setuptabscroll.h"
-#include "gui/setupitem.h"
-
#include "gui/widgets/layouthelper.h"
#include "gui/widgets/scrollarea.h"
+#include "gui/widgets/setupitem.h"
#include "gui/widgets/vertcontainer.h"
#include "debug.h"