OpenMW
apps/openmw/mwgui/itemmodel.hpp
Go to the documentation of this file.
00001 #ifndef MWGUI_ITEM_MODEL_H
00002 #define MWGUI_ITEM_MODEL_H
00003 
00004 #include "../mwworld/ptr.hpp"
00005 
00006 namespace MWGui
00007 {
00008 
00009     class ItemModel;
00010 
00012     struct ItemStack
00013     {
00014         ItemStack (const MWWorld::Ptr& base, ItemModel* creator, size_t count);
00015         ItemStack();
00016         bool stacks (const ItemStack& other);
00018 
00019         enum Type
00020         {
00021             Type_Barter,
00022             Type_Equipped,
00023             Type_Normal
00024         };
00025         Type mType;
00026 
00027         enum Flags
00028         {
00029             Flag_Enchanted = (1<<0)
00030         };
00031         int mFlags;
00032 
00033         ItemModel* mCreator;
00034         size_t mCount;
00035         MWWorld::Ptr mBase;
00036     };
00037 
00038     bool operator == (const ItemStack& left, const ItemStack& right);
00039 
00040 
00042     class ItemModel
00043     {
00044     public:
00045         ItemModel();
00046         virtual ~ItemModel() {}
00047 
00048         typedef int ModelIndex;
00049 
00050         virtual ItemStack getItem (ModelIndex index) = 0;
00052         virtual size_t getItemCount() = 0;
00053 
00054         virtual ModelIndex getIndex (ItemStack item) = 0;
00055 
00056         virtual void update() = 0;
00057 
00058         virtual void copyItem (const ItemStack& item, size_t count) = 0;
00059         virtual void removeItem (const ItemStack& item, size_t count) = 0;
00060 
00061     private:
00062         ItemModel(const ItemModel&);
00063         ItemModel& operator=(const ItemModel&);
00064     };
00065 
00068     class ProxyItemModel : public ItemModel
00069     {
00070     public:
00071         virtual ~ProxyItemModel();
00072         virtual void copyItem (const ItemStack& item, size_t count);
00073         virtual void removeItem (const ItemStack& item, size_t count);
00074         virtual ModelIndex getIndex (ItemStack item);
00075 
00076         ModelIndex mapToSource (ModelIndex index);
00077         ModelIndex mapFromSource (ModelIndex index);
00078     protected:
00079         ItemModel* mSourceModel;
00080     };
00081 
00082 }
00083 
00084 #endif