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:
Henning Gruendl
2020-06-22 16:46:25 +02:00
committed by Henning Gründl
parent e5d9cb3779
commit a98c254c59
31 changed files with 1704 additions and 876 deletions

View File

@@ -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