Skip to content

Commit 48382cc

Browse files
Merged the two draging state enumerations into a single one and reused it in FloatingDockContainer
1 parent e37e4fd commit 48382cc

9 files changed

+62
-43
lines changed

src/DockAreaTabBar.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -228,16 +228,17 @@ void CDockAreaTabBar::mouseDoubleClickEvent(QMouseEvent *event)
228228
{
229229
return;
230230
}
231-
startFloating(event->pos());
231+
makeAreaFloating(event->pos(), DraggingInactive);
232232
}
233233

234234

235235
//============================================================================
236-
CFloatingDockContainer* CDockAreaTabBar::makeAreaFloating(const QPoint& Offset)
236+
CFloatingDockContainer* CDockAreaTabBar::makeAreaFloating(const QPoint& Offset,
237+
eDragState DragState)
237238
{
238239
QSize Size = d->DockArea->size();
239240
CFloatingDockContainer* FloatingWidget = new CFloatingDockContainer(d->DockArea);
240-
FloatingWidget->startFloating(Offset, Size);
241+
FloatingWidget->startFloating(Offset, Size, DragState);
241242
auto TopLevelDockWidget = FloatingWidget->topLevelDockWidget();
242243
if (TopLevelDockWidget)
243244
{
@@ -251,7 +252,7 @@ CFloatingDockContainer* CDockAreaTabBar::makeAreaFloating(const QPoint& Offset)
251252
//============================================================================
252253
void CDockAreaTabBar::startFloating(const QPoint& Offset)
253254
{
254-
d->FloatingWidget = makeAreaFloating(Offset);
255+
d->FloatingWidget = makeAreaFloating(Offset, DraggingFloatingWidget);
255256
}
256257

257258

src/DockAreaTabBar.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
// INCLUDES
3131
//============================================================================
3232
#include <QScrollArea>
33+
#include "ads_globals.h"
3334

3435
namespace ads
3536
{
@@ -89,7 +90,8 @@ private slots:
8990
/**
9091
* Makes the dock area floating
9192
*/
92-
CFloatingDockContainer* makeAreaFloating(const QPoint& Offset);
93+
CFloatingDockContainer* makeAreaFloating(const QPoint& Offset,
94+
eDragState DragState);
9395

9496

9597
public:

src/DockAreaTitleBar.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ void CDockAreaTitleBar::onCloseButtonClicked()
265265
//============================================================================
266266
void CDockAreaTitleBar::onUndockButtonClicked()
267267
{
268-
d->TabBar->makeAreaFloating(mapFromGlobal(QCursor::pos()));
268+
d->TabBar->makeAreaFloating(mapFromGlobal(QCursor::pos()), DraggingInactive);
269269
}
270270

271271

src/DockWidget.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,7 @@ QSize CDockWidget::minimumSizeHint() const
671671
return QSize(60, 40);
672672
}
673673

674+
674675
} // namespace ads
675676

676677
//---------------------------------------------------------------------------

src/DockWidget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class CDockManager;
4545
class CDockContainerWidget;
4646
class CDockAreaWidget;
4747
class DockContainerWidgetPrivate;
48+
class CFloatingDockContainer;
4849

4950
/**
5051
* The QDockWidget class provides a widget that can be docked inside a

src/DockWidgetTab.cpp

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,6 @@
5353

5454
namespace ads
5555
{
56-
/**
57-
* The different dragging states
58-
*/
59-
enum eDragState
60-
{
61-
DraggingInactive, //!< DraggingInactive
62-
DraggingMousePressed, //!< DraggingMousePressed
63-
DraggingTab, //!< DraggingTab
64-
DraggingFloatingWidget//!< DraggingFloatingWidget
65-
};
6656

6757
using tTabLabel = CElidingLabel;
6858
using tCloseButton = QPushButton;
@@ -229,13 +219,17 @@ bool DockWidgetTabPrivate::startFloating(eDragState DraggingState)
229219
FloatingWidget = new CFloatingDockContainer(DockArea);
230220
}
231221

