Commit e992cf8b authored by twanvl's avatar twanvl

Implemented NewSetWindow, added events to GalleryList

parent a9f3c12a
...@@ -8,17 +8,23 @@ ...@@ -8,17 +8,23 @@
#include <data/set.hpp> #include <data/set.hpp>
#include <data/game.hpp> #include <data/game.hpp>
#include <data/stylesheet.hpp>
#include <data/card.hpp> #include <data/card.hpp>
#include <data/field.hpp> #include <data/field.hpp>
#include <script/value.hpp> #include <script/value.hpp>
// ----------------------------------------------------------------------------- : Set // ----------------------------------------------------------------------------- : Set
Set::Set() {}
Set::Set(const GameP& game) Set::Set(const GameP& game)
: game(game) : game(game)
{} {}
Set::Set() {} Set::Set(const StyleSheetP& stylesheet)
: stylesheet(stylesheet)
, game(stylesheet->game)
{}
String Set::typeName() const { return _("set"); } String Set::typeName() const { return _("set"); }
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
DECLARE_POINTER_TYPE(Card); DECLARE_POINTER_TYPE(Card);
DECLARE_POINTER_TYPE(Set); DECLARE_POINTER_TYPE(Set);
DECLARE_POINTER_TYPE(Game); DECLARE_POINTER_TYPE(Game);
DECLARE_POINTER_TYPE(Stylesheet); DECLARE_POINTER_TYPE(StyleSheet);
DECLARE_POINTER_TYPE(Field); DECLARE_POINTER_TYPE(Field);
DECLARE_POINTER_TYPE(Value); DECLARE_POINTER_TYPE(Value);
...@@ -30,11 +30,13 @@ class Set : public Packaged { ...@@ -30,11 +30,13 @@ class Set : public Packaged {
Set(); Set();
/// Create a set using the given game /// Create a set using the given game
Set(const GameP& game); Set(const GameP& game);
/// Create a set using the given stylesheet, and its game
Set(const StyleSheetP& stylesheet);
/// The game this set uses /// The game this set uses
GameP game; GameP game;
/// The default stylesheet /// The default stylesheet
StylesheetP stylesheet; StyleSheetP stylesheet;
/// The values on the fields of the set /// The values on the fields of the set
/** The indices should correspond to the set_fields in the Game */ /** The indices should correspond to the set_fields in the Game */
IndexMap<FieldP, ValueP> data; IndexMap<FieldP, ValueP> data;
......
...@@ -37,7 +37,7 @@ IMPLEMENT_REFLECTION(ColumnSettings) { ...@@ -37,7 +37,7 @@ IMPLEMENT_REFLECTION(ColumnSettings) {
} }
IMPLEMENT_REFLECTION(GameSettings) { IMPLEMENT_REFLECTION(GameSettings) {
REFLECT(default_style); REFLECT(default_stylesheet);
REFLECT(default_export); REFLECT(default_export);
// REFLECT_N("cardlist columns", columns); // REFLECT_N("cardlist columns", columns);
REFLECT(sort_cards_by); REFLECT(sort_cards_by);
......
...@@ -43,7 +43,7 @@ class ColumnSettings { ...@@ -43,7 +43,7 @@ class ColumnSettings {
/// Settings for a Game /// Settings for a Game
class GameSettings { class GameSettings {
public: public:
String default_style; String default_stylesheet;
String default_export; String default_export;
map<String, ColumnSettings> columns; map<String, ColumnSettings> columns;
String sort_cards_by; String sort_cards_by;
......
...@@ -8,4 +8,7 @@ ...@@ -8,4 +8,7 @@
#include <data/stylesheet.hpp> #include <data/stylesheet.hpp>
// ----------------------------------------------------------------------------- : // ----------------------------------------------------------------------------- : StyleSheet
String StyleSheet::typeNameStatic() { return _("style"); }
String StyleSheet::typeName() const { return _("style"); }
...@@ -17,10 +17,17 @@ DECLARE_POINTER_TYPE(Game); ...@@ -17,10 +17,17 @@ DECLARE_POINTER_TYPE(Game);
// ----------------------------------------------------------------------------- : StyleSheet // ----------------------------------------------------------------------------- : StyleSheet
/// A collection of style information for card and set fields /// A collection of style information for card and set fields
class StyleSheet : Packaged { class StyleSheet : public Packaged {
public: public:
GameP game; GameP game;
static String typeNameStatic();
virtual String typeName() const;
virtual String fullName() const;
virtual InputStreamP openIconFile();
private: private:
DECLARE_REFLECTION();
}; };
// ----------------------------------------------------------------------------- : EOF // ----------------------------------------------------------------------------- : EOF
......
...@@ -18,9 +18,9 @@ DECLARE_POINTER_TYPE(Field); ...@@ -18,9 +18,9 @@ DECLARE_POINTER_TYPE(Field);
// ----------------------------------------------------------------------------- : Events // ----------------------------------------------------------------------------- : Events
DECLARE_EVENT_TYPE(EVENT_CARD_SELECT, <not used>); DECLARE_EVENT_TYPE(EVENT_CARD_SELECT, <not used>)
/// Handle CardSelectEvents /// Handle CardSelectEvents
#define EVT_CARD_SELECT(id, handler) EVT_COMMAND(id, EVENT_CARD_SELECT, handler); #define EVT_CARD_SELECT(id, handler) EVT_COMMAND(id, EVENT_CARD_SELECT, handler)
/// The event of selecting a card /// The event of selecting a card
struct CardSelectEvent : public wxCommandEvent { struct CardSelectEvent : public wxCommandEvent {
......
...@@ -8,6 +8,11 @@ ...@@ -8,6 +8,11 @@
#include <gui/control/gallery_list.hpp> #include <gui/control/gallery_list.hpp>
// ----------------------------------------------------------------------------- : Events
DEFINE_EVENT_TYPE(EVENT_GALLERY_SELECT);
DEFINE_EVENT_TYPE(EVENT_GALLERY_ACTIVATE);
// ----------------------------------------------------------------------------- : GalleryList // ----------------------------------------------------------------------------- : GalleryList
const int MARGIN = 2; // margin around items const int MARGIN = 2; // margin around items
...@@ -77,12 +82,12 @@ void GalleryList::onLeftDown(wxMouseEvent& ev) { ...@@ -77,12 +82,12 @@ void GalleryList::onLeftDown(wxMouseEvent& ev) {
if (item != selection && item < itemCount()) { if (item != selection && item < itemCount()) {
selection = item; selection = item;
update(); update();
sendEvent(EVENT_GALLERY_SELECT);
} }
} }
void GalleryList::onLeftDClick(wxMouseEvent& ev) { void GalleryList::onLeftDClick(wxMouseEvent& ev) {
// activate an item sendEvent(EVENT_GALLERY_ACTIVATE);
// TODO
} }
void GalleryList::onKeyDown(wxKeyEvent& ev) { void GalleryList::onKeyDown(wxKeyEvent& ev) {
...@@ -160,6 +165,11 @@ void GalleryList::OnDraw(DC& dc) { ...@@ -160,6 +165,11 @@ void GalleryList::OnDraw(DC& dc) {
} }
} }
void GalleryList::sendEvent(WXTYPE type) {
wxCommandEvent ev(type, GetId());
ProcessEvent(ev);
}
// ----------------------------------------------------------------------------- : Event table // ----------------------------------------------------------------------------- : Event table
BEGIN_EVENT_TABLE(GalleryList, wxScrolledWindow) BEGIN_EVENT_TABLE(GalleryList, wxScrolledWindow)
......
...@@ -11,6 +11,16 @@ ...@@ -11,6 +11,16 @@
#include <util/prec.hpp> #include <util/prec.hpp>
// ----------------------------------------------------------------------------- : Events
DECLARE_EVENT_TYPE(EVENT_GALLERY_SELECT, <not used>)
DECLARE_EVENT_TYPE(EVENT_GALLERY_ACTIVATE, <not used>)
/// Handle EVENT_GALLERY_SELECT events
#define EVT_GALLERY_SELECT( id, handler) EVT_COMMAND(id, EVENT_GALLERY_SELECT, handler)
/// Handle EVENT_GALLERY_ACTIVATE events
#define EVT_GALLERY_ACTIVATE(id, handler) EVT_COMMAND(id, EVENT_GALLERY_ACTIVATE, handler)
// ----------------------------------------------------------------------------- : GalleryList // ----------------------------------------------------------------------------- : GalleryList
/// A list of items with custom drawing /// A list of items with custom drawing
...@@ -47,6 +57,8 @@ class GalleryList : public wxScrolledWindow { ...@@ -47,6 +57,8 @@ class GalleryList : public wxScrolledWindow {
/// Find the item corresponding to the given location /// Find the item corresponding to the given location
size_t findItem(const wxMouseEvent&); size_t findItem(const wxMouseEvent&);
/// Send an event
void sendEvent(WXTYPE type);
}; };
// ----------------------------------------------------------------------------- : EOF // ----------------------------------------------------------------------------- : EOF
......
...@@ -76,3 +76,21 @@ void PackageList::showData(const String& pattern) { ...@@ -76,3 +76,21 @@ void PackageList::showData(const String& pattern) {
// update list // update list
update(); update();
} }
void PackageList::clear() {
packages.clear();
update();
}
void PackageList::select(const String& name) {
for (vector<PackageData>::const_iterator it = packages.begin() ; it != packages.end() ; ++it) {
if (it->package->name() == name) {
selection = it - packages.begin();
update();
return;
}
}
selection = NO_SELECTION;
update();
return;
}
...@@ -30,7 +30,10 @@ class PackageList : public GalleryList { ...@@ -30,7 +30,10 @@ class PackageList : public GalleryList {
/// Shows packages that match a specific patern /// Shows packages that match a specific patern
void showData(const String& pattern = _("*.*")); void showData(const String& pattern = _("*.*"));
// Is there a package selected? /// Clears this list
void clear();
/// Is there a package selected?
inline bool hasSelection() const { return selection < itemCount(); } inline bool hasSelection() const { return selection < itemCount(); }
/// Get the selected package, T should be the same type used for showData /// Get the selected package, T should be the same type used for showData
...@@ -43,6 +46,9 @@ class PackageList : public GalleryList { ...@@ -43,6 +46,9 @@ class PackageList : public GalleryList {
return ret; return ret;
} }
/// Select the package with the given name, if it is not found, selects nothing
void select(const String& name);
protected: protected:
/// Return how many items there are in the list /// Return how many items there are in the list
virtual size_t itemCount() const; virtual size_t itemCount() const;
......
//+----------------------------------------------------------------------------+
//| 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/new_window.hpp>
#include <gui/control/gallery_list.hpp>
#include <gui/control/package_list.hpp>
#include <data/game.hpp>
#include <data/stylesheet.hpp>
#include <data/set.hpp>
#include <data/card.hpp>
#include <data/settings.hpp>
#include <util/window_id.hpp>
// ----------------------------------------------------------------------------- : NewSetWindow
SetP new_set_window(Window* parent) {
NewSetWindow wnd(parent);
wnd.ShowModal();
return wnd.set;
}
NewSetWindow::NewSetWindow(Window* parent)
: wxDialog(parent, wxID_ANY, _("New set"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
{
// init controls
game_list = new PackageList (this, ID_GAME_LIST);
stylesheet_list = new PackageList (this, ID_STYLESHEET_LIST);
game_text = new wxStaticText(this, wxID_ANY, _("&Game type:"));
stylesheet_text = new wxStaticText(this, wxID_ANY, _("&Card style:"));
// init sizer
wxSizer* s = new wxBoxSizer(wxVERTICAL);
s->Add(game_text, 0, wxALL, 4);
s->Add(game_list, 1, wxEXPAND | wxALL & ~wxTOP, 4);
s->Add(stylesheet_text, 0, wxALL, 4);
s->Add(stylesheet_list, 1, wxEXPAND | wxALL & ~wxTOP, 4);
s->Add(CreateButtonSizer(wxOK | wxCANCEL) , 0, wxEXPAND | wxALL, 8);
s->SetSizeHints(this);
SetSizer(s);
// disable stuff
ok_button = FindWindow(wxID_OK);
assert(ok_button);
enableStyle(false);
// force refresh of gameList, otherwise a grey background shows (win XP)
SetSize(wxSize(530,320));
// init lists
game_list->showData<Game>();
game_list->select(settings.default_game);
}
void NewSetWindow::enableStyle(bool e) {
stylesheet_list->Enable(e);
stylesheet_text->Enable(e);
if (!e) enableOk(e);
}
void NewSetWindow::enableOk(bool e) {
ok_button->Enable(e);
}
void NewSetWindow::onGameSelect(wxCommandEvent&) {
GameP game = game_list->getSelection<Game>();
settings.default_game = game->name();
GameSettings& gs = settings.gameSettingsFor(*game);
stylesheet_list->showData<StyleSheet>(game->name() + _("-*"));
stylesheet_list->select(gs.default_stylesheet);
enableStyle(true);
}
/*void NewSetWindow::onGameDeselect(wxCommandEvent&) {
stylesheet_list->clear();
enableStyle(false);
}
*/
void NewSetWindow::onStyleSheetSelect(wxCommandEvent&) {
enableOk(true);
// store this as default selection
GameP game = game_list ->getSelection<Game>();
StyleSheetP stylesheet = stylesheet_list->getSelection<StyleSheet>();
GameSettings& gs = settings.gameSettingsFor(*game);
gs.default_stylesheet = stylesheet->name();
}
/*void NewSetWindow::onStyleSheetDeselect(wxCommandEvent&) {
enableOk(false);
}
*/
void NewSetWindow::onStyleSheetActivate(wxCommandEvent&) {
done();
}
void NewSetWindow::OnOK(wxCommandEvent&) {
done();
}
void NewSetWindow::done() {
StyleSheetP stylesheet = stylesheet_list->getSelection<StyleSheet>();
set = new_shared1<Set>(stylesheet);
set->cards.push_back(new_shared1<Card>(*set->game));
EndModal(wxID_OK);
}
BEGIN_EVENT_TABLE(NewSetWindow, wxDialog)
EVT_GALLERY_SELECT (ID_GAME_LIST, NewSetWindow::onGameSelect)
// EVT_LIST_ITEM_DESELECTED (ID_GAME_LIST, NewSetWindow::onGameDeselect)
EVT_GALLERY_SELECT (ID_STYLESHEET_LIST, NewSetWindow::onStyleSheetSelect)
// EVT_LIST_ITEM_DESELECTED (ID_STYLESHEET_LIST, NewSetWindow::onStyleDeselect)
EVT_GALLERY_ACTIVATE (ID_STYLESHEET_LIST, NewSetWindow::onStyleSheetActivate)
END_EVENT_TABLE ()
//+----------------------------------------------------------------------------+
//| 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_NEW_WINDOW
#define HEADER_GUI_NEW_WINDOW
// ----------------------------------------------------------------------------- : Includes
#include <util/prec.hpp>
class PackageList;
DECLARE_POINTER_TYPE(Set);
// ----------------------------------------------------------------------------- : NewSetWindow
/// Show the new set window, return the new set, if any
SetP new_set_window(Window* parent);
/// "Create a new set" dialog. First select game, then matching style.
class NewSetWindow : public wxDialog {
public:
/// The newly created set, if any
SetP set;
NewSetWindow(Window* parent);
// --------------------------------------------------- : data
private:
DECLARE_EVENT_TABLE();
// gui items
PackageList* game_list, *stylesheet_list;
wxStaticText* game_text, *stylesheet_text;
Window* ok_button;
// --------------------------------------------------- : enabling stuff
void enableStyle(bool e);
void enableOk (bool e);
// --------------------------------------------------- : events
void onGameSelect (wxCommandEvent&);
// void onGameDeselect(wxCommandEvent&);
void onStyleSheetSelect (wxCommandEvent&);
// void onStyleSheetDeselect(wxCommandEvent&);
void onStyleSheetActivate(wxCommandEvent&);
virtual void OnOK(wxCommandEvent&);
// we are done, close the window
void done();
};
// ----------------------------------------------------------------------------- : EOF
#endif
...@@ -366,10 +366,9 @@ void SetWindow::onUpdateUI(wxUpdateUIEvent& ev) { ...@@ -366,10 +366,9 @@ void SetWindow::onUpdateUI(wxUpdateUIEvent& ev) {
void SetWindow::onFileNew(wxCommandEvent&) { void SetWindow::onFileNew(wxCommandEvent&) {
if (!askSaveAndContinue()) return; if (!askSaveAndContinue()) return;
// NewWindow wnd(this); // new set?
// wnd.showModal(); SetP new_set = new_set_window(this);
// associate new set if (new_set) set = new_set;
// if (wnd.set) set = wnd.set;
} }
void SetWindow::onFileOpen(wxCommandEvent&) { void SetWindow::onFileOpen(wxCommandEvent&) {
...@@ -451,7 +450,7 @@ void SetWindow::onFilePrintPreview(wxCommandEvent&) { ...@@ -451,7 +450,7 @@ void SetWindow::onFilePrintPreview(wxCommandEvent&) {
} }
void SetWindow::onFileRecent(wxCommandEvent& ev) { void SetWindow::onFileRecent(wxCommandEvent& ev) {
// setSet(importSet(settings.recentSets.at(ev.GetId() - ID_FILE_RECENT))); // setSet(import_set(settings.recentSets.at(ev.GetId() - ID_FILE_RECENT)));
} }
void SetWindow::onFileExit(wxCommandEvent&) { void SetWindow::onFileExit(wxCommandEvent&) {
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <gui/welcome_window.hpp> #include <gui/welcome_window.hpp>
#include <gui/util.hpp> #include <gui/util.hpp>
#include <gui/new_window.hpp>
#include <gui/set/window.hpp> #include <gui/set/window.hpp>
#include <util/window_id.hpp> #include <util/window_id.hpp>
#include <data/settings.hpp> #include <data/settings.hpp>
...@@ -70,11 +71,7 @@ void WelcomeWindow::onOpenSet(wxCommandEvent&) { ...@@ -70,11 +71,7 @@ void WelcomeWindow::onOpenSet(wxCommandEvent&) {
} }
void WelcomeWindow::onNewSet(wxCommandEvent&) { void WelcomeWindow::onNewSet(wxCommandEvent&) {
// NewWindow wnd(0); close(new_set_window(this));
// wnd.ShowModal();
// if (wnd.set) {
// close(wnd.getSet());
// }
} }
// MOVEME // MOVEME
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include <data/set.hpp> #include <data/set.hpp>
#include <data/settings.hpp> #include <data/settings.hpp>
#include <data/format/formats.hpp> #include <data/format/formats.hpp>
#include <gui/welcome_window.hpp>
#include <gui/set/window.hpp> #include <gui/set/window.hpp>
#include <gui/symbol/window.hpp> #include <gui/symbol/window.hpp>
...@@ -41,9 +42,10 @@ bool MSE::OnInit() { ...@@ -41,9 +42,10 @@ bool MSE::OnInit() {
settings.read(); settings.read();
//Window* wnd = new SymbolWindow(nullptr); //Window* wnd = new SymbolWindow(nullptr);
//GameP g = Game::byName(_("magic")) //GameP g = Game::byName(_("magic"))
SetP s = new_shared<Set>(); //SetP s = new_shared<Set>();
s->open(_("test.mse-set")); //s->open(_("test.mse-set"));
Window* wnd = new SetWindow(nullptr, s); //Window* wnd = new SetWindow(nullptr, s);
Window* wnd = new WelcomeWindow();
wnd->Show(); wnd->Show();
return true; return true;
......
...@@ -155,6 +155,8 @@ enum ControlID { ...@@ -155,6 +155,8 @@ enum ControlID {
, ID_TAB_BAR , ID_TAB_BAR
, ID_CARD_LIST , ID_CARD_LIST
, ID_PART_LIST , ID_PART_LIST
, ID_GAME_LIST
, ID_STYLESHEET_LIST
, ID_NOTES , ID_NOTES
, ID_KEYWORD , ID_KEYWORD
, ID_PARAMETER , ID_PARAMETER
......
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