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.
This commit is contained in:
hulswit 2020-08-21 13:30:59 +02:00
parent 691c9683ce
commit 14c29f695c
8 changed files with 28 additions and 69 deletions

1
.gitignore vendored
View File

@ -382,3 +382,4 @@ MigrationBackup/
FodyWeavers.xsd FodyWeavers.xsd
/ build / build
/Settings.ini /Settings.ini
.vscode/settings.json

View File

@ -22,12 +22,10 @@ DEFINES += QT_DEPRECATED_WARNINGS
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \ SOURCES += \
digitalclock.cpp \
main.cpp \ main.cpp \
mainwindow.cpp mainwindow.cpp
HEADERS += \ HEADERS += \
digitalclock.h \
mainwindow.h mainwindow.h
FORMS += \ FORMS += \

View File

@ -1,27 +0,0 @@
#include "digitalclock.h"
#include <QTime>
#include <QTimer>
CDigitalClock::CDigitalClock(QWidget *parent)
: QLCDNumber(parent)
{
setDigitCount(8);
setSegmentStyle(Filled);
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &CDigitalClock::showTime);
timer->start(1000);
showTime();
setWindowTitle(tr("Digital Clock"));
resize(150, 60);
}
void CDigitalClock::showTime()
{
QTime time = QTime::currentTime();
QString text = time.toString("hh:mm:ss");
display(text);
}

View File

@ -1,17 +0,0 @@
#ifndef DIGITALCLOCK_H
#define DIGITALCLOCK_H
#include <QLCDNumber>
class CDigitalClock : public QLCDNumber
{
Q_OBJECT
public:
CDigitalClock(QWidget *parent = nullptr);
private slots:
void showTime();
};
#endif // DIGITALCLOCK_H

View File

