CmWindowDockManager.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  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. public:
  10. WindowDockManager(QWidget* centralWidget, QtDockOverlayWidget* dockWidget);
  11. void windowDragged(QtEditorWindow* window, const QPoint& mousePos);
  12. void windowReleased(QtEditorWindow* window, const QPoint& mousePos);
  13. void windowClosed(QtEditorWindow* window);
  14. private:
  15. QtDockOverlayWidget* mDockOverlayWidget;
  16. QWidget* mCentralWidget;
  17. QSplitter* mCentralSplitter;
  18. QtEditorWindow* mLastDraggedWindow;
  19. QPoint mLastDragPosition;
  20. std::vector<QtEditorWindow*> mDockedWindows;
  21. void dockWindow(QtEditorWindow* windowToDock, QtEditorWindow* dockAtWidget, WindowDragDropLocation dockAtPosition);
  22. void undockWindow(QtEditorWindow* windowToUndock);
  23. QtEditorWindow* getDockedWindowAtPosition(const QPoint& globalPos);
  24. bool isPositionInDockArea(const QPoint& globalPos);
  25. WindowDragDropLocation getDropLocationAtPosition(const QWidget* widget, const QPoint& globalPos);
  26. std::vector<QPolygon> getDropLocations(const QWidget* widget);
  27. };
  28. WindowDockManager& gWindowDockManager();
  29. }