232-
FloatingWidget->startFloating(DragStartMousePosition, Size);
233222
if (DraggingFloatingWidget == DraggingState)
234223
{
224+
FloatingWidget->startDragging(DragStartMousePosition, Size);
235225
auto Overlay = DockWidget->dockManager()->containerOverlay();
236226
Overlay->setAllowedAreas(OuterDockAreas);
237227
this->FloatingWidget = FloatingWidget;
238228
}
229+
else
230+
{
231+
FloatingWidget->initFloatingGeometry(DragStartMousePosition, Size);
232+
}
239233
DockWidget->emitTopLevelChanged(true);
240234
return true;
241235
}

src/FloatingDockContainer.cpp

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,6 @@
5050
namespace ads
5151
{
5252
static unsigned int zOrderCounter = 0;
53-
/**
54-
* The different dragging states
55-
*/
56-
enum eDragState
57-
{
58-
StateInactive, //!< DraggingInactive
59-
StateMousePressed, //!< DraggingMousePressed
60-
StateDraggingActive//!< DraggingFloatingWidget
61-
};
62-
6353
/**
6454
* Private data class of CFloatingDockContainer class (pimpl)
6555
*/
@@ -69,7 +59,7 @@ struct FloatingDockContainerPrivate
6959
CDockContainerWidget* DockContainer;
7060
unsigned int zOrderIndex = ++zOrderCounter;
7161
QPointer<CDockManager> DockManager;
72-
eDragState DraggingState = StateInactive;
62+
eDragState DraggingState = DraggingInactive;
7363
QPoint DragStartMousePosition;
7464
CDockContainerWidget* DropContainer = nullptr;
7565
CDockAreaWidget* SingleDockArea = nullptr;
@@ -111,7 +101,7 @@ FloatingDockContainerPrivate::FloatingDockContainerPrivate(CFloatingDockContaine
111101
//============================================================================
112102
void FloatingDockContainerPrivate::titleMouseReleaseEvent()
113103
{
114-
setState(StateInactive);
104+
setState(DraggingInactive);
115105
if (!DropContainer)
116106
{
117107
return;
@@ -301,12 +291,12 @@ void CFloatingDockContainer::moveEvent(QMoveEvent *event)
301291
QWidget::moveEvent(event);
302292
switch (d->DraggingState)
303293
{
304-
case StateMousePressed:
305-
d->setState(StateDraggingActive);
294+
case DraggingMousePressed:
295+
d->setState(DraggingFloatingWidget);
306296
d->updateDropOverlays(QCursor::pos());
307297
break;
308298

309-
case StateDraggingActive:
299+
case DraggingFloatingWidget:
310300
d->updateDropOverlays(QCursor::pos());
311301
break;
312302
default:
@@ -319,7 +309,7 @@ void CFloatingDockContainer::moveEvent(QMoveEvent *event)
319309
void CFloatingDockContainer::closeEvent(QCloseEvent *event)
320310
{
321311
qDebug() << "CFloatingDockContainer closeEvent";
322-
d->setState(StateInactive);
312+
d->setState(DraggingInactive);
323313

324314
if (isClosable())
325315
{
@@ -365,20 +355,20 @@ bool CFloatingDockContainer::event(QEvent *e)
365355
{
366356
switch (d->DraggingState)
367357
{
368-
case StateInactive:
358+
case DraggingInactive:
369359
if (e->type() == QEvent::NonClientAreaMouseButtonPress && QGuiApplication::mouseButtons() == Qt::LeftButton)
370360
{
371361
qDebug() << "FloatingWidget::event Event::NonClientAreaMouseButtonPress" << e->type();
372-
d->setState(StateMousePressed);
362+
d->setState(DraggingMousePressed);
373363
}
374364
break;
375365

376-
case StateMousePressed:
366+
case DraggingMousePressed:
377367
switch (e->type())
378368
{
379369
case QEvent::NonClientAreaMouseButtonDblClick:
380370
qDebug() << "FloatingWidget::event QEvent::NonClientAreaMouseButtonDblClick";
381-
d->setState(StateInactive);
371+
d->setState(DraggingInactive);
382372
break;
383373

384374
case QEvent::Resize:
@@ -392,7 +382,7 @@ bool CFloatingDockContainer::event(QEvent *e)
392382
// change, we check, if we are not in maximized state.
393383
if (!isMaximized())
394384
{
395-
d->setState(StateInactive);
385+
d->setState(DraggingInactive);
396386
}
397387
break;
398388

@@ -401,7 +391,7 @@ bool CFloatingDockContainer::event(QEvent *e)
401391
}
402392
break;
403393

404-
case StateDraggingActive:
394+
case DraggingFloatingWidget:
405395
if (e->type() == QEvent::NonClientAreaMouseButtonRelease)
406396
{
407397
qDebug() << "FloatingWidget::event QEvent::NonClientAreaMouseButtonRelease";
@@ -424,7 +414,7 @@ bool CFloatingDockContainer::event(QEvent *e)
424414
bool CFloatingDockContainer::eventFilter(QObject *watched, QEvent *event)
425415
{
426416
Q_UNUSED(watched);
427-
if (event->type() == QEvent::MouseButtonRelease && d->isState(StateDraggingActive))
417+
if (event->type() == QEvent::MouseButtonRelease && d->isState(DraggingFloatingWidget))
428418
{
429419
qDebug() << "FloatingWidget::eventFilter QEvent::MouseButtonRelease";
430420
d->titleMouseReleaseEvent();
@@ -435,10 +425,11 @@ bool CFloatingDockContainer::eventFilter(QObject *watched, QEvent *event)
435425

436426

437427
//============================================================================
438-
void CFloatingDockContainer::startFloating(const QPoint& DragStartMousePos, const QSize& Size)
428+
void CFloatingDockContainer::startFloating(const QPoint& DragStartMousePos, const QSize& Size,
429+
eDragState DragState)
439430
{
440431
resize(Size);
441-
d->setState(StateDraggingActive);
432+
d->setState(DragState);
442433
d->DragStartMousePosition = DragStartMousePos;
443434
moveFloating();
444435
show();

src/FloatingDockContainer.h

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,25 @@ private slots:
8181
* Use moveToGlobalPos() to move the widget to a new position
8282
* depending on the start position given in Pos parameter
8383
*/
84-
void startFloating(const QPoint& DragStartMousePos, const QSize& Size = QSize());
84+
void startFloating(const QPoint& DragStartMousePos, const QSize& Size,
85+
eDragState DragState);
86+
87+
/**
88+
* Call this function to start dragging the floating widget
89+
*/
90+
void startDragging(const QPoint& DragStartMousePos, const QSize& Size)
91+
{
92+
startFloating(DragStartMousePos, Size, DraggingFloatingWidget);
93+
}
94+
95+
/**
96+
* Call this function if you just want to initialize the position
97+
* and size of the floating widget
98+
*/
99+
void initFloatingGeometry(const QPoint& DragStartMousePos, const QSize& Size)
100+
{
101+
startFloating(DragStartMousePos, Size, DraggingInactive);
102+
}
85103

86104
/**
87105
* Moves the widget to a new position relative to the position given when

src/ads_globals.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,17 @@ enum TitleBarButton
7272
TitleBarButtonClose
7373
};
7474

75+
/**
76+
* The different dragging states
77+
*/
78+
enum eDragState
79+
{
80+
DraggingInactive, //!< DraggingInactive
81+
DraggingMousePressed, //!< DraggingMousePressed
82+
DraggingTab, //!< DraggingTab
83+
DraggingFloatingWidget//!< DraggingFloatingWidget
84+
};
85+
7586
namespace internal
7687
{
7788
static const bool RestoreTesting = true;

0 commit comments

Comments
 (0)