Commit 296f4942 authored by twanvl's avatar twanvl

Generated packs can now be selected for printing.

parent fca50100
...@@ -462,6 +462,8 @@ label: ...@@ -462,6 +462,8 @@ label:
columns: Columns: columns: Columns:
# Card select / images export # Card select / images export
select cards: Cards to export
selected card count: %s cards will be exported.
select cards print: Select the cards you want to print select cards print: Select the cards you want to print
filename format: &Format: filename format: &Format:
filename conflicts: &Handle duplicating filenames: filename conflicts: &Handle duplicating filenames:
...@@ -564,6 +566,10 @@ button: ...@@ -564,6 +566,10 @@ button:
hide: &Hide hide: &Hide
# Card select # Card select
export entire set: Entire set
export generated packs: Generated packs
export custom cards selection: Custom selection
select cards: &Select Cards...
select all: Select &All select all: Select &All
select none: Select &None select none: Select &None
overwrite: Overwrite old files overwrite: Overwrite old files
......
...@@ -10,6 +10,113 @@ ...@@ -10,6 +10,113 @@
#include <gui/card_select_window.hpp> #include <gui/card_select_window.hpp>
#include <gui/control/select_card_list.hpp> #include <gui/control/select_card_list.hpp>
#include <util/window_id.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 // ----------------------------------------------------------------------------- : CardSelectWindow
...@@ -36,7 +143,7 @@ CardSelectWindow::CardSelectWindow(Window* parent, const SetP& set, const String ...@@ -36,7 +143,7 @@ CardSelectWindow::CardSelectWindow(Window* parent, const SetP& set, const String
s->Add(s2, 0, wxEXPAND | wxALL & ~wxTOP, 8); s->Add(s2, 0, wxEXPAND | wxALL & ~wxTOP, 8);
s->SetSizeHints(this); s->SetSizeHints(this);
SetSizer(s); SetSizer(s);
SetSize(500,500); SetSize(600,500);
} }
} }
...@@ -44,6 +151,14 @@ bool CardSelectWindow::isSelected(const CardP& card) const { ...@@ -44,6 +151,14 @@ bool CardSelectWindow::isSelected(const CardP& card) const {
return list->isSelected(card); 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&) { void CardSelectWindow::onSelectAll(wxCommandEvent&) {
list->selectAll(); list->selectAll();
} }
......
...@@ -13,8 +13,59 @@ ...@@ -13,8 +13,59 @@
DECLARE_POINTER_TYPE(Set); DECLARE_POINTER_TYPE(Set);
DECLARE_POINTER_TYPE(Card); DECLARE_POINTER_TYPE(Card);
DECLARE_POINTER_TYPE(ExportCardSelectionChoice);
class SelectCardList; class SelectCardList;
// ----------------------------------------------------------------------------- : ExportWindowBase
enum ExportCardSelectionType
{ EXPORT_SEL_ENTIRE_SET
, EXPORT_SEL_SUBSET
, EXPORT_SEL_CUSTOM
};
class ExportCardSelectionChoice : public IntrusivePtrBase<ExportCardSelectionChoice> {
public:
ExportCardSelectionChoice();
ExportCardSelectionChoice(const Set& set);
ExportCardSelectionChoice(const String& label, const vector<CardP>& cards);
ExportCardSelectionChoice(const String& label, const vector<CardP>* cards);
const String label;
const ExportCardSelectionType type;
const vector<CardP>* the_cards; ///< The cards
vector<CardP> own_cards; ///< Maybe we own the cards, in that case the_cards = &own_cards
};
typedef vector<ExportCardSelectionChoiceP> ExportCardSelectionChoices;
/// Base class for export windows, deals with card selection
class ExportWindowBase : public wxDialog {
public:
ExportWindowBase(const SetP& set, const ExportCardSelectionChoices& cards_choices);
/// Create the controls, return a sizer containing them
wxSizer* Create();
/// Get the selected cards
const vector<CardP>& getSelection() const { return *cards; }
protected:
DECLARE_EVENT_TABLE();
SetP set; ///< Set to export
const vector<CardP>* cards; ///< Cards to export
private:
ExportCardSelectionChoices cards_choices; ///< Ways to select cards
size_t active_choice;
wxStaticText* card_count;
wxButton* select_cards;
void onChangeSelectionChoice(wxCommandEvent&);
void onSelectCards(wxCommandEvent&);
void update();
};
// ----------------------------------------------------------------------------- : CardSelectWindow // ----------------------------------------------------------------------------- : CardSelectWindow
/// A window for selecting a subset of the cards from a set. /// A window for selecting a subset of the cards from a set.
...@@ -26,6 +77,10 @@ class CardSelectWindow : public wxDialog { ...@@ -26,6 +77,10 @@ class CardSelectWindow : public wxDialog {
/// Is the given card selected? /// Is the given card selected?
bool isSelected(const CardP& card) const; bool isSelected(const CardP& card) const;
/// Get a list of all selected cards
void getSelection(vector<CardP>& out) const;
/// Change which cards are selected
void setSelection(const vector<CardP>& cards);
protected: protected:
DECLARE_EVENT_TABLE(); DECLARE_EVENT_TABLE();
......
...@@ -36,6 +36,18 @@ DECLARE_TYPEOF_COLLECTION(CardListBase*); ...@@ -36,6 +36,18 @@ DECLARE_TYPEOF_COLLECTION(CardListBase*);
DEFINE_EVENT_TYPE(EVENT_CARD_SELECT); DEFINE_EVENT_TYPE(EVENT_CARD_SELECT);
DEFINE_EVENT_TYPE(EVENT_CARD_ACTIVATE); DEFINE_EVENT_TYPE(EVENT_CARD_ACTIVATE);
CardP CardSelectEvent::getCard() const {
return getTheCardList()->getCard();
}
void CardSelectEvent::getSelection(vector<CardP>& out) const {
getTheCardList()->getSelection(out);
}
CardListBase* CardSelectEvent::getTheCardList() const {
return static_cast<CardListBase*>(GetEventObject());
}
// ----------------------------------------------------------------------------- : CardListBase // ----------------------------------------------------------------------------- : CardListBase
vector<CardListBase*> CardListBase::card_lists; vector<CardListBase*> CardListBase::card_lists;
...@@ -116,11 +128,21 @@ void CardListBase::getItems(vector<VoidP>& out) const { ...@@ -116,11 +128,21 @@ void CardListBase::getItems(vector<VoidP>& out) const {
out.push_back(c); out.push_back(c);
} }
} }
void CardListBase::sendEvent() { void CardListBase::sendEvent(int type) {
CardSelectEvent ev(getCard()); CardSelectEvent ev(type);
ev.SetEventObject(this);
ProcessEvent(ev); ProcessEvent(ev);
} }
void CardListBase::getSelection(vector<CardP>& out) const {
long count = GetItemCount();
for (long pos = 0 ; pos < count ; ++pos) {
if (const_cast<CardListBase*>(this)->IsSelected(pos)) {
out.push_back(getCard(pos));
}
}
}
// ----------------------------------------------------------------------------- : CardListBase : Clipboard // ----------------------------------------------------------------------------- : CardListBase : Clipboard
bool CardListBase::canCut() const { return canDelete(); } bool CardListBase::canCut() const { return canDelete(); }
...@@ -136,12 +158,7 @@ bool CardListBase::doCopy() { ...@@ -136,12 +158,7 @@ bool CardListBase::doCopy() {
if (!canCopy()) return false; if (!canCopy()) return false;
// cards to copy // cards to copy
vector<CardP> cards_to_copy; vector<CardP> cards_to_copy;
long count = GetItemCount(); getSelection(cards_to_copy);
for (long pos = 0 ; pos < count ; ++pos) {
if (IsSelected(pos)) {
cards_to_copy.push_back(getCard(pos));
}
}
if (cards_to_copy.empty()) return false; if (cards_to_copy.empty()) return false;
// put on clipboard // put on clipboard
if (!wxTheClipboard->Open()) return false; if (!wxTheClipboard->Open()) return false;
...@@ -168,12 +185,7 @@ bool CardListBase::doPaste() { ...@@ -168,12 +185,7 @@ bool CardListBase::doPaste() {
bool CardListBase::doDelete() { bool CardListBase::doDelete() {
// cards to delete // cards to delete
vector<CardP> cards_to_delete; vector<CardP> cards_to_delete;
long count = GetItemCount(); getSelection(cards_to_delete);
for (long pos = 0 ; pos < count ; ++pos) {
if (IsSelected(pos)) {
cards_to_delete.push_back(getCard(pos));
}
}
if (cards_to_delete.empty()) return false; if (cards_to_delete.empty()) return false;
// delete cards // delete cards
set->actions.addAction(new AddCardAction(REMOVE, *set, cards_to_delete)); set->actions.addAction(new AddCardAction(REMOVE, *set, cards_to_delete));
...@@ -372,8 +384,7 @@ void CardListBase::onContextMenu(wxContextMenuEvent&) { ...@@ -372,8 +384,7 @@ void CardListBase::onContextMenu(wxContextMenuEvent&) {
void CardListBase::onItemActivate(wxListEvent& ev) { void CardListBase::onItemActivate(wxListEvent& ev) {
selectItemPos(ev.GetIndex(), false); selectItemPos(ev.GetIndex(), false);
CardSelectEvent event(getCard(), EVENT_CARD_ACTIVATE); sendEvent(EVENT_CARD_ACTIVATE);
ProcessEvent(event);
} }
// ----------------------------------------------------------------------------- : CardListBase : Event table // ----------------------------------------------------------------------------- : CardListBase : Event table
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
DECLARE_POINTER_TYPE(ChoiceField); DECLARE_POINTER_TYPE(ChoiceField);
DECLARE_POINTER_TYPE(Field); DECLARE_POINTER_TYPE(Field);
class CardListBase;
// ----------------------------------------------------------------------------- : Events // ----------------------------------------------------------------------------- : Events
...@@ -36,11 +37,16 @@ DECLARE_EVENT_TYPE(EVENT_CARD_ACTIVATE, <not used>) ...@@ -36,11 +37,16 @@ DECLARE_EVENT_TYPE(EVENT_CARD_ACTIVATE, <not used>)
/// The event of selecting a card /// The event of selecting a card
struct CardSelectEvent : public wxCommandEvent { struct CardSelectEvent : public wxCommandEvent {
inline CardSelectEvent(const CardP& card, int type = EVENT_CARD_SELECT) inline CardSelectEvent(int type = EVENT_CARD_SELECT)
: wxCommandEvent(type), card(card) : wxCommandEvent(type)
{} {}
CardP card; ///< The selected card /// The selected card
CardP getCard() const;
/// All focused cards
void getSelection(vector<CardP>& out) const;
private:
CardListBase* getTheCardList() const;
}; };
// ----------------------------------------------------------------------------- : CardListBase // ----------------------------------------------------------------------------- : CardListBase
...@@ -83,6 +89,8 @@ class CardListBase : public ItemList, public SetView { ...@@ -83,6 +89,8 @@ class CardListBase : public ItemList, public SetView {
public: public:
/// Return the card at the given position in the sorted card list /// Return the card at the given position in the sorted card list
inline CardP getCard(long pos) const { return static_pointer_cast<Card>(getItem(pos)); } inline CardP getCard(long pos) const { return static_pointer_cast<Card>(getItem(pos)); }
/// Get a list of all focused cards
void getSelection(vector<CardP>& out) const;
protected: protected:
/// Get a list of all cards /// Get a list of all cards
virtual void getItems(vector<VoidP>& out) const; virtual void getItems(vector<VoidP>& out) const;
...@@ -97,7 +105,8 @@ class CardListBase : public ItemList, public SetView { ...@@ -97,7 +105,8 @@ class CardListBase : public ItemList, public SetView {
virtual void sortBy(long column, bool ascending); virtual void sortBy(long column, bool ascending);
/// Send an 'item selected' event for the currently selected item (selected_item) /// Send an 'item selected' event for the currently selected item (selected_item)
virtual void sendEvent(); virtual void sendEvent() { sendEvent(EVENT_CARD_SELECT); }
void sendEvent(int type = EVENT_CARD_SELECT);
/// Compare cards /// Compare cards
virtual bool compareItems(void* a, void* b) const; virtual bool compareItems(void* a, void* b) const;
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
* Terminology: * Terminology:
* selected item = a single item in the variable selected_item * selected item = a single item in the variable selected_item
* focused items = items that are drawn as selected in the control * focused items = items that are drawn as selected in the control
* TODO: This is reverse of normal
*/ */
class ItemList : public wxListView { class ItemList : public wxListView {
public: public:
......
...@@ -43,6 +43,18 @@ bool SelectCardList::isSelected(const CardP& card) const { ...@@ -43,6 +43,18 @@ bool SelectCardList::isSelected(const CardP& card) const {
return selected.find(card) != selected.end(); return selected.find(card) != selected.end();
} }
void SelectCardList::getSelection(vector<CardP>& out) const {
FOR_EACH_CONST(card, set->cards) {
if (isSelected(card)) out.push_back(card);
}
}
void SelectCardList::setSelection(const vector<CardP>& cards) {
selected.clear();
copy(cards.begin(), cards.end(), inserter(selected, selected.begin()));
}
void SelectCardList::onChangeSet() { void SelectCardList::onChangeSet() {
CardListBase::onChangeSet(); CardListBase::onChangeSet();
// init selected list: select all // init selected list: select all
......
...@@ -26,6 +26,11 @@ class SelectCardList : public CardListBase { ...@@ -26,6 +26,11 @@ class SelectCardList : public CardListBase {
void selectNone(); void selectNone();
/// Is the given card selected? /// Is the given card selected?
bool isSelected(const CardP& card) const; bool isSelected(const CardP& card) const;
/// Get a list of all selected cards
void getSelection(vector<CardP>& out) const;
/// Change which cards are selected
void setSelection(const vector<CardP>& cards);
protected: protected:
virtual int OnGetItemImage(long pos) const; virtual int OnGetItemImage(long pos) const;
virtual void onChangeSet(); virtual void onChangeSet();
......
...@@ -72,9 +72,7 @@ void ImagesExportWindow::onOk(wxCommandEvent&) { ...@@ -72,9 +72,7 @@ void ImagesExportWindow::onOk(wxCommandEvent&) {
if (name.empty()) return; if (name.empty()) return;
// Cards to export // Cards to export
vector<CardP> cards; vector<CardP> cards;
FOR_EACH(card, set->cards) { getSelection(cards);
if (isSelected(card)) cards.push_back(card);
}
// Export // Export
export_images(set, cards, name, gs.images_export_filename, gs.images_export_conflicts); export_images(set, cards, name, gs.images_export_filename, gs.images_export_conflicts);
// Done // Done
......
...@@ -248,39 +248,45 @@ void CardsPrintout::drawCard(DC& dc, const CardP& card, int card_nr) { ...@@ -248,39 +248,45 @@ void CardsPrintout::drawCard(DC& dc, const CardP& card, int card_nr) {
// ----------------------------------------------------------------------------- : PrintWindow // ----------------------------------------------------------------------------- : PrintWindow
void print_preview(Window* parent, const SetP& set) { const vector<CardP>* cards_to_print(Window* parent, const SetP& set, const ExportCardSelectionChoices& choices) {
// Let the user choose cards // Let the user choose cards
CardSelectWindow wnd(parent, set, _LABEL_("select cards print"), _TITLE_("select cards")); //CardSelectWindow wnd(parent, set, _LABEL_("select cards print"), _TITLE_("select cards"));
ExportWindowBase wnd(set, choices);
wnd.wxDialog::Create(parent, wxID_ANY, _TITLE_("select cards"));
wxSizer* s = new wxBoxSizer(wxVERTICAL);
wxSizer* s2 = wnd.Create();
s->Add(s2, 1, wxEXPAND | wxALL, 8);
s->Add(wnd.CreateButtonSizer(wxOK | wxCANCEL) , 0, wxEXPAND | wxALL, 8);
s->SetSizeHints(&wnd);
wnd.SetSizer(s);
wnd.SetSize(300,-1);
// show window
if (wnd.ShowModal() != wxID_OK) { if (wnd.ShowModal() != wxID_OK) {
return; // cancel return nullptr; // cancel
}
vector<CardP> selected;
FOR_EACH(c, set->cards) {
if (wnd.isSelected(c)) selected.push_back(c);
} }
return &wnd.getSelection();
}
void print_preview(Window* parent, const SetP& set, const ExportCardSelectionChoices& choices) {
const vector<CardP>* cards = cards_to_print(parent, set, choices);
if (!cards) return;
// Show the print preview // Show the print preview
wxPreviewFrame* frame = new wxPreviewFrame( wxPreviewFrame* frame = new wxPreviewFrame(
new wxPrintPreview( new wxPrintPreview(
new CardsPrintout(set, selected), new CardsPrintout(set, *cards),
new CardsPrintout(set, selected) new CardsPrintout(set, *cards)
), parent, _TITLE_("print preview")); ), parent, _TITLE_("print preview"));
frame->Initialize(); frame->Initialize();
frame->Maximize(true); frame->Maximize(true);
frame->Show(); frame->Show();
} }
void print_set(Window* parent, const SetP& set) { void print_set(Window* parent, const SetP& set, const ExportCardSelectionChoices& choices) {
// Let the user choose cards const vector<CardP>* cards = cards_to_print(parent, set, choices);
CardSelectWindow wnd(parent, set, _LABEL_("select cards print"), _TITLE_("select cards")); if (!cards) return;
if (wnd.ShowModal() != wxID_OK) {
return; // cancel
}
vector<CardP> selected;
FOR_EACH(c, set->cards) {
if (wnd.isSelected(c)) selected.push_back(c);
}
// Print the cards // Print the cards
wxPrinter p; wxPrinter p;
CardsPrintout pout(set, selected); CardsPrintout pout(set, *cards);
p.Print(parent, &pout, true); p.Print(parent, &pout, true);
} }
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include <util/prec.hpp> #include <util/prec.hpp>
#include <util/reflect.hpp> #include <util/reflect.hpp>
#include <util/real_point.hpp> #include <util/real_point.hpp>
#include <gui/card_select_window.hpp>
DECLARE_POINTER_TYPE(Set); DECLARE_POINTER_TYPE(Set);
class StyleSheet; class StyleSheet;
...@@ -19,10 +20,10 @@ class StyleSheet; ...@@ -19,10 +20,10 @@ class StyleSheet;
// ----------------------------------------------------------------------------- : Printing // ----------------------------------------------------------------------------- : Printing
/// Show a print preview for the given set /// Show a print preview for the given set
void print_preview(Window* parent, const SetP& set); void print_preview(Window* parent, const SetP& set, const ExportCardSelectionChoices& choices);
/// Print the given set /// Print the given set
void print_set(Window* parent, const SetP& set); void print_set(Window* parent, const SetP& set, const ExportCardSelectionChoices& choices);
// ----------------------------------------------------------------------------- : Layout // ----------------------------------------------------------------------------- : Layout
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <util/prec.hpp> #include <util/prec.hpp>
#include <data/set.hpp> #include <data/set.hpp>
#include <gui/card_select_window.hpp>
class wxFindReplaceData; class wxFindReplaceData;
...@@ -69,6 +70,7 @@ class SetWindowPanel : public wxPanel, public SetView { ...@@ -69,6 +70,7 @@ class SetWindowPanel : public wxPanel, public SetView {
virtual CardP selectedCard() const; ///< Return the currently selected card, or CardP() virtual CardP selectedCard() const; ///< Return the currently selected card, or CardP()
virtual void selectCard(const CardP& card) {} ///< Switch the view to another card, can be null virtual void selectCard(const CardP& card) {} ///< Switch the view to another card, can be null
virtual void selectFirstCard() {} ///< Switch the view to the first card virtual void selectFirstCard() {} ///< Switch the view to the first card
virtual void selectionChoices(ExportCardSelectionChoices& out) {} ///< Card subsets that can be exported from this panel
}; };
// ----------------------------------------------------------------------------- : EOF // ----------------------------------------------------------------------------- : EOF
......
...@@ -39,6 +39,8 @@ class RandomCardList : public CardListBase { ...@@ -39,6 +39,8 @@ class RandomCardList : public CardListBase {
using CardListBase::rebuild; using CardListBase::rebuild;
const vector<CardP>* getCardsPtr() const { return &cards; }
protected: protected:
virtual void getItems(vector<VoidP>& out) const; virtual void getItems(vector<VoidP>& out) const;
virtual void onChangeSet(); virtual void onChangeSet();
...@@ -328,6 +330,12 @@ void RandomPackPanel::selectCard(const CardP& card) { ...@@ -328,6 +330,12 @@ void RandomPackPanel::selectCard(const CardP& card) {
preview->setCard(card); preview->setCard(card);
} }
void RandomPackPanel::selectionChoices(ExportCardSelectionChoices& out) {
out.push_back(new_intrusive2<ExportCardSelectionChoice>(
_BUTTON_("export generated packs"),
card_list->getCardsPtr()
));
}
// ----------------------------------------------------------------------------- : Clipboard // ----------------------------------------------------------------------------- : Clipboard
......
...@@ -39,6 +39,7 @@ class RandomPackPanel : public SetWindowPanel { ...@@ -39,6 +39,7 @@ class RandomPackPanel : public SetWindowPanel {
// --------------------------------------------------- : Selection // --------------------------------------------------- : Selection
virtual CardP selectedCard() const; virtual CardP selectedCard() const;
virtual void selectCard(const CardP& card); virtual void selectCard(const CardP& card);
virtual void selectionChoices(ExportCardSelectionChoices& out);
// --------------------------------------------------- : Clipboard // --------------------------------------------------- : Clipboard
......
...@@ -329,16 +329,6 @@ void SetWindow::updateTitle() { ...@@ -329,16 +329,6 @@ void SetWindow::updateTitle() {
} }
} }
void SetWindow::onCardSelect(CardSelectEvent& ev) {
FOR_EACH(p, panels) {
p->selectCard(ev.card);
}
}
void SetWindow::onCardActivate(CardSelectEvent& ev) {
selectPanel(ID_WINDOW_CARDS);
}
void SetWindow::fixMinWindowSize() { void SetWindow::fixMinWindowSize() {
current_panel->SetMinSize(current_panel->GetSizer()->GetMinSize()); current_panel->SetMinSize(current_panel->GetSizer()->GetMinSize());
Layout(); Layout();
...@@ -360,6 +350,26 @@ void SetWindow::onSizeChange(wxCommandEvent&) { ...@@ -360,6 +350,26 @@ void SetWindow::onSizeChange(wxCommandEvent&) {
fixMinWindowSize(); fixMinWindowSize();
} }
// ----------------------------------------------------------------------------- : Cards
void SetWindow::onCardSelect(CardSelectEvent& ev) {
FOR_EACH(p, panels) {
p->selectCard(ev.getCard());
}
}
void SetWindow::onCardActivate(CardSelectEvent& ev) {
selectPanel(ID_WINDOW_CARDS);
}
void SetWindow::selectionChoices(ExportCardSelectionChoices& out) {
out.push_back(new_intrusive1<ExportCardSelectionChoice>(*set)); // entire set
FOR_EACH(p, panels) {
p->selectionChoices(out);
}
out.push_back(new_intrusive<ExportCardSelectionChoice>()); // custom
}
// ----------------------------------------------------------------------------- : Window events - close // ----------------------------------------------------------------------------- : Window events - close
void SetWindow::onClose(wxCloseEvent& ev) { void SetWindow::onClose(wxCloseEvent& ev) {
...@@ -594,11 +604,15 @@ void SetWindow::onFileCheckUpdates(wxCommandEvent&) { ...@@ -594,11 +604,15 @@ void SetWindow::onFileCheckUpdates(wxCommandEvent&) {
} }
void SetWindow::onFilePrint(wxCommandEvent&) { void SetWindow::onFilePrint(wxCommandEvent&) {
print_set(this, set); ExportCardSelectionChoices choices;
selectionChoices(choices);
print_set(this, set, choices);
} }
void SetWindow::onFilePrintPreview(wxCommandEvent&) { void SetWindow::onFilePrintPreview(wxCommandEvent&) {
print_preview(this, set); ExportCardSelectionChoices choices;
selectionChoices(choices);
print_preview(this, set, choices);
} }
void SetWindow::onFileReload(wxCommandEvent&) { void SetWindow::onFileReload(wxCommandEvent&) {
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include <util/prec.hpp> #include <util/prec.hpp>
#include <data/set.hpp> #include <data/set.hpp>
#include <wx/fdrepdlg.h> #include <wx/fdrepdlg.h>
#include <gui/card_select_window.hpp>
class IconMenu; class IconMenu;
class SetWindowPanel; class SetWindowPanel;
...@@ -86,16 +87,20 @@ class SetWindow : public wxFrame, public SetView { ...@@ -86,16 +87,20 @@ class SetWindow : public wxFrame, public SetView {
virtual void onAction(const Action&, bool undone); virtual void onAction(const Action&, bool undone);
private: private:
/// A different card has been selected
void onCardSelect(CardSelectEvent&);
void onCardActivate(CardSelectEvent&);
// minSize = mainSizer->getMinWindowSize(this) // minSize = mainSizer->getMinWindowSize(this)
// but wx made that private // but wx made that private
void fixMinWindowSize(); void fixMinWindowSize();
/// Update the window title based on the set name /// Update the window title based on the set name
void updateTitle(); void updateTitle();
// --------------------------------------------------- : Cards
/// A different card has been selected
void onCardSelect(CardSelectEvent&);
void onCardActivate(CardSelectEvent&);
/// Card subsets that can be exported
void selectionChoices(ExportCardSelectionChoices& out);
// --------------------------------------------------- : Window events - close // --------------------------------------------------- : Window events - close
/// Ask the user to save the set /// Ask the user to save the set
......
# This file contains the keys expected to be in MSE locales # This file contains the keys expected to be in MSE locales
# It was automatically generated by tools/locale/locale.pl # It was automatically generated by tools/locale/locale.pl
# Generated on Mon Aug 4 03:28:32 2008 # Generated on Fri Aug 8 23:23:10 2008
action: action:
add control point: 0 add control point: 0
...@@ -49,6 +49,9 @@ button: ...@@ -49,6 +49,9 @@ button:
don't install package: 0 don't install package: 0
edit symbol: 0 edit symbol: 0
enabled: 0 enabled: 0
export custom cards selection: 0
export entire set: 0
export generated packs: 0
fixed seed: 0 fixed seed: 0
generate pack: 0 generate pack: 0
hide: 0 hide: 0
...@@ -75,6 +78,7 @@ button: ...@@ -75,6 +78,7 @@ button:
remove package: 0 remove package: 0
select: optional, 0 select: optional, 0
select all: 0 select all: 0
select cards: 0
select none: 0 select none: 0
show: 0 show: 0
show editing hints: 0 show editing hints: 0
...@@ -310,8 +314,10 @@ label: ...@@ -310,8 +314,10 @@ label:
rules: 0 rules: 0
save changes: 1 save changes: 1
seed: 0 seed: 0
select cards print: 0 select cards: 0
select cards print: optional, 0
select columns: 0 select columns: 0
selected card count: 1
selection: 0 selection: 0
selection height: 0 selection height: 0
selection left: 0 selection left: 0
......
...@@ -232,6 +232,9 @@ enum ControlID { ...@@ -232,6 +232,9 @@ enum ControlID {
, ID_SHOW , ID_SHOW
, ID_HIDE , ID_HIDE
// Card select // Card select
, ID_SELECT_CARDS
, ID_SELECTION_CHOICE
, ID_SELECTION_CHOICE_MAX = ID_SELECTION_CHOICE + 10
, ID_SELECT_ALL , ID_SELECT_ALL
, ID_SELECT_NONE , ID_SELECT_NONE
// Settings // 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