mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-11 13:17:00 -04:00
implemented choice editor with drop down list, todo: submenus
git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@93 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
@@ -11,14 +11,66 @@
|
||||
|
||||
#include <util/prec.hpp>
|
||||
#include <gui/value/editor.hpp>
|
||||
#include <gui/drop_down_list.hpp>
|
||||
#include <render/value/choice.hpp>
|
||||
|
||||
DECLARE_POINTER_TYPE(DropDownList);
|
||||
|
||||
// ----------------------------------------------------------------------------- : ChoiceValueEditor
|
||||
|
||||
/// An editor 'control' for editing ChoiceValues
|
||||
class ChoiceValueEditor : public ChoiceValueViewer, public ValueEditor {
|
||||
public:
|
||||
DECLARE_VALUE_EDITOR(Choice);
|
||||
|
||||
// --------------------------------------------------- : Events
|
||||
virtual void onLeftDown(const RealPoint& pos, wxMouseEvent& ev);
|
||||
virtual void onChar(wxKeyEvent& ev);
|
||||
virtual void onLoseFocus();
|
||||
|
||||
virtual void drawSelection(RotatedDC& dc);
|
||||
virtual void determineSize();
|
||||
|
||||
private:
|
||||
DropDownListP drop_down;
|
||||
friend class DropDownChoiceList;
|
||||
/// Change the choice
|
||||
void change(const Defaultable<String>& c);
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------- : DropDownChoiceList
|
||||
|
||||
// A drop down list of color choices
|
||||
class DropDownChoiceList : public DropDownList {
|
||||
public:
|
||||
DropDownChoiceList(Window* parent, bool is_submenu, ChoiceValueEditor& cve, ChoiceField::ChoiceP group);
|
||||
|
||||
protected:
|
||||
virtual size_t itemCount() const;
|
||||
virtual bool lineBelow(size_t item) const;
|
||||
virtual String itemText(size_t item) const;
|
||||
virtual void drawIcon(DC& dc, int x, int y, size_t item, bool selected) const;
|
||||
virtual DropDownList* submenu(size_t item);
|
||||
|
||||
virtual void select(size_t item);
|
||||
virtual size_t selection() const;
|
||||
|
||||
private:
|
||||
ChoiceValueEditor& cve;
|
||||
ChoiceField::ChoiceP group; ///< Group this menu shows
|
||||
vector<DropDownListP> submenus;
|
||||
|
||||
inline const ChoiceField& field() const { return cve.field(); }
|
||||
|
||||
inline bool hasFieldDefault() const { return group == field().choices && field().default_script; }
|
||||
inline bool hasGroupDefault() const { return group->hasDefault(); }
|
||||
inline bool hasDefault() const { return hasFieldDefault() || hasGroupDefault(); }
|
||||
inline bool isFieldDefault(size_t item) const { return item == 0 && hasFieldDefault(); }
|
||||
inline bool isGroupDefault(size_t item) const { return item == 0 && hasGroupDefault(); }
|
||||
inline bool isDefault (size_t item) const { return item == 0 && hasDefault(); }
|
||||
|
||||
// Find an item in the group of choices
|
||||
ChoiceField::ChoiceP getChoice(size_t item) const;
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------- : EOF
|
||||
|
||||
Reference in New Issue
Block a user