mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-04-01 22:06:42 +00:00
Merge pull request #2344 from xyzz/delete-spell
Add a button to delete spells from spellwindow
This commit is contained in:
commit
15142a608d
5 changed files with 49 additions and 6 deletions
|
@ -148,6 +148,19 @@ namespace MWGui
|
||||||
return mSpells.size();
|
return mSpells.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SpellModel::ModelIndex SpellModel::getSelectedIndex() const
|
||||||
|
{
|
||||||
|
ModelIndex selected = -1;
|
||||||
|
for (SpellModel::ModelIndex i = 0; i<int(getItemCount()); ++i)
|
||||||
|
{
|
||||||
|
if (getItem(i).mSelected) {
|
||||||
|
selected = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return selected;
|
||||||
|
}
|
||||||
|
|
||||||
Spell SpellModel::getItem(ModelIndex index) const
|
Spell SpellModel::getItem(ModelIndex index) const
|
||||||
{
|
{
|
||||||
if (index < 0 || index >= int(mSpells.size()))
|
if (index < 0 || index >= int(mSpells.size()))
|
||||||
|
|
|
@ -48,6 +48,8 @@ namespace MWGui
|
||||||
///< throws for invalid index
|
///< throws for invalid index
|
||||||
|
|
||||||
size_t getItemCount() const;
|
size_t getItemCount() const;
|
||||||
|
ModelIndex getSelectedIndex() const;
|
||||||
|
///< returns -1 if nothing is selected
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MWWorld::Ptr mActor;
|
MWWorld::Ptr mActor;
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
#include "spellwindow.hpp"
|
#include "spellwindow.hpp"
|
||||||
|
|
||||||
|
#include <MyGUI_Button.h>
|
||||||
#include <MyGUI_EditBox.h>
|
#include <MyGUI_EditBox.h>
|
||||||
#include <MyGUI_InputManager.h>
|
#include <MyGUI_InputManager.h>
|
||||||
|
#include <MyGUI_Window.h>
|
||||||
|
|
||||||
#include <components/misc/stringops.hpp>
|
#include <components/misc/stringops.hpp>
|
||||||
#include <components/settings/settings.hpp>
|
#include <components/settings/settings.hpp>
|
||||||
|
@ -36,6 +38,9 @@ namespace MWGui
|
||||||
{
|
{
|
||||||
mSpellIcons = new SpellIcons();
|
mSpellIcons = new SpellIcons();
|
||||||
|
|
||||||
|
MyGUI::Widget* deleteButton;
|
||||||
|
getWidget(deleteButton, "DeleteSpellButton");
|
||||||
|
|
||||||
getWidget(mSpellView, "SpellView");
|
getWidget(mSpellView, "SpellView");
|
||||||
getWidget(mEffectBox, "EffectsBox");
|
getWidget(mEffectBox, "EffectsBox");
|
||||||
getWidget(mFilterEdit, "FilterEdit");
|
getWidget(mFilterEdit, "FilterEdit");
|
||||||
|
@ -44,8 +49,13 @@ namespace MWGui
|
||||||
|
|
||||||
mSpellView->eventSpellClicked += MyGUI::newDelegate(this, &SpellWindow::onModelIndexSelected);
|
mSpellView->eventSpellClicked += MyGUI::newDelegate(this, &SpellWindow::onModelIndexSelected);
|
||||||
mFilterEdit->eventEditTextChange += MyGUI::newDelegate(this, &SpellWindow::onFilterChanged);
|
mFilterEdit->eventEditTextChange += MyGUI::newDelegate(this, &SpellWindow::onFilterChanged);
|
||||||
|
deleteButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SpellWindow::onDeleteClicked);
|
||||||
|
|
||||||
setCoord(498, 300, 302, 300);
|
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()
|
SpellWindow::~SpellWindow()
|
||||||
|
@ -187,6 +197,17 @@ namespace MWGui
|
||||||
mSpellView->setModel(new SpellModel(MWMechanics::getPlayer(), sender->getCaption()));
|
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)
|
void SpellWindow::onSpellSelected(const std::string& spellId)
|
||||||
{
|
{
|
||||||
MWWorld::Ptr player = MWMechanics::getPlayer();
|
MWWorld::Ptr player = MWMechanics::getPlayer();
|
||||||
|
@ -224,12 +245,9 @@ namespace MWGui
|
||||||
|
|
||||||
mSpellView->setModel(new SpellModel(MWMechanics::getPlayer(), ""));
|
mSpellView->setModel(new SpellModel(MWMechanics::getPlayer(), ""));
|
||||||
|
|
||||||
SpellModel::ModelIndex selected = 0;
|
SpellModel::ModelIndex selected = mSpellView->getModel()->getSelectedIndex();
|
||||||
for (SpellModel::ModelIndex i = 0; i<int(mSpellView->getModel()->getItemCount()); ++i)
|
if (selected < 0)
|
||||||
{
|
selected = 0;
|
||||||
if (mSpellView->getModel()->getItem(i).mSelected)
|
|
||||||
selected = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
selected += next ? 1 : -1;
|
selected += next ? 1 : -1;
|
||||||
int itemcount = mSpellView->getModel()->getItemCount();
|
int itemcount = mSpellView->getModel()->getItemCount();
|
||||||
|
|
|
@ -33,6 +33,7 @@ namespace MWGui
|
||||||
void onSpellSelected(const std::string& spellId);
|
void onSpellSelected(const std::string& spellId);
|
||||||
void onModelIndexSelected(SpellModel::ModelIndex index);
|
void onModelIndexSelected(SpellModel::ModelIndex index);
|
||||||
void onFilterChanged(MyGUI::EditBox *sender);
|
void onFilterChanged(MyGUI::EditBox *sender);
|
||||||
|
void onDeleteClicked(MyGUI::Widget *widget);
|
||||||
void onDeleteSpellAccept();
|
void onDeleteSpellAccept();
|
||||||
void askDeleteSpell(const std::string& spellId);
|
void askDeleteSpell(const std::string& spellId);
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,15 @@
|
||||||
<Widget type="SpellView" skin="MW_SpellView" position="8 38 268 490" align="Left Top Stretch" name="SpellView">
|
<Widget type="SpellView" skin="MW_SpellView" position="8 38 268 490" align="Left Top Stretch" name="SpellView">
|
||||||
</Widget>
|
</Widget>
|
||||||
|
|
||||||
|
<Widget type="HBox" position="8 535 268 23" align="Right Bottom HStretch">
|
||||||
|
<Widget type="Spacer"/>
|
||||||
|
<!-- Spell deletion button -->
|
||||||
|
<Widget type="AutoSizedButton" skin="MW_Button" align="Right Bottom" position="8 535 0 23" name="DeleteSpellButton">
|
||||||
|
<Property key="Caption" value="#{sDelete}"/>
|
||||||
|
<Property key="NeedKey" value="false"/>
|
||||||
|
</Widget>
|
||||||
|
</Widget>
|
||||||
|
|
||||||
<!-- Search box-->
|
<!-- Search box-->
|
||||||
<Widget type="EditBox" skin="MW_TextBoxEditWithBorder" position="8 535 268 23" align="Left Bottom HStretch" name="FilterEdit">
|
<Widget type="EditBox" skin="MW_TextBoxEditWithBorder" position="8 535 268 23" align="Left Bottom HStretch" name="FilterEdit">
|
||||||
</Widget>
|
</Widget>
|
||||||
|
|
Loading…
Reference in a new issue