mirror of
https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System.git
synced 2025-01-24 13:32:06 +08:00
Removed debug output, properly restored dragged tab position when floating starts
This commit is contained in:
parent
2fe542c3ef
commit
4f97e07eb6
@ -75,6 +75,7 @@ struct DockWidgetTabPrivate
|
|||||||
QIcon Icon;
|
QIcon Icon;
|
||||||
QAbstractButton* CloseButton = nullptr;
|
QAbstractButton* CloseButton = nullptr;
|
||||||
QSpacerItem* IconTextSpacer;
|
QSpacerItem* IconTextSpacer;
|
||||||
|
QPoint TabDragStartPosition;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Private data constructor
|
* Private data constructor
|
||||||
@ -140,6 +141,19 @@ struct DockWidgetTabPrivate
|
|||||||
return new QPushButton();
|
return new QPushButton();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
IFloatingWidget* createFloatingWidget(T* Widget, bool OpaqueUndocking)
|
||||||
|
{
|
||||||
|
if (OpaqueUndocking)
|
||||||
|
{
|
||||||
|
return new CFloatingDockContainer(Widget);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return new CFloatingOverlay(Widget);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
// struct DockWidgetTabPrivate
|
// struct DockWidgetTabPrivate
|
||||||
|
|
||||||
@ -232,31 +246,16 @@ bool DockWidgetTabPrivate::startFloating(eDragState DraggingState)
|
|||||||
IFloatingWidget* FloatingWidget = nullptr;
|
IFloatingWidget* FloatingWidget = nullptr;
|
||||||
bool OpaqueUndocking = CDockManager::configFlags().testFlag(CDockManager::OpaqueUndocking) ||
|
bool OpaqueUndocking = CDockManager::configFlags().testFlag(CDockManager::OpaqueUndocking) ||
|
||||||
(DraggingFloatingWidget != DraggingState);
|
(DraggingFloatingWidget != DraggingState);
|
||||||
std::cout << "OpaqueUndocking " << OpaqueUndocking << std::endl;
|
// If section widget has multiple tabs, we take only one tab
|
||||||
|
// If it has only one single tab, we can move the complete
|
||||||
|
// dock area into floating widget
|
||||||
if (DockArea->dockWidgetsCount() > 1)
|
if (DockArea->dockWidgetsCount() > 1)
|
||||||
{
|
{
|
||||||
// If section widget has multiple tabs, we take only one tab
|
FloatingWidget = createFloatingWidget(DockWidget, OpaqueUndocking);
|
||||||
if (OpaqueUndocking)
|
|
||||||
{
|
|
||||||
FloatingWidget = new CFloatingDockContainer(DockWidget);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FloatingWidget = new CFloatingOverlay(DockWidget);
|
FloatingWidget = createFloatingWidget(DockArea, OpaqueUndocking);
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// If section widget has only one content widget, we can move the complete
|
|
||||||
// dock area into floating widget
|
|
||||||
if (OpaqueUndocking)
|
|
||||||
{
|
|
||||||
FloatingWidget = new CFloatingDockContainer(DockArea);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FloatingWidget = new CFloatingOverlay(DockArea);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DraggingFloatingWidget == DraggingState)
|
if (DraggingFloatingWidget == DraggingState)
|
||||||
@ -347,6 +346,7 @@ void CDockWidgetTab::mouseMoveEvent(QMouseEvent* ev)
|
|||||||
{
|
{
|
||||||
// Moving the tab is always allowed because it does not mean moving the
|
// Moving the tab is always allowed because it does not mean moving the
|
||||||
// dock widget around
|
// dock widget around
|
||||||
|
qDebug() << "DraggingTab";
|
||||||
d->moveTab(ev);
|
d->moveTab(ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -367,6 +367,12 @@ void CDockWidgetTab::mouseMoveEvent(QMouseEvent* ev)
|
|||||||
// Floating is only allowed for widgets that are movable
|
// Floating is only allowed for widgets that are movable
|
||||||
if (d->DockWidget->features().testFlag(CDockWidget::DockWidgetFloatable))
|
if (d->DockWidget->features().testFlag(CDockWidget::DockWidgetFloatable))
|
||||||
{
|
{
|
||||||
|
// If we undock, we need to restore the initial position of this
|
||||||
|
// tab because it looks strange if it remains on its dragged position
|
||||||
|
if (d->isDraggingState(DraggingTab) && !CDockManager::configFlags().testFlag(CDockManager::OpaqueUndocking))
|
||||||
|
{
|
||||||
|
this->move(d->TabDragStartPosition);
|
||||||
|
}
|
||||||
d->startFloating();
|
d->startFloating();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -374,6 +380,12 @@ void CDockWidgetTab::mouseMoveEvent(QMouseEvent* ev)
|
|||||||
else if (d->DockArea->openDockWidgetsCount() > 1
|
else if (d->DockArea->openDockWidgetsCount() > 1
|
||||||
&& (ev->pos() - d->DragStartMousePosition).manhattanLength() >= QApplication::startDragDistance()) // Wait a few pixels before start moving
|
&& (ev->pos() - d->DragStartMousePosition).manhattanLength() >= QApplication::startDragDistance()) // Wait a few pixels before start moving
|
||||||
{
|
{
|
||||||
|
// If we start dragging the tab, we save its inital position to
|
||||||
|
// restore it later
|
||||||
|
if (DraggingTab != d->DragState)
|
||||||
|
{
|
||||||
|
d->TabDragStartPosition = this->pos();
|
||||||
|
}
|
||||||
d->DragState = DraggingTab;
|
d->DragState = DraggingTab;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -253,7 +253,6 @@ void CFloatingOverlay::startFloating(const QPoint &DragStartMousePos,
|
|||||||
//============================================================================
|
//============================================================================
|
||||||
void CFloatingOverlay::moveEvent(QMoveEvent *event)
|
void CFloatingOverlay::moveEvent(QMoveEvent *event)
|
||||||
{
|
{
|
||||||
std::cout << "CFloatingOverlay::moveEvent" << std::endl;
|
|
||||||
QWidget::moveEvent(event);
|
QWidget::moveEvent(event);
|
||||||
d->updateDropOverlays(QCursor::pos());
|
d->updateDropOverlays(QCursor::pos());
|
||||||
}
|
}
|
||||||
@ -327,6 +326,8 @@ void CFloatingOverlay::paintEvent(QPaintEvent* event)
|
|||||||
painter.drawPixmap(QPoint(0, 0), d->ContentPreviewPixmap);
|
painter.drawPixmap(QPoint(0, 0), d->ContentPreviewPixmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we do not have a window frame then we paint a QRubberBadn like
|
||||||
|
// frameless window
|
||||||
if (!CDockManager::configFlags().testFlag(CDockManager::DragPreviewHasWindowFrame))
|
if (!CDockManager::configFlags().testFlag(CDockManager::DragPreviewHasWindowFrame))
|
||||||
{
|
{
|
||||||
QColor Color = palette().color(QPalette::Active, QPalette::Highlight);
|
QColor Color = palette().color(QPalette::Active, QPalette::Highlight);
|
||||||
|
Loading…
Reference in New Issue
Block a user