Skip to content

Commit 296c7ed

Browse files
Added support for tab index when inserting dockwidgets into area
1 parent 4600af7 commit 296c7ed

File tree

5 files changed

+29
-9
lines changed

5 files changed

+29
-9
lines changed

src/DockAreaWidget.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,10 @@ void CDockAreaWidget::addDockWidget(CDockWidget* DockWidget)
416416
void CDockAreaWidget::insertDockWidget(int index, CDockWidget* DockWidget,
417417
bool Activate)
418418
{
419+
if (index < 0 || index > d->ContentsLayout->count())
420+
{
421+
index = d->ContentsLayout->count();
422+
}
419423
d->ContentsLayout->insertWidget(index, DockWidget);
420424
DockWidget->setDockArea(this);
421425
DockWidget->tabWidget()->setDockAreaWidget(this);

src/DockContainerWidget.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ class DockContainerWidgetPrivate
153153
* Adds dock widget to a existing DockWidgetArea
154154
*/
155155
CDockAreaWidget* addDockWidgetToDockArea(DockWidgetArea area, CDockWidget* Dockwidget,
156-
CDockAreaWidget* TargetDockArea);
156+
CDockAreaWidget* TargetDockArea, int Index = -1);
157157

158158
/**
159159
* Add dock area to this container
@@ -1228,7 +1228,7 @@ void DockContainerWidgetPrivate::dumpRecursive(int level, QWidget* widget)
12281228

12291229
//============================================================================
12301230
CDockAreaWidget* DockContainerWidgetPrivate::addDockWidgetToDockArea(DockWidgetArea area,
1231-
CDockWidget* Dockwidget, CDockAreaWidget* TargetDockArea)
1231+
CDockWidget* Dockwidget, CDockAreaWidget* TargetDockArea, int Index)
12321232
{
12331233
if (CenterDockWidgetArea == area)
12341234
{
@@ -1238,7 +1238,7 @@ CDockAreaWidget* DockContainerWidgetPrivate::addDockWidgetToDockArea(DockWidgetA
12381238
}
12391239

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

12441244
QSplitter* TargetAreaSplitter = internal::findParent<QSplitter*>(TargetDockArea);
@@ -1315,7 +1315,7 @@ CDockContainerWidget::~CDockContainerWidget()
13151315

13161316
//============================================================================
13171317
CDockAreaWidget* CDockContainerWidget::addDockWidget(DockWidgetArea area, CDockWidget* Dockwidget,
1318-
CDockAreaWidget* DockAreaWidget)
1318+
CDockAreaWidget* DockAreaWidget, int Index)
13191319
{
13201320
CDockAreaWidget* OldDockArea = Dockwidget->dockAreaWidget();
13211321
if (OldDockArea)
@@ -1326,7 +1326,7 @@ CDockAreaWidget* CDockContainerWidget::addDockWidget(DockWidgetArea area, CDockW
13261326
Dockwidget->setDockManager(d->DockManager);
13271327
if (DockAreaWidget)
13281328
{
1329-
return d->addDockWidgetToDockArea(area, Dockwidget, DockAreaWidget);
1329+
return d->addDockWidgetToDockArea(area, Dockwidget, DockAreaWidget, Index);
13301330
}
13311331
else
13321332
{

src/DockContainerWidget.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ class ADS_EXPORT CDockContainerWidget : public QFrame
181181
* \return Returns the dock area widget that contains the new DockWidget
182182
*/
183183
CDockAreaWidget* addDockWidget(DockWidgetArea area, CDockWidget* Dockwidget,
184-
CDockAreaWidget* DockAreaWidget = nullptr);
184+
CDockAreaWidget* DockAreaWidget = nullptr, int Index = -1);
185185

186186
/**
187187
* Removes dockwidget

src/DockManager.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -842,11 +842,11 @@ void CDockManager::restoreHiddenFloatingWidgets()
842842

843843
//============================================================================
844844
CDockAreaWidget* CDockManager::addDockWidget(DockWidgetArea area,
845-
CDockWidget* Dockwidget, CDockAreaWidget* DockAreaWidget)
845+
CDockWidget* Dockwidget, CDockAreaWidget* DockAreaWidget, int Index)
846846
{
847847
d->DockWidgetsMap.insert(Dockwidget->objectName(), Dockwidget);
848848
auto Container = DockAreaWidget ? DockAreaWidget->dockContainer(): this;
849-
auto AreaOfAddedDockWidget = Container->addDockWidget(area, Dockwidget, DockAreaWidget);
849+
auto AreaOfAddedDockWidget = Container->addDockWidget(area, Dockwidget, DockAreaWidget, Index);
850850
Q_EMIT dockWidgetAdded(Dockwidget);
851851
return AreaOfAddedDockWidget;
852852
}
@@ -886,6 +886,14 @@ CDockAreaWidget* CDockManager::addDockWidgetTabToArea(CDockWidget* Dockwidget,
886886
}
887887

888888

889+
//============================================================================
890+
CDockAreaWidget* CDockManager::insertDockWidgetTabIntoArea(CDockWidget* Dockwidget,
891+
CDockAreaWidget* DockAreaWidget, int Index)
892+
{
893+
return addDockWidget(ads::CenterDockWidgetArea, Dockwidget, DockAreaWidget, Index);
894+
}
895+
896+
889897
//============================================================================
890898
CDockWidget* CDockManager::findDockWidget(const QString& ObjectName) const
891899
{

src/DockManager.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ class ADS_EXPORT CDockManager : public CDockContainerWidget
281281
* \return Returns the dock area widget that contains the new DockWidget
282282
*/
283283
CDockAreaWidget* addDockWidget(DockWidgetArea area, CDockWidget* Dockwidget,
284-
CDockAreaWidget* DockAreaWidget = nullptr);
284+
CDockAreaWidget* DockAreaWidget = nullptr, int Index = -1);
285285

286286
/**
287287
* Adds dockwidget into the given container.
@@ -308,6 +308,14 @@ class ADS_EXPORT CDockManager : public CDockContainerWidget
308308
CDockAreaWidget* addDockWidgetTabToArea(CDockWidget* Dockwidget,
309309
CDockAreaWidget* DockAreaWidget);
310310

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,
317+
CDockAreaWidget* DockAreaWidget, int Index = -1);
318+
311319
/**
312320
* Adds the given DockWidget floating and returns the created
313321
* CFloatingDockContainer instance.

0 commit comments

Comments
 (0)