mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-04-29 21:37:57 +03:00
Improved repair widget
This commit is contained in:
parent
1164c3f16e
commit
10d4cb15ad
6 changed files with 85 additions and 27 deletions
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue