BsEditorWidget.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #pragma once
  2. #include "BsEditorPrerequisites.h"
  3. #include "BsEditorWidgetManager.h"
  4. #include "boost/signal.hpp"
  5. namespace BansheeEditor
  6. {
  7. class BS_ED_EXPORT EditorWidgetBase
  8. {
  9. public:
  10. const CM::String& getName() const { return mName; }
  11. const CM::HString& getDisplayName() const { return mDisplayName; }
  12. void _setSize(CM::UINT32 width, CM::UINT32 height);
  13. void _setPosition(CM::INT32 x, CM::INT32 y);
  14. void _changeParent(EditorWidgetContainer* parent);
  15. EditorWidgetContainer* _getParent() const { return mParent; }
  16. void _disable();
  17. void _enable();
  18. void close();
  19. protected:
  20. friend class EditorWidgetManager;
  21. EditorWidgetBase(const CM::HString& displayName, const CM::String& name, EditorWidgetContainer& parentContainer);
  22. virtual ~EditorWidgetBase();
  23. CM::String mName;
  24. CM::HString mDisplayName;
  25. EditorWidgetContainer* mParent;
  26. BS::GUIArea* mContent;
  27. BS::GUIWidget& getParentWidget() const;
  28. static void destroy(EditorWidgetBase* widget);
  29. };
  30. template<typename Type>
  31. struct RegisterWidgetOnStart
  32. {
  33. public:
  34. RegisterWidgetOnStart()
  35. {
  36. EditorWidgetManager::preRegisterWidget(Type::getTypeName(), &create);
  37. }
  38. static EditorWidgetBase* create(EditorWidgetContainer& parentContainer)
  39. {
  40. return cm_new<Type>(EditorWidget<Type>::ConstructPrivately(), parentContainer);
  41. }
  42. void makeSureIAmInstantiated() { }
  43. };
  44. template <class Type>
  45. class EditorWidget : public EditorWidgetBase
  46. {
  47. static RegisterWidgetOnStart<Type> RegisterOnStart;
  48. protected:
  49. friend struct RegisterWidgetOnStart<Type>;
  50. struct ConstructPrivately {};
  51. EditorWidget(const CM::HString& displayName, EditorWidgetContainer& parentContainer)
  52. :EditorWidgetBase(displayName, Type::getTypeName(), parentContainer)
  53. {
  54. RegisterOnStart.makeSureIAmInstantiated();
  55. }
  56. public:
  57. virtual ~EditorWidget() { }
  58. };
  59. template <typename Type>
  60. RegisterWidgetOnStart<Type> EditorWidget<Type>::RegisterOnStart;
  61. }