OpenMW
|
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