From 30d3343a2c522fd487fe484a0c983a7d080c215d Mon Sep 17 00:00:00 2001 From: twanvl Date: Sat, 10 Jan 2009 01:55:31 +0000 Subject: [PATCH] check for duplicate pack names don't allow a new pack to be 'removed' git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@1330 0fc631ac-6414-0410-93d0-97cfa31319b6 --- data/en.mse-locale/locale | 5 ++++ src/gui/set/random_pack_panel.cpp | 33 +++++++++++++++++++----- src/resource/common/expected_locale_keys | 3 ++- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/data/en.mse-locale/locale b/data/en.mse-locale/locale index 34f656b6..662e5eff 100644 --- a/data/en.mse-locale/locale +++ b/data/en.mse-locale/locale @@ -779,6 +779,11 @@ error: # Stats panel dimension not found: There is no statistics dimension '%s' + # Random packs + pack type duplicate name: + There is already a pack type named '%s'. + Please choose a different name. + # Package update window # checking updates: Checking for updates. can't download installer: diff --git a/src/gui/set/random_pack_panel.cpp b/src/gui/set/random_pack_panel.cpp index 9eb2fcf6..2d19aae2 100644 --- a/src/gui/set/random_pack_panel.cpp +++ b/src/gui/set/random_pack_panel.cpp @@ -297,7 +297,7 @@ void PackAmountPicker::destroy(wxFlexGridSizer* sizer) { class CustomPackDialog : public wxDialog { public: - CustomPackDialog(Window* parent, const SetP& set, const PackTypeP& edited_pack); + CustomPackDialog(Window* parent, const SetP& set, const PackTypeP& edited_pack, bool can_remove); PackTypeP get() const { return edited_pack; } private: DECLARE_EVENT_TABLE(); @@ -314,16 +314,19 @@ class CustomPackDialog : public wxDialog { void onAmountChange(wxSpinEvent&); void onOk(wxCommandEvent&); void onRemove(wxCommandEvent&); + bool isDuplicateName(const String& name); }; -CustomPackDialog::CustomPackDialog(Window* parent, const SetP& set, const PackTypeP& edited_pack) +CustomPackDialog::CustomPackDialog(Window* parent, const SetP& set, const PackTypeP& edited_pack, bool can_remove) : wxDialog(parent, wxID_ANY, _TITLE_("custom pack"), wxDefaultPosition, wxSize(500,500)) , set(set), edited_pack(edited_pack) { // init ui totals = new PackTotalsPanel(this, wxID_ANY, generator, true); name = new wxTextCtrl(this, wxID_ANY, edited_pack ? edited_pack->name : _("custom pack")); - wxButton* remove = new wxButton(this, ID_REMOVE_ITEM, _BUTTON_("remove item")); + wxButton* remove = + can_remove ? new wxButton(this, ID_REMOVE_ITEM, _BUTTON_("remove item")) + : nullptr; // init sizer wxSizer* s = new wxBoxSizer(wxVERTICAL); wxSizer* s2 = new wxStaticBoxSizer(wxHORIZONTAL, this, _LABEL_("pack name")); @@ -341,7 +344,9 @@ CustomPackDialog::CustomPackDialog(Window* parent, const SetP& set, const PackTy s3->Add(s5, 1, wxEXPAND | wxLEFT, 8); s->Add(s3, 0, wxEXPAND | wxALL & ~wxTOP, 8); wxSizer* s6 = new wxBoxSizer(wxHORIZONTAL); - s6->Add(remove, 0, wxALL & ~wxTOP & ~wxRIGHT, 8); + if (can_remove) { + 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 @@ -393,7 +398,23 @@ void CustomPackDialog::storePack() { } } +bool CustomPackDialog::isDuplicateName(const String& name) { + FOR_EACH_CONST(pack, set->game->pack_types) { + if (pack->name == name) return true; + } + FOR_EACH_CONST(pack, set->pack_types) { + if (pack->name == name) return true; + } + return false; +} + void CustomPackDialog::onOk(wxCommandEvent&) { + // check for duplicates + if (isDuplicateName(name->GetValue())) { + wxMessageBox(_ERROR_1_("pack type duplicate name",name->GetValue()),_TITLE_("custom pack"),wxOK|wxICON_EXCLAMATION); + return; + } + // done storePack(); EndModal(wxID_OK); } @@ -579,7 +600,7 @@ void RandomPackPanel::onCommand(int id) { break; } case ID_CUSTOM_PACK: { - CustomPackDialog dlg(this, set, PackTypeP()); + CustomPackDialog dlg(this, set, PackTypeP(), false); if (dlg.ShowModal() == wxID_OK) { set->actions.addAction( new AddPackAction(ADD,*set,dlg.get()) ); } @@ -591,7 +612,7 @@ void RandomPackPanel::onPackTypeClick(wxCommandEvent& ev) { FOR_EACH(pick, pickers) { if (pick.label == ev.GetEventObject()) { // edit this pack type - CustomPackDialog dlg(this, set, pick.pack); + CustomPackDialog dlg(this, set, pick.pack, true); if (dlg.ShowModal() == wxID_OK) { if (dlg.get()) { // update pack diff --git a/src/resource/common/expected_locale_keys b/src/resource/common/expected_locale_keys index e0ef63ef..db11e054 100644 --- a/src/resource/common/expected_locale_keys +++ b/src/resource/common/expected_locale_keys @@ -1,6 +1,6 @@ # This file contains the keys expected to be in MSE locales # It was automatically generated by tools/locale/locale.pl -# Generated on Sat Jan 10 02:30:34 2009 +# Generated on Sat Jan 10 02:51:15 2009 action: add control point: 0 @@ -124,6 +124,7 @@ error: no stylesheet specified for the set: 0 no updates: 0 pack item not found: 1 + pack type duplicate name: 1 pack type not found: 1 package not found: 1 package out of date: 3