Skip to content

Commit e4a7198

Browse files
Added support for inserting a dock widget with a given tab index and added test case
1 parent 3b8775f commit e4a7198

File tree

4 files changed

+36
-40
lines changed

4 files changed

+36
-40
lines changed

demo/MainWindow.cpp

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -790,28 +790,38 @@ void CMainWindow::createEditor()
790790
FloatingWidget->move(QPoint(20, 20));
791791
d->LastCreatedFloatingEditor = DockWidget;
792792
d->LastDockedEditor.clear();
793+
return;
793794
}
794-
else
795-
{
796-
ads::CDockAreaWidget* EditorArea = d->LastDockedEditor ? d->LastDockedEditor->dockAreaWidget() : nullptr;
797-
if (EditorArea)
798-
{
799-
d->DockManager->setConfigFlag(ads::CDockManager::EqualSplitOnInsertion, true);
800-
d->DockManager->addDockWidget(ads::RightDockWidgetArea, DockWidget, EditorArea);
801-
}
802-
else
803-
{
804-
if (d->LastCreatedFloatingEditor)
805-
{
806-
d->DockManager->addDockWidget(ads::RightDockWidgetArea, DockWidget, d->LastCreatedFloatingEditor->dockAreaWidget());
807-
}
808-
else
809-
{
810-
d->DockManager->addDockWidget(ads::TopDockWidgetArea, DockWidget);
811-
}
812-
}
813-
d->LastDockedEditor = DockWidget;
814-
}
795+
796+
797+
ads::CDockAreaWidget* EditorArea = d->LastDockedEditor ? d->LastDockedEditor->dockAreaWidget() : nullptr;
798+
if (EditorArea)
799+
{
800+
if (Tabbed)
801+
{
802+
// Test inserting the dock widget tab at a given position instead
803+
// of appending it. This function inserts the new dock widget as
804+
// first tab
805+
d->DockManager->addDockWidgetTabToArea(DockWidget, EditorArea, 0);
806+
}
807+
else
808+
{
809+
d->DockManager->setConfigFlag(ads::CDockManager::EqualSplitOnInsertion, true);
810+
d->DockManager->addDockWidget(ads::RightDockWidgetArea, DockWidget, EditorArea);
811+
}
812+
}
813+
else
814+
{
815+
if (d->LastCreatedFloatingEditor)
816+
{
817+
d->DockManager->addDockWidget(ads::RightDockWidgetArea, DockWidget, d->LastCreatedFloatingEditor->dockAreaWidget());
818+
}
819+
else
820+
{
821+
d->DockManager->addDockWidget(ads::TopDockWidgetArea, DockWidget);
822+
}
823+
}
824+
d->LastDockedEditor = DockWidget;
815825
}
816826

817827

src/DockContainerWidget.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1232,13 +1232,13 @@ CDockAreaWidget* DockContainerWidgetPrivate::addDockWidgetToDockArea(DockWidgetA
12321232
{
12331233
if (CenterDockWidgetArea == area)
12341234
{
1235-
TargetDockArea->addDockWidget(Dockwidget);
1235+
TargetDockArea->insertDockWidget(Index, Dockwidget);
12361236
TargetDockArea->updateTitleBarVisibility();
12371237
return TargetDockArea;
12381238
}
12391239

12401240
CDockAreaWidget* NewDockArea = new CDockAreaWidget(DockManager, _this);
1241-
NewDockArea->insertDockWidget(Index, Dockwidget);
1241+
NewDockArea->addDockWidget(Dockwidget);
12421242
auto InsertParam = internal::dockAreaInsertParameters(area);
12431243

12441244
QSplitter* TargetAreaSplitter = internal::findParent<QSplitter*>(TargetDockArea);

src/DockManager.cpp

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -880,15 +880,7 @@ CDockAreaWidget* CDockManager::addDockWidgetTab(DockWidgetArea area,
880880

881881
//============================================================================
882882
CDockAreaWidget* CDockManager::addDockWidgetTabToArea(CDockWidget* Dockwidget,
883-
CDockAreaWidget* DockAreaWidget)
884-
{
885-
return addDockWidget(ads::CenterDockWidgetArea, Dockwidget, DockAreaWidget);
886-
}
887-
888-
889-
//============================================================================
890-
CDockAreaWidget* CDockManager::insertDockWidgetTabIntoArea(CDockWidget* Dockwidget,
891-
CDockAreaWidget* DockAreaWidget, int Index)
883+
CDockAreaWidget* DockAreaWidget, int Index)
892884
{
893885
return addDockWidget(ads::CenterDockWidgetArea, Dockwidget, DockAreaWidget, Index);
894886
}

src/DockManager.h

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -304,16 +304,10 @@ class ADS_EXPORT CDockManager : public CDockContainerWidget
304304
/**
305305
* This function will add the given Dockwidget to the given DockAreaWidget
306306
* as a new tab.
307+
* If index is out of range, the tab is simply appended. Otherwise it is
308+
* inserted at the specified position.
307309
*/
308310
CDockAreaWidget* addDockWidgetTabToArea(CDockWidget* Dockwidget,
309-
CDockAreaWidget* DockAreaWidget);
310-
311-
/**
312-
* This function will inserts the given Dockwidget to the given DockAreaWidget
313-
* as a new tab at the given index.
314-
* If index is out of range, the tab is simply appended. Otherwise it is inserted at the specified position.
315-
*/
316-
CDockAreaWidget* insertDockWidgetTabIntoArea(CDockWidget* Dockwidget,
317311
CDockAreaWidget* DockAreaWidget, int Index = -1);
318312

319313
/**

0 commit comments

Comments
 (0)