@ -1,6 +1,5 @@
#include "mainwindow.h" #include "mainwindow.h"
#include "ui_mainwindow.h" #include "ui_mainwindow.h"
#include "digitalclock.h"
#include <QWidgetAction> #include <QWidgetAction>
#include <QLabel> #include <QLabel>
@ -96,12 +95,8 @@ CMainWindow::CMainWindow(QWidget *parent)
QCalendarWidget* calendar = new QCalendarWidget(); QCalendarWidget* calendar = new QCalendarWidget();
CDockWidget* CentralDockWidget = new CDockWidget("CentralWidget"); CDockWidget* CentralDockWidget = new CDockWidget("CentralWidget");
CentralDockWidget->setWidget(calendar); CentralDockWidget->setWidget(calendar);
CentralDockWidget->setFeature(CDockWidget::DockWidgetClosable, false);
CentralDockWidget->setFeature(CDockWidget::DockWidgetMovable, false);
CentralDockWidget->setFeature(CDockWidget::DockWidgetFloatable, false);
auto* CentralDockArea = DockManager->setCentralWidget(CentralDockWidget); auto* CentralDockArea = DockManager->setCentralWidget(CentralDockWidget);
CentralDockArea->setAllowedAreas(DockWidgetArea::OuterDockAreas); CentralDockArea->setAllowedAreas(DockWidgetArea::OuterDockAreas);
CentralDockArea->setDockAreaFlag(CDockAreaWidget::eDockAreaFlag::HideSingleWidgetTitleBar, true);
QTreeView* fileTree = new QTreeView(); QTreeView* fileTree = new QTreeView();
fileTree->setFrameShape(QFrame::NoFrame); fileTree->setFrameShape(QFrame::NoFrame);
@ -139,20 +134,18 @@ CMainWindow::CMainWindow(QWidget *parent)
QRadioButton* radioDockTop = new QRadioButton("Top", timeLineWidget); QRadioButton* radioDockTop = new QRadioButton("Top", timeLineWidget);
QRadioButton* radioDockBottom = new QRadioButton("Bottom", timeLineWidget); QRadioButton* radioDockBottom = new QRadioButton("Bottom", timeLineWidget);
radioDockTop->setChecked(true); radioDockTop->setChecked(true);
timelineLayout->addWidget(new QLabel("Fixed height Dock widget.")); timelineLayout->addWidget(new QLabel("Test Widget."));
timelineLayout->addStretch(1); timelineLayout->addStretch(1);
timelineLayout->addWidget(new QLabel("Apply predefined perspective: ", this)); timelineLayout->addWidget(new QLabel("Apply predefined perspective: ", this));
timelineLayout->addWidget(radioDockTop); timelineLayout->addWidget(radioDockTop);
timelineLayout->addWidget(radioDockBottom); timelineLayout->addWidget(radioDockBottom);
TimelineDockWidget = new CDockWidget("Timeline"); TimelineDockWidget = new CDockWidget("Timeline");
TimelineDockWidget->setWidget(timeLineWidget); TimelineDockWidget->setWidget(timeLineWidget);
// TimelineDockWidget->setResizeMode(CDockWidget::eResizeMode::ResizeHorizontal);
TimelineDockWidget->setFeature(CDockWidget::DockWidgetClosable, false); TimelineDockWidget->setFeature(CDockWidget::DockWidgetClosable, false);
TimelineDockWidget->setFeature(CDockWidget::DockWidgetMovable, false); TimelineDockWidget->setFeature(CDockWidget::DockWidgetMovable, false);
TimelineDockWidget->setFeature(CDockWidget::DockWidgetFloatable, false); TimelineDockWidget->setFeature(CDockWidget::DockWidgetFloatable, false);
TimelineDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget); TimelineDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
TimelineDockWidget->setMinimumSize(QSize(50, 50)); TimelineDockWidget->setMinimumSize(QSize(50, 50));
TimelineDockWidget->setFixedHeight(50);
auto *TimelineDockArea = DockManager->addDockWidget(DockWidgetArea::TopDockWidgetArea, TimelineDockWidget); auto *TimelineDockArea = DockManager->addDockWidget(DockWidgetArea::TopDockWidgetArea, TimelineDockWidget);
TimelineDockArea->setDockAreaFlag(CDockAreaWidget::eDockAreaFlag::HideSingleWidgetTitleBar, true); TimelineDockArea->setDockAreaFlag(CDockAreaWidget::eDockAreaFlag::HideSingleWidgetTitleBar, true);
TimelineDockArea->setAllowedAreas(DockWidgetArea::OuterDockAreas); TimelineDockArea->setAllowedAreas(DockWidgetArea::OuterDockAreas);
@ -177,7 +170,6 @@ CMainWindow::CMainWindow(QWidget *parent)
QWidget* statusWidget = new QWidget(); QWidget* statusWidget = new QWidget();
QHBoxLayout* statusLayout = new QHBoxLayout(statusWidget); QHBoxLayout* statusLayout = new QHBoxLayout(statusWidget);
statusLayout->setSpacing(10); statusLayout->setSpacing(10);
CDigitalClock* clock = new CDigitalClock(statusWidget);
statusLayout->addWidget(new QLabel("Status Bar")); statusLayout->addWidget(new QLabel("Status Bar"));
QPushButton* OpenPerspectiveButton = new QPushButton("Open Perspective", statusWidget); QPushButton* OpenPerspectiveButton = new QPushButton("Open Perspective", statusWidget);
connect(OpenPerspectiveButton, &QPushButton::clicked, [this](){ connect(OpenPerspectiveButton, &QPushButton::clicked, [this](){
@ -215,19 +207,16 @@ CMainWindow::CMainWindow(QWidget *parent)
statusLayout->addWidget(OpenPerspectiveButton); statusLayout->addWidget(OpenPerspectiveButton);
statusLayout->addWidget(SavePerspectiveButton); statusLayout->addWidget(SavePerspectiveButton);
statusLayout->addStretch(1); statusLayout->addStretch(1);
statusLayout->addWidget(clock);
CDockWidget* StatusDockWidget = new CDockWidget("Status"); CDockWidget* StatusDockWidget = new CDockWidget("Status");
StatusDockWidget->setWidget(statusWidget); StatusDockWidget->setWidget(statusWidget);
// StatusDockWidget->setResizeMode(CDockWidget::eResizeMode::ResizeHorizontal);
StatusDockWidget->setFeature(CDockWidget::DockWidgetClosable, false); StatusDockWidget->setFeature(CDockWidget::DockWidgetClosable, false);
StatusDockWidget->setFeature(CDockWidget::DockWidgetMovable, false); StatusDockWidget->setFeature(CDockWidget::DockWidgetMovable, false);
StatusDockWidget->setFeature(CDockWidget::DockWidgetFloatable, false); StatusDockWidget->setFeature(CDockWidget::DockWidgetFloatable, false);
StatusDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget); StatusDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
StatusDockWidget->setMinimumSize(QSize(50, 50)); StatusDockWidget->setMinimumSize(QSize(50, 50));
StatusDockWidget->setFixedHeight(50);
StatusDockArea = DockManager->addDockWidget(DockWidgetArea::BottomDockWidgetArea, StatusDockWidget); StatusDockArea = DockManager->addDockWidget(DockWidgetArea::BottomDockWidgetArea, StatusDockWidget);
StatusDockArea->setAllowedAreas(DockWidgetArea::OuterDockAreas); StatusDockArea->setAllowedAreas(DockWidgetArea::OuterDockAreas);
StatusDockArea->setDockAreaFlag(CDockAreaWidget::eDockAreaFlag::HideSingleWidgetTitleBar, true); StatusDockArea->setDockAreaFlag(ads::CDockAreaWidget::eDockAreaFlag::HideSingleWidgetTitleBar, true);
} }
CMainWindow::~CMainWindow() CMainWindow::~CMainWindow()

View File

@ -711,11 +711,14 @@ void DockContainerWidgetPrivate::moveToNewSection(QWidget* Widget, CDockAreaWidg
//============================================================================ //============================================================================
void DockContainerWidgetPrivate::updateSplitterHandles( QSplitter* splitter ) void DockContainerWidgetPrivate::updateSplitterHandles( QSplitter* splitter )
{ {
if( splitter ) if(DockManager->centralWidget())
{ {
for( int index = 0; index < splitter->count(); index++ ) if( splitter )
{ {
splitter->setStretchFactor(index, widgetResizesWithContainer(splitter->widget(index)) ? 1 : 0); for( int index = 0; index < splitter->count(); index++ )
{
splitter->setStretchFactor(index, widgetResizesWithContainer(splitter->widget(index)) ? 1 : 0);
}
} }
} }
} }
@ -1256,7 +1259,6 @@ CDockAreaWidget* DockContainerWidgetPrivate::addDockWidgetToDockArea(DockWidgetA
auto TargetAreaSizes = TargetAreaSplitter->sizes(); auto TargetAreaSizes = TargetAreaSplitter->sizes();
QSplitter* NewSplitter = newSplitter(InsertParam.orientation()); QSplitter* NewSplitter = newSplitter(InsertParam.orientation());
NewSplitter->addWidget(TargetDockArea); NewSplitter->addWidget(TargetDockArea);
// updateSplitterHandles(NewSplitter);
insertWidgetIntoSplitter(NewSplitter, NewDockArea, InsertParam.append()); insertWidgetIntoSplitter(NewSplitter, NewDockArea, InsertParam.append());
updateSplitterHandles(NewSplitter); updateSplitterHandles(NewSplitter);

View File

@ -407,6 +407,7 @@ bool DockManagerPrivate::restoreState(const QByteArray& State, int version)
return false; return false;
} }
CentralWidget = nullptr;
// Hide updates of floating widgets from use // Hide updates of floating widgets from use
hideFloatingWidgets(); hideFloatingWidgets();
markDockWidgetsDirty(); markDockWidgetsDirty();
@ -830,15 +831,25 @@ CDockWidget* CDockManager::centralWidget()
} }
//============================================================================ //============================================================================
CDockAreaWidget* CDockManager::setCentralWidget(CDockWidget* widget) CDockAreaWidget* CDockManager::setCentralWidget(CDockWidget* widget, CDockWidget* oldCentralWidget, DockWidgetArea oldCentralWidgetArea)
{ {
if(d->CentralWidget) oldCentralWidget = d->CentralWidget;
if(oldCentralWidget)
{ {
addDockWidget(RightDockWidgetArea, d->CentralWidget); addDockWidget(oldCentralWidgetArea, oldCentralWidget);
} }
d->CentralWidget = widget; if(widget)
return addDockWidget(CenterDockWidgetArea, widget); {
widget->setFeature(CDockWidget::DockWidgetClosable, false);
widget->setFeature(CDockWidget::DockWidgetMovable, false);
widget->setFeature(CDockWidget::DockWidgetFloatable, false);
d->CentralWidget = widget;
CDockAreaWidget* CentralArea = addDockWidget(CenterDockWidgetArea, widget);
CentralArea->setDockAreaFlag(CDockAreaWidget::eDockAreaFlag::HideSingleWidgetTitleBar, true);
return CentralArea;
}
return nullptr;
} }
//============================================================================ //============================================================================

View File

@ -387,8 +387,10 @@ public:
* Adds dockwidget into the central area and marks it as central widget. * Adds dockwidget into the central area and marks it as central widget.
* If central widget is set, it will be the only dock widget * If central widget is set, it will be the only dock widget
* that will resize with the dock container. * that will resize with the dock container.
* If a central widget does exist, it will be docked to oldCentralWidgetArea
* and returned in oldCentralWidget.
*/ */
CDockAreaWidget* setCentralWidget(CDockWidget* widget); CDockAreaWidget* setCentralWidget(CDockWidget* widget, CDockWidget* oldCentralWidget = nullptr, DockWidgetArea oldCentralWidgetArea = DockWidgetArea::RightDockWidgetArea);
/** /**
* Adds a toggle view action to the the internal view menu. * Adds a toggle view action to the the internal view menu.