mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-10 04:57:00 -04:00
Create slider field type
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
#include <data/field/choice.hpp>
|
||||
#include <data/field/multiple_choice.hpp>
|
||||
#include <data/field/boolean.hpp>
|
||||
#include <data/field/slider.hpp>
|
||||
#include <data/field/image.hpp>
|
||||
#include <data/field/symbol.hpp>
|
||||
#include <data/field/color.hpp>
|
||||
@@ -80,6 +81,7 @@ intrusive_ptr<Field> read_new<Field>(Reader& reader) {
|
||||
else if (type == _("choice")) field = make_intrusive<ChoiceField>();
|
||||
else if (type == _("multiple choice")) field = make_intrusive<MultipleChoiceField>();
|
||||
else if (type == _("boolean")) field = make_intrusive<BooleanField>();
|
||||
else if (type == _("slider")) field = make_intrusive<SliderField>();
|
||||
else if (type == _("image")) field = make_intrusive<ImageField>();
|
||||
else if (type == _("symbol")) field = make_intrusive<SymbolField>();
|
||||
else if (type == _("color")) field = make_intrusive<ColorField>();
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
//+----------------------------------------------------------------------------+
|
||||
//| Description: Magic Set Editor - Program to make Magic (tm) cards |
|
||||
//| Copyright: (C) Twan van Laarhoven and the other MSE developers |
|
||||
//| License: GNU General Public License 2 or later (see file COPYING) |
|
||||
//+----------------------------------------------------------------------------+
|
||||
|
||||
// ----------------------------------------------------------------------------- : Includes
|
||||
|
||||
#include <util/prec.hpp>
|
||||
#include <data/field/slider.hpp>
|
||||
#include <iomanip>
|
||||
#include <sstream>
|
||||
|
||||
// ----------------------------------------------------------------------------- : SliderField
|
||||
|
||||
SliderField::SliderField()
|
||||
: minimum(0)
|
||||
, maximum(100)
|
||||
, increment(1)
|
||||
{}
|
||||
|
||||
IMPLEMENT_FIELD_TYPE(Slider, "slider");
|
||||
|
||||
IMPLEMENT_REFLECTION(SliderField) {
|
||||
REFLECT_BASE(Field); // NOTE: don't reflect as a ChoiceField
|
||||
REFLECT(script);
|
||||
REFLECT_N("default", default_script);
|
||||
REFLECT(initial);
|
||||
REFLECT(minimum);
|
||||
REFLECT(maximum);
|
||||
REFLECT(increment);
|
||||
}
|
||||
|
||||
void SliderField::after_reading(Version ver) {
|
||||
Field::after_reading(ver);
|
||||
|
||||
if (maximum < minimum) {
|
||||
int temp = maximum;
|
||||
maximum = minimum;
|
||||
minimum = temp;
|
||||
}
|
||||
if (increment < 1) increment = 1;
|
||||
|
||||
for (int i = minimum; i < maximum; i += increment) {
|
||||
choices->choices.push_back(make_intrusive<Choice>(wxString::Format(wxT("%i"), i)));
|
||||
}
|
||||
choices->choices.push_back(make_intrusive<Choice>(wxString::Format(wxT("%i"), maximum)));
|
||||
|
||||
int initial_int;
|
||||
try {
|
||||
initial_int = std::stoi(initial.ToStdString());
|
||||
if (initial_int < minimum || initial_int > maximum) initial = wxString::Format(wxT("%i"), minimum);
|
||||
}
|
||||
catch (...) {
|
||||
initial = wxString::Format(wxT("%i"), minimum);
|
||||
}
|
||||
choices->initIds();
|
||||
}
|
||||
// ----------------------------------------------------------------------------- : SliderStyle
|
||||
|
||||
SliderStyle::SliderStyle(const ChoiceFieldP& field)
|
||||
: ChoiceStyle(field)
|
||||
{
|
||||
render_style = RENDER_TEXT;
|
||||
}
|
||||
|
||||
IMPLEMENT_REFLECTION(SliderStyle) {
|
||||
REFLECT_BASE(ChoiceStyle);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------- : SliderValue
|
||||
|
||||
IMPLEMENT_REFLECTION_NAMELESS(SliderValue) {
|
||||
REFLECT_BASE(ChoiceValue);
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
//+----------------------------------------------------------------------------+
|
||||
//| Description: Magic Set Editor - Program to make Magic (tm) cards |
|
||||
//| Copyright: (C) Twan van Laarhoven and the other MSE developers |
|
||||
//| License: GNU General Public License 2 or later (see file COPYING) |
|
||||
//+----------------------------------------------------------------------------+
|
||||
|
||||
#pragma once
|
||||
|
||||
// ----------------------------------------------------------------------------- : Includes
|
||||
|
||||
#include <util/prec.hpp>
|
||||
#include <data/field/choice.hpp>
|
||||
|
||||
// ----------------------------------------------------------------------------- : SliderField
|
||||
|
||||
DECLARE_POINTER_TYPE(SliderField);
|
||||
DECLARE_POINTER_TYPE(SliderStyle);
|
||||
DECLARE_POINTER_TYPE(SliderValue);
|
||||
|
||||
/// A field whos value is an integer from a range
|
||||
class SliderField : public ChoiceField {
|
||||
public:
|
||||
SliderField();
|
||||
DECLARE_FIELD_TYPE(SliderField);
|
||||
|
||||
int minimum, maximum, increment;
|
||||
|
||||
void after_reading(Version ver) override;
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------- : SliderStyle
|
||||
|
||||
/// The Style for a SliderField
|
||||
class SliderStyle : public ChoiceStyle {
|
||||
public:
|
||||
SliderStyle(const ChoiceFieldP& field);
|
||||
DECLARE_HAS_FIELD(Slider); // not DECLARE_STYLE_TYPE, because we use a normal ChoiceValueViewer/Editor
|
||||
StyleP clone() const override;
|
||||
|
||||
// no extra data
|
||||
|
||||
private:
|
||||
DECLARE_REFLECTION();
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------- : SliderValue
|
||||
|
||||
/// The Value in a SliderField
|
||||
class SliderValue : public ChoiceValue {
|
||||
public:
|
||||
inline SliderValue(const ChoiceFieldP& field) : ChoiceValue(field) {}
|
||||
DECLARE_HAS_FIELD(Slider);
|
||||
ValueP clone() const override;
|
||||
|
||||
// no extra data
|
||||
|
||||
private:
|
||||
DECLARE_REFLECTION();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user