@@ -190,19 +190,20 @@ class DockContainerWidgetPrivate
190
190
* Creates a new tab for a widget dropped into the center of a section
191
191
*/
192
192
void dropIntoCenterOfSection (CFloatingDockContainer* FloatingWidget,
193
- CDockAreaWidget* TargetArea);
193
+ CDockAreaWidget* TargetArea, int TabIndex = - 2 );
194
194
195
195
/* *
196
196
* Drop floating widget into dock area
197
197
*/
198
198
void dropIntoSection (CFloatingDockContainer* FloatingWidget,
199
- CDockAreaWidget* TargetArea, DockWidgetArea area);
199
+ CDockAreaWidget* TargetArea, DockWidgetArea area, int TabIndex = - 2 );
200
200
201
201
/* *
202
202
* Moves the dock widget or dock area given in Widget parameter to a
203
203
* new dock widget area
204
204
*/
205
- void moveToNewSection (QWidget* Widget, CDockAreaWidget* TargetArea, DockWidgetArea area);
205
+ void moveToNewSection (QWidget* Widget, CDockAreaWidget* TargetArea, DockWidgetArea area,
206
+ int TabIndex = -2 );
206
207
207
208
/* *
208
209
* Moves the dock widget or dock area given in Widget parameter to a
@@ -213,7 +214,7 @@ class DockContainerWidgetPrivate
213
214
/* *
214
215
* Creates a new tab for a widget dropped into the center of a section
215
216
*/
216
- void moveIntoCenterOfSection (QWidget* Widget, CDockAreaWidget* TargetArea);
217
+ void moveIntoCenterOfSection (QWidget* Widget, CDockAreaWidget* TargetArea, int TabIndex = - 2 );
217
218
218
219
/* *
219
220
* Moves the dock widget or dock area given in Widget parameter to
@@ -535,12 +536,13 @@ void DockContainerWidgetPrivate::dropIntoAutoHideSideBar(CFloatingDockContainer*
535
536
536
537
// ============================================================================
537
538
void DockContainerWidgetPrivate::dropIntoCenterOfSection (
538
- CFloatingDockContainer* FloatingWidget, CDockAreaWidget* TargetArea)
539
+ CFloatingDockContainer* FloatingWidget, CDockAreaWidget* TargetArea, int TabIndex )
539
540
{
540
541
CDockContainerWidget* FloatingContainer = FloatingWidget->dockContainer ();
541
542
auto NewDockWidgets = FloatingContainer->dockWidgets ();
542
543
auto TopLevelDockArea = FloatingContainer->topLevelDockArea ();
543
544
int NewCurrentIndex = -1 ;
545
+ TabIndex = (TabIndex < 0 ) ? 0 : TabIndex;
544
546
545
547
// If the floating widget contains only one single dock are, then the
546
548
// current dock widget of the dock area will also be the future current
@@ -553,7 +555,7 @@ void DockContainerWidgetPrivate::dropIntoCenterOfSection(
553
555
for (int i = 0 ; i < NewDockWidgets.count (); ++i)
554
556
{
555
557
CDockWidget* DockWidget = NewDockWidgets[i];
556
- TargetArea->insertDockWidget (i, DockWidget, false );
558
+ TargetArea->insertDockWidget (TabIndex + i, DockWidget, false );
557
559
// If the floating widget contains multiple visible dock areas, then we
558
560
// simply pick the first visible open dock widget and make it
559
561
// the current one.
@@ -562,21 +564,22 @@ void DockContainerWidgetPrivate::dropIntoCenterOfSection(
562
564
NewCurrentIndex = i;
563
565
}
564
566
}
565
- TargetArea->setCurrentIndex (NewCurrentIndex);
567
+ TargetArea->setCurrentIndex (NewCurrentIndex + TabIndex );
566
568
TargetArea->updateTitleBarVisibility ();
567
569
return ;
568
570
}
569
571
570
572
571
573
// ============================================================================
572
574
void DockContainerWidgetPrivate::dropIntoSection (CFloatingDockContainer* FloatingWidget,
573
- CDockAreaWidget* TargetArea, DockWidgetArea area)
575
+ CDockAreaWidget* TargetArea, DockWidgetArea area, int TabIndex )
574
576
{
577
+ qDebug () << " DockContainerWidgetPrivate::dropIntoSection TabIndex: " << TabIndex;
575
578
// Dropping into center means all dock widgets in the dropped floating
576
579
// widget will become tabs of the drop area
577
580
if (CenterDockWidgetArea == area)
578
581
{
579
- dropIntoCenterOfSection (FloatingWidget, TargetArea);
582
+ dropIntoCenterOfSection (FloatingWidget, TargetArea, TabIndex );
580
583
return ;
581
584
}
582
585
@@ -666,11 +669,15 @@ void DockContainerWidgetPrivate::dropIntoSection(CFloatingDockContainer* Floatin
666
669
667
670
668
671
// ============================================================================
669
- void DockContainerWidgetPrivate::moveIntoCenterOfSection (QWidget* Widget, CDockAreaWidget* TargetArea)
672
+ void DockContainerWidgetPrivate::moveIntoCenterOfSection (QWidget* Widget, CDockAreaWidget* TargetArea,
673
+ int TabIndex)
670
674
{
675
+ qDebug () << " DockContainerWidgetPrivate::moveIntoCenterOfSection TabIndex: "
676
+ << TabIndex;
671
677
auto DroppedDockWidget = qobject_cast<CDockWidget*>(Widget);
672
678
auto DroppedArea = qobject_cast<CDockAreaWidget*>(Widget);
673
679
680
+ TabIndex = (TabIndex < 0 ) ? 0 : TabIndex;
674
681
if (DroppedDockWidget)
675
682
{
676
683
CDockAreaWidget* OldDockArea = DroppedDockWidget->dockAreaWidget ();
@@ -683,7 +690,7 @@ void DockContainerWidgetPrivate::moveIntoCenterOfSection(QWidget* Widget, CDockA
683
690
{
684
691
OldDockArea->removeDockWidget (DroppedDockWidget);
685
692
}
686
- TargetArea->insertDockWidget (0 , DroppedDockWidget, true );
693
+ TargetArea->insertDockWidget (TabIndex , DroppedDockWidget, true );
687
694
}
688
695
else
689
696
{
@@ -692,9 +699,9 @@ void DockContainerWidgetPrivate::moveIntoCenterOfSection(QWidget* Widget, CDockA
692
699
for (int i = 0 ; i < NewDockWidgets.count (); ++i)
693
700
{
694
701
CDockWidget* DockWidget = NewDockWidgets[i];
695
- TargetArea->insertDockWidget (i, DockWidget, false );
702
+ TargetArea->insertDockWidget (TabIndex + i, DockWidget, false );
696
703
}
697
- TargetArea->setCurrentIndex (NewCurrentIndex);
704
+ TargetArea->setCurrentIndex (TabIndex + NewCurrentIndex);
698
705
DroppedArea->dockContainer ()->removeDockArea (DroppedArea);
699
706
DroppedArea->deleteLater ();
700
707
}
@@ -705,13 +712,16 @@ void DockContainerWidgetPrivate::moveIntoCenterOfSection(QWidget* Widget, CDockA
705
712
706
713
707
714
// ============================================================================
708
- void DockContainerWidgetPrivate::moveToNewSection (QWidget* Widget, CDockAreaWidget* TargetArea, DockWidgetArea area)
715
+ void DockContainerWidgetPrivate::moveToNewSection (QWidget* Widget, CDockAreaWidget* TargetArea, DockWidgetArea area,
716
+ int TabIndex)
709
717
{
718
+ qDebug () << " DockContainerWidgetPrivate::moveToNewSection TabIndex: "
719
+ << TabIndex;
710
720
// Dropping into center means all dock widgets in the dropped floating
711
721
// widget will become tabs of the drop area
712
722
if (CenterDockWidgetArea == area)
713
723
{
714
- moveIntoCenterOfSection (Widget, TargetArea);
724
+ moveIntoCenterOfSection (Widget, TargetArea, TabIndex );
715
725
return ;
716
726
}
717
727
@@ -1705,7 +1715,6 @@ void CDockContainerWidget::dropFloatingWidget(CFloatingDockContainer* FloatingWi
1705
1715
bool Dropped = false ;
1706
1716
1707
1717
CDockAreaWidget* DockArea = dockAreaAt (TargetPos);
1708
- std::cout << " DockArea: " << DockArea << " dropArea: " << dropArea << std::endl;
1709
1718
if (DockArea)
1710
1719
{
1711
1720
auto dropOverlay = d->DockManager ->dockAreaOverlay ();
@@ -1720,7 +1729,8 @@ void CDockContainerWidget::dropFloatingWidget(CFloatingDockContainer* FloatingWi
1720
1729
if (dropArea != InvalidDockWidgetArea)
1721
1730
{
1722
1731
ADS_PRINT (" Dock Area Drop Content: " << dropArea);
1723
- d->dropIntoSection (FloatingWidget, DockArea, dropArea);
1732
+ int TabIndex = d->DockManager ->dockAreaOverlay ()->tabIndexUnderCursor ();
1733
+ d->dropIntoSection (FloatingWidget, DockArea, dropArea, TabIndex);
1724
1734
Dropped = true ;
1725
1735
}
1726
1736
}
@@ -1773,12 +1783,14 @@ void CDockContainerWidget::dropFloatingWidget(CFloatingDockContainer* FloatingWi
1773
1783
1774
1784
1775
1785
// ============================================================================
1776
- void CDockContainerWidget::dropWidget (QWidget* Widget, DockWidgetArea DropArea, CDockAreaWidget* TargetAreaWidget)
1786
+ void CDockContainerWidget::dropWidget (QWidget* Widget, DockWidgetArea DropArea, CDockAreaWidget* TargetAreaWidget,
1787
+ int TabIndex)
1777
1788
{
1789
+ qDebug () << " CDockContainerWidget::dropWidget TabIndex: " << TabIndex;
1778
1790
CDockWidget* SingleDockWidget = topLevelDockWidget ();
1779
1791
if (TargetAreaWidget)
1780
1792
{
1781
- d->moveToNewSection (Widget, TargetAreaWidget, DropArea);
1793
+ d->moveToNewSection (Widget, TargetAreaWidget, DropArea, TabIndex );
1782
1794
}
1783
1795
else if (internal::isSideBarArea (DropArea))
1784
1796
{
0 commit comments