From f1fe40b4efd0fbfb48c0e892f95052655fb8b3fc Mon Sep 17 00:00:00 2001 From: twanvl Date: Mon, 11 Aug 2008 20:52:33 +0000 Subject: [PATCH] Added new_card function; Added parameter to ScriptValue::next to recieve the key of the item. Finished Add Multiple Cards behaviour. git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@1147 0fc631ac-6414-0410-93d0-97cfa31319b6 --- src/gui/icon_menu.cpp | 22 ++++++---- src/gui/icon_menu.hpp | 2 + src/gui/set/cards_panel.cpp | 32 ++++++++++++--- src/mse.vcproj | 3 ++ src/script/context.cpp | 3 +- src/script/dependency.cpp | 2 +- src/script/functions/construction.cpp | 59 +++++++++++++++++++++++++++ src/script/functions/functions.hpp | 2 + src/script/to_value.hpp | 9 ++-- src/script/value.cpp | 35 ++++++++++------ src/script/value.hpp | 3 +- 11 files changed, 139 insertions(+), 33 deletions(-) create mode 100644 src/script/functions/construction.cpp diff --git a/src/gui/icon_menu.cpp b/src/gui/icon_menu.cpp index 9a5bed96..d3950943 100644 --- a/src/gui/icon_menu.cpp +++ b/src/gui/icon_menu.cpp @@ -45,14 +45,11 @@ Image generateDisabledImage(const Image& imgIn) { return imgOut; } +// ----------------------------------------------------------------------------- : set_menu_item_image -// ----------------------------------------------------------------------------- : IconMenu - -void IconMenu::Append(int id, const String& resource, const String& text, const String& help, int style, wxMenu* submenu) { - // create menu, load icon - wxMenuItem* item = new wxMenuItem(this, id, text, help, style, submenu); - Bitmap bitmap = load_resource_tool_image(resource); +void set_menu_item_image(wxMenuItem* item, const String& resource) { // load bitmap + Bitmap bitmap = load_resource_tool_image(resource); #ifdef __WXMSW__ // make greyed bitmap bitmap = bitmap.GetSubBitmap(wxRect(0,0,16,16)); @@ -61,10 +58,19 @@ void IconMenu::Append(int id, const String& resource, const String& text, const item->SetDisabledBitmap(disabledImage); #else // Check items can't have bitmaps :( - if (item->GetKind() == wxITEM_NORMAL) + if (item->GetKind() == wxITEM_NORMAL) { item->SetBitmap(bitmap); + } #endif - // add menu +} + +// ----------------------------------------------------------------------------- : IconMenu + +void IconMenu::Append(int id, const String& resource, const String& text, const String& help, int style, wxMenu* submenu) { + // create menu, load icon + wxMenuItem* item = new wxMenuItem(this, id, text, help, style, submenu); + set_menu_item_image(item, resource); + // add to menu wxMenu::Append(item); } diff --git a/src/gui/icon_menu.hpp b/src/gui/icon_menu.hpp index 7e69df02..2609c465 100644 --- a/src/gui/icon_menu.hpp +++ b/src/gui/icon_menu.hpp @@ -33,5 +33,7 @@ class IconMenu : public wxMenu { void Insert(size_t pos, int id, const String& text, const String& help); }; +void set_menu_item_image(wxMenuItem* menuitem, const String& resource); + // ----------------------------------------------------------------------------- : EOF #endif diff --git a/src/gui/set/cards_panel.cpp b/src/gui/set/cards_panel.cpp index 2537f0c7..4e78d465 100644 --- a/src/gui/set/cards_panel.cpp +++ b/src/gui/set/cards_panel.cpp @@ -27,6 +27,8 @@ #include #include +DECLARE_TYPEOF_COLLECTION(AddCardsScriptP); + // ----------------------------------------------------------------------------- : CardsPanel CardsPanel::CardsPanel(Window* parent, int id) @@ -70,7 +72,9 @@ CardsPanel::CardsPanel(Window* parent, int id) menuCard->Append(ID_CARD_NEXT, _MENU_("next card"), _HELP_("next card")); menuCard->AppendSeparator(); menuCard->Append(ID_CARD_ADD, _("card_add"), _MENU_("add card"), _HELP_("add card")); - menuCard->Append(ID_CARD_ADD_MULT, _("card_add_multiple"), _MENU_("add cards"), _HELP_("add cards")); + insertManyCardsMenu = new wxMenuItem(menuCard, ID_CARD_ADD_MULT, _MENU_("add cards"), _HELP_("add cards")); + set_menu_item_image(insertManyCardsMenu, _("card_add_multiple")); + ((wxMenu*)menuCard)->Append(insertManyCardsMenu); // NOTE: space after "Del" prevents wx from making del an accellerator // otherwise we delete a card when delete is pressed inside the editor // Adding a space never hurts, please keep it just to be safe. @@ -140,10 +144,23 @@ void CardsPanel::onChangeSet() { editor->setSet(set); notes->setSet(set); card_list->setSet(set); -/* // resize editor - Sizer* s = sizer; - minSize = s->minSize; - layout();*/ + + // change insertManyCardsMenu + delete insertManyCardsMenu->GetSubMenu(); + if (!set->game->add_cards_scripts.empty()) { + // create menu for add_cards_scripts + int id = ID_ADD_CARDS_MENU_MIN; + IconMenu* cards_scripts_menu = new IconMenu; + FOR_EACH(cs, set->game->add_cards_scripts) { + cards_scripts_menu->Append(id++, cs->name, cs->description); + } + insertManyCardsMenu->SetSubMenu(cards_scripts_menu); + } else { + insertManyCardsMenu->SetSubMenu(nullptr); + } + // re-add the menu + menuCard->Remove(ID_CARD_ADD_MULT); + ((wxMenu*)menuCard)->Insert(4,insertManyCardsMenu); // HACK: the position is hardcoded } // ----------------------------------------------------------------------------- : UI @@ -200,7 +217,10 @@ void CardsPanel::onUpdateUI(wxUpdateUIEvent& ev) { ev.Check(ss.card_angle() == a); break; } - case ID_CARD_ADD_MULT: ev.Enable(false); break; // not implemented + case ID_CARD_ADD_MULT: { + ev.Enable(insertManyCardsMenu->GetSubMenu() != nullptr); + break; + } case ID_CARD_REMOVE: ev.Enable(card_list->canDelete()); break; case ID_FORMAT_BOLD: case ID_FORMAT_ITALIC: case ID_FORMAT_SYMBOL: case ID_FORMAT_REMINDER: { if (focused_control(this) == ID_EDITOR) { diff --git a/src/mse.vcproj b/src/mse.vcproj index d450ba95..c8480123 100644 --- a/src/mse.vcproj +++ b/src/mse.vcproj @@ -2573,6 +2573,9 @@ + + value.push_back(val); if (key != script_nil) { // valid key ret->key_value[key->toString()] = val; + } else { + ret->value.push_back(val); } } stack.resize(begin); diff --git a/src/script/dependency.cpp b/src/script/dependency.cpp index 5afcc628..eea37b56 100644 --- a/src/script/dependency.cpp +++ b/src/script/dependency.cpp @@ -28,7 +28,7 @@ class DependencyDummy : public ScriptIterator { public: virtual ScriptType type() const { return SCRIPT_DUMMY; } virtual String typeName() const { return _("dummy"); } - virtual ScriptValueP next() { return ScriptValueP(); } + virtual ScriptValueP next(ScriptValueP*) { return ScriptValueP(); } virtual ScriptValueP dependencyName(const ScriptValue&, const Dependency&) const { return dependency_dummy; } }; diff --git a/src/script/functions/construction.cpp b/src/script/functions/construction.cpp new file mode 100644 index 00000000..25883dd4 --- /dev/null +++ b/src/script/functions/construction.cpp @@ -0,0 +1,59 @@ +//+----------------------------------------------------------------------------+ +//| Description: Magic Set Editor - Program to make Magic (tm) cards | +//| Copyright: (C) 2001 - 2008 Twan van Laarhoven and "coppro" | +//| License: GNU General Public License 2 or later (see file COPYING) | +//+----------------------------------------------------------------------------+ + +// ----------------------------------------------------------------------------- : Includes + +#include +#include