mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-12 13:37:00 -04:00
style specific fields are now editable&saveable
git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@392 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
@@ -264,6 +264,7 @@ extra card field:
|
|||||||
type: choice
|
type: choice
|
||||||
name: pt box
|
name: pt box
|
||||||
script: card.card_color
|
script: card.card_color
|
||||||
|
editable: false
|
||||||
|
|
||||||
extra card style:
|
extra card style:
|
||||||
pt box:
|
pt box:
|
||||||
|
|||||||
@@ -401,10 +401,12 @@ extra card field:
|
|||||||
type: choice
|
type: choice
|
||||||
name: pt symbols
|
name: pt symbols
|
||||||
script: "shieldsword"
|
script: "shieldsword"
|
||||||
|
editable: false
|
||||||
extra card field:
|
extra card field:
|
||||||
type: choice
|
type: choice
|
||||||
name: pt symbols 2
|
name: pt symbols 2
|
||||||
script: "shieldsword"
|
script: "shieldsword"
|
||||||
|
editable: false
|
||||||
|
|
||||||
extra card style:
|
extra card style:
|
||||||
pt symbols:
|
pt symbols:
|
||||||
|
|||||||
@@ -308,6 +308,7 @@ extra card field:
|
|||||||
type: choice
|
type: choice
|
||||||
name: pt symbols
|
name: pt symbols
|
||||||
script: "shieldsword"
|
script: "shieldsword"
|
||||||
|
editable: false
|
||||||
|
|
||||||
extra card style:
|
extra card style:
|
||||||
pt symbols:
|
pt symbols:
|
||||||
|
|||||||
@@ -312,6 +312,7 @@ extra card field:
|
|||||||
type: choice
|
type: choice
|
||||||
name: pt symbols
|
name: pt symbols
|
||||||
script: "shieldsword"
|
script: "shieldsword"
|
||||||
|
editable: false
|
||||||
|
|
||||||
extra card style:
|
extra card style:
|
||||||
pt symbols:
|
pt symbols:
|
||||||
|
|||||||
@@ -471,10 +471,12 @@ extra card field:
|
|||||||
type: choice
|
type: choice
|
||||||
name: pt symbols
|
name: pt symbols
|
||||||
script: "shieldsword"
|
script: "shieldsword"
|
||||||
|
editable: false
|
||||||
extra card field:
|
extra card field:
|
||||||
type: choice
|
type: choice
|
||||||
name: pt symbols 2
|
name: pt symbols 2
|
||||||
script: "shieldsword"
|
script: "shieldsword"
|
||||||
|
editable: false
|
||||||
|
|
||||||
extra card style:
|
extra card style:
|
||||||
pt symbols:
|
pt symbols:
|
||||||
|
|||||||
@@ -337,6 +337,7 @@ extra card field:
|
|||||||
type: choice
|
type: choice
|
||||||
name: pt symbols
|
name: pt symbols
|
||||||
script: "shieldsword"
|
script: "shieldsword"
|
||||||
|
editable: false
|
||||||
|
|
||||||
extra card style:
|
extra card style:
|
||||||
pt symbols:
|
pt symbols:
|
||||||
|
|||||||
@@ -366,11 +366,12 @@ extra card field:
|
|||||||
type: choice
|
type: choice
|
||||||
name: pt box
|
name: pt box
|
||||||
script: card.card_color
|
script: card.card_color
|
||||||
|
editable: false
|
||||||
extra card field:
|
extra card field:
|
||||||
type: choice
|
type: choice
|
||||||
name: pt box 2
|
name: pt box 2
|
||||||
script: card.card_color
|
script: card.card_color
|
||||||
|
editable: false
|
||||||
|
|
||||||
extra card style:
|
extra card style:
|
||||||
pt box:
|
pt box:
|
||||||
|
|||||||
@@ -269,6 +269,7 @@ extra card field:
|
|||||||
type: choice
|
type: choice
|
||||||
name: pt box
|
name: pt box
|
||||||
script: card.card_color
|
script: card.card_color
|
||||||
|
editable: false
|
||||||
|
|
||||||
extra card style:
|
extra card style:
|
||||||
pt box:
|
pt box:
|
||||||
|
|||||||
@@ -410,11 +410,12 @@ extra card field:
|
|||||||
type: choice
|
type: choice
|
||||||
name: pt box
|
name: pt box
|
||||||
script: card.card_color
|
script: card.card_color
|
||||||
|
editable: false
|
||||||
extra card field:
|
extra card field:
|
||||||
type: choice
|
type: choice
|
||||||
name: pt box 2
|
name: pt box 2
|
||||||
script: card.card_color_2
|
script: card.card_color_2
|
||||||
|
editable: false
|
||||||
|
|
||||||
extra card style:
|
extra card style:
|
||||||
pt box:
|
pt box:
|
||||||
|
|||||||
@@ -312,6 +312,7 @@ extra card field:
|
|||||||
type: choice
|
type: choice
|
||||||
name: pt box
|
name: pt box
|
||||||
script: card.card_color
|
script: card.card_color
|
||||||
|
editable: false
|
||||||
|
|
||||||
extra card style:
|
extra card style:
|
||||||
pt box:
|
pt box:
|
||||||
|
|||||||
@@ -277,6 +277,7 @@ extra card field:
|
|||||||
type: choice
|
type: choice
|
||||||
name: pt box
|
name: pt box
|
||||||
script: card.card_color
|
script: card.card_color
|
||||||
|
editable: false
|
||||||
|
|
||||||
extra card style:
|
extra card style:
|
||||||
pt box:
|
pt box:
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#include <data/field.hpp>
|
#include <data/field.hpp>
|
||||||
#include <util/error.hpp>
|
#include <util/error.hpp>
|
||||||
#include <util/reflect.hpp>
|
#include <util/reflect.hpp>
|
||||||
|
#include <wx/sstream.h>
|
||||||
|
|
||||||
DECLARE_TYPEOF_COLLECTION(FieldP);
|
DECLARE_TYPEOF_COLLECTION(FieldP);
|
||||||
DECLARE_TYPEOF_NO_REV(IndexMap<FieldP COMMA ValueP>);
|
DECLARE_TYPEOF_NO_REV(IndexMap<FieldP COMMA ValueP>);
|
||||||
@@ -51,6 +52,48 @@ void mark_dependency_member(const Card& card, const String& name, const Dependen
|
|||||||
IMPLEMENT_REFLECTION(Card) {
|
IMPLEMENT_REFLECTION(Card) {
|
||||||
REFLECT(stylesheet);
|
REFLECT(stylesheet);
|
||||||
REFLECT(notes);
|
REFLECT(notes);
|
||||||
|
REFLECT_NO_SCRIPT(extra_data);
|
||||||
REFLECT_NAMELESS(data);
|
REFLECT_NAMELESS(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------- : Styling
|
||||||
|
|
||||||
|
// TODO : this is practically the same as Set::Styling, maybe somehow abstract it
|
||||||
|
|
||||||
|
// Extra card data, for a specific stylesheet
|
||||||
|
/* The data is not read immediatly, because we do not know the stylesheet */
|
||||||
|
class Card::Styling : public IntrusivePtrBase<Card::Styling> {
|
||||||
|
public:
|
||||||
|
/// The values on the extra card fields of the card.
|
||||||
|
/** The indices should correspond to the extra_card_fields in the StyleSheet */
|
||||||
|
IndexMap<FieldP, ValueP> extra_data;
|
||||||
|
/// Unparsed extra_data
|
||||||
|
String unread_data;
|
||||||
|
DECLARE_REFLECTION();
|
||||||
|
};
|
||||||
|
|
||||||
|
IndexMap<FieldP, ValueP>& Card::extraDataFor(const StyleSheet& stylesheet) {
|
||||||
|
StylingP& styling = extra_data[stylesheet.name()];
|
||||||
|
if (!styling) {
|
||||||
|
styling = new_intrusive<Styling>();
|
||||||
|
styling->extra_data.init(stylesheet.extra_card_fields);
|
||||||
|
} else if (!styling->unread_data.empty() || (styling->extra_data.empty()) && !stylesheet.extra_card_fields.empty()) {
|
||||||
|
// we delayed the reading of the data, read it now
|
||||||
|
styling->extra_data.init(stylesheet.extra_card_fields);
|
||||||
|
Reader reader(new_shared1<wxStringInputStream>(styling->unread_data), _("extra card values for ") + stylesheet.stylesheetName());
|
||||||
|
reader.handle_greedy(styling->extra_data);
|
||||||
|
styling->unread_data.clear();
|
||||||
|
}
|
||||||
|
return styling->extra_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
// custom reflection : read into unread_data
|
||||||
|
template <> void Reader::handle(Card::Styling& s) {
|
||||||
|
handle(s.unread_data);
|
||||||
|
}
|
||||||
|
template <> void Writer::handle(const Card::Styling& s) {
|
||||||
|
handle(s.extra_data);
|
||||||
|
}
|
||||||
|
// for the love of god, don't depend on styling
|
||||||
|
template <> void GetMember::handle(const Card::Styling& s) {}
|
||||||
|
template <> void GetDefaultMember::handle(const Card::Styling& s) {}
|
||||||
|
|||||||
+6
-3
@@ -34,15 +34,18 @@ class Card : public IntrusivePtrVirtualBase {
|
|||||||
/// The values on the fields of the card.
|
/// The values on the fields of the card.
|
||||||
/** The indices should correspond to the card_fields in the Game */
|
/** The indices should correspond to the card_fields in the Game */
|
||||||
IndexMap<FieldP, ValueP> data;
|
IndexMap<FieldP, ValueP> data;
|
||||||
/// The values on the extra fields of the card.
|
|
||||||
/** The indices should correspond to the extra_card_fields in the StyleSheet */
|
|
||||||
IndexMap<FieldP, ValueP> extra_data;
|
|
||||||
/// Notes for this card
|
/// Notes for this card
|
||||||
String notes;
|
String notes;
|
||||||
/// Alternative style to use for this card
|
/// Alternative style to use for this card
|
||||||
/** Optional; if not set use the card style from the set */
|
/** Optional; if not set use the card style from the set */
|
||||||
StyleSheetP stylesheet;
|
StyleSheetP stylesheet;
|
||||||
|
|
||||||
|
/// Extra values for specitic stylesheets, indexed by stylesheet name
|
||||||
|
DECLARE_POINTER_TYPE(Styling);
|
||||||
|
map<String, StylingP> extra_data;
|
||||||
|
/// Styling information for a particular stylesheet
|
||||||
|
IndexMap<FieldP, ValueP>& extraDataFor(const StyleSheet& stylesheet) ;
|
||||||
|
|
||||||
/// Get the identification of this card, an identification is something like a name, title, etc.
|
/// Get the identification of this card, an identification is something like a name, title, etc.
|
||||||
/** May return "" */
|
/** May return "" */
|
||||||
String identification() const;
|
String identification() const;
|
||||||
|
|||||||
@@ -85,9 +85,9 @@ IMPLEMENT_REFLECTION(StyleSheet) {
|
|||||||
REFLECT(extra_card_fields);
|
REFLECT(extra_card_fields);
|
||||||
REFLECT_IF_READING {
|
REFLECT_IF_READING {
|
||||||
if (extra_card_style.init(extra_card_fields)) {
|
if (extra_card_style.init(extra_card_fields)) {
|
||||||
// make sure the extra_card_fields are not editable and savable
|
// if a value is not editable, don't save it
|
||||||
FOR_EACH(f, extra_card_fields) {
|
FOR_EACH(f, extra_card_fields) {
|
||||||
f->editable = f->save_value = false;
|
if (!f->editable) f->save_value = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,8 +96,7 @@ void DataViewer::setCard(const CardP& card, bool refresh) {
|
|||||||
this->card = card;
|
this->card = card;
|
||||||
stylesheet = new_stylesheet;
|
stylesheet = new_stylesheet;
|
||||||
setStyles(stylesheet, stylesheet->card_style, &stylesheet->extra_card_style);
|
setStyles(stylesheet, stylesheet->card_style, &stylesheet->extra_card_style);
|
||||||
card->extra_data.init(stylesheet->extra_card_fields); // make sure extra_data is initialized
|
setData(card->data, &card->extraDataFor(*stylesheet));
|
||||||
setData(card->data, &card->extra_data);
|
|
||||||
onChangeSize();
|
onChangeSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -196,8 +196,8 @@ void SetScriptManager::updateStyles(const CardP& card) {
|
|||||||
const StyleSheet& stylesheet = set.stylesheetFor(card);
|
const StyleSheet& stylesheet = set.stylesheetFor(card);
|
||||||
Context& ctx = getContext(card);
|
Context& ctx = getContext(card);
|
||||||
// update extra card fields
|
// update extra card fields
|
||||||
card->extra_data.init(stylesheet.extra_card_fields);
|
IndexMap<FieldP,ValueP>& extra_data = card->extraDataFor(stylesheet);
|
||||||
FOR_EACH(v, card->extra_data) {
|
FOR_EACH(v, extra_data) {
|
||||||
v->update(ctx);
|
v->update(ctx);
|
||||||
}
|
}
|
||||||
// update all styles
|
// update all styles
|
||||||
|
|||||||
Reference in New Issue
Block a user