OpenMW
apps/opencs/view/world/creator.hpp
Go to the documentation of this file.
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