mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-09-17 08:26:50 -04:00
also update draganddrop and trade items
This commit is contained in:
parent
bdf025a532
commit
4b94b6f678
@ -11,7 +11,6 @@
|
||||
#include "controllers.hpp"
|
||||
#include "inventorywindow.hpp"
|
||||
#include "itemview.hpp"
|
||||
#include "itemwidget.hpp"
|
||||
#include "sortfilteritemmodel.hpp"
|
||||
|
||||
namespace MWGui
|
||||
@ -72,19 +71,18 @@ namespace MWGui
|
||||
mSourceSortModel->addDragItem(mItem.mBase, count);
|
||||
}
|
||||
|
||||
ItemWidget* baseWidget = MyGUI::Gui::getInstance().createWidget<ItemWidget>(
|
||||
mDraggedWidget = MyGUI::Gui::getInstance().createWidget<ItemWidget>(
|
||||
"MW_ItemIcon", 0, 0, 42, 42, MyGUI::Align::Default, "DragAndDrop");
|
||||
|
||||
Controllers::ControllerFollowMouse* controller
|
||||
= MyGUI::ControllerManager::getInstance()
|
||||
.createItem(Controllers::ControllerFollowMouse::getClassTypeName())
|
||||
->castType<Controllers::ControllerFollowMouse>();
|
||||
MyGUI::ControllerManager::getInstance().addItem(baseWidget, controller);
|
||||
MyGUI::ControllerManager::getInstance().addItem(mDraggedWidget, controller);
|
||||
|
||||
mDraggedWidget = baseWidget;
|
||||
baseWidget->setItem(mItem.mBase);
|
||||
baseWidget->setNeedMouseFocus(false);
|
||||
baseWidget->setCount(count);
|
||||
mDraggedWidget->setItem(mItem.mBase);
|
||||
mDraggedWidget->setNeedMouseFocus(false);
|
||||
mDraggedWidget->setCount(count);
|
||||
|
||||
sourceView->update();
|
||||
|
||||
@ -126,6 +124,22 @@ namespace MWGui
|
||||
mSourceView->update();
|
||||
}
|
||||
|
||||
void DragAndDrop::update()
|
||||
{
|
||||
if (mIsOnDragAndDrop)
|
||||
{
|
||||
int count = mItem.mBase.getCellRef().getCount();
|
||||
if (count < mDraggedCount)
|
||||
{
|
||||
mItem.mCount = count;
|
||||
mDraggedCount = count;
|
||||
mDraggedWidget->setCount(mDraggedCount);
|
||||
mSourceSortModel->clearDragItems();
|
||||
mSourceSortModel->addDragItem(mItem.mBase, mDraggedCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DragAndDrop::onFrame()
|
||||
{
|
||||
if (mIsOnDragAndDrop && mItem.mBase.getCellRef().getCount() == 0)
|
||||
|
@ -2,6 +2,7 @@
|
||||
#define OPENMW_MWGUI_DRAGANDDROP_H
|
||||
|
||||
#include "itemmodel.hpp"
|
||||
#include "itemwidget.hpp"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
@ -18,7 +19,7 @@ namespace MWGui
|
||||
{
|
||||
public:
|
||||
bool mIsOnDragAndDrop;
|
||||
MyGUI::Widget* mDraggedWidget;
|
||||
ItemWidget* mDraggedWidget;
|
||||
ItemModel* mSourceModel;
|
||||
ItemView* mSourceView;
|
||||
SortFilterItemModel* mSourceSortModel;
|
||||
@ -30,6 +31,7 @@ namespace MWGui
|
||||
void startDrag(
|
||||
int index, SortFilterItemModel* sortModel, ItemModel* sourceModel, ItemView* sourceView, int count);
|
||||
void drop(ItemModel* targetModel, ItemView* targetView);
|
||||
void update();
|
||||
void onFrame();
|
||||
|
||||
void finish();
|
||||
|
@ -850,6 +850,21 @@ namespace MWGui
|
||||
mPreview->rebuild();
|
||||
}
|
||||
|
||||
void InventoryWindow::itemRemoved(const MWWorld::ConstPtr& item, int count)
|
||||
{
|
||||
if (mDragAndDrop->mIsOnDragAndDrop && mDragAndDrop->mItem.mBase == item)
|
||||
mDragAndDrop->update();
|
||||
|
||||
if (mTrading)
|
||||
{
|
||||
mTradeModel->updateBorrowed();
|
||||
MWBase::Environment::get().getWindowManager()->getTradeWindow()->getTradeModel()->updateBorrowed();
|
||||
MWBase::Environment::get().getWindowManager()->getTradeWindow()->updateItemView();
|
||||
}
|
||||
|
||||
updateItemView();
|
||||
}
|
||||
|
||||
MyGUI::IntSize InventoryWindow::getPreviewViewportSize() const
|
||||
{
|
||||
const MyGUI::IntSize previewWindowSize = mAvatarImage->getSize();
|
||||
|
@ -64,7 +64,7 @@ namespace MWGui
|
||||
void setGuiMode(GuiMode mode);
|
||||
|
||||
void itemAdded(const MWWorld::ConstPtr& item, int count) override { updateItemView(); }
|
||||
void itemRemoved(const MWWorld::ConstPtr& item, int count) override { updateItemView(); }
|
||||
void itemRemoved(const MWWorld::ConstPtr& item, int count) override;
|
||||
|
||||
/// Cycle to previous/next weapon
|
||||
void cycle(bool next);
|
||||
|
@ -113,6 +113,25 @@ namespace MWGui
|
||||
encumbrance = std::max(0.f, encumbrance);
|
||||
}
|
||||
|
||||
void TradeItemModel::updateBorrowed()
|
||||
{
|
||||
auto update = [](std::vector<ItemStack>& list) {
|
||||
for (auto it = list.begin(); it != list.end();)
|
||||
{
|
||||
int actualCount = it->mBase.getCellRef().getCount();
|
||||
if (actualCount < it->mCount)
|
||||
it->mCount = actualCount;
|
||||
if (it->mCount == 0)
|
||||
it = list.erase(it);
|
||||
else
|
||||
++it;
|
||||
}
|
||||
};
|
||||
|
||||
update(mBorrowedFromUs);
|
||||
update(mBorrowedToUs);
|
||||
}
|
||||
|
||||
void TradeItemModel::abort()
|
||||
{
|
||||
mBorrowedFromUs.clear();
|
||||
|
@ -31,6 +31,9 @@ namespace MWGui
|
||||
|
||||
void returnItemBorrowedFromUs(ModelIndex itemIndex, ItemModel* source, size_t count);
|
||||
|
||||
/// Update borrowed items in this model
|
||||
void updateBorrowed();
|
||||
|
||||
/// Permanently transfers items that were borrowed to us from another model to this model
|
||||
void transferItems();
|
||||
/// Aborts trade
|
||||
|
@ -651,4 +651,13 @@ namespace MWGui
|
||||
{
|
||||
mItemView->update();
|
||||
}
|
||||
|
||||
void TradeWindow::itemRemoved(const MWWorld::ConstPtr& item, int count)
|
||||
{
|
||||
mTradeModel->updateBorrowed();
|
||||
MWBase::Environment::get().getWindowManager()->getInventoryWindow()->getTradeModel()->updateBorrowed();
|
||||
|
||||
MWBase::Environment::get().getWindowManager()->getInventoryWindow()->updateItemView();
|
||||
updateItemView();
|
||||
}
|
||||
}
|
||||
|
@ -44,10 +44,12 @@ namespace MWGui
|
||||
|
||||
void onDeleteCustomData(const MWWorld::Ptr& ptr) override;
|
||||
|
||||
TradeItemModel* getTradeModel() { return mTradeModel; };
|
||||
|
||||
void updateItemView();
|
||||
|
||||
void itemAdded(const MWWorld::ConstPtr& item, int count) override { updateItemView(); }
|
||||
void itemRemoved(const MWWorld::ConstPtr& item, int count) override { updateItemView(); }
|
||||
void itemRemoved(const MWWorld::ConstPtr& item, int count) override;
|
||||
|
||||
typedef MyGUI::delegates::MultiDelegate<> EventHandle_TradeDone;
|
||||
EventHandle_TradeDone eventTradeDone;
|
||||
|
Loading…
x
Reference in New Issue
Block a user