forked from qt-creator/qt-creator
ADS: Integrate newest base repository commits
* Activate new ADS feature focus highlight * Remove resources.qrc and related *.svg files * Clean up new and existing source Base repository was merged until commit 3de877fe5635ff51a6d1205ca98aad85d204427f Merged changes from base repository include the following: * Fix wrong current index when removing a widget from DockAreaLayout * Fix invisible TabWidget for DockWidgets that are not part of a restored state * Enable ClickFocus for DockWidget to support focussing in case the content does not support it * Move focus related functionality into DockFocusController class * Add new DockManger config flag FocusStyling * Add support for focus styling of FloatingWidgetTitleBar * Improve focus handling when dropping a DockWidget * Improve highlighting focused DockWidget * Improve setting of DockWidgetTab focus * Add styling of focused DockWidget * Fix docking of floating widgets for macOS * Fix setting of DockingStateReader file version - use internal file version instead of user file version * Fix saveState() and restoreState() version handling to work like the function from QMainWindow * Fix escape key handling in native window event function if event WM_EXITSIZEMOVE occurs * Implement windows drag handling with native WM_ nonclient area messages * Fix showing DockArea when inserting a DockWidget in a hidden DockArea * Fix setting DockAreaTabBar index to prevent showing of tab 0 when inserting a DockWidget into an area with no current index tab * Fix wrong insertion order of DockWidget when dropping a floating widget to the left or top container drop area * Fix tab changes position when redocking it to the same position * Add nullptr check to fix potential nullptr access when closing a FloatingDockContainer * Fix single DockArea cannot be split * Fix visibility issue when adding dock widget after all other dock widgets have ben closed * Fix FloatingDragPreview flashing of hidden overlay when dragging the last visible DockWidget in non opaque docking mode * Fix FloatingDragPreview preventing dock widget from floating when dragging over another dock widget * Fix DockWidget::setWidget function to test for QAbstractScrollArea instead of QScrollArea. Now setWidget properly supports ItemViews like QTreeView or QTableView * Fix wrong display of center drop area when dragging over invisible dock area title bar * Fix bug that drop overlay sometimes was not visible when moving the drag preview over a floating window * Fix dropping of FloatingDragPreview into center of dock container with only one single visible dock area. If this happens the dropped dock widget needs to get tabified * Fix crash when trying to make a DockWidget floating in non-opaque mode if the DockWidget is not floatable * Fix DockWidgetTab to provide the right size when starting floating * Add DockWidget functions setAsCurrentTab, raise, isCurrentTab, isTabbed * Add new config flag HideSingleCentralWidgetTitleBar to enable a central single dock widget in the main dock container (dock manager) without titlebar * Fix DockContainerWidget::hasTopLevelDockWidget() and DockContainerWidget::topLevelDockArea() to work properly also for the main non floating dock container * Fix ElidingLabel to properly support Qt::ElideNone * Add setElideMode function to DockWidgetTab * Add setFullScreen(), setNormal() and isFullScreen() function to DockWidget * Fix takeWidget() function and fixed setWidget() function to handle case when there is already a content widget Task-number: QDS-2180 Change-Id: Ie30648ba329016c91fd19e9b4e12e31e47614b18 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
committed by
Henning Gründl
parent
e5d9cb3779
commit
a98c254c59
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user