aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/advanceddockingsystem/dockwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/advanceddockingsystem/dockwidget.cpp')
-rw-r--r--src/libs/advanceddockingsystem/dockwidget.cpp103
1 files changed, 88 insertions, 15 deletions
diff --git a/src/libs/advanceddockingsystem/dockwidget.cpp b/src/libs/advanceddockingsystem/dockwidget.cpp
index c703b0a665..1c6947f7b5 100644
--- a/src/libs/advanceddockingsystem/dockwidget.cpp
+++ b/src/libs/advanceddockingsystem/dockwidget.cpp
@@ -55,6 +55,7 @@
#include <QTextStream>
#include <QToolBar>
#include <QXmlStreamWriter>
+#include <QWindow>
static Q_LOGGING_CATEGORY(adsLog, "qtc.qmldesigner.advanceddockingsystem", QtWarningMsg)
@@ -127,6 +128,7 @@ namespace ADS
if (!m_dockArea) {
FloatingDockContainer *floatingWidget = new FloatingDockContainer(q);
floatingWidget->resize(q->size());
+ m_tabWidget->show();
floatingWidget->show();
} else {
m_dockArea->setCurrentDockWidget(q);
@@ -204,6 +206,9 @@ namespace ADS
d->m_toggleViewAction->setCheckable(true);
connect(d->m_toggleViewAction, &QAction::triggered, this, &DockWidget::toggleView);
setToolbarFloatingStyle(false);
+
+ if (DockManager::testConfigFlag(DockManager::FocusHighlighting))
+ setFocusPolicy(Qt::ClickFocus);
}
DockWidget::~DockWidget()
@@ -222,7 +227,10 @@ namespace ADS
void DockWidget::setWidget(QWidget *widget, eInsertMode insertMode)
{
- QScrollArea *scrollAreaWidget = qobject_cast<QScrollArea *>(widget);
+ if (d->m_widget)
+ takeWidget();
+
+ auto scrollAreaWidget = qobject_cast<QAbstractScrollArea *>(widget);
if (scrollAreaWidget || ForceNoScrollArea == insertMode) {
d->m_layout->addWidget(widget);
if (scrollAreaWidget && scrollAreaWidget->viewport())
@@ -238,11 +246,23 @@ namespace ADS
QWidget *DockWidget::takeWidget()
{
- // TODO Shouldn't m_widget being set to nullptr?!
- d->m_scrollArea->takeWidget();
- d->m_layout->removeWidget(d->m_widget);
- d->m_widget->setParent(nullptr);
- return d->m_widget;
+ QWidget *w = nullptr;
+ if (d->m_scrollArea) {
+ d->m_layout->removeWidget(d->m_scrollArea);
+ w = d->m_scrollArea->takeWidget();
+ delete d->m_scrollArea;
+ d->m_scrollArea = nullptr;
+ d->m_widget = nullptr;
+ } else if (d->m_widget) {
+ d->m_layout->removeWidget(d->m_widget);
+ w = d->m_widget;
+ d->m_widget = nullptr;
+ }
+
+ if (w)
+ w->setParent(nullptr);
+
+ return w;
}
QWidget *DockWidget::widget() const { return d->m_widget; }
@@ -251,9 +271,9 @@ namespace ADS
void DockWidget::setFeatures(DockWidgetFeatures features)
{
- if (d->m_features == features) {
+ if (d->m_features == features)
return;
- }
+
d->m_features = features;
emit featuresChanged(d->m_features);
d->m_tabWidget->onDockWidgetFeaturesChanged();
@@ -274,11 +294,10 @@ namespace ADS
DockContainerWidget *DockWidget::dockContainer() const
{
- if (d->m_dockArea) {
+ if (d->m_dockArea)
return d->m_dockArea->dockContainer();
- } else {
+ else
return nullptr;
- }
}
DockAreaWidget *DockWidget::dockAreaWidget() const { return d->m_dockArea; }
@@ -347,11 +366,11 @@ namespace ADS
? beforeDockContainerWidget->topLevelDockWidget()
: nullptr;
- if (open) {
+ if (open)
d->showDockWidget();
- } else {
+ else
d->hideDockWidget();
- }
+
d->m_closed = !open;
//d->m_toggleViewAction->blockSignals(true);
d->m_toggleViewAction->setChecked(open);
@@ -449,7 +468,7 @@ namespace ADS
d->m_toggleViewAction->setToolTip(text);
if (d->m_dockArea)
- d->m_dockArea->markTitleBarMenuOutdated(); //update tabs menu
+ d->m_dockArea->markTitleBarMenuOutdated(); // update tabs menu
}
#endif
@@ -617,4 +636,58 @@ namespace ADS
return d->m_titleBarActions;
}
+ void DockWidget::showFullScreen()
+ {
+ if (isFloating())
+ dockContainer()->floatingWidget()->showFullScreen();
+ else
+ Super::showFullScreen();
+ }
+
+ void DockWidget::showNormal()
+ {
+ if (isFloating())
+ dockContainer()->floatingWidget()->showNormal();
+ else
+ Super::showNormal();
+ }
+
+ bool DockWidget::isFullScreen() const
+ {
+ if (isFloating())
+ return dockContainer()->floatingWidget()->isFullScreen();
+ else
+ return Super::isFullScreen();
+ }
+
+ void DockWidget::setAsCurrentTab()
+ {
+ if (d->m_dockArea && !isClosed())
+ d->m_dockArea->setCurrentDockWidget(this);
+ }
+
+ bool DockWidget::isTabbed() const
+ {
+ return d->m_dockArea && (d->m_dockArea->openDockWidgetsCount() > 1);
+ }
+
+ bool DockWidget::isCurrentTab() const
+ {
+ return d->m_dockArea && (d->m_dockArea->currentDockWidget() == this);
+ }
+
+ void DockWidget::raise()
+ {
+ if (isClosed())
+ return;
+
+ setAsCurrentTab();
+ if (isInFloatingContainer())
+ {
+ auto floatingWindow = window();
+ floatingWindow->raise();
+ floatingWindow->activateWindow();
+ }
+ }
+
} // namespace ADS