diff --git a/apps/openmw/mwgui/spellmodel.cpp b/apps/openmw/mwgui/spellmodel.cpp index 6dadebca2..2dd6cdc00 100644 --- a/apps/openmw/mwgui/spellmodel.cpp +++ b/apps/openmw/mwgui/spellmodel.cpp @@ -148,6 +148,19 @@ 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 4aa1f9d2a..d191cba0e 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 d6103faeb..1bbb19e83 100644 --- a/apps/openmw/mwgui/spellwindow.cpp +++ b/apps/openmw/mwgui/spellwindow.cpp @@ -1,7 +1,9 @@ #include "spellwindow.hpp" +#include #include #include +#include #include #include @@ -36,6 +38,9 @@ namespace MWGui { mSpellIcons = new SpellIcons(); + MyGUI::Widget* deleteButton; + getWidget(deleteButton, "DeleteSpellButton"); + getWidget(mSpellView, "SpellView"); getWidget(mEffectBox, "EffectsBox"); getWidget(mFilterEdit, "FilterEdit"); @@ -44,8 +49,13 @@ namespace MWGui mSpellView->eventSpellClicked += MyGUI::newDelegate(this, &SpellWindow::onModelIndexSelected); mFilterEdit->eventEditTextChange += MyGUI::newDelegate(this, &SpellWindow::onFilterChanged); + deleteButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SpellWindow::onDeleteClicked); setCoord(498, 300, 302, 300); + + // Adjust the spell filtering widget size because of MyGUI limitations. + int filterWidth = mSpellView->getSize().width - deleteButton->getSize().width - 3; + mFilterEdit->setSize(filterWidth, mFilterEdit->getSize().height); } SpellWindow::~SpellWindow() @@ -187,6 +197,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(); @@ -224,12 +245,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 ce10770f5..01a9c7392 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 003c7ce97..67a9346f4 100644 --- a/files/mygui/openmw_spell_window.layout +++ b/files/mygui/openmw_spell_window.layout @@ -13,6 +13,15 @@ + + + + + + + + +