Skip to content

Commit 14c29f6

Browse files
committed
Central widget update
Updated the setting of central widget with option to set where the possible old central widget will be placed. Fixed option of "unsetting" central widget by setting it to nullptr.
1 parent 691c968 commit 14c29f6

File tree

8 files changed

+28
-69
lines changed

8 files changed

+28
-69
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,3 +382,4 @@ MigrationBackup/
382382
FodyWeavers.xsd
383383
/ build
384384
/Settings.ini
385+
.vscode/settings.json

examples/centralWidget/centralWidget.pro

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,10 @@ DEFINES += QT_DEPRECATED_WARNINGS
2222
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
2323

2424
SOURCES += \
25-
digitalclock.cpp \
2625
main.cpp \
2726
mainwindow.cpp
2827

2928
HEADERS += \
30-
digitalclock.h \
3129
mainwindow.h
3230

3331
FORMS += \

examples/centralWidget/digitalclock.cpp

Lines changed: 0 additions & 27 deletions
This file was deleted.

examples/centralWidget/digitalclock.h

Lines changed: 0 additions & 17 deletions
This file was deleted.

examples/centralWidget/mainwindow.cpp

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include "mainwindow.h"
22
#include "ui_mainwindow.h"
3-
#include "digitalclock.h"
43

54
#include <QWidgetAction>
65
#include <QLabel>
@@ -96,12 +95,8 @@ CMainWindow::CMainWindow(QWidget *parent)
9695
QCalendarWidget* calendar = new QCalendarWidget();
9796
CDockWidget* CentralDockWidget = new CDockWidget("CentralWidget");
9897
CentralDockWidget->setWidget(calendar);
99-
CentralDockWidget->setFeature(CDockWidget::DockWidgetClosable, false);
100-
CentralDockWidget->setFeature(CDockWidget::DockWidgetMovable, false);
101-
CentralDockWidget->setFeature(CDockWidget::DockWidgetFloatable, false);
10298
auto* CentralDockArea = DockManager->setCentralWidget(CentralDockWidget);
10399
CentralDockArea->setAllowedAreas(DockWidgetArea::OuterDockAreas);
104-
CentralDockArea->setDockAreaFlag(CDockAreaWidget::eDockAreaFlag::HideSingleWidgetTitleBar, true);
105100

