1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-01-27 03:35:27 +00:00
OpenMW/apps/openmw/mwgui/inventorywindow.hpp
elsid 62362fc0ef
Use typed settings storage for windows
Group window settings into structs. Include rect sizes in regular and maximized
state and maximized flag. Use them instead of manipulations with string names.
2023-04-12 00:54:00 +02:00

143 lines
3.4 KiB
C++

#ifndef MGUI_Inventory_H
#define MGUI_Inventory_H
#include "mode.hpp"
#include "windowpinnablebase.hpp"
#include "../mwrender/characterpreview.hpp"
#include "../mwworld/ptr.hpp"
namespace osg
{
class Group;
}
namespace Resource
{
class ResourceSystem;
}
namespace MWGui
{
namespace Widgets
{
class MWDynamicStat;
}
class ItemView;
class SortFilterItemModel;
class TradeItemModel;
class DragAndDrop;
class ItemModel;
class InventoryWindow : public WindowPinnableBase
{
public:
InventoryWindow(DragAndDrop* dragAndDrop, osg::Group* parent, Resource::ResourceSystem* resourceSystem);
void onOpen() override;
/// start trading, disables item drag&drop
void setTrading(bool trading);
void onFrame(float dt) override;
void pickUpObject(MWWorld::Ptr object);
MWWorld::Ptr getAvatarSelectedItem(int x, int y);
void rebuildAvatar();
SortFilterItemModel* getSortFilterModel();
TradeItemModel* getTradeModel();
ItemModel* getModel();
void updateItemView();
void updatePlayer();
void clear() override;
void useItem(const MWWorld::Ptr& ptr, bool force = false);
void setGuiMode(GuiMode mode);
/// Cycle to previous/next weapon
void cycle(bool next);
protected:
void onTitleDoubleClicked() override;
private:
DragAndDrop* mDragAndDrop;
int mSelectedItem;
MWWorld::Ptr mPtr;
MWGui::ItemView* mItemView;
SortFilterItemModel* mSortModel;
TradeItemModel* mTradeModel;
MyGUI::Widget* mAvatar;
MyGUI::ImageBox* mAvatarImage;
MyGUI::TextBox* mArmorRating;
Widgets::MWDynamicStat* mEncumbranceBar;
MyGUI::Widget* mLeftPane;
MyGUI::Widget* mRightPane;
MyGUI::Button* mFilterAll;
MyGUI::Button* mFilterWeapon;
MyGUI::Button* mFilterApparel;
MyGUI::Button* mFilterMagic;
MyGUI::Button* mFilterMisc;
MyGUI::EditBox* mFilterEdit;
GuiMode mGuiMode;
int mLastXSize;
int mLastYSize;
std::unique_ptr<MyGUI::ITexture> mPreviewTexture;
std::unique_ptr<MWRender::InventoryPreview> mPreview;
bool mTrading;
float mUpdateTimer;
void toggleMaximized();
void onItemSelected(int index);
void onItemSelectedFromSourceModel(int index);
void onBackgroundSelected();
void sellItem(MyGUI::Widget* sender, int count);
void dragItem(MyGUI::Widget* sender, int count);
void onWindowResize(MyGUI::Window* _sender);
void onFilterChanged(MyGUI::Widget* _sender);
void onNameFilterChanged(MyGUI::EditBox* _sender);
void onAvatarClicked(MyGUI::Widget* _sender);
void onPinToggled() override;
void updateEncumbranceBar();
void notifyContentChanged();
void dirtyPreview();
void updatePreviewSize();
void updateArmorRating();
MyGUI::IntSize getPreviewViewportSize() const;
osg::Vec2f mapPreviewWindowToViewport(int x, int y) const;
void adjustPanes();
/// Unequips count items from mSelectedItem, if it is equipped, and then updates mSelectedItem in case the items
/// were re-stacked
void ensureSelectedItemUnequipped(int count);
};
}
#endif // Inventory_H