diff --git a/apps/openmw/mwgui/container.cpp b/apps/openmw/mwgui/container.cpp index 6ab2c862d4..b0c3197519 100644 --- a/apps/openmw/mwgui/container.cpp +++ b/apps/openmw/mwgui/container.cpp @@ -160,6 +160,12 @@ namespace MWGui MWBase::Environment::get().getWindowManager()->setKeyFocusWidget(mCloseButton); setTitle(container.getClass().getName(container)); + mPtr.getClass().getContainerStore(mPtr).setContListener(this); + } + + void ContainerWindow::updateItemView() + { + mItemView->update(); } void ContainerWindow::resetReference() diff --git a/apps/openmw/mwgui/container.hpp b/apps/openmw/mwgui/container.hpp index 555fa8e1ae..4898a0eb1c 100644 --- a/apps/openmw/mwgui/container.hpp +++ b/apps/openmw/mwgui/container.hpp @@ -6,6 +6,8 @@ #include "itemmodel.hpp" +#include "../mwworld/containerstore.hpp" + namespace MyGUI { class Gui; @@ -21,7 +23,7 @@ namespace MWGui namespace MWGui { - class ContainerWindow : public WindowBase, public ReferenceInterface + class ContainerWindow : public WindowBase, public ReferenceInterface, public MWWorld::ContainerStoreListener { public: ContainerWindow(DragAndDrop* dragAndDrop); @@ -38,6 +40,11 @@ namespace MWGui void treatNextOpenAsLoot() { mTreatNextOpenAsLoot = true; } + void updateItemView(); + + void itemAdded(const MWWorld::ConstPtr& item, int count) override { updateItemView(); } + void itemRemoved(const MWWorld::ConstPtr& item, int count) override { updateItemView(); } + std::string_view getWindowIdForLua() const override { return "Container"; } private: diff --git a/apps/openmw/mwgui/draganddrop.cpp b/apps/openmw/mwgui/draganddrop.cpp index 0fa2cc4e21..36cfe649d6 100644 --- a/apps/openmw/mwgui/draganddrop.cpp +++ b/apps/openmw/mwgui/draganddrop.cpp @@ -91,6 +91,8 @@ namespace MWGui MWBase::Environment::get().getWindowManager()->setDragDrop(true); mIsOnDragAndDrop = true; + + MWBase::Environment::get().getWindowManager()->getInventoryWindow()->updateItemView(); } void DragAndDrop::drop(ItemModel* targetModel, ItemView* targetView) diff --git a/apps/openmw/mwgui/inventorywindow.cpp b/apps/openmw/mwgui/inventorywindow.cpp index a773b4635b..27dab07d34 100644 --- a/apps/openmw/mwgui/inventorywindow.cpp +++ b/apps/openmw/mwgui/inventorywindow.cpp @@ -145,6 +145,8 @@ namespace MWGui auto tradeModel = std::make_unique(std::make_unique(mPtr), MWWorld::Ptr()); mTradeModel = tradeModel.get(); + mPtr.getClass().getInventoryStore(mPtr).setContListener(this); + if (mSortModel) // reuse existing SortModel when possible to keep previous category/filter settings mSortModel->setSourceModel(std::move(tradeModel)); else diff --git a/apps/openmw/mwgui/inventorywindow.hpp b/apps/openmw/mwgui/inventorywindow.hpp index 9fc77ceec5..1dd12aa550 100644 --- a/apps/openmw/mwgui/inventorywindow.hpp +++ b/apps/openmw/mwgui/inventorywindow.hpp @@ -5,6 +5,7 @@ #include "windowpinnablebase.hpp" #include "../mwrender/characterpreview.hpp" +#include "../mwworld/containerstore.hpp" #include "../mwworld/ptr.hpp" namespace osg @@ -30,7 +31,7 @@ namespace MWGui class DragAndDrop; class ItemModel; - class InventoryWindow : public WindowPinnableBase + class InventoryWindow : public WindowPinnableBase, public MWWorld::ContainerStoreListener { public: InventoryWindow(DragAndDrop* dragAndDrop, osg::Group* parent, Resource::ResourceSystem* resourceSystem); @@ -62,6 +63,9 @@ 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(); } + /// Cycle to previous/next weapon void cycle(bool next);