CmWindowDockManager.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #pragma once
  2. #include "CmEditorPrerequisites.h"
  3. #include "CmModule.h"
  4. #include "CmQtDockOverlayWidget.h"
  5. namespace CamelotEditor
  6. {
  7. class WindowDockManager : public Module<WindowDockManager>
  8. {
  9. struct DockedWindowInfo
  10. {
  11. INT32 parentId;
  12. WindowDragDropLocation dockLocation;
  13. };
  14. public:
  15. WindowDockManager(QWidget* centralWidget, QtDockOverlayWidget* dockWidget);
  16. void windowDragged(QtEditorWindow* window, const QPoint& mousePos);
  17. void windowReleased(QtEditorWindow* window, const QPoint& mousePos);
  18. void windowClosed(QtEditorWindow* window);
  19. void dockWindow(QtEditorWindow* windowToDock, QtEditorWindow* dockAtWidget, WindowDragDropLocation dockAtPosition);
  20. void undockWindow(QtEditorWindow* windowToUndock);
  21. bool isDocked(const QtEditorWindow* window) const;
  22. WindowDragDropLocation getDockLocation(const QtEditorWindow* window) const;
  23. INT32 getDockParentId(const QtEditorWindow* window) const;
  24. private:
  25. QtDockOverlayWidget* mDockOverlayWidget;
  26. QWidget* mCentralWidget;
  27. QSplitter* mCentralSplitter;
  28. QtEditorWindow* mLastDraggedWindow;
  29. QPoint mLastDragPosition;
  30. Map<QtEditorWindow*, DockedWindowInfo>::type mDockedWindows;
  31. bool isPositionInDockArea(const QPoint& globalPos);
  32. WindowDragDropLocation getDropLocationAtPosition(const QWidget* widget, const QPoint& globalPos);
  33. std::vector<QPolygon> getDropLocations(const QWidget* widget);
  34. };
  35. WindowDockManager& gWindowDockManager();
  36. }