Commit e49204da authored by twanvl's avatar twanvl

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

custom pack types can now be removed again.
parent ac81c734
...@@ -313,6 +313,7 @@ class CustomPackDialog : public wxDialog { ...@@ -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 ...@@ -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 ...@@ -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&) { ...@@ -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) { ...@@ -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;
......
...@@ -90,7 +90,9 @@ template <> void Reader::handle(OptionalScript& os) { ...@@ -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) {
......
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