mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-10 04:57:00 -04:00
Added dummy keyword panel; fixed directory finding; added more controls to style panel
git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@86 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
+25
-1
@@ -14,7 +14,7 @@ IMPLEMENT_REFLECTION(KeywordParam) {
|
||||
REFLECT(name);
|
||||
REFLECT(description);
|
||||
REFLECT(match);
|
||||
REFLECT(in_reminder);
|
||||
REFLECT(script);
|
||||
}
|
||||
IMPLEMENT_REFLECTION(KeywordMode) {
|
||||
REFLECT(name);
|
||||
@@ -25,8 +25,32 @@ IMPLEMENT_REFLECTION(KeywordExpansion) {
|
||||
REFLECT(after);
|
||||
REFLECT(reminder);
|
||||
}
|
||||
|
||||
// backwards compatability
|
||||
template <typename T> void read_compat(T&, const Keyword*) {}
|
||||
void read_compat(Reader& tag, Keyword* k) {
|
||||
String separator, parameter, reminder;
|
||||
REFLECT(separator);
|
||||
REFLECT(parameter);
|
||||
REFLECT(reminder);
|
||||
if (!separator.empty() || !parameter.empty() || !reminder.empty()) {
|
||||
// old style keyword declaration, no separate expansion
|
||||
KeywordExpansionP e(new KeywordExpansion);
|
||||
size_t start = separator.find_first_of('[');
|
||||
size_t end = separator.find_first_of(']');
|
||||
if (start != String.npos && end != String.npos) {
|
||||
e->after += separator.substr(start + 1, end - start - 1);
|
||||
}
|
||||
if (!parameter.empty()) {
|
||||
e->after += _("<param>") + parameter + _("</param>");
|
||||
}
|
||||
e->reminder.set(reminder);
|
||||
}
|
||||
}
|
||||
|
||||
IMPLEMENT_REFLECTION(Keyword) {
|
||||
REFLECT(keyword);
|
||||
read_compat(tag, this);
|
||||
REFLECT(expansions);
|
||||
REFLECT(rules);
|
||||
REFLECT(mode);
|
||||
|
||||
@@ -26,7 +26,7 @@ class KeywordParam {
|
||||
String description; ///< Description of the type
|
||||
String match; ///< Uncompiled regex
|
||||
wxRegEx matchRe; ///< Regular expression to match
|
||||
OptionalScript in_reminder; ///< Transformation of the value for showing in the reminder text
|
||||
OptionalScript script; ///< Transformation of the value for showing in the reminder text
|
||||
|
||||
DECLARE_REFLECTION();
|
||||
};
|
||||
@@ -50,7 +50,7 @@ class KeywordExpansion {
|
||||
String after; ///< Components after the keyword: parameters and separators
|
||||
vector<KeywordParamP> parameters; ///< The types of parameters
|
||||
wxRegEx splitter; ///< Regular expression to split/match the components, automatically generated
|
||||
OptionalScript reminder; ///< Reminder text of the keyword
|
||||
StringScript reminder; ///< Reminder text of the keyword
|
||||
|
||||
DECLARE_REFLECTION();
|
||||
};
|
||||
|
||||
@@ -13,9 +13,10 @@
|
||||
#include <util/reflect.hpp>
|
||||
#include <util/io/reader.hpp>
|
||||
#include <util/io/writer.hpp>
|
||||
#include <script/value.hpp>
|
||||
#include <wx/filename.h>
|
||||
#include <wx/wfstream.h>
|
||||
#include <script/value.hpp>
|
||||
#include <wx/stdpaths.h>
|
||||
|
||||
// ----------------------------------------------------------------------------- : Extra types
|
||||
|
||||
@@ -131,8 +132,11 @@ StyleSheetSettings& Settings::stylesheetSettingsFor(const StyleSheet& stylesheet
|
||||
return *ss;
|
||||
}
|
||||
|
||||
/// Retrieve the directory to use for settings and other data files
|
||||
String user_settings_dir() {
|
||||
return _(""); // TODO
|
||||
String dir = wxStandardPaths::Get().GetUserDataDir();
|
||||
if (!wxDirExists(dir)) wxMkDir(dir);
|
||||
return dir + _("/");
|
||||
}
|
||||
|
||||
String Settings::settingsFile() {
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
//+----------------------------------------------------------------------------+
|
||||
//| Description: Magic Set Editor - Program to make Magic (tm) cards |
|
||||
//| Copyright: (C) 2001 - 2006 Twan van Laarhoven |
|
||||
//| License: GNU General Public License 2 or later (see file COPYING) |
|
||||
//+----------------------------------------------------------------------------+
|
||||
|
||||
// ----------------------------------------------------------------------------- : Includes
|
||||
|
||||
#include <gui/set/keywords_panel.hpp>
|
||||
|
||||
// ----------------------------------------------------------------------------- : KeywordsList
|
||||
|
||||
// ----------------------------------------------------------------------------- : KeywordsPanel
|
||||
|
||||
KeywordsPanel::KeywordsPanel(Window* parent, int id)
|
||||
: SetWindowPanel(parent, id)
|
||||
{
|
||||
/*wxSizer* s = new wxBoxSizer(wxHORIZONTAL);
|
||||
wxSizer* s2 = new wxBoxSizer(wxVERTICAL);
|
||||
s2->Add(list_active, 1, wxEXPAND);
|
||||
s2->Add(list_inactive, 1, wxEXPAND);
|
||||
s->SetSizeHints(this);
|
||||
SetSizer(s);*/
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
//+----------------------------------------------------------------------------+
|
||||
//| Description: Magic Set Editor - Program to make Magic (tm) cards |
|
||||
//| Copyright: (C) 2001 - 2006 Twan van Laarhoven |
|
||||
//| License: GNU General Public License 2 or later (see file COPYING) |
|
||||
//+----------------------------------------------------------------------------+
|
||||
|
||||
#ifndef HEADER_GUI_SET_KEYWORDS_PANEL
|
||||
#define HEADER_GUI_SET_KEYWORDS_PANEL
|
||||
|
||||
// ----------------------------------------------------------------------------- : Includes
|
||||
|
||||
#include <util/prec.hpp>
|
||||
#include <gui/set/panel.hpp>
|
||||
|
||||
// ----------------------------------------------------------------------------- : KeywordsPanel
|
||||
|
||||
/// A panel for listing and editing the keywords in a set
|
||||
class KeywordsPanel : public SetWindowPanel {
|
||||
public:
|
||||
KeywordsPanel(Window* parent, int id);
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------- : EOF
|
||||
#endif
|
||||
@@ -18,6 +18,7 @@ class FilteredCardList;
|
||||
|
||||
// ----------------------------------------------------------------------------- : StatsPanel
|
||||
|
||||
/// A panel for showing statistics on cards
|
||||
class StatsPanel : public SetWindowPanel {
|
||||
public:
|
||||
StatsPanel(Window* parent, int id);
|
||||
|
||||
@@ -8,17 +8,47 @@
|
||||
|
||||
#include <gui/set/style_panel.hpp>
|
||||
#include <gui/control/package_list.hpp>
|
||||
#include <gui/control/card_viewer.hpp>
|
||||
#include <gui/control/native_look_editor.hpp>
|
||||
#include <util/window_id.hpp>
|
||||
#include <data/set.hpp>
|
||||
#include <data/game.hpp>
|
||||
#include <data/stylesheet.hpp>
|
||||
|
||||
// ----------------------------------------------------------------------------- : StylePanel
|
||||
|
||||
StylePanel::StylePanel(Window* parent, int id)
|
||||
: SetWindowPanel(parent, id)
|
||||
{
|
||||
PackageList* list = new PackageList(this, wxID_ANY);
|
||||
list->showData<Game>();
|
||||
|
||||
// init controls
|
||||
preview = new CardViewer (this, wxID_ANY);
|
||||
editor = new StylingEditor(this, wxID_ANY, wxNO_BORDER);
|
||||
list = new PackageList (this, wxID_ANY);
|
||||
use_for_all = new wxButton (this, ID_STYLE_USE_FOR_ALL, _("Use for &all cards"));
|
||||
// init sizer
|
||||
wxSizer* s = new wxBoxSizer(wxHORIZONTAL);
|
||||
s->Add(list, 1, wxEXPAND);
|
||||
s->Add(preview, 0, wxRIGHT, 2);
|
||||
wxSizer* s2 = new wxBoxSizer(wxVERTICAL);
|
||||
s2->Add(list, 0, wxEXPAND | wxBOTTOM, 4);
|
||||
s2->Add(use_for_all, 0, wxRIGHT | wxBOTTOM | wxALIGN_RIGHT, 4);
|
||||
wxSizer* s3 = new wxStaticBoxSizer(wxVERTICAL, this, _("Extra styling options"));
|
||||
s3->Add(editor, 2, wxEXPAND, 0);
|
||||
s2->Add(s3, 1, wxEXPAND | wxALL, 2);
|
||||
s->Add(s2, 1, wxEXPAND, 8);
|
||||
s->SetSizeHints(this);
|
||||
SetSizer(s);
|
||||
}
|
||||
|
||||
void StylePanel::onChangeSet() {
|
||||
list->showData<StyleSheet>(set->game->name() + _("-*"));
|
||||
list->select(set->stylesheet->name());
|
||||
editor->setSet(set);
|
||||
preview->setSet(set);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------- : Selection
|
||||
|
||||
void StylePanel::selectCard(const CardP& card) {
|
||||
preview->setCard(card);
|
||||
list->select(set->stylesheetFor(card)->name());
|
||||
}
|
||||
|
||||
@@ -12,11 +12,27 @@
|
||||
#include <util/prec.hpp>
|
||||
#include <gui/set/panel.hpp>
|
||||
|
||||
class CardViewer;
|
||||
class PackageList;
|
||||
class StylingEditor;
|
||||
|
||||
// ----------------------------------------------------------------------------- : StylePanel
|
||||
|
||||
/// A panel showing a list of stylesheets, and an editor for styling
|
||||
class StylePanel : public SetWindowPanel {
|
||||
public:
|
||||
StylePanel(Window* parent, int id);
|
||||
|
||||
virtual void onChangeSet();
|
||||
|
||||
// --------------------------------------------------- : Selection
|
||||
virtual void selectCard(const CardP& card);
|
||||
|
||||
private:
|
||||
CardViewer* preview; ///< Card preview
|
||||
PackageList* list; ///< List of stylesheets
|
||||
StylingEditor* editor; ///< Editor for styling information
|
||||
wxButton* use_for_all;
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------- : EOF
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <gui/set/cards_panel.hpp>
|
||||
#include <gui/set/set_info_panel.hpp>
|
||||
#include <gui/set/style_panel.hpp>
|
||||
#include <gui/set/keywords_panel.hpp>
|
||||
#include <gui/set/stats_panel.hpp>
|
||||
#include <gui/control/card_list.hpp>
|
||||
#include <gui/control/gallery_list.hpp>
|
||||
@@ -117,13 +118,13 @@ SetWindow::SetWindow(Window* parent, const SetP& set)
|
||||
// NOTE: place the CardsPanel last in the panels list,
|
||||
// this way the card list is the last to be told of a set change
|
||||
// this way everyone else already uses the new set when it sends a CardSelectEvent
|
||||
addPanel(menuWindow, tabBar, new CardsPanel (this, wxID_ANY), 3, _("F5"), _("Cards"), _("Cards"), _("Edit the cards in the set"));
|
||||
addPanel(menuWindow, tabBar, new CardsPanel (this, wxID_ANY), 4, _("F5"), _("Cards"), _("Cards"), _("Edit the cards in the set"));
|
||||
addPanel(menuWindow, tabBar, new SetInfoPanel (this, wxID_ANY), 0, _("F6"), _("Set info"), _("&Set Information"), _("Edit information about the set, its creator, etc."));
|
||||
addPanel(menuWindow, tabBar, new StylePanel (this, wxID_ANY), 1, _("F7"), _("Style"), _("Style"), _("Change the style of cards"));
|
||||
// addPanel(menuWindow, tabBar, new KeywordsPanel(this, wxID_ANY), 2, _("F8"));
|
||||
addPanel(menuWindow, tabBar, new StatsPanel (this, wxID_ANY), 2, _("F9"), _("Stats"), _("Statistics"), _("Show statistics about the cards in the set"));
|
||||
addPanel(menuWindow, tabBar, new KeywordsPanel(this, wxID_ANY), 2, _("F8"), _("Keywords"), _("Keywords"), _("Define extra keywords for this set"));
|
||||
addPanel(menuWindow, tabBar, new StatsPanel (this, wxID_ANY), 3, _("F9"), _("Stats"), _("Statistics"), _("Show statistics about the cards in the set"));
|
||||
// addPanel(*s, *menuWindow, *tabBar, new DraftPanel (&this, wxID_ANY), 4, _("F10"))
|
||||
selectPanel(ID_WINDOW_MIN + 3); // select cards panel
|
||||
selectPanel(ID_WINDOW_MIN + 0); // select cards panel
|
||||
|
||||
// loose ends
|
||||
tabBar->Realize();
|
||||
@@ -256,7 +257,6 @@ void SetWindow::onRenderSettingsChange() {
|
||||
}
|
||||
|
||||
void SetWindow::fixMinWindowSize() {
|
||||
current_panel->Layout();
|
||||
current_panel->SetMinSize(current_panel->GetSizer()->GetMinSize());
|
||||
Layout();
|
||||
wxSize s = GetSizer()->GetMinSize();
|
||||
|
||||
@@ -40,6 +40,7 @@ bool MSE::OnInit() {
|
||||
SetAppName(_("Magic Set Editor"));
|
||||
wxInitAllImageHandlers();
|
||||
init_file_formats();
|
||||
packages.init();
|
||||
settings.read();
|
||||
//Window* wnd = new SymbolWindow(nullptr);
|
||||
//GameP g = Game::byName(_("magic"))
|
||||
|
||||
@@ -328,6 +328,12 @@
|
||||
<File
|
||||
RelativePath=".\gui\set\cards_panel.hpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\gui\set\keywords_panel.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\gui\set\keywords_panel.hpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\gui\set\panel.cpp">
|
||||
</File>
|
||||
|
||||
@@ -72,3 +72,34 @@ template <> void GetDefaultMember::handle(const OptionalScript& os) {
|
||||
handle(script_nil);
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------- : StringScript
|
||||
|
||||
const String& StringScript::get() const {
|
||||
return unparsed;
|
||||
}
|
||||
|
||||
void StringScript::set(const String& s) {
|
||||
unparsed = s;
|
||||
script = ::parse(unparsed, true);
|
||||
}
|
||||
|
||||
template <> void Reader::handle(StringScript& os) {
|
||||
handle(os.unparsed);
|
||||
os.parse(*this, true);
|
||||
}
|
||||
|
||||
// same as OptionalScript
|
||||
|
||||
template <> void Writer::handle(const StringScript& os) {
|
||||
handle(os.unparsed);
|
||||
}
|
||||
|
||||
template <> void GetDefaultMember::handle(const StringScript& os) {
|
||||
// reflect as the script itself
|
||||
if (os.script) {
|
||||
handle(os.script);
|
||||
} else {
|
||||
handle(script_nil);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ void store(const ScriptValueP& val, Defaultable<String>& var);
|
||||
|
||||
// ----------------------------------------------------------------------------- : OptionalScript
|
||||
|
||||
/// An optional script,
|
||||
/// An optional script
|
||||
class OptionalScript {
|
||||
public:
|
||||
inline OptionalScript() {}
|
||||
@@ -73,7 +73,7 @@ class OptionalScript {
|
||||
/// Initialize things this script depends on by adding dep to their list of dependent scripts
|
||||
void initDependencies(Context&, const Dependency& dep) const;
|
||||
|
||||
private:
|
||||
protected:
|
||||
ScriptP script; ///< The script, may be null if there is no script
|
||||
String unparsed; ///< Unparsed script, for writing back to a file
|
||||
// parse the unparsed string, while reading
|
||||
@@ -85,6 +85,16 @@ class OptionalScript {
|
||||
template <typename T>
|
||||
inline ScriptValueP toScript(const Defaultable<T>& v) { return toScript(v.get()); }
|
||||
|
||||
// ----------------------------------------------------------------------------- : StringScript
|
||||
|
||||
/// An optional script which is parsed in string mode
|
||||
class StringScript : public OptionalScript {
|
||||
public:
|
||||
const String& get() const;
|
||||
void set(const String&);
|
||||
DECLARE_REFLECTION();
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------- : Scriptable
|
||||
|
||||
/// A script that defines a calculation to find a value
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
|
||||
// ----------------------------------------------------------------------------- : Includes
|
||||
|
||||
#include <util/action_stack.hpp>
|
||||
#include <util/for_each.hpp>
|
||||
#include <algorithm>
|
||||
#include "action_stack.hpp"
|
||||
#include "for_each.hpp"
|
||||
|
||||
// ----------------------------------------------------------------------------- : Action stack
|
||||
|
||||
|
||||
@@ -9,8 +9,9 @@
|
||||
|
||||
// ----------------------------------------------------------------------------- : Includes
|
||||
|
||||
#include <util/prec.hpp>
|
||||
#include <util/string.hpp>
|
||||
#include <vector>
|
||||
#include "string.hpp"
|
||||
|
||||
// ----------------------------------------------------------------------------- : Action
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <data/game.hpp>
|
||||
#include <data/stylesheet.hpp>
|
||||
#include <data/symbol_font.hpp>
|
||||
#include <wx/stdpaths.h>
|
||||
|
||||
// ----------------------------------------------------------------------------- : IncludePackage
|
||||
|
||||
@@ -34,16 +35,12 @@ IMPLEMENT_REFLECTION(IncludePackage) {
|
||||
|
||||
// ----------------------------------------------------------------------------- : PackageManager
|
||||
|
||||
String program_dir() {
|
||||
return wxGetCwd(); //TODO
|
||||
}
|
||||
|
||||
PackageManager packages;
|
||||
|
||||
|
||||
PackageManager::PackageManager() {
|
||||
void PackageManager::init() {
|
||||
// determine data directory
|
||||
data_directory = program_dir();
|
||||
data_directory = wxStandardPaths::Get().GetDataDir();
|
||||
// check if this is the actual data directory, especially during debugging,
|
||||
// the data may be higher up:
|
||||
// exe path = mse/build/debug/mse.exe
|
||||
|
||||
@@ -23,7 +23,12 @@ DECLARE_POINTER_TYPE(Packaged);
|
||||
*/
|
||||
class PackageManager {
|
||||
public:
|
||||
PackageManager();
|
||||
/// Initialize the package manager
|
||||
void init();
|
||||
/// Empty the list of packages.
|
||||
/** This function MUST be called before the program terminates, otherwise
|
||||
* we could get into fights with pool allocators used by ScriptValues */
|
||||
void destroy();
|
||||
|
||||
/// Open a package with the specified name (including extension)
|
||||
template <typename T>
|
||||
@@ -55,12 +60,7 @@ class PackageManager {
|
||||
|
||||
// Open a file from a package, with a name encoded as "package/file"
|
||||
InputStreamP openFileFromPackage(const String& name);
|
||||
|
||||
/// Empty the list of packages.
|
||||
/** This function MUST be called before the program terminates, otherwise
|
||||
* we could get into fights with pool allocators used by ScriptValues */
|
||||
void destroy();
|
||||
|
||||
|
||||
private:
|
||||
map<String, PackagedP> loaded_packages;
|
||||
String data_directory;
|
||||
|
||||
@@ -141,6 +141,9 @@ enum ChildMenuID {
|
||||
|
||||
// Statistics
|
||||
, ID_FIELD_LIST = 3101
|
||||
|
||||
// Style
|
||||
, ID_STYLE_USE_FOR_ALL = 3201
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user