fixed bug: empty OptionalScript were saved as empty string, causing parse error when reading.

custom pack types can now be removed again.

git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@1329 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
twanvl
2009-01-10 01:47:50 +00:00
parent e3cdb2bea7
commit 1b90f0666c
2 changed files with 22 additions and 7 deletions
+19 -6
View File
@@ -313,6 +313,7 @@ class CustomPackDialog : public wxDialog {
void storePack(); void storePack();
void onAmountChange(wxSpinEvent&); void onAmountChange(wxSpinEvent&);
void onOk(wxCommandEvent&); void onOk(wxCommandEvent&);
void onRemove(wxCommandEvent&);
}; };
CustomPackDialog::CustomPackDialog(Window* parent, const SetP& set, const PackTypeP& edited_pack) CustomPackDialog::CustomPackDialog(Window* parent, const SetP& set, const PackTypeP& edited_pack)
@@ -322,6 +323,7 @@ CustomPackDialog::CustomPackDialog(Window* parent, const SetP& set, const PackTy
// init ui // init ui
totals = new PackTotalsPanel(this, wxID_ANY, generator, true); totals = new PackTotalsPanel(this, wxID_ANY, generator, true);
name = new wxTextCtrl(this, wxID_ANY, edited_pack ? edited_pack->name : _("custom pack")); name = new wxTextCtrl(this, wxID_ANY, edited_pack ? edited_pack->name : _("custom pack"));
wxButton* remove = new wxButton(this, ID_REMOVE_ITEM, _BUTTON_("remove item"));
// init sizer // init sizer
wxSizer* s = new wxBoxSizer(wxVERTICAL); wxSizer* s = new wxBoxSizer(wxVERTICAL);
wxSizer* s2 = new wxStaticBoxSizer(wxHORIZONTAL, this, _LABEL_("pack name")); wxSizer* s2 = new wxStaticBoxSizer(wxHORIZONTAL, this, _LABEL_("pack name"));
@@ -338,7 +340,10 @@ CustomPackDialog::CustomPackDialog(Window* parent, const SetP& set, const PackTy
s5->Add(totals, 1, wxEXPAND | wxALL, 4); s5->Add(totals, 1, wxEXPAND | wxALL, 4);
s3->Add(s5, 1, wxEXPAND | wxLEFT, 8); s3->Add(s5, 1, wxEXPAND | wxLEFT, 8);
s->Add(s3, 0, wxEXPAND | wxALL & ~wxTOP, 8); s->Add(s3, 0, wxEXPAND | wxALL & ~wxTOP, 8);
s->Add(CreateButtonSizer(wxOK | wxCANCEL), 0, wxEXPAND | wxALL & ~wxTOP, 8); wxSizer* s6 = new wxBoxSizer(wxHORIZONTAL);
s6->Add(remove, 0, wxALL & ~wxTOP & ~wxRIGHT, 8);
s6->Add(CreateButtonSizer(wxOK | wxCANCEL), 1, wxALL & ~wxTOP, 8);
s->Add(s6, 0, wxEXPAND);
// add spin controls // add spin controls
FOR_EACH(pack, set->game->pack_types) { FOR_EACH(pack, set->game->pack_types) {
if (pack->selectable) continue; // this pack is already selectable from the main UI if (pack->selectable) continue; // this pack is already selectable from the main UI
@@ -392,12 +397,17 @@ void CustomPackDialog::onOk(wxCommandEvent&) {
storePack(); storePack();
EndModal(wxID_OK); EndModal(wxID_OK);
} }
void CustomPackDialog::onRemove(wxCommandEvent&) {
edited_pack = PackTypeP();
EndModal(wxID_OK);
}
void CustomPackDialog::onAmountChange(wxSpinEvent&) { void CustomPackDialog::onAmountChange(wxSpinEvent&) {
updateTotals(); updateTotals();
} }
BEGIN_EVENT_TABLE(CustomPackDialog, wxDialog) BEGIN_EVENT_TABLE(CustomPackDialog, wxDialog)
EVT_BUTTON (wxID_OK, CustomPackDialog::onOk) EVT_BUTTON (wxID_OK, CustomPackDialog::onOk)
EVT_BUTTON (ID_REMOVE_ITEM, CustomPackDialog::onRemove)
EVT_SPINCTRL (ID_PACK_AMOUNT, CustomPackDialog::onAmountChange) EVT_SPINCTRL (ID_PACK_AMOUNT, CustomPackDialog::onAmountChange)
END_EVENT_TABLE() END_EVENT_TABLE()
@@ -578,18 +588,21 @@ void RandomPackPanel::onCommand(int id) {
} }
} }
void RandomPackPanel::onPackTypeClick(wxCommandEvent& ev) { void RandomPackPanel::onPackTypeClick(wxCommandEvent& ev) {
for (size_t i = 0 ; i < pickers.size() ; ++i) { FOR_EACH(pick, pickers) {
const PackAmountPicker& pick = pickers[i];
if (pick.label == ev.GetEventObject()) { if (pick.label == ev.GetEventObject()) {
// edit this pack type // edit this pack type
CustomPackDialog dlg(this, set, pick.pack); CustomPackDialog dlg(this, set, pick.pack);
if (dlg.ShowModal() == wxID_OK) { if (dlg.ShowModal() == wxID_OK) {
if (dlg.get()) { if (dlg.get()) {
// update pack
for (size_t i = 0 ; i < set->pack_types.size() ; ++i) {
if (set->pack_types[i] == pick.pack) {
set->actions.addAction( new ChangePackAction(*set,i,dlg.get()) );
}
}
} else {
// delete pack // delete pack
set->actions.addAction( new AddPackAction(REMOVE,*set,pick.pack) ); set->actions.addAction( new AddPackAction(REMOVE,*set,pick.pack) );
} else {
// update pack
set->actions.addAction( new ChangePackAction(*set,i,dlg.get()) );
} }
} }
break; break;
+3 -1
View File
@@ -90,7 +90,9 @@ template <> void Reader::handle(OptionalScript& os) {
} }
template <> void Writer::handle(const OptionalScript& os) { template <> void Writer::handle(const OptionalScript& os) {
handle(os.unparsed); if (os.script) {
handle(os.unparsed);
}
} }
template <> void GetDefaultMember::handle(const OptionalScript& os) { template <> void GetDefaultMember::handle(const OptionalScript& os) {