106101
QTreeView* fileTree = new QTreeView();
107102
fileTree->setFrameShape(QFrame::NoFrame);
@@ -139,20 +134,18 @@ CMainWindow::CMainWindow(QWidget *parent)
139134
QRadioButton* radioDockTop = new QRadioButton("Top", timeLineWidget);
140135
QRadioButton* radioDockBottom = new QRadioButton("Bottom", timeLineWidget);
141136
radioDockTop->setChecked(true);
142-
timelineLayout->addWidget(new QLabel("Fixed height Dock widget."));
137+
timelineLayout->addWidget(new QLabel("Test Widget."));
143138
timelineLayout->addStretch(1);
144139
timelineLayout->addWidget(new QLabel("Apply predefined perspective: ", this));
145140
timelineLayout->addWidget(radioDockTop);
146141
timelineLayout->addWidget(radioDockBottom);
147142
TimelineDockWidget = new CDockWidget("Timeline");
148143
TimelineDockWidget->setWidget(timeLineWidget);
149-
// TimelineDockWidget->setResizeMode(CDockWidget::eResizeMode::ResizeHorizontal);
150144
TimelineDockWidget->setFeature(CDockWidget::DockWidgetClosable, false);
151145
TimelineDockWidget->setFeature(CDockWidget::DockWidgetMovable, false);
152146
TimelineDockWidget->setFeature(CDockWidget::DockWidgetFloatable, false);
153147
TimelineDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
154148
TimelineDockWidget->setMinimumSize(QSize(50, 50));
155-
TimelineDockWidget->setFixedHeight(50);
156149
auto *TimelineDockArea = DockManager->addDockWidget(DockWidgetArea::TopDockWidgetArea, TimelineDockWidget);
157150
TimelineDockArea->setDockAreaFlag(CDockAreaWidget::eDockAreaFlag::HideSingleWidgetTitleBar, true);
158151
TimelineDockArea->setAllowedAreas(DockWidgetArea::OuterDockAreas);
@@ -177,7 +170,6 @@ CMainWindow::CMainWindow(QWidget *parent)
177170
QWidget* statusWidget = new QWidget();
178171
QHBoxLayout* statusLayout = new QHBoxLayout(statusWidget);
179172
statusLayout->setSpacing(10);
180-
CDigitalClock* clock = new CDigitalClock(statusWidget);
181173
statusLayout->addWidget(new QLabel("Status Bar"));
182174
QPushButton* OpenPerspectiveButton = new QPushButton("Open Perspective", statusWidget);
183175
connect(OpenPerspectiveButton, &QPushButton::clicked, [this](){
@@ -215,19 +207,16 @@ CMainWindow::CMainWindow(QWidget *parent)
215207
statusLayout->addWidget(OpenPerspectiveButton);
216208
statusLayout->addWidget(SavePerspectiveButton);
217209
statusLayout->addStretch(1);
218-
statusLayout->addWidget(clock);
219210
CDockWidget* StatusDockWidget = new CDockWidget("Status");
220211
StatusDockWidget->setWidget(statusWidget);
221-
// StatusDockWidget->setResizeMode(CDockWidget::eResizeMode::ResizeHorizontal);
222212
StatusDockWidget->setFeature(CDockWidget::DockWidgetClosable, false);
223213
StatusDockWidget->setFeature(CDockWidget::DockWidgetMovable, false);
224214
StatusDockWidget->setFeature(CDockWidget::DockWidgetFloatable, false);
225215
StatusDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
226216
StatusDockWidget->setMinimumSize(QSize(50, 50));
227-
StatusDockWidget->setFixedHeight(50);
228217
StatusDockArea = DockManager->addDockWidget(DockWidgetArea::BottomDockWidgetArea, StatusDockWidget);
229218
StatusDockArea->setAllowedAreas(DockWidgetArea::OuterDockAreas);
230-
StatusDockArea->setDockAreaFlag(CDockAreaWidget::eDockAreaFlag::HideSingleWidgetTitleBar, true);
219+
StatusDockArea->setDockAreaFlag(ads::CDockAreaWidget::eDockAreaFlag::HideSingleWidgetTitleBar, true);
231220
}
232221

233222
CMainWindow::~CMainWindow()

src/DockContainerWidget.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -711,11 +711,14 @@ void DockContainerWidgetPrivate::moveToNewSection(QWidget* Widget, CDockAreaWidg
711711
//============================================================================
712712
void DockContainerWidgetPrivate::updateSplitterHandles( QSplitter* splitter )
713713
{
714-
if( splitter )
714+
if(DockManager->centralWidget())
715715
{
716-
for( int index = 0; index < splitter->count(); index++ )
716+
if( splitter )
717717
{
718-
splitter->setStretchFactor(index, widgetResizesWithContainer(splitter->widget(index)) ? 1 : 0);
718+
for( int index = 0; index < splitter->count(); index++ )
719+
{
720+
splitter->setStretchFactor(index, widgetResizesWithContainer(splitter->widget(index)) ? 1 : 0);
721+
}
719722
}
720723
}
721724
}
@@ -1256,7 +1259,6 @@ CDockAreaWidget* DockContainerWidgetPrivate::addDockWidgetToDockArea(DockWidgetA
12561259
auto TargetAreaSizes = TargetAreaSplitter->sizes();
12571260
QSplitter* NewSplitter = newSplitter(InsertParam.orientation());
12581261
NewSplitter->addWidget(TargetDockArea);
1259-
// updateSplitterHandles(NewSplitter);
12601262

12611263
insertWidgetIntoSplitter(NewSplitter, NewDockArea, InsertParam.append());
12621264
updateSplitterHandles(NewSplitter);

src/DockManager.cpp

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,7 @@ bool DockManagerPrivate::restoreState(const QByteArray& State, int version)
407407
return false;
408408
}
409409

410+
CentralWidget = nullptr;
410411
// Hide updates of floating widgets from use
411412
hideFloatingWidgets();
412413
markDockWidgetsDirty();
@@ -830,15 +831,25 @@ CDockWidget* CDockManager::centralWidget()
830831
}
831832

832833
//============================================================================
833-
CDockAreaWidget* CDockManager::setCentralWidget(CDockWidget* widget)
834+
CDockAreaWidget* CDockManager::setCentralWidget(CDockWidget* widget, CDockWidget* oldCentralWidget, DockWidgetArea oldCentralWidgetArea)
834835
{
835-
if(d->CentralWidget)
836+
oldCentralWidget = d->CentralWidget;
837+
if(oldCentralWidget)
836838
{
837-
addDockWidget(RightDockWidgetArea, d->CentralWidget);
839+
addDockWidget(oldCentralWidgetArea, oldCentralWidget);
838840
}
839841

840-
d->CentralWidget = widget;
841-
return addDockWidget(CenterDockWidgetArea, widget);
842+
if(widget)
843+
{
844+
widget->setFeature(CDockWidget::DockWidgetClosable, false);
845+
widget->setFeature(CDockWidget::DockWidgetMovable, false);
846+
widget->setFeature(CDockWidget::DockWidgetFloatable, false);
847+
d->CentralWidget = widget;
848+
CDockAreaWidget* CentralArea = addDockWidget(CenterDockWidgetArea, widget);
849+
CentralArea->setDockAreaFlag(CDockAreaWidget::eDockAreaFlag::HideSingleWidgetTitleBar, true);
850+
return CentralArea;
851+
}
852+
return nullptr;
842853
}
843854

844855
//============================================================================

src/DockManager.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,8 +387,10 @@ class ADS_EXPORT CDockManager : public CDockContainerWidget
387387
* Adds dockwidget into the central area and marks it as central widget.
388388
* If central widget is set, it will be the only dock widget
389389
* that will resize with the dock container.
390+
* If a central widget does exist, it will be docked to oldCentralWidgetArea
391+
* and returned in oldCentralWidget.
390392
*/
391-
CDockAreaWidget* setCentralWidget(CDockWidget* widget);
393+
CDockAreaWidget* setCentralWidget(CDockWidget* widget, CDockWidget* oldCentralWidget = nullptr, DockWidgetArea oldCentralWidgetArea = DockWidgetArea::RightDockWidgetArea);
392394

393395
/**
394396
* Adds a toggle view action to the the internal view menu.

0 commit comments

Comments
 (0)