Commit 031c8c62 authored by twanvl's avatar twanvl

Partial support for add multiple cards scripts, not visible to users yet

parent f8d23544
//+----------------------------------------------------------------------------+
//| 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 <util/prec.hpp>
#include <data/add_cards_script.hpp>
#include <data/action/set.hpp>
#include <data/set.hpp>
#include <data/card.hpp>
#include <data/stylesheet.hpp>
// ----------------------------------------------------------------------------- : AddCardsScript
IMPLEMENT_REFLECTION_NO_SCRIPT(AddCardsScript) {
REFLECT(name);
REFLECT(description);
REFLECT(enabled);
REFLECT(script);
}
void AddCardsScript::perform(Set& set, vector<CardP>& out) {
// Perform script
Context& ctx = set.getContext();
ScriptValueP result = script.invoke(ctx);
// Add cards to out
ScriptValueP it = result->makeIterator(result);
while (ScriptValueP item = it->next()) {
CardP card = from_script<CardP>(item);
// is this a new card?
if (contains(set.cards,card) || contains(out,card)) {
// make copy
card = new_intrusive1<Card>(*card);
}
out.push_back(card);
}
}
void AddCardsScript::perform(Set& set) {
// Perform script
vector<CardP> cards;
perform(set,cards);
// Add to set
if (!cards.empty()) {
// TODO: change the name of the action somehow
set.actions.addAction(new AddCardAction(ADD, set, cards));
}
}
//+----------------------------------------------------------------------------+
//| 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) |
//+----------------------------------------------------------------------------+
#ifndef HEADER_DATA_ADD_CARDS_SCRIPT
#define HEADER_DATA_ADD_CARDS_SCRIPT
// ----------------------------------------------------------------------------- : Includes
#include <util/prec.hpp>
#include <script/scriptable.hpp>
class Set;
DECLARE_POINTER_TYPE(Card);
// ----------------------------------------------------------------------------- : AddCardsScript
/// A script to add one or more cards to a set
class AddCardsScript : public IntrusivePtrBase<AddCardsScript> {
public:
String name;
String description;
Scriptable<bool> enabled;
OptionalScript script;
/// Perform the script; return the cards (if any)
void perform(Set& set, vector<CardP>& out);
/// Perform the script; add cards to the set
void perform(Set& set);
DECLARE_REFLECTION();
};
// ----------------------------------------------------------------------------- : EOF
#endif
......@@ -14,6 +14,7 @@
#include <data/statistics.hpp>
#include <data/pack.hpp>
#include <data/word_list.hpp>
#include <data/add_cards_script.hpp>
#include <util/io/package_manager.hpp>
#include <script/script.hpp>
......@@ -61,6 +62,7 @@ IMPLEMENT_REFLECTION(Game) {
REFLECT(keyword_parameter_types);
REFLECT_NO_SCRIPT(keywords);
REFLECT_NO_SCRIPT(word_lists);
REFLECT_NO_SCRIPT(add_cards_scripts);
REFLECT_NO_SCRIPT(auto_replaces);
}
......
......@@ -26,6 +26,7 @@ DECLARE_POINTER_TYPE(KeywordParam);
DECLARE_POINTER_TYPE(KeywordMode);
DECLARE_POINTER_TYPE(Keyword);
DECLARE_POINTER_TYPE(WordList);
DECLARE_POINTER_TYPE(AddCardsScript);
DECLARE_POINTER_TYPE(AutoReplace);
// ----------------------------------------------------------------------------- : Game
......@@ -48,6 +49,7 @@ class Game : public Packaged {
vector<PackItemP> pack_items; ///< Types of cards in packs
vector<PackTypeP> pack_types; ///< Types of random card packs to generate
vector<WordListP> word_lists; ///< Word lists for editing with a drop down list
vector<AddCardsScriptP> add_cards_scripts; ///< Scripts for adding multiple cards to the set
vector<AutoReplaceP> auto_replaces; ///< Things to autoreplace in textboxes
bool has_keywords; ///< Does this game use keywords?
......
......@@ -17,7 +17,9 @@
#include <gui/icon_menu.hpp>
#include <gui/util.hpp>
#include <data/set.hpp>
#include <data/game.hpp>
#include <data/card.hpp>
#include <data/add_cards_script.hpp>
#include <data/action/set.hpp>
#include <data/settings.hpp>
#include <util/find_replace.hpp>
......@@ -280,6 +282,10 @@ void CardsPanel::onCommand(int id) {
if (id >= ID_INSERT_SYMBOL_MENU_MIN && id <= ID_INSERT_SYMBOL_MENU_MAX) {
// pass on to editor
editor->onCommand(id);
} else if (id >= ID_ADD_CARDS_MENU_MIN && id <= ID_ADD_CARDS_MENU_MAX) {
// add multiple cards
AddCardsScriptP script = set->game->add_cards_scripts.at(id - ID_ADD_CARDS_MENU_MIN);
script->perform(*set);
}
}
}
......
......@@ -90,7 +90,8 @@ class CardsPanel : public SetWindowPanel {
// --------------------------------------------------- : Menus & tools
IconMenu* menuCard, *menuFormat;
wxMenuItem* insertSymbolMenu; // owned by menuFormat, but submenu owned by SymbolFont
wxMenuItem* insertSymbolMenu; // owned by menuFormat, but submenu owned by SymbolFont
wxMenuItem* insertManyCardsMenu; // owned my menuCard, but submenu can be changed
};
// ----------------------------------------------------------------------------- : EOF
......
......@@ -1853,6 +1853,12 @@
<Filter
Name="aux"
Filter="">
<File
RelativePath=".\data\add_cards_script.cpp">
</File>
<File
RelativePath=".\data\add_cards_script.hpp">
</File>
<File
RelativePath=".\data\draw_what.hpp">
</File>
......
......@@ -90,11 +90,11 @@ enum MenuID {
/// Ids for menus on child panels (MainWindowPanel / SymbolEditorBase)
enum ChildMenuID {
ID_CHILD_MIN = 1000
, ID_CHILD_MAX = 3999
ID_CHILD_MIN = 6000
, ID_CHILD_MAX = 16999
// Cards menu
, ID_CARD_ADD = 1001
, ID_CARD_ADD = 6001
, ID_CARD_ADD_MULT
, ID_CARD_REMOVE
, ID_CARD_PREV
......@@ -108,27 +108,27 @@ enum ChildMenuID {
, ID_SELECT_COLUMNS
// Keyword menu
, ID_KEYWORD_ADD = 1101
, ID_KEYWORD_ADD = 6101
, ID_KEYWORD_REMOVE
, ID_KEYWORD_PREV
, ID_KEYWORD_NEXT
// Format menu
, ID_FORMAT_BOLD = 1201
, ID_FORMAT_BOLD = 6201
, ID_FORMAT_ITALIC
, ID_FORMAT_SYMBOL
, ID_FORMAT_REMINDER
, ID_INSERT_SYMBOL
// Graph menu
, ID_GRAPH_PIE = 1301 // corresponds to GraphType
, ID_GRAPH_PIE = 6301 // corresponds to GraphType
, ID_GRAPH_BAR
, ID_GRAPH_STACK
, ID_GRAPH_SCATTER
, ID_GRAPH_SCATTER_PIE
// SymbolSelectEditor toolbar/menu
, ID_SYMBOL_COMBINE = 2001
, ID_SYMBOL_COMBINE = 7001
, ID_SYMBOL_COMBINE_MERGE = ID_SYMBOL_COMBINE + 0 //SYMBOL_COMBINE_MERGE
, ID_SYMBOL_COMBINE_SUBTRACT = ID_SYMBOL_COMBINE + 1 //SYMBOL_COMBINE_SUBTRACT
, ID_SYMBOL_COMBINE_INTERSECTION = ID_SYMBOL_COMBINE + 2 //SYMBOL_COMBINE_INTERSECTION
......@@ -143,18 +143,18 @@ enum ChildMenuID {
, ID_VIEW_GRID_SNAP
// SymbolPointEditor toolbar/menu
, ID_SEGMENT = 2101
, ID_SEGMENT = 7101
, ID_SEGMENT_LINE = ID_SEGMENT + 0//SEGMENT_LINE
, ID_SEGMENT_CURVE = ID_SEGMENT + 1//SEGMENT_CURVE
, ID_SEGMENT_MAX
, ID_LOCK = 2151
, ID_LOCK = 7151
, ID_LOCK_FREE = ID_LOCK + 0//LOCK_FREE
, ID_LOCK_DIR = ID_LOCK + 1//LOCK_DIR
, ID_LOCK_SIZE = ID_LOCK + 2//LOCK_SIZE
, ID_LOCK_MAX
// SymbolBasicShapeEditor toolbar/menu
, ID_SHAPE = 2201
, ID_SHAPE = 7201
, ID_SHAPE_CIRCLE = ID_SHAPE
, ID_SHAPE_RECTANGLE
, ID_SHAPE_POLYGON
......@@ -163,7 +163,7 @@ enum ChildMenuID {
, ID_SIDES
// SymbolSymmetryEditor toolbar/menu
, ID_SYMMETRY = 2301
, ID_SYMMETRY = 7301
, ID_SYMMETRY_ROTATION = ID_SYMMETRY
, ID_SYMMETRY_REFLECTION
, ID_SYMMETRY_MAX
......@@ -172,33 +172,37 @@ enum ChildMenuID {
, ID_COPIES
// On cards panel
, ID_COLLAPSE_NOTES = 3001
, ID_COLLAPSE_NOTES = 8001
// Style panel
, ID_STYLE_USE_FOR_ALL = 3011
, ID_STYLE_USE_FOR_ALL = 8011
, ID_STYLE_USE_CUSTOM
// Keywords panel
, ID_KEYWORD_ADD_PARAM = 3021
, ID_KEYWORD_ADD_PARAM = 8021
, ID_KEYWORD_REF_PARAM
, ID_KEYWORD_MODE
, ID_PARAM_TYPE_MIN = 3101
, ID_PARAM_TYPE_MAX = 3199
, ID_PARAM_REF_MIN = 3201
, ID_PARAM_REF_MAX = 3299
, ID_PARAM_TYPE_MIN = 8101
, ID_PARAM_TYPE_MAX = 8200
, ID_PARAM_REF_MIN = 8201
, ID_PARAM_REF_MAX = 8300
// Statistics panel
, ID_FIELD_LIST = 3031
, ID_FIELD_LIST = 8301
// Random pack panel
, ID_PACK_AMOUNT = 3041
, ID_PACK_AMOUNT = 8111
, ID_SEED_RANDOM
, ID_SEED_FIXED
, ID_GENERATE_PACK
// SymbolFont (Format menu)
, ID_INSERT_SYMBOL_MENU_MIN = 3301
, ID_INSERT_SYMBOL_MENU_MAX = 3999
, ID_INSERT_SYMBOL_MENU_MIN = 9001
, ID_INSERT_SYMBOL_MENU_MAX = 10000
// AddCardsScript (Card menu)
, ID_ADD_CARDS_MENU_MIN = 10001
, ID_ADD_CARDS_MENU_MAX = 11000
};
......@@ -207,11 +211,11 @@ enum ChildMenuID {
/// Window ids for controls
enum ControlID {
ID_CONTROL_MIN = 6000
, ID_CONTROL_MAX = 6999
ID_CONTROL_MIN = 1000
, ID_CONTROL_MAX = 1999
// Controls
, ID_VIEWER = 6001
, ID_VIEWER = 1001
, ID_EDITOR
, ID_CONTROL
, ID_TAB_BAR
......@@ -234,7 +238,7 @@ enum ControlID {
// Card select
, ID_SELECT_CARDS
, ID_SELECTION_CHOICE
, ID_SELECTION_CHOICE_MAX = ID_SELECTION_CHOICE + 10
, ID_SELECTION_CHOICE_MAX = ID_SELECTION_CHOICE + 100
, ID_SELECT_ALL
, ID_SELECT_NONE
// Settings
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment