1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-01-16 12:49:56 +00:00
openmw-tes3mp/apps/openmw/mwgui/container.hpp

148 lines
4 KiB
C++
Raw Normal View History

2012-04-15 15:52:39 +00:00
#ifndef MGUI_CONTAINER_H
#define MGUI_CONTAINER_H
#include <components/esm_store/store.hpp>
2012-04-15 15:52:39 +00:00
#include "window_base.hpp"
#include "referenceinterface.hpp"
#include "../mwclass/container.hpp"
2012-04-15 15:52:39 +00:00
#include "../mwworld/ptr.hpp"
#include "../mwworld/containerstore.hpp"
2012-04-15 15:52:39 +00:00
namespace MWWorld
{
class Environment;
}
namespace MyGUI
{
2012-04-30 11:01:18 +00:00
class Gui;
class Widget;
2012-04-15 15:52:39 +00:00
}
namespace MWGui
{
class WindowManager;
2012-04-30 11:01:18 +00:00
class ContainerWindow;
2012-05-12 11:12:37 +00:00
class ContainerBase;
2012-04-15 15:52:39 +00:00
}
namespace MWGui
{
2012-04-30 11:01:18 +00:00
class DragAndDrop
{
public:
bool mIsOnDragAndDrop;
MyGUI::Widget* mDraggedWidget;
MyGUI::Widget* mDragAndDropWidget;
ContainerBase* mDraggedFrom;
int mDraggedCount;
2012-04-30 11:01:18 +00:00
};
2012-04-15 15:52:39 +00:00
class ContainerBase : public ReferenceInterface
2012-04-15 15:52:39 +00:00
{
2012-04-30 11:01:18 +00:00
public:
2012-05-12 20:44:12 +00:00
ContainerBase(DragAndDrop* dragAndDrop);
2012-05-12 11:12:37 +00:00
virtual ~ContainerBase();
2012-04-15 15:52:39 +00:00
2012-05-12 19:28:04 +00:00
enum Filter
{
Filter_All = 0x01,
Filter_Weapon = 0x02,
Filter_Apparel = 0x03,
Filter_Magic = 0x04,
Filter_Misc = 0x05,
Filter_Ingredients = 0x06
2012-05-12 19:28:04 +00:00
};
enum ItemState
{
ItemState_Normal = 0x01,
ItemState_Equipped = 0x02,
ItemState_Barter = 0x03
};
2012-05-12 20:44:12 +00:00
void setWidgets(MyGUI::Widget* containerWidget, MyGUI::ScrollView* itemView); ///< only call once
void addBarteredItem(MWWorld::Ptr item, int count);
void addItem(MWWorld::Ptr item, int count);
void transferBoughtItems(); ///< transfer bought items into the inventory
void returnBoughtItems(MWWorld::ContainerStore& store); ///< return bought items into the specified ContainerStore
MWWorld::ContainerStore& getContainerStore();
MWWorld::ContainerStore& getBoughtItems() { return mBoughtItems; }
2012-05-12 20:44:12 +00:00
void openContainer(MWWorld::Ptr container);
2012-05-12 19:28:04 +00:00
void setFilter(Filter filter); ///< set category filter
void drawItems();
2012-05-12 11:12:37 +00:00
protected:
MyGUI::ScrollView* mItemView;
MyGUI::Widget* mContainerWidget;
MyGUI::Widget* mSelectedItem;
2012-05-12 11:12:37 +00:00
DragAndDrop* mDragAndDrop;
2012-05-12 19:28:04 +00:00
Filter mFilter;
2012-05-12 18:35:50 +00:00
// bought items are put in a separate ContainerStore so that they don't stack with other (not bought) items.
MWWorld::ContainerStore mBoughtItems;
2012-05-12 11:12:37 +00:00
void onSelectedItem(MyGUI::Widget* _sender);
void onContainerClicked(MyGUI::Widget* _sender);
void onMouseWheel(MyGUI::Widget* _sender, int _rel);
2012-05-12 11:12:37 +00:00
/// start dragging an item (drag & drop)
void startDragItem(MyGUI::Widget* _sender, int count);
/// sell an item from this container
void sellItem(MyGUI::Widget* _sender, int count);
/// sell an item from this container, that was previously just bought
void sellAlreadyBoughtItem(MyGUI::Widget* _sender, int count);
std::string getCountString(const int count);
virtual bool isTradeWindow() { return false; }
virtual bool isInventory() { return false; }
virtual std::vector<MWWorld::Ptr> getEquippedItems() { return std::vector<MWWorld::Ptr>(); }
virtual void _unequipItem(MWWorld::Ptr item) { ; }
virtual bool isTrading() { return false; }
virtual void onSelectedItemImpl(MWWorld::Ptr item) { ; }
virtual bool ignoreEquippedItems() { return false; }
virtual std::vector<MWWorld::Ptr> itemsToIgnore() { return std::vector<MWWorld::Ptr>(); }
2012-05-29 10:35:03 +00:00
virtual void notifyContentChanged() { ; }
2012-05-12 11:12:37 +00:00
};
2012-05-12 20:44:12 +00:00
class ContainerWindow : public ContainerBase, public WindowBase
2012-05-12 11:12:37 +00:00
{
public:
ContainerWindow(WindowManager& parWindowManager,DragAndDrop* dragAndDrop);
2012-04-30 11:01:18 +00:00
virtual ~ContainerWindow();
2012-04-15 15:52:39 +00:00
2012-05-12 20:44:12 +00:00
void open(MWWorld::Ptr container);
2012-04-30 11:01:18 +00:00
protected:
2012-05-12 11:12:37 +00:00
MyGUI::Button* mTakeButton;
MyGUI::Button* mCloseButton;
2012-04-15 15:52:39 +00:00
2012-05-12 11:46:03 +00:00
void onWindowResize(MyGUI::Window* window);
2012-05-11 14:34:36 +00:00
void onCloseButtonClicked(MyGUI::Widget* _sender);
2012-05-11 14:58:07 +00:00
void onTakeAllButtonClicked(MyGUI::Widget* _sender);
virtual void onReferenceUnavailable();
2012-04-15 15:52:39 +00:00
};
}
#endif // CONTAINER_H