Improved repair widget

This commit is contained in:
Andrei Kortunov 2017-04-15 23:06:13 +04:00
parent 1164c3f16e
commit 10d4cb15ad
6 changed files with 85 additions and 27 deletions

View file

@ -30,6 +30,7 @@ namespace MWGui
Repair::Repair()
: WindowBase("openmw_repair.layout")
, mItemSelectionDialog(NULL)
{
getWidget(mRepairBox, "RepairBox");
getWidget(mToolBox, "ToolBox");
@ -39,9 +40,11 @@ Repair::Repair()
getWidget(mCancelButton, "CancelButton");
mCancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &Repair::onCancel);
mRepairBox->eventItemClicked += MyGUI::newDelegate(this, &Repair::onRepairItem);
mRepairBox->eventItemClicked += MyGUI::newDelegate(this, &Repair::onRepairItem);
mRepairBox->setDisplayMode(ItemChargeView::DisplayMode_Health);
mToolIcon->eventMouseButtonClick += MyGUI::newDelegate(this, &Repair::onSelectItem);
}
void Repair::open()
@ -83,6 +86,8 @@ void Repair::updateRepairView()
float quality = ref->mBase->mData.mQuality;
mToolIcon->setUserData(mRepair.getTool());
std::stringstream qualityStr;
qualityStr << std::setprecision(3) << quality;
@ -93,6 +98,12 @@ void Repair::updateRepairView()
mToolBox->setVisible(toolBoxVisible);
mToolBox->setUserString("Hidden", toolBoxVisible ? "false" : "true");
if (!toolBoxVisible)
{
mToolIcon->setItem(MWWorld::Ptr());
mToolIcon->clearUserStrings();
}
mRepairBox->update();
Gui::Box* box = dynamic_cast<Gui::Box*>(mMainWidget);
@ -103,6 +114,36 @@ void Repair::updateRepairView()
center();
}
void Repair::onSelectItem(MyGUI::Widget *sender)
{
delete mItemSelectionDialog;
mItemSelectionDialog = new ItemSelectionDialog("#{sRepair}");
mItemSelectionDialog->eventItemSelected += MyGUI::newDelegate(this, &Repair::onItemSelected);
mItemSelectionDialog->eventDialogCanceled += MyGUI::newDelegate(this, &Repair::onItemCancel);
mItemSelectionDialog->setVisible(true);
mItemSelectionDialog->openContainer(MWMechanics::getPlayer());
mItemSelectionDialog->setFilter(SortFilterItemModel::Filter_OnlyRepairTools);
}
void Repair::onItemSelected(MWWorld::Ptr item)
{
mItemSelectionDialog->setVisible(false);
mToolIcon->setItem(item);
mToolIcon->setUserString ("ToolTipType", "ItemPtr");
mToolIcon->setUserData(item);
mRepair.setTool(item);
MWBase::Environment::get().getSoundManager()->playSound(item.getClass().getDownSoundId(item), 1, 1);
updateRepairView();
}
void Repair::onItemCancel()
{
mItemSelectionDialog->setVisible(false);
}
void Repair::onCancel(MyGUI::Widget* /*sender*/)
{
exit();

View file

@ -3,11 +3,14 @@
#include "windowbase.hpp"
#include "itemselection.hpp"
#include "../mwmechanics/repair.hpp"
namespace MWGui
{
class ItemSelectionDialog;
class ItemWidget;
class ItemChargeView;
@ -29,6 +32,8 @@ protected:
ItemWidget* mToolIcon;
ItemSelectionDialog* mItemSelectionDialog;
MyGUI::TextBox* mUsesLabel;
MyGUI::TextBox* mQualityLabel;
@ -38,6 +43,11 @@ protected:
void updateRepairView();
void onSelectItem(MyGUI::Widget* sender);
void onItemSelected(MWWorld::Ptr item);
void onItemCancel();
void onRepairItem(MyGUI::Widget* sender, const MWWorld::Ptr& ptr);
void onCancel(MyGUI::Widget* sender);

View file

@ -129,6 +129,8 @@ namespace MWGui
if ((mFilter & Filter_OnlyChargedSoulstones) && (base.getTypeName() != typeid(ESM::Miscellaneous).name()
|| base.getCellRef().getSoul() == ""))
return false;
if ((mFilter & Filter_OnlyRepairTools) && (base.getTypeName() != typeid(ESM::Repair).name()))
return false;
if ((mFilter & Filter_OnlyEnchantable) && (item.mFlags & ItemStack::Flag_Enchanted
|| (base.getTypeName() != typeid(ESM::Armor).name()
&& base.getTypeName() != typeid(ESM::Clothing).name()

View file

@ -41,6 +41,7 @@ namespace MWGui
static const int Filter_OnlyUsableItems = (1<<4); // Only items with a Use action
static const int Filter_OnlyRepairable = (1<<5);
static const int Filter_OnlyRechargable = (1<<6);
static const int Filter_OnlyRepairTools = (1<<7);
private: