Skip to content

Commit 6c3f825

Browse files
authored
setAllowedAreas for individual DockAreaWidget (#107)
* setAllowedAreas for individual DockAreaWidget * alligning tab policy with master
1 parent 9fe8f29 commit 6c3f825

File tree

6 files changed

+33
-6
lines changed

6 files changed

+33
-6
lines changed

demo/MainWindow.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,14 @@ void MainWindowPrivate::createContent()
276276
QMenu* ViewMenu = ui.menuView;
277277
auto DockWidget = createCalendarDockWidget(ViewMenu);
278278
DockWidget->setFeature(ads::CDockWidget::DockWidgetClosable, false);
279-
DockManager->addDockWidget(ads::LeftDockWidgetArea, DockWidget);
279+
auto SpecialDockArea = DockManager->addDockWidget(ads::LeftDockWidgetArea, DockWidget);
280+
281+
// For this Special Dock Area we want to avoid dropping on the center of it (i.e. we don't want this widget to be ever tabbified):
282+
{
283+
SpecialDockArea->setAllowedAreas(ads::OuterDockAreas);
284+
//SpecialDockArea->setAllowedAreas({ads::LeftDockWidgetArea, ads::RightDockWidgetArea}); // just for testing
285+
}
286+
280287
DockManager->addDockWidget(ads::LeftDockWidgetArea, createLongTextLabelDockWidget(ViewMenu));
281288
auto FileSystemWidget = createFileSystemTreeDockWidget(ViewMenu);
282289
auto ToolBar = FileSystemWidget->createDefaultToolBar();

src/DockAreaWidget.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ struct DockAreaWidgetPrivate
245245
CDockAreaTitleBar* TitleBar = nullptr;
246246
CDockManager* DockManager = nullptr;
247247
bool UpdateTitleBarButtons = false;
248+
DockWidgetAreas AllowedAreas = AllDockAreas;
248249

249250
/**
250251
* Private data constructor
@@ -812,6 +813,15 @@ void CDockAreaWidget::setVisible(bool Visible)
812813
}
813814
}
814815

816+
void CDockAreaWidget::setAllowedAreas(DockWidgetAreas areas)
817+
{
818+
d->AllowedAreas = areas;
819+
}
820+
821+
DockWidgetAreas CDockAreaWidget::allowedAreas() const
822+
{
823+
return d->AllowedAreas;
824+
}
815825

816826
//============================================================================
817827
QAbstractButton* CDockAreaWidget::titleBarButton(TitleBarButton which) const

src/DockAreaWidget.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,16 @@ protected slots:
254254
*/
255255
virtual void setVisible(bool Visible) override;
256256

257+
/**
258+
* Configures the areas of this particular dock area that are allowed for docking
259+
*/
260+
void setAllowedAreas(DockWidgetAreas areas);
261+
262+
/**
263+
* Returns flags with all allowed drop areas of this particular dock area
264+
*/
265+
DockWidgetAreas allowedAreas() const;
266+
257267
public slots:
258268
/**
259269
* This activates the tab for the given tab index.

src/DockContainerWidget.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ eDropMode DockContainerWidgetPrivate::getDropMode(const QPoint& TargetPos)
334334
if (DockArea)
335335
{
336336
auto dropOverlay = DockManager->dockAreaOverlay();
337-
dropOverlay->setAllowedAreas(AllDockAreas);
337+
dropOverlay->setAllowedAreas(DockArea->allowedAreas());
338338
dropArea = dropOverlay->showOverlay(DockArea);
339339
if (ContainerDropArea != InvalidDockWidgetArea &&
340340
ContainerDropArea != dropArea)
@@ -1392,7 +1392,7 @@ void CDockContainerWidget::dropFloatingWidget(CFloatingDockContainer* FloatingWi
13921392
if (DockArea)
13931393
{
13941394
auto dropOverlay = d->DockManager->dockAreaOverlay();
1395-
dropOverlay->setAllowedAreas(AllDockAreas);
1395+
dropOverlay->setAllowedAreas(DockArea->allowedAreas());
13961396
dropArea = dropOverlay->showOverlay(DockArea);
13971397
if (ContainerDropArea != InvalidDockWidgetArea &&
13981398
ContainerDropArea != dropArea)
@@ -1447,7 +1447,7 @@ void CDockContainerWidget::dropWidget(QWidget* Widget, const QPoint& TargetPos)
14471447
if (DockArea)
14481448
{
14491449
auto dropOverlay = d->DockManager->dockAreaOverlay();
1450-
dropOverlay->setAllowedAreas(AllDockAreas);
1450+
dropOverlay->setAllowedAreas(DockArea->allowedAreas());
14511451
dropArea = dropOverlay->showOverlay(DockArea);
14521452
if (ContainerDropArea != InvalidDockWidgetArea &&
14531453
ContainerDropArea != dropArea)

src/FloatingDockContainer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ void FloatingDockContainerPrivate::updateDropOverlays(const QPoint &GlobalPos)
207207
{
208208
DockAreaOverlay->enableDropPreview(true);
209209
DockAreaOverlay->setAllowedAreas(
210-
(VisibleDockAreas == 1) ? NoDockWidgetArea : AllDockAreas);
210+
(VisibleDockAreas == 1) ? NoDockWidgetArea : DockArea->allowedAreas());
211211
DockWidgetArea Area = DockAreaOverlay->showOverlay(DockArea);
212212

213213
// A CenterDockWidgetArea for the dockAreaOverlay() indicates that

src/FloatingDragPreview.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ void FloatingDragPreviewPrivate::updateDropOverlays(const QPoint &GlobalPos)
127127
{
128128
DockAreaOverlay->enableDropPreview(true);
129129
DockAreaOverlay->setAllowedAreas(
130-
(VisibleDockAreas == 1) ? NoDockWidgetArea : AllDockAreas);
130+
(VisibleDockAreas == 1) ? NoDockWidgetArea : DockArea->allowedAreas());
131131
DockWidgetArea Area = DockAreaOverlay->showOverlay(DockArea);
132132

133133
// A CenterDockWidgetArea for the dockAreaOverlay() indicates that

0 commit comments

Comments
 (0)