OpenMW
|
00001 #ifndef CSV_WORLD_CREATOR_H 00002 #define CSV_WORLD_CREATOR_H 00003 00004 #include <QWidget> 00005 00006 class QUndoStack; 00007 00008 namespace CSMWorld 00009 { 00010 class Data; 00011 class UniversalId; 00012 } 00013 00014 namespace CSVWorld 00015 { 00017 class Creator : public QWidget 00018 { 00019 Q_OBJECT 00020 00021 public: 00022 00023 virtual ~Creator(); 00024 00025 virtual void reset() = 0; 00026 00027 virtual void setEditLock (bool locked) = 0; 00028 00029 signals: 00030 00031 void done(); 00032 00033 void requestFocus (const std::string& id); 00036 }; 00037 00039 class CreatorFactoryBase 00040 { 00041 public: 00042 00043 virtual ~CreatorFactoryBase(); 00044 00045 virtual Creator *makeCreator (CSMWorld::Data& data, QUndoStack& undoStack, 00046 const CSMWorld::UniversalId& id) const = 0; 00051 }; 00052 00054 class NullCreatorFactory : public CreatorFactoryBase 00055 { 00056 public: 00057 00058 virtual Creator *makeCreator (CSMWorld::Data& data, QUndoStack& undoStack, 00059 const CSMWorld::UniversalId& id) const; 00063 }; 00064 00065 template<class CreatorT> 00066 class CreatorFactory : public CreatorFactoryBase 00067 { 00068 public: 00069 00070 virtual Creator *makeCreator (CSMWorld::Data& data, QUndoStack& undoStack, 00071 const CSMWorld::UniversalId& id) const; 00076 }; 00077 00078 template<class CreatorT> 00079 Creator *CreatorFactory<CreatorT>::makeCreator (CSMWorld::Data& data, QUndoStack& undoStack, 00080 const CSMWorld::UniversalId& id) const 00081 { 00082 return new CreatorT (data, undoStack, id); 00083 } 00084 } 00085 00086 #endif