diff --git a/apps/openmw/mwgui/spellmodel.cpp b/apps/openmw/mwgui/spellmodel.cpp index 6dadebca27..d6424c08bc 100644 --- a/apps/openmw/mwgui/spellmodel.cpp +++ b/apps/openmw/mwgui/spellmodel.cpp @@ -148,6 +148,17 @@ namespace MWGui return mSpells.size(); } + SpellModel::ModelIndex SpellModel::getSelectedIndex() const + { + ModelIndex selected = -1; + for (SpellModel::ModelIndex i = 0; i= int(mSpells.size())) diff --git a/apps/openmw/mwgui/spellmodel.hpp b/apps/openmw/mwgui/spellmodel.hpp index 4aa1f9d2a7..d191cba0e0 100644 --- a/apps/openmw/mwgui/spellmodel.hpp +++ b/apps/openmw/mwgui/spellmodel.hpp @@ -48,6 +48,8 @@ namespace MWGui ///< throws for invalid index size_t getItemCount() const; + ModelIndex getSelectedIndex() const; + ///< returns -1 if nothing is selected private: MWWorld::Ptr mActor; diff --git a/apps/openmw/mwgui/spellwindow.cpp b/apps/openmw/mwgui/spellwindow.cpp index 254e731d0e..2b1056797e 100644 --- a/apps/openmw/mwgui/spellwindow.cpp +++ b/apps/openmw/mwgui/spellwindow.cpp @@ -1,5 +1,6 @@ #include "spellwindow.hpp" +#include #include #include @@ -36,14 +37,18 @@ namespace MWGui { mSpellIcons = new SpellIcons(); + MyGUI::Button *deleteSpellBtn = nullptr; + getWidget(mSpellView, "SpellView"); getWidget(mEffectBox, "EffectsBox"); getWidget(mFilterEdit, "FilterEdit"); + getWidget(deleteSpellBtn, "DeleteSpellButton"); mFilterEdit->setUserString("IgnoreTabKey", "y"); mSpellView->eventSpellClicked += MyGUI::newDelegate(this, &SpellWindow::onModelIndexSelected); mFilterEdit->eventEditTextChange += MyGUI::newDelegate(this, &SpellWindow::onFilterChanged); + deleteSpellBtn->eventMouseButtonClick += MyGUI::newDelegate(this, &SpellWindow::onDeleteClicked); setCoord(498, 300, 302, 300); } @@ -185,6 +190,17 @@ namespace MWGui mSpellView->setModel(new SpellModel(MWMechanics::getPlayer(), sender->getCaption())); } + void SpellWindow::onDeleteClicked(MyGUI::Widget *widget) + { + SpellModel::ModelIndex selected = mSpellView->getModel()->getSelectedIndex(); + if (selected < 0) + return; + + const Spell& spell = mSpellView->getModel()->getItem(selected); + if (spell.mType != Spell::Type_EnchantedItem) + askDeleteSpell(spell.mId); + } + void SpellWindow::onSpellSelected(const std::string& spellId) { MWWorld::Ptr player = MWMechanics::getPlayer(); @@ -222,12 +238,9 @@ namespace MWGui mSpellView->setModel(new SpellModel(MWMechanics::getPlayer(), "")); - SpellModel::ModelIndex selected = 0; - for (SpellModel::ModelIndex i = 0; igetModel()->getItemCount()); ++i) - { - if (mSpellView->getModel()->getItem(i).mSelected) - selected = i; - } + SpellModel::ModelIndex selected = mSpellView->getModel()->getSelectedIndex(); + if (selected < 0) + selected = 0; selected += next ? 1 : -1; int itemcount = mSpellView->getModel()->getItemCount(); diff --git a/apps/openmw/mwgui/spellwindow.hpp b/apps/openmw/mwgui/spellwindow.hpp index ce10770f55..01a9c7392f 100644 --- a/apps/openmw/mwgui/spellwindow.hpp +++ b/apps/openmw/mwgui/spellwindow.hpp @@ -33,6 +33,7 @@ namespace MWGui void onSpellSelected(const std::string& spellId); void onModelIndexSelected(SpellModel::ModelIndex index); void onFilterChanged(MyGUI::EditBox *sender); + void onDeleteClicked(MyGUI::Widget *widget); void onDeleteSpellAccept(); void askDeleteSpell(const std::string& spellId); diff --git a/files/mygui/openmw_spell_window.layout b/files/mygui/openmw_spell_window.layout index 8a98c47b23..9959aeb4ea 100644 --- a/files/mygui/openmw_spell_window.layout +++ b/files/mygui/openmw_spell_window.layout @@ -13,8 +13,16 @@ - - + + + + + + + + + +