mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-10 04:57:00 -04:00
Generated packs can now be selected for printing.
git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@1107 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
@@ -10,6 +10,113 @@
|
||||
#include <gui/card_select_window.hpp>
|
||||
#include <gui/control/select_card_list.hpp>
|
||||
#include <util/window_id.hpp>
|
||||
#include <wx/statline.h>
|
||||
|
||||
DECLARE_TYPEOF_COLLECTION(CardP);
|
||||
DECLARE_TYPEOF_COLLECTION(ExportCardSelectionChoiceP);
|
||||
|
||||
// ----------------------------------------------------------------------------- : ExportCardSelectionChoice
|
||||
|
||||
ExportCardSelectionChoice::ExportCardSelectionChoice()
|
||||
: label(_BUTTON_("export custom cards selection"))
|
||||
, type(EXPORT_SEL_CUSTOM)
|
||||
, the_cards(&own_cards)
|
||||
{}
|
||||
ExportCardSelectionChoice::ExportCardSelectionChoice(const Set& set)
|
||||
: label(_BUTTON_("export entire set"))
|
||||
, type(EXPORT_SEL_ENTIRE_SET)
|
||||
, the_cards(&set.cards)
|
||||
{}
|
||||
ExportCardSelectionChoice::ExportCardSelectionChoice(const String& label, const vector<CardP>& cards)
|
||||
: label(label)
|
||||
, type(EXPORT_SEL_SUBSET)
|
||||
, own_cards(cards)
|
||||
, the_cards(&own_cards)
|
||||
{}
|
||||
ExportCardSelectionChoice::ExportCardSelectionChoice(const String& label, const vector<CardP>* cards)
|
||||
: label(label)
|
||||
, type(EXPORT_SEL_SUBSET)
|
||||
, the_cards(cards)
|
||||
{}
|
||||
|
||||
// ----------------------------------------------------------------------------- : ExportWindowBase
|
||||
|
||||
|
||||
ExportWindowBase::ExportWindowBase(const SetP& set, const ExportCardSelectionChoices& cards_choices)
|
||||
: set(set), cards_choices(cards_choices)
|
||||
, active_choice(0)
|
||||
, select_cards(nullptr)
|
||||
{}
|
||||
|
||||
wxSizer* ExportWindowBase::Create() {
|
||||
// create sizer
|
||||
wxSizer* s = new wxStaticBoxSizer(wxVERTICAL, this, _LABEL_("select cards"));
|
||||
// create choice radio buttons
|
||||
int i = 0;
|
||||
bool any_custom = false;
|
||||
FOR_EACH(choice, cards_choices) {
|
||||
wxRadioButton* btn = new wxRadioButton(this, ID_SELECTION_CHOICE + i, choice->label);
|
||||
btn->Enable(!choice->the_cards->empty() || choice->type == EXPORT_SEL_CUSTOM);
|
||||
s->Add(btn, 0, wxALL, 6);
|
||||
s->AddSpacer(-4);
|
||||
any_custom |= choice->type == EXPORT_SEL_CUSTOM;
|
||||
i++;
|
||||
}
|
||||
// custom selection button
|
||||
if (any_custom) {
|
||||
select_cards = new wxButton(this, ID_SELECT_CARDS, _BUTTON_("select cards"));
|
||||
wxSizer* s2 = new wxBoxSizer(wxHORIZONTAL);
|
||||
s2->Add(select_cards, 1, wxLEFT, 20);
|
||||
s->AddSpacer(4);
|
||||
s->Add(s2, 0, wxALL & ~wxTOP, 6);
|
||||
}
|
||||
// total count label
|
||||
s->AddSpacer(4);
|
||||
s->Add(new wxStaticLine(this), 0, wxALL | wxEXPAND, 4);
|
||||
s->AddSpacer(4);
|
||||
card_count = new wxStaticText(this, wxID_ANY, wxEmptyString);
|
||||
s->Add(card_count, 0, wxALL & ~wxTOP, 6);
|
||||
s->AddSpacer(4);
|
||||
// done
|
||||
update();
|
||||
return s;
|
||||
}
|
||||
|
||||
void ExportWindowBase::onChangeSelectionChoice(wxCommandEvent& ev) {
|
||||
active_choice = ev.GetId() - ID_SELECTION_CHOICE;
|
||||
update();
|
||||
}
|
||||
|
||||
void ExportWindowBase::onSelectCards(wxCommandEvent&) {
|
||||
CardSelectWindow wnd(this, set, _LABEL_("select cards"), _TITLE_("select cards"));
|
||||
ExportCardSelectionChoice& choice = *cards_choices.at(active_choice);
|
||||
wnd.setSelection(choice.own_cards);
|
||||
if (wnd.ShowModal() != wxID_OK) {
|
||||
return; // cancel
|
||||
}
|
||||
// store cards
|
||||
choice.own_cards.clear();
|
||||
wnd.getSelection(choice.own_cards);
|
||||
update();
|
||||
|
||||
}
|
||||
|
||||
void ExportWindowBase::update() {
|
||||
ExportCardSelectionChoice& choice = *cards_choices.at(active_choice);
|
||||
cards = choice.the_cards;
|
||||
if (select_cards) {
|
||||
select_cards->Enable(choice.type == EXPORT_SEL_CUSTOM);
|
||||
}
|
||||
card_count->SetLabel(_LABEL_1_("selected card count", String::Format(_("%d"),cards->size())));
|
||||
wxWindow* ok_btn = FindWindow(wxID_OK);
|
||||
if (ok_btn) ok_btn->Enable(!cards->empty());
|
||||
}
|
||||
|
||||
|
||||
BEGIN_EVENT_TABLE(ExportWindowBase, wxDialog)
|
||||
EVT_RADIOBUTTON(wxID_ANY, ExportWindowBase::onChangeSelectionChoice)
|
||||
EVT_BUTTON (ID_SELECT_CARDS, ExportWindowBase::onSelectCards)
|
||||
END_EVENT_TABLE ()
|
||||
|
||||
// ----------------------------------------------------------------------------- : CardSelectWindow
|
||||
|
||||
@@ -36,7 +143,7 @@ CardSelectWindow::CardSelectWindow(Window* parent, const SetP& set, const String
|
||||
s->Add(s2, 0, wxEXPAND | wxALL & ~wxTOP, 8);
|
||||
s->SetSizeHints(this);
|
||||
SetSizer(s);
|
||||
SetSize(500,500);
|
||||
SetSize(600,500);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,6 +151,14 @@ bool CardSelectWindow::isSelected(const CardP& card) const {
|
||||
return list->isSelected(card);
|
||||
}
|
||||
|
||||
void CardSelectWindow::getSelection(vector<CardP>& out) const {
|
||||
list->getSelection(out);
|
||||
}
|
||||
|
||||
void CardSelectWindow::setSelection(const vector<CardP>& cards) {
|
||||
list->setSelection(cards);
|
||||
}
|
||||
|
||||
void CardSelectWindow::onSelectAll(wxCommandEvent&) {
|
||||
list->selectAll();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user