From ac7283acee1ba60f96fde189374b15bae772f502 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 24 Apr 2020 12:51:01 +0200 Subject: [PATCH 01/26] QmlDesigner: Further fixes for gcc5.3 Amends 8d868d8bbb1742. Change-Id: Ifad7a5d9aa85cf076e2e42ac9489c01dc8995fcd Reviewed-by: Thomas Hartmann --- .../components/itemlibrary/itemlibrarywidget.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp index 13230544ae5..caf0663dce7 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp @@ -103,11 +103,11 @@ ItemLibraryWidget::ItemLibraryWidget(QWidget *parent) : m_itemViewQuickWidget->rootContext()->setContextProperties( QVector{ - {"itemLibraryModel", QVariant::fromValue(m_itemLibraryModel.data())}, - {"itemLibraryIconWidth", m_itemIconSize.width()}, - {"itemLibraryIconHeight", m_itemIconSize.height()}, - {"rootView", QVariant::fromValue(this)}, - {"highlightColor", Utils::StyleHelper::notTooBrightHighlightColor()} + {{"itemLibraryModel"}, QVariant::fromValue(m_itemLibraryModel.data())}, + {{"itemLibraryIconWidth"}, m_itemIconSize.width()}, + {{"itemLibraryIconHeight"}, m_itemIconSize.height()}, + {{"rootView"}, QVariant::fromValue(this)}, + {{"highlightColor"}, Utils::StyleHelper::notTooBrightHighlightColor()} } ); From aad05dde548314e03f679f8a65ae5481982f8040 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 24 Apr 2020 11:27:32 +0200 Subject: [PATCH 02/26] Doc: Fix links in Qt Design Studio Manual Change-Id: Ie5a218fcdb8ed4823ce8caac655cc3081236f07f Reviewed-by: Thomas Hartmann --- doc/qtcreator/src/editors/creator-coding-edit-mode.qdoc | 6 ++++-- doc/qtcreator/src/qtquick/qtquick-adding-dynamics.qdoc | 2 +- doc/qtcreator/src/qtquick/qtquick-components.qdoc | 2 +- doc/qtcreator/src/qtquick/qtquick-ui-forms.qdoc | 8 ++------ 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/doc/qtcreator/src/editors/creator-coding-edit-mode.qdoc b/doc/qtcreator/src/editors/creator-coding-edit-mode.qdoc index 56be275326d..c470d183be3 100644 --- a/doc/qtcreator/src/editors/creator-coding-edit-mode.qdoc +++ b/doc/qtcreator/src/editors/creator-coding-edit-mode.qdoc @@ -130,8 +130,10 @@ \uicontrol {Default line endings} field. To set the line endings to use for a project, select \uicontrol Projects > - \uicontrol {Project Settings} > \uicontrol Editor. For more information, - see \l {Specifying Editor Settings}. + \uicontrol {Project Settings} > \uicontrol Editor. + \if defined(qtcreator) + For more information, see \l {Specifying Editor Settings}. + \endif \section1 Splitting the Editor View diff --git a/doc/qtcreator/src/qtquick/qtquick-adding-dynamics.qdoc b/doc/qtcreator/src/qtquick/qtquick-adding-dynamics.qdoc index a2e4b5865a6..9370ae848f8 100644 --- a/doc/qtcreator/src/qtquick/qtquick-adding-dynamics.qdoc +++ b/doc/qtcreator/src/qtquick/qtquick-adding-dynamics.qdoc @@ -26,7 +26,7 @@ /*! \contentspage index.html \page qtquick-adding-dynamics.html - \previouspage qtquick-fonts.html + \previouspage creator-quick-ui-forms.html \nextpage studio-timeline.html \title Adding Dynamics diff --git a/doc/qtcreator/src/qtquick/qtquick-components.qdoc b/doc/qtcreator/src/qtquick/qtquick-components.qdoc index 4266a4d7d0c..611dd97255e 100644 --- a/doc/qtcreator/src/qtquick/qtquick-components.qdoc +++ b/doc/qtcreator/src/qtquick/qtquick-components.qdoc @@ -33,7 +33,7 @@ \contentspage index.html \page quick-components.html \if defined(qtdesignstudio) - \previouspage studio-prototyping.html + \previouspage quick-uis.html \else \previouspage creator-using-qt-quick-designer.html \endif diff --git a/doc/qtcreator/src/qtquick/qtquick-ui-forms.qdoc b/doc/qtcreator/src/qtquick/qtquick-ui-forms.qdoc index 49f682d7ce7..14bb305be16 100644 --- a/doc/qtcreator/src/qtquick/qtquick-ui-forms.qdoc +++ b/doc/qtcreator/src/qtquick/qtquick-ui-forms.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Creator documentation. @@ -34,11 +34,7 @@ \contentspage index.html \page creator-quick-ui-forms.html \previouspage qtquick-annotations.html - \if defined(qtdesignstudio) - \nextpage creator-live-preview.html - \else - \nextpage creator-qml-modules-with-plugins.html - \endif + \nextpage qtquick-adding-dynamics.html \title Qt Quick UI Forms From ae080facf513f943727b816589eb7152fb191ba7 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 23 Apr 2020 11:00:30 +0200 Subject: [PATCH 03/26] CMake build: export less generic public includes Do not put every plugin's and lib's source folder into public includes. We require includes of the style and if someone depends on somelib or someplugin. Change-Id: I3a9f200b7c3879cf431b00a1bab4a70f7aa0a9ec Reviewed-by: Cristian Adam --- cmake/QtCreatorAPI.cmake | 11 +++++------ src/libs/clangsupport/CMakeLists.txt | 2 ++ src/libs/modelinglib/CMakeLists.txt | 2 ++ src/libs/sqlite/CMakeLists.txt | 4 +++- src/plugins/qmldesigner/CMakeLists.txt | 4 +++- src/shared/designerintegrationv2/CMakeLists.txt | 10 ++++++---- src/shared/help/CMakeLists.txt | 1 + src/tools/clangbackend/source/CMakeLists.txt | 1 + .../clangpchmanagerbackend/source/CMakeLists.txt | 1 + .../clangrefactoringbackend/source/CMakeLists.txt | 1 + 10 files changed, 25 insertions(+), 12 deletions(-) diff --git a/cmake/QtCreatorAPI.cmake b/cmake/QtCreatorAPI.cmake index 993102e139a..f6387b7919f 100644 --- a/cmake/QtCreatorAPI.cmake +++ b/cmake/QtCreatorAPI.cmake @@ -496,11 +496,11 @@ function(add_qtc_library name) file(RELATIVE_PATH include_dir_relative_path ${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) target_include_directories(${name} - PRIVATE ${_arg_INCLUDES} - PUBLIC + PRIVATE + ${_arg_INCLUDES} "$" + PUBLIC "$" - "$" "$" ) set_public_includes(${name} "${_arg_PUBLIC_INCLUDES}") @@ -755,10 +755,9 @@ function(add_qtc_plugin target_name) ${_arg_INCLUDES} "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_BINARY_DIR}/src" - PUBLIC "$" + PUBLIC "$" - "$" "$" ) set_public_includes(${target_name} "${_arg_PUBLIC_INCLUDES}") @@ -886,7 +885,7 @@ function(extend_qtc_target target_name) if (NOT IS_ABSOLUTE ${_arg_SOURCES_PREFIX}) set(_arg_SOURCES_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/${_arg_SOURCES_PREFIX}") endif() - target_include_directories(${target_name} PUBLIC $) + target_include_directories(${target_name} PRIVATE $) set(_arg_SOURCES ${prefixed_sources}) endif() diff --git a/src/libs/clangsupport/CMakeLists.txt b/src/libs/clangsupport/CMakeLists.txt index b7e02db6457..093213147b2 100644 --- a/src/libs/clangsupport/CMakeLists.txt +++ b/src/libs/clangsupport/CMakeLists.txt @@ -8,6 +8,8 @@ add_qtc_library(ClangSupport CLANG_RESOURCE_DIR="${IDE_LIBEXEC_PATH}/clang/lib/clang/${CLANG_VERSION}/include" CLANG_BINDIR="${IDE_LIBEXEC_PATH}/clang/bin" DEFINES CLANGSUPPORT_BUILD_LIB + PUBLIC_INCLUDES + "${CMAKE_CURRENT_LIST_DIR}" SOURCES alivemessage.cpp alivemessage.h annotationsmessage.cpp annotationsmessage.h diff --git a/src/libs/modelinglib/CMakeLists.txt b/src/libs/modelinglib/CMakeLists.txt index 55c6e3a951d..db79b99ee33 100644 --- a/src/libs/modelinglib/CMakeLists.txt +++ b/src/libs/modelinglib/CMakeLists.txt @@ -3,6 +3,8 @@ add_qtc_library(Modeling DEPENDS Qt5::Widgets Utils PUBLIC_DEPENDS OptionalSvg INCLUDES qtserialization/inc + PUBLIC_INCLUDES + "${CMAKE_CURRENT_LIST_DIR}" SOURCES qmt/config/configcontroller.cpp qmt/config/configcontroller.h qmt/config/sourcepos.cpp qmt/config/sourcepos.h diff --git a/src/libs/sqlite/CMakeLists.txt b/src/libs/sqlite/CMakeLists.txt index 62c8609a7af..d28195f7684 100644 --- a/src/libs/sqlite/CMakeLists.txt +++ b/src/libs/sqlite/CMakeLists.txt @@ -4,7 +4,9 @@ add_qtc_library(Sqlite SQLITE_ENABLE_UNLOCK_NOTIFY SQLITE_ENABLE_COLUMN_METADATA BUILD_SQLITE_LIBRARY DEPENDS Qt5::Core Threads::Threads ${CMAKE_DL_LIBS} - PUBLIC_INCLUDES ../3rdparty/sqlite + INCLUDES ../3rdparty/sqlite + PUBLIC_INCLUDES + "${CMAKE_CURRENT_LIST_DIR}" SOURCES ../3rdparty/sqlite/sqlite3.c createtablesqlstatementbuilder.cpp createtablesqlstatementbuilder.h diff --git a/src/plugins/qmldesigner/CMakeLists.txt b/src/plugins/qmldesigner/CMakeLists.txt index 75a8571b818..9c32da72c41 100644 --- a/src/plugins/qmldesigner/CMakeLists.txt +++ b/src/plugins/qmldesigner/CMakeLists.txt @@ -6,7 +6,8 @@ add_qtc_plugin(QmlDesigner DESIGNER_CORE_LIBRARY IDE_LIBRARY_BASENAME=\"${IDE_LIBRARY_BASE_PATH}\" PUBLIC_INCLUDES - ${CMAKE_CURRENT_LIST_DIR}/designercore/include + "${CMAKE_CURRENT_LIST_DIR}" + "${CMAKE_CURRENT_LIST_DIR}/designercore/include" PLUGIN_DEPENDS Core ProjectExplorer QmlJSEditor QmakeProjectManager QmlProjectManager QtSupport TextEditor @@ -155,6 +156,7 @@ extend_qtc_plugin(QmlDesigner extend_qtc_plugin(QmlDesigner SOURCES_PREFIX ../../../share/qtcreator/qml/qmlpuppet/types + PUBLIC_INCLUDES ../../../share/qtcreator/qml/qmlpuppet/types SOURCES enumeration.h ) diff --git a/src/shared/designerintegrationv2/CMakeLists.txt b/src/shared/designerintegrationv2/CMakeLists.txt index 8e2520d50e7..b527260fa49 100644 --- a/src/shared/designerintegrationv2/CMakeLists.txt +++ b/src/shared/designerintegrationv2/CMakeLists.txt @@ -4,9 +4,11 @@ endif() add_qtc_library(designerintegrationv2 STATIC DEPENDS Qt5::Designer Qt5::Widgets + PUBLIC_INCLUDES + "${CMAKE_CURRENT_LIST_DIR}" SOURCES - formresizer.cpp formresizer.h - sizehandlerect.cpp sizehandlerect.h - widgethostconstants.h - widgethost.cpp widgethost.h + formresizer.cpp formresizer.h + sizehandlerect.cpp sizehandlerect.h + widgethostconstants.h + widgethost.cpp widgethost.h ) diff --git a/src/shared/help/CMakeLists.txt b/src/shared/help/CMakeLists.txt index 442911b4b88..6aa583b1542 100644 --- a/src/shared/help/CMakeLists.txt +++ b/src/shared/help/CMakeLists.txt @@ -18,6 +18,7 @@ add_qtc_library(shared_help STATIC "${PLUGIN_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/shared_help_autogen/include${autogen_suffix}" "${CMAKE_CURRENT_BINARY_DIR}/" + "${CMAKE_CURRENT_LIST_DIR}" SOURCES bookmarkdialog.ui bookmarkmanager.cpp bookmarkmanager.h diff --git a/src/tools/clangbackend/source/CMakeLists.txt b/src/tools/clangbackend/source/CMakeLists.txt index fe0ab54deb6..b071cb46b72 100644 --- a/src/tools/clangbackend/source/CMakeLists.txt +++ b/src/tools/clangbackend/source/CMakeLists.txt @@ -3,6 +3,7 @@ add_qtc_library(clangbackend_lib STATIC PUBLIC_DEFINES CLANGSUPPORT_BUILD_LIB PUBLIC_INCLUDES ${CLANG_INCLUDE_DIRS} + "${CMAKE_CURRENT_LIST_DIR}" SOURCES clangasyncjob.h clangbackend_global.h diff --git a/src/tools/clangpchmanagerbackend/source/CMakeLists.txt b/src/tools/clangpchmanagerbackend/source/CMakeLists.txt index 76973c6a21d..fd6644da235 100644 --- a/src/tools/clangpchmanagerbackend/source/CMakeLists.txt +++ b/src/tools/clangpchmanagerbackend/source/CMakeLists.txt @@ -3,6 +3,7 @@ add_qtc_library(clangpchmanagerbackend_lib STATIC PUBLIC_DEPENDS libclang PUBLIC_DEFINES CLANGSUPPORT_BUILD_LIB PUBLIC_INCLUDES + ../../clangrefactoringbackend/source ${CLANG_INCLUDE_DIRS} SOURCES builddependenciesprovider.cpp builddependenciesprovider.h diff --git a/src/tools/clangrefactoringbackend/source/CMakeLists.txt b/src/tools/clangrefactoringbackend/source/CMakeLists.txt index 420e630c886..f06ddee1cc6 100644 --- a/src/tools/clangrefactoringbackend/source/CMakeLists.txt +++ b/src/tools/clangrefactoringbackend/source/CMakeLists.txt @@ -10,6 +10,7 @@ add_qtc_library(clangrefactoringbackend_lib STATIC PUBLIC_INCLUDES ${CLANG_INCLUDE_DIRS} "../../clangpchmanagerbackend/source" + "${CMAKE_CURRENT_LIST_DIR}" SOURCES clangquery.cpp clangquery.h clangquerygatherer.cpp clangquerygatherer.h From d5ac552314e23db0d813c44abd89571b7e0ddd22 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 22 Apr 2020 20:30:05 +0200 Subject: [PATCH 04/26] QmlDesigner: Fix ComboBox for raw strings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ie35bda95290042f2faaf938ee67b6ee02e8c55b1 Reviewed-by: Henning Gründl Reviewed-by: Thomas Hartmann --- .../imports/HelperWidgets/ComboBox.qml | 62 +++++++++++-------- 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ComboBox.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ComboBox.qml index b3e8fda3685..2d70e40b1d5 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ComboBox.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ComboBox.qml @@ -38,6 +38,10 @@ StudioControls.ComboBox { enum ValueType { String, Integer, Enum } property int valueType: ComboBox.ValueType.Enum + onModelChanged: colorLogic.invalidate() + + // This is available in all editors. + onValueTypeChanged: { if (comboBox.valueType === ComboBox.ValueType.Integer) comboBox.useInteger = true @@ -97,28 +101,34 @@ StudioControls.ComboBox { comboBox.valueFromBackendChanged() } else { switch (comboBox.valueType) { - case ComboBox.ValueType.String: - if (comboBox.currentText !== comboBox.backendValue.value) - comboBox.currentText = comboBox.backendValue.value - break - case ComboBox.ValueType.Integer: - if (comboBox.currentIndex !== comboBox.backendValue.value) - comboBox.currentIndex = comboBox.backendValue.value - break - case ComboBox.ValueType.Enum: - default: - var enumString = comboBox.backendValue.enumeration - - if (enumString === "") - enumString = comboBox.backendValue.value - - var index = comboBox.find(enumString) - + case ComboBox.ValueType.String: + if (comboBox.currentText !== comboBox.backendValue.value) { + var index = comboBox.find(comboBox.backendValue.value) if (index < 0) index = 0 if (index !== comboBox.currentIndex) comboBox.currentIndex = index + } + break + case ComboBox.ValueType.Integer: + if (comboBox.currentIndex !== comboBox.backendValue.value) + comboBox.currentIndex = comboBox.backendValue.value + break + case ComboBox.ValueType.Enum: + default: + var enumString = comboBox.backendValue.enumeration + + if (enumString === "") + enumString = comboBox.backendValue.value + + index = comboBox.find(enumString) + + if (index < 0) + index = 0 + + if (index !== comboBox.currentIndex) + comboBox.currentIndex = index } } @@ -137,15 +147,15 @@ StudioControls.ComboBox { return switch (comboBox.valueType) { - case ComboBox.ValueType.String: - comboBox.backendValue.value = comboBox.currentText - break - case ComboBox.ValueType.Integer: - comboBox.backendValue.value = comboBox.currentIndex - break - case ComboBox.ValueType.Enum: - default: - comboBox.backendValue.setEnumeration(comboBox.scope, comboBox.currentText) + case ComboBox.ValueType.String: + comboBox.backendValue.value = comboBox.currentText + break + case ComboBox.ValueType.Integer: + comboBox.backendValue.value = comboBox.currentIndex + break + case ComboBox.ValueType.Enum: + default: + comboBox.backendValue.setEnumeration(comboBox.scope, comboBox.currentText) } } From 92c7662acb8fdb6810cbc949844ce112bc9117dd Mon Sep 17 00:00:00 2001 From: Henning Gruendl Date: Mon, 6 Apr 2020 14:25:11 +0200 Subject: [PATCH 05/26] ADS: Integrate newest base repository commits 998fe9fa11939eb28dd021ca11d5302c4fe2a005 28dc374fc25fcf5a4100c7ad929cb8da690530ed 0e88467f94194d5bea209f6ddc364358ab92899e d0f4ce324890197683869eafda0f3938ae619b8d c541f2c69b519eceb76ffc54589175c9fd0da8a6 37d305e50d2c0829f031b71a61e290361eea9f07 - Fix/workaround for escape key issue with remaining overlays - Clean up if statements according to style guide Task-number: QDS-1883 Change-Id: I44ddaed67458a75aca91bdd74cd2b5890bd23c38 Reviewed-by: Aleksei German Reviewed-by: Thomas Hartmann --- .../advanceddockingsystem/dockareawidget.cpp | 27 ++++ .../advanceddockingsystem/dockareawidget.h | 7 + src/libs/advanceddockingsystem/dockwidget.cpp | 15 ++- src/libs/advanceddockingsystem/dockwidget.h | 26 +++- .../floatingdockcontainer.cpp | 126 +++++++++++------- .../floatingdockcontainer.h | 1 + 6 files changed, 151 insertions(+), 51 deletions(-) diff --git a/src/libs/advanceddockingsystem/dockareawidget.cpp b/src/libs/advanceddockingsystem/dockareawidget.cpp index 16bd88f5716..6e7f9d5c993 100644 --- a/src/libs/advanceddockingsystem/dockareawidget.cpp +++ b/src/libs/advanceddockingsystem/dockareawidget.cpp @@ -215,6 +215,7 @@ namespace ADS DockManager *m_dockManager = nullptr; bool m_updateTitleBarButtons = false; DockWidgetAreas m_allowedAreas = AllDockAreas; + QSize m_minSizeHint; /** * Private data constructor @@ -264,6 +265,22 @@ namespace ADS * Udpates the enable state of the close and detach button */ void updateTitleBarButtonStates(); + + /** + * Scans all contained dock widgets for the max. minimum size hint + */ + void updateMinimumSizeHint() + { + m_minSizeHint = QSize(); + for (int i = 0; i < m_contentsLayout->count(); ++i) + { + auto widget = m_contentsLayout->widget(i); + m_minSizeHint.setHeight(qMax(m_minSizeHint.height(), + widget->minimumSizeHint().height())); + m_minSizeHint.setWidth(qMax(m_minSizeHint.width(), + widget->minimumSizeHint().width())); + } + } }; // struct DockAreaWidgetPrivate @@ -349,6 +366,10 @@ namespace ADS d->tabBar()->blockSignals(false); tabWidget->setVisible(!dockWidget->isClosed()); dockWidget->setProperty(INDEX_PROPERTY, index); + d->m_minSizeHint.setHeight(qMax(d->m_minSizeHint.height(), + dockWidget->minimumSizeHint().height())); + d->m_minSizeHint.setWidth(qMax(d->m_minSizeHint.width(), + dockWidget->minimumSizeHint().width())); if (activate) { setCurrentIndex(index); } @@ -381,6 +402,7 @@ namespace ADS d->updateTitleBarButtonStates(); updateTitleBarVisibility(); + d->updateMinimumSizeHint(); auto topLevelDockWidget = dockContainerWidget->topLevelDockWidget(); if (topLevelDockWidget) { topLevelDockWidget->emitTopLevelChanged(true); @@ -683,4 +705,9 @@ namespace ADS DockAreaTitleBar *DockAreaWidget::titleBar() const { return d->m_titleBar; } + QSize DockAreaWidget::minimumSizeHint() const + { + return d->m_minSizeHint.isValid() ? d->m_minSizeHint : Super::minimumSizeHint(); + } + } // namespace ADS diff --git a/src/libs/advanceddockingsystem/dockareawidget.h b/src/libs/advanceddockingsystem/dockareawidget.h index 9c23584ae78..74ab85c69f2 100644 --- a/src/libs/advanceddockingsystem/dockareawidget.h +++ b/src/libs/advanceddockingsystem/dockareawidget.h @@ -291,6 +291,13 @@ public: */ void closeOtherAreas(); + /** + * Returns the largest minimumSizeHint() of the dock widgets in this + * area. + * The minimum size hint is updated if a dock widget is removed or added. + */ + virtual QSize minimumSizeHint() const override; + signals: /** * This signal is emitted when user clicks on a tab at an index. diff --git a/src/libs/advanceddockingsystem/dockwidget.cpp b/src/libs/advanceddockingsystem/dockwidget.cpp index 760f425ae78..c703b0a6650 100644 --- a/src/libs/advanceddockingsystem/dockwidget.cpp +++ b/src/libs/advanceddockingsystem/dockwidget.cpp @@ -83,6 +83,7 @@ namespace ADS QSize m_toolBarIconSizeFloating = QSize(24, 24); bool m_isFloatingTopLevel = false; QList m_titleBarActions; + DockWidget::eMinimumSizeHintMode m_minimumSizeHintMode = DockWidget::MinimumSizeHintFromDockWidget; /** * Private data constructor @@ -317,6 +318,11 @@ namespace ADS } } + void DockWidget::setMinimumSizeHintMode(eMinimumSizeHintMode mode) + { + d->m_minimumSizeHintMode = mode; + } + void DockWidget::toggleView(bool open) { // If the toggle view action mode is ActionModeShow, then Open is always @@ -545,7 +551,13 @@ namespace ADS void DockWidget::setClosedState(bool closed) { d->m_closed = closed; } - QSize DockWidget::minimumSizeHint() const { return QSize(60, 40); } + QSize DockWidget::minimumSizeHint() const + { + if (d->m_minimumSizeHintMode == DockWidget::MinimumSizeHintFromDockWidget || !d->m_widget) + return QSize(60, 40); + else + return d->m_widget->minimumSizeHint(); + } void DockWidget::setFloating() { @@ -587,6 +599,7 @@ namespace ADS floatingWidget->hide(); } deleteDockWidget(); + emit closed(); } else { toggleView(false); } diff --git a/src/libs/advanceddockingsystem/dockwidget.h b/src/libs/advanceddockingsystem/dockwidget.h index 0d6efa28d02..687704e3653 100644 --- a/src/libs/advanceddockingsystem/dockwidget.h +++ b/src/libs/advanceddockingsystem/dockwidget.h @@ -184,6 +184,17 @@ public: */ enum eInsertMode { AutoScrollArea, ForceScrollArea, ForceNoScrollArea }; + /** + * The mode of the minimumSizeHint() that is returned by the DockWidget + * minimumSizeHint() function. + * To ensure, that a dock widget does not block resizing, the dock widget + * reimplements minimumSizeHint() function to return a very small minimum + * size hint. If you would like to adhere the minimumSizeHint() from the + * content widget, the set the minimumSizeHintMode() to + * MinimumSizeHintFromContent. + */ + enum eMinimumSizeHintMode { MinimumSizeHintFromDockWidget, MinimumSizeHintFromContent }; + /** * This mode configures the behavior of the toggle view action. * If the mode if ActionModeToggle, then the toggle view action is @@ -218,7 +229,8 @@ public: virtual ~DockWidget() override; /** - * We return a fixed minimum size hint for all dock widgets + * We return a fixed minimum size hint or the size hint of the content + * widget if minimum size hint mode is MinimumSizeHintFromContent */ virtual QSize minimumSizeHint() const override; @@ -327,6 +339,13 @@ public: */ void setToggleViewActionMode(eToggleViewActionMode mode); + /** + * Configures the minimum size hint that is returned by the + * minimumSizeHint() function. + * \see eMinimumSizeHintMode for a detailed description + */ + void setMinimumSizeHintMode(eMinimumSizeHintMode mode); + /** * Sets the dock widget icon that is shown in tabs and in toggle view * actions @@ -339,13 +358,10 @@ public: QIcon icon() const; /** - * If the WithToolBar layout flag is enabled, then this function returns - * the dock widget toolbar. If the flag is disabled, the function returns - * a nullptr. * This function returns the dock widget top tool bar. * If no toolbar is assigned, this function returns nullptr. To get a valid * toolbar you either need to create a default empty toolbar via - * createDefaultToolBar() function or you need to assign you custom + * createDefaultToolBar() function or you need to assign your custom * toolbar via setToolBar(). */ QToolBar *toolBar() const; diff --git a/src/libs/advanceddockingsystem/floatingdockcontainer.cpp b/src/libs/advanceddockingsystem/floatingdockcontainer.cpp index c245dcb2066..18c70834dd7 100644 --- a/src/libs/advanceddockingsystem/floatingdockcontainer.cpp +++ b/src/libs/advanceddockingsystem/floatingdockcontainer.cpp @@ -73,6 +73,7 @@ namespace ADS QPoint m_dragStartMousePosition; DockContainerWidget *m_dropContainer = nullptr; DockAreaWidget *m_singleDockArea = nullptr; + QPoint m_dragStartPos; QWidget *m_mouseEventHandler = nullptr; FloatingWidgetTitleBar *m_titleBar = nullptr; @@ -107,25 +108,30 @@ namespace ADS q->setWindowTitle(text); } + /** + * Reflect the current dock widget title in the floating widget windowTitle() + * depending on the DockManager::FloatingContainerHasWidgetTitle flag + */ void reflectCurrentWidget(DockWidget *currentWidget) { // reflect CurrentWidget's title if configured to do so, otherwise display application name as window title - if (testConfigFlag(DockManager::FloatingContainerHasWidgetTitle)) { + if (testConfigFlag(DockManager::FloatingContainerHasWidgetTitle)) setWindowTitle(currentWidget->windowTitle()); - } else { + else setWindowTitle(QApplication::applicationDisplayName()); - } - // reflect CurrentWidget's icon if configured to do so, otherwise display application icon as window icon - QIcon CurrentWidgetIcon = currentWidget->icon(); - if (testConfigFlag(DockManager::FloatingContainerHasWidgetIcon) - && !CurrentWidgetIcon.isNull()) - { + // reflect currentWidget's icon if configured to do so, otherwise display application icon as window icon + QIcon currentWidgetIcon = currentWidget->icon(); + if (testConfigFlag(DockManager::FloatingContainerHasWidgetIcon) && !currentWidgetIcon.isNull()) q->setWindowIcon(currentWidget->icon()); - } else { + else q->setWindowIcon(QApplication::windowIcon()); - } } + + /** + * Handles escape key press when dragging around the floating widget + */ + void handleEscapeKey(); }; // class FloatingDockContainerPrivate FloatingDockContainerPrivate::FloatingDockContainerPrivate(FloatingDockContainer *parent) @@ -135,17 +141,15 @@ namespace ADS void FloatingDockContainerPrivate::titleMouseReleaseEvent() { setState(DraggingInactive); - if (!m_dropContainer) { + if (!m_dropContainer) return; - } if (m_dockManager->dockAreaOverlay()->dropAreaUnderCursor() != InvalidDockWidgetArea || m_dockManager->containerOverlay()->dropAreaUnderCursor() != InvalidDockWidgetArea) { // Resize the floating widget to the size of the highlighted drop area rectangle DockOverlay *overlay = m_dockManager->containerOverlay(); - if (!overlay->dropOverlayRect().isValid()) { + if (!overlay->dropOverlayRect().isValid()) overlay = m_dockManager->dockAreaOverlay(); - } QRect rect = overlay->dropOverlayRect(); int frameWidth = (q->frameSize().width() - q->rect().width()) / 2; @@ -165,26 +169,22 @@ namespace ADS void FloatingDockContainerPrivate::updateDropOverlays(const QPoint &globalPosition) { - if (!q->isVisible() || !m_dockManager) { + if (!q->isVisible() || !m_dockManager) return; - } auto containers = m_dockManager->dockContainers(); DockContainerWidget *topContainer = nullptr; for (auto containerWidget : containers) { - if (!containerWidget->isVisible()) { + if (!containerWidget->isVisible()) continue; - } - if (m_dockContainer == containerWidget) { + if (m_dockContainer == containerWidget) continue; - } QPoint mappedPos = containerWidget->mapFromGlobal(globalPosition); if (containerWidget->rect().contains(mappedPos)) { - if (!topContainer || containerWidget->isInFrontOf(topContainer)) { + if (!topContainer || containerWidget->isInFrontOf(topContainer)) topContainer = containerWidget; - } } } @@ -223,6 +223,14 @@ namespace ADS } } + void FloatingDockContainerPrivate::handleEscapeKey() + { + qCInfo(adsLog) << Q_FUNC_INFO; + setState(DraggingInactive); + m_dockManager->containerOverlay()->hideOverlay(); + m_dockManager->dockAreaOverlay()->hideOverlay(); + } + FloatingDockContainer::FloatingDockContainer(DockManager *dockManager) : FloatingWidgetBaseType(dockManager) , d(new FloatingDockContainerPrivate(this)) @@ -268,9 +276,8 @@ namespace ADS d->m_titleBar->enableCloseButton(isClosable()); auto dw = topLevelDockWidget(); - if (dw) { + if (dw) dw->emitTopLevelChanged(true); - } } FloatingDockContainer::FloatingDockContainer(DockWidget *dockWidget) @@ -281,17 +288,16 @@ namespace ADS d->m_titleBar->enableCloseButton(isClosable()); auto dw = topLevelDockWidget(); - if (dw) { + if (dw) dw->emitTopLevelChanged(true); - } } FloatingDockContainer::~FloatingDockContainer() { qCInfo(adsLog) << Q_FUNC_INFO; - if (d->m_dockManager) { + if (d->m_dockManager) d->m_dockManager->removeFloatingWidget(this); - } + delete d; } @@ -312,6 +318,10 @@ namespace ADS QWidget::moveEvent(event); switch (d->m_draggingState) { case DraggingMousePressed: + // TODO Is checking for windows only sufficient or has macOS also problems? + if (Utils::HostOsInfo::isWindowsHost()) + QApplication::instance()->installEventFilter(this); + d->setState(DraggingFloatingWidget); d->updateDropOverlays(QCursor::pos()); break; @@ -340,9 +350,8 @@ namespace ADS if (isClosable()) { auto dw = topLevelDockWidget(); if (dw && dw->features().testFlag(DockWidget::DockWidgetDeleteOnClose)) { - if (!dw->closeDockWidgetInternal()) { + if (!dw->closeDockWidgetInternal()) return; - } } this->hide(); @@ -352,19 +361,16 @@ namespace ADS void FloatingDockContainer::hideEvent(QHideEvent *event) { Super::hideEvent(event); - if (event->spontaneous()) { + if (event->spontaneous()) return; - } // Prevent toogleView() events during restore state - if (d->m_dockManager->isRestoringState()) { + if (d->m_dockManager->isRestoringState()) return; - } for (auto dockArea : d->m_dockContainer->openedDockAreas()) { - for (auto dockWidget : dockArea->openedDockWidgets()) { + for (auto dockWidget : dockArea->openedDockWidgets()) dockWidget->toggleView(false); - } } } @@ -379,22 +385,21 @@ namespace ADS // QEvent::NonClientAreaMouseButtonPress return the wrong mouse button // The event always returns Qt::RightButton even if the left button is clicked. // It is really great to work around the whole NonClientMouseArea bugs + + #if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 2)) - if (event->type() - == QEvent:: - NonClientAreaMouseButtonPress /*&& QGuiApplication::mouseButtons().testFlag(Qt::LeftButton)*/) { - qCInfo(adsLog) << Q_FUNC_INFO << "QEvent::NonClientAreaMouseButtonPress" - << event->type(); - d->setState(DraggingMousePressed); - } + if (event->type() == QEvent::NonClientAreaMouseButtonPress + /*&& QGuiApplication::mouseButtons().testFlag(Qt::LeftButton)*/) #else if (event->type() == QEvent::NonClientAreaMouseButtonPress - && QGuiApplication::mouseButtons().testFlag(Qt::LeftButton)) { + && QGuiApplication::mouseButtons().testFlag(Qt::LeftButton)) +#endif + { qCInfo(adsLog) << Q_FUNC_INFO << "QEvent::NonClientAreaMouseButtonPress" << event->type(); + d->m_dragStartPos = pos(); d->setState(DraggingMousePressed); } -#endif } break; case DraggingMousePressed: @@ -440,6 +445,37 @@ namespace ADS return QWidget::event(event); } + bool FloatingDockContainer::eventFilter(QObject *watched, QEvent *event) + { + Q_UNUSED(watched); + // I have not found a way to detect non client area key press events to + // handle escape key presses. On Windows, if the escape key is pressed while + // dragging around a widget, the widget position is reset to its start position + // which in turn generates a QEvent::NonClientAreaMouseButtonRelease event + // if the mouse is outside of the widget after the move to its initial position + // or a QEvent::MouseButtonRelease event, if the mouse is inside of the widget + // after the position has been reset. + // So we can install an event filter on the application to get these events + // here to properly cancel dragging and hide the overlays. + // If we are in DraggingFloatingWidget state, it means the widget + // has been dragged already but if the position is the same like + // the start position, then this is an indication that the escape + // key has been pressed. + if (event->type() == QEvent::MouseButtonRelease || event->type() == QEvent::NonClientAreaMouseButtonRelease) + { + qCInfo(adsLog) << Q_FUNC_INFO << "QEvent::MouseButtonRelease or QEvent::NonClientAreaMouseButtonRelease" + << "d->m_draggingState " << d->m_draggingState; + QApplication::instance()->removeEventFilter(this); + if (d->m_dragStartPos == pos()) + { + d->handleEscapeKey(); + return true; + } + return false; + } + return false; + } + void FloatingDockContainer::startFloating(const QPoint &dragStartMousePos, const QSize &size, eDragState dragState, diff --git a/src/libs/advanceddockingsystem/floatingdockcontainer.h b/src/libs/advanceddockingsystem/floatingdockcontainer.h index 83ca1edddeb..1b6a9d5b2f7 100644 --- a/src/libs/advanceddockingsystem/floatingdockcontainer.h +++ b/src/libs/advanceddockingsystem/floatingdockcontainer.h @@ -188,6 +188,7 @@ protected: // reimplements QWidget virtual void closeEvent(QCloseEvent *event) override; virtual void hideEvent(QHideEvent *event) override; virtual void showEvent(QShowEvent *event) override; + virtual bool eventFilter(QObject *watched, QEvent *event) override; public: using Super = QWidget; From 9c17fd0dbe6ca18c98741abc27f8729926b95d8c Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 24 Apr 2020 19:49:50 +0200 Subject: [PATCH 06/26] QmlDesigner: Extend icon font support * Use ADS::IconProvider to make use of font icons * Add support for IconProvider in FloatingWidgetTitlebar * Add support for named font icon entities in QmlDesigner::Theme * Add level of indirection to Constants.qml to be able to parse it from inside C++ * Add color and HighDPI support in stylehelper * Update icon font and related constants Change-Id: I31ac33917d2db002697ce63f50f5c181c5fdb103 Reviewed-by: Tim Jenssen --- .../imports/StudioTheme/Constants.qml | 96 +------------ .../imports/StudioTheme/InternalConstants.qml | 131 ++++++++++++++++++ .../imports/StudioTheme/icons.ttf | Bin 10568 -> 11448 bytes .../imports/StudioTheme/qmldir | 2 + src/libs/advanceddockingsystem/ads_globals.h | 9 +- .../dockareatitlebar.cpp | 5 +- .../advanceddockingsystem/dockwidgettab.cpp | 16 ++- .../advanceddockingsystem/iconprovider.cpp | 2 +- .../linux/floatingwidgettitlebar.cpp | 24 ++-- .../components/componentcore/theme.cpp | 46 ++++++ .../components/componentcore/theme.h | 82 +++++++++++ src/plugins/qmldesigner/designmodewidget.cpp | 22 +++ src/plugins/qmldesigner/qmldesignerplugin.cpp | 5 + 13 files changed, 321 insertions(+), 119 deletions(-) create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/Constants.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/Constants.qml index 3d692af671c..74edf9ccee8 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/Constants.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/Constants.qml @@ -26,98 +26,4 @@ pragma Singleton import QtQuick 2.10 -QtObject { - readonly property int width: 1920 - readonly property int height: 1080 - readonly property FontLoader mySystemFont: FontLoader { - name: "Arial" - } - readonly property FontLoader controlIcons: FontLoader { - source: "icons.ttf" - } - - readonly property string actionIcon: "\u0021" - readonly property string actionIconBinding: "\u0022" - readonly property string addColumnAfter: "\u0023" - readonly property string addColumnBefore: "\u0024" - readonly property string addFile: "\u0025" - readonly property string addRowAfter: "\u0026" - readonly property string addRowBefore: "\u0027" - readonly property string addTable: "\u0028" - readonly property string alignBottom: "\u0029" - readonly property string alignCenterHorizontal: "\u002A" - readonly property string alignCenterVertical: "\u002B" - readonly property string alignLeft: "\u002C" - readonly property string alignRight: "\u002D" - readonly property string alignTo: "\u002E" - readonly property string alignTop: "\u002F" - readonly property string anchorBaseline: "\u0030" - readonly property string anchorBottom: "\u0031" - readonly property string anchorFill: "\u0032" - readonly property string anchorLeft: "\u0033" - readonly property string anchorRight: "\u0034" - readonly property string anchorTop: "\u0035" - readonly property string annotationBubble: "\u0036" - readonly property string annotationDecal: "\u0037" - readonly property string centerHorizontal: "\u0038" - readonly property string centerVertical: "\u0039" - readonly property string closeCross: "\u003A" - readonly property string deleteColumn: "\u003B" - readonly property string deleteRow: "\u003C" - readonly property string deleteTable: "\u003D" - readonly property string distributeBottom: "\u003E" - readonly property string distributeCenterHorizontal: "\u003F" - readonly property string distributeCenterVertical: "\u0040" - readonly property string distributeLeft: "\u0041" - readonly property string distributeOriginBottomRight: "\u0042" - readonly property string distributeOriginCenter: "\u0043" - readonly property string distributeOriginNone: "\u0044" - readonly property string distributeOriginTopLeft: "\u0045" - readonly property string distributeRight: "\u0046" - readonly property string distributeSpacingHorizontal: "\u0047" - readonly property string distributeSpacingVertical: "\u0048" - readonly property string distributeTop: "\u0049" - readonly property string edit: "\u004A" - readonly property string fontStyleBold: "\u004B" - readonly property string fontStyleItalic: "\u004C" - readonly property string fontStyleStrikethrough: "\u004D" - readonly property string fontStyleUnderline: "\u004E" - readonly property string mergeCells: "\u004F" - readonly property string redo: "\u0050" - readonly property string splitColumns: "\u0051" - readonly property string splitRows: "\u0052" - readonly property string testIcon: "\u0053" - readonly property string textAlignBottom: "\u0054" - readonly property string textAlignCenter: "\u0055" - readonly property string textAlignLeft: "\u0056" - readonly property string textAlignMiddle: "\u0057" - readonly property string textAlignRight: "\u0058" - readonly property string textAlignTop: "\u0059" - readonly property string textBulletList: "\u005A" - readonly property string textFullJustification: "\u005B" - readonly property string textNumberedList: "\u005C" - readonly property string tickIcon: "\u005D" - readonly property string triState: "\u005E" - readonly property string undo: "\u005F" - readonly property string upDownIcon: "\u0060" - readonly property string upDownSquare2: "\u0061" - - readonly property font iconFont: Qt.font({ - "family": controlIcons.name, - "pixelSize": 12 - }) - - readonly property font font: Qt.font({ - "family": mySystemFont.name, - "pointSize": Qt.application.font.pixelSize - }) - - readonly property font largeFont: Qt.font({ - "family": mySystemFont.name, - "pointSize": Qt.application.font.pixelSize * 1.6 - }) - - readonly property color backgroundColor: "#c2c2c2" - - readonly property bool showActionIndicatorBackground: false -} +InternalConstants {} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml new file mode 100644 index 00000000000..4d45032eae9 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml @@ -0,0 +1,131 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +import QtQuick 2.10 + +QtObject { + readonly property int width: 1920 + readonly property int height: 1080 + readonly property FontLoader mySystemFont: FontLoader { + name: "Arial" + } + readonly property FontLoader controlIcons: FontLoader { + source: "icons.ttf" + } + + objectName: "internalConstantsObject" + + readonly property string actionIcon: "\u0021" + readonly property string actionIconBinding: "\u0022" + readonly property string addColumnAfter: "\u0023" + readonly property string addColumnBefore: "\u0024" + readonly property string addFile: "\u0025" + readonly property string addRowAfter: "\u0026" + readonly property string addRowBefore: "\u0027" + readonly property string addTable: "\u0028" + readonly property string adsClose: "\u0029" + readonly property string adsDetach: "\u002A" + readonly property string adsDropDown: "\u002B" + readonly property string alignBottom: "\u002C" + readonly property string alignCenterHorizontal: "\u002D" + readonly property string alignCenterVertical: "\u002E" + readonly property string alignLeft: "\u002F" + readonly property string alignRight: "\u0030" + readonly property string alignTo: "\u0031" + readonly property string alignTop: "\u0032" + readonly property string anchorBaseline: "\u0033" + readonly property string anchorBottom: "\u0034" + readonly property string anchorFill: "\u0035" + readonly property string anchorLeft: "\u0036" + readonly property string anchorRight: "\u0037" + readonly property string anchorTop: "\u0038" + readonly property string annotationBubble: "\u0039" + readonly property string annotationDecal: "\u003A" + readonly property string centerHorizontal: "\u003B" + readonly property string centerVertical: "\u003C" + readonly property string closeCross: "\u003D" + readonly property string decisionNode: "\u003E" + readonly property string deleteColumn: "\u003F" + readonly property string deleteRow: "\u0040" + readonly property string deleteTable: "\u0041" + readonly property string detach: "\u0042" + readonly property string distributeBottom: "\u0043" + readonly property string distributeCenterHorizontal: "\u0044" + readonly property string distributeCenterVertical: "\u0045" + readonly property string distributeLeft: "\u0046" + readonly property string distributeOriginBottomRight: "\u0047" + readonly property string distributeOriginCenter: "\u0048" + readonly property string distributeOriginNone: "\u0049" + readonly property string distributeOriginTopLeft: "\u004A" + readonly property string distributeRight: "\u004B" + readonly property string distributeSpacingHorizontal: "\u004C" + readonly property string distributeSpacingVertical: "\u004D" + readonly property string distributeTop: "\u004E" + readonly property string edit: "\u004F" + readonly property string fontStyleBold: "\u0050" + readonly property string fontStyleItalic: "\u0051" + readonly property string fontStyleStrikethrough: "\u0052" + readonly property string fontStyleUnderline: "\u0053" + readonly property string mergeCells: "\u0054" + readonly property string redo: "\u0055" + readonly property string splitColumns: "\u0056" + readonly property string splitRows: "\u0057" + readonly property string startNode: "\u0058" + readonly property string testIcon: "\u0059" + readonly property string textAlignBottom: "\u005A" + readonly property string textAlignCenter: "\u005B" + readonly property string textAlignLeft: "\u005C" + readonly property string textAlignMiddle: "\u005D" + readonly property string textAlignRight: "\u005E" + readonly property string textAlignTop: "\u005F" + readonly property string textBulletList: "\u0060" + readonly property string textFullJustification: "\u0061" + readonly property string textNumberedList: "\u0062" + readonly property string tickIcon: "\u0063" + readonly property string triState: "\u0064" + readonly property string undo: "\u0065" + readonly property string upDownIcon: "\u0066" + readonly property string upDownSquare2: "\u0067" + readonly property string wildcard: "\u0068" + + readonly property font iconFont: Qt.font({ + "family": controlIcons.name, + "pixelSize": 12 + }) + + readonly property font font: Qt.font({ + "family": mySystemFont.name, + "pointSize": Qt.application.font.pixelSize + }) + + readonly property font largeFont: Qt.font({ + "family": mySystemFont.name, + "pointSize": Qt.application.font.pixelSize * 1.6 + }) + + readonly property color backgroundColor: "#c2c2c2" + + readonly property bool showActionIndicatorBackground: false +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/icons.ttf b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/icons.ttf index d65b065195211fbf5da4488b6063bf24c82e3ef8..9e3ed42406252fcc604753970c23dfa1173cc6c5 100644 GIT binary patch delta 1890 zcmX>Rv?H>ffsuiMftR6yftew|%`L>YztE+Sfk9^u0|SGMf3Ut$WNXSl1_s6m1_p+N z9WTe(7a{c;0iGhJpgn@xUB_p?_LLiLI znSp_E2Ll7cyqx^xMDddfbqoy53m6y}X5=PT6fjI>Sj51Bm)CjHv_Z8oW=-y87O3Z7v}5dG+{5^ZNs7seX$I34rb|qpm_?Y4m_wLnFmGc%!NSAR#Bz+4 zi`9>{jCCIC8#WuZBDNK5_t-_)o!A$!A7OvN!NXy|k;1W#;~Xaorv|47X9i~v=P}N2 zTs&N1Ty0$ExH-6;xU0B3xR-JN;ql^`!SjyShIbP0J3cGEYdn0v_=Wg=_%rxh_^)l2 zVOh#JIhS3|S6R@QQP5bBQBYCP+|=0ASkzclSyb6npSkN#8ROP9YyMTOVQTo-8Rw_( z=cmuKc{StTex^c3{l9ORL=gBFNYdY*VRH_fDpNfZL+=0i%sEW+7+4v&85ral8TA<% zSo(0Gfn#EA6#A@%-F@r$H)1vOv_y>+JSMSLlnOdU)k2jvYMK*AmTp* zNcu5|Xe|$BJQZBVC(NhmuJzB%Av)S&D@c56a5>{1h-#1)Mh8Alu=>ZGd<={XrYis6 zF`s5)X5eIC5N2l-H)qsmzX=4ym|W)4o_nnYcb?#^4ht z{;g&1V_;xlVbJ?Om3bG_W(IZ!ZU%k^X$FSP3Id9Z^%RCbrNM6l3Sw}0k`ex!9R#Vri25|;u1}z3x zhJwj?a%!B6?CR#mqRQgNljq3E)QgIVimMQ=^QP9&MAY+G1q`t|9+c@_~{t=Gfgv4VB_ZG zVpc;?>jVXJc0qROSj}QB>FA6J(mE>!_#a zsQd4Uu9L2=lkUGKdXBofj(SX1iYi90K51(j%5(Ax@^P}WsBt^X^Gb;--D6^7VG_lA4JLGYW!oo2a0lV#M5*|}1{YBzhUU18+nEiOqcDgnuDme$~8Y-z8F$fk9J;fq_BBKUm)=vNeT)fq^lCfq@|* zIXAID$^qk5x zsr2-h3=AwX3=A?SGEx&$q+iX8VPIgm!@$5`mXVQKpUCy=|0D(mMiB-E29=E5k_y4a z%-b0l7{`2_<51H-KqYx^KH z)7rjCjJC`!40)3s7^6iKnHBz9Fhnt{Fq{PW8l;9vaqq;b8G$nZR;|3RI*uJ2FF5{jdT>^79^m}NWx|!i)y4IITaUYj z`x1`=PZ`f8UOC=vytjBi@#*k+@TD*?Y_?!o%2?0Ap!a_&^Dd^%49pDt3^ELg4C)NJ z48{zW3=G1iilVHF#oXQC`TK-P`R`rE`ZH(J#Kk2({XNTMyxD_Im1*-r z&Kma3oq{Hen=6I4uy6L1PGc4J{C|-7DARNXZU%7%Wd<>M;ol z3QO1g`ynnWEy&8o#m>siD8i<~&%w(h{GE}RnTd;Cl#`Q1ltqY*Q;ds^k6DPFgG*3o z^CQK0#?4QacQLXXGZ=y*ZSpcz3r=H0U1MD%10#dU_f-NWo2xBibeVihtz&Y5dfR42 g4Qs~9xtcngmuOyK+}xzi$~bw7jwClc@vrRz0D1BES^xk5 diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/qmldir b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/qmldir index b768fe63a2b..4f689f9f630 100755 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/qmldir +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/qmldir @@ -1,2 +1,4 @@ singleton Values 1.0 Values.qml singleton Constants 1.0 Constants.qml +InternalConstants 1.0 InternalConstants.qml + diff --git a/src/libs/advanceddockingsystem/ads_globals.h b/src/libs/advanceddockingsystem/ads_globals.h index 4c0b8d6896a..e61bfa7ceb4 100644 --- a/src/libs/advanceddockingsystem/ads_globals.h +++ b/src/libs/advanceddockingsystem/ads_globals.h @@ -107,10 +107,11 @@ enum eDragState { * The different icons used in the UI */ enum eIcon { - TabCloseIcon, //!< TabCloseIcon - DockAreaMenuIcon, //!< DockAreaMenuIcon - DockAreaUndockIcon, //!< DockAreaUndockIcon - DockAreaCloseIcon, //!< DockAreaCloseIcon + TabCloseIcon, //!< TabCloseIcon + DockAreaMenuIcon, //!< DockAreaMenuIcon + DockAreaUndockIcon, //!< DockAreaUndockIcon + DockAreaCloseIcon, //!< DockAreaCloseIcon + FloatingWidgetCloseIcon, //!< FloatingWidgetCloseIcon IconCount, //!< just a delimiter for range checks }; diff --git a/src/libs/advanceddockingsystem/dockareatitlebar.cpp b/src/libs/advanceddockingsystem/dockareatitlebar.cpp index 9ee647265d9..79ba7ae70d5 100644 --- a/src/libs/advanceddockingsystem/dockareatitlebar.cpp +++ b/src/libs/advanceddockingsystem/dockareatitlebar.cpp @@ -132,6 +132,7 @@ namespace ADS void DockAreaTitleBarPrivate::createButtons() { + const QSize iconSize(14, 14); QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); // Tabs menu button m_tabsMenuButton = new TitleBarButton(testConfigFlag(DockManager::DockAreaHasTabsMenuButton)); @@ -149,6 +150,7 @@ namespace ADS m_tabsMenuButton->setMenu(tabsMenu); internal::setToolTip(m_tabsMenuButton, QObject::tr("List All Tabs")); m_tabsMenuButton->setSizePolicy(sizePolicy); + m_tabsMenuButton->setIconSize(iconSize); m_layout->addWidget(m_tabsMenuButton, 0); QObject::connect(m_tabsMenuButton->menu(), &QMenu::triggered, @@ -164,6 +166,7 @@ namespace ADS QStyle::SP_TitleBarNormalButton, ADS::DockAreaUndockIcon); m_undockButton->setSizePolicy(sizePolicy); + m_undockButton->setIconSize(iconSize); m_layout->addWidget(m_undockButton, 0); QObject::connect(m_undockButton, &QToolButton::clicked, @@ -183,7 +186,7 @@ namespace ADS internal::setToolTip(m_closeButton, QObject::tr("Close Group")); } m_closeButton->setSizePolicy(sizePolicy); - m_closeButton->setIconSize(QSize(16, 16)); + m_closeButton->setIconSize(iconSize); m_layout->addWidget(m_closeButton, 0); QObject::connect(m_closeButton, &QToolButton::clicked, diff --git a/src/libs/advanceddockingsystem/dockwidgettab.cpp b/src/libs/advanceddockingsystem/dockwidgettab.cpp index 611580d3685..b46d1720509 100644 --- a/src/libs/advanceddockingsystem/dockwidgettab.cpp +++ b/src/libs/advanceddockingsystem/dockwidgettab.cpp @@ -168,12 +168,18 @@ namespace ADS m_titleLabel->setText(m_dockWidget->windowTitle()); m_titleLabel->setObjectName("dockWidgetTabLabel"); m_titleLabel->setAlignment(Qt::AlignCenter); - QObject::connect(m_titleLabel, &ElidingLabel::elidedChanged, q, &DockWidgetTab::elidedChanged); + QObject::connect(m_titleLabel, + &ElidingLabel::elidedChanged, + q, + &DockWidgetTab::elidedChanged); m_closeButton = createCloseButton(); m_closeButton->setObjectName("tabCloseButton"); - internal::setButtonIcon(m_closeButton, QStyle::SP_TitleBarCloseButton, TabCloseIcon); + internal::setButtonIcon(m_closeButton, + QStyle::SP_TitleBarCloseButton, + TabCloseIcon); m_closeButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + m_closeButton->setIconSize(QSize(14, 14)); q->onDockWidgetFeaturesChanged(); internal::setToolTip(m_closeButton, QObject::tr("Close Tab")); QObject::connect(m_closeButton, @@ -189,11 +195,11 @@ namespace ADS boxLayout->setContentsMargins(2 * spacing, 0, 0, 0); boxLayout->setSpacing(0); q->setLayout(boxLayout); - boxLayout->addWidget(m_titleLabel, 1); + boxLayout->addWidget(m_titleLabel, 1, Qt::AlignVCenter); boxLayout->addSpacing(spacing); - boxLayout->addWidget(m_closeButton); + boxLayout->addWidget(m_closeButton, 0, Qt::AlignVCenter); boxLayout->addSpacing(qRound(spacing * 4.0 / 3.0)); - boxLayout->setAlignment(Qt::AlignCenter); + boxLayout->setAlignment(Qt::AlignCenter | Qt::AlignVCenter); m_titleLabel->setVisible(true); } diff --git a/src/libs/advanceddockingsystem/iconprovider.cpp b/src/libs/advanceddockingsystem/iconprovider.cpp index 6a6f46752bb..f220418220d 100644 --- a/src/libs/advanceddockingsystem/iconprovider.cpp +++ b/src/libs/advanceddockingsystem/iconprovider.cpp @@ -51,7 +51,7 @@ namespace ADS { */ IconProviderPrivate(IconProvider *parent); }; - // struct LedArrayPanelPrivate + // struct IconProviderPrivate IconProviderPrivate::IconProviderPrivate(IconProvider *parent) : q(parent) diff --git a/src/libs/advanceddockingsystem/linux/floatingwidgettitlebar.cpp b/src/libs/advanceddockingsystem/linux/floatingwidgettitlebar.cpp index 64e71a3b1c3..7d92952d700 100644 --- a/src/libs/advanceddockingsystem/linux/floatingwidgettitlebar.cpp +++ b/src/libs/advanceddockingsystem/linux/floatingwidgettitlebar.cpp @@ -41,7 +41,7 @@ namespace ADS { using TabLabelType = ElidingLabel; -using tCloseButton = QPushButton; +using CloseButtonType = QPushButton; /** * @brief Private data class of public interface CFloatingWidgetTitleBar @@ -52,7 +52,7 @@ public: FloatingWidgetTitleBar *q; ///< public interface class QLabel *m_iconLabel = nullptr; TabLabelType *m_titleLabel = nullptr; - tCloseButton *m_closeButton = nullptr; + CloseButtonType *m_closeButton = nullptr; FloatingDockContainer *m_floatingWidget = nullptr; eDragState m_dragState = DraggingInactive; @@ -74,22 +74,20 @@ void FloatingWidgetTitleBarPrivate::createLayout() m_titleLabel->setObjectName("floatingTitleLabel"); m_titleLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); - m_closeButton = new tCloseButton(); + m_closeButton = new CloseButtonType(); m_closeButton->setObjectName("floatingTitleCloseButton"); m_closeButton->setFlat(true); - - // The standard icons do does not look good on high DPI screens - QIcon closeIcon; - QPixmap normalPixmap = q->style()->standardPixmap(QStyle::SP_TitleBarCloseButton, - nullptr, - m_closeButton); - closeIcon.addPixmap(normalPixmap, QIcon::Normal); - closeIcon.addPixmap(internal::createTransparentPixmap(normalPixmap, 0.25), QIcon::Disabled); - m_closeButton->setIcon(q->style()->standardIcon(QStyle::SP_TitleBarCloseButton)); + internal::setButtonIcon(m_closeButton, + QStyle::SP_TitleBarCloseButton, + ADS::FloatingWidgetCloseIcon); m_closeButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + m_closeButton->setIconSize(QSize(14, 14)); m_closeButton->setVisible(true); m_closeButton->setFocusPolicy(Qt::NoFocus); - q->connect(m_closeButton, &QPushButton::clicked, q, &FloatingWidgetTitleBar::closeRequested); + QObject::connect(m_closeButton, + &QPushButton::clicked, + q, + &FloatingWidgetTitleBar::closeRequested); QFontMetrics fontMetrics(m_titleLabel->font()); int spacing = qRound(fontMetrics.height() / 4.0); diff --git a/src/plugins/qmldesigner/components/componentcore/theme.cpp b/src/plugins/qmldesigner/components/componentcore/theme.cpp index ec4128479fe..29b937a502a 100644 --- a/src/plugins/qmldesigner/components/componentcore/theme.cpp +++ b/src/plugins/qmldesigner/components/componentcore/theme.cpp @@ -28,19 +28,46 @@ #include +#include + #include #include #include #include #include +#include +#include +#include #include +static Q_LOGGING_CATEGORY(themeLog, "qtc.qmldesigner.theme", QtWarningMsg) + namespace QmlDesigner { Theme::Theme(Utils::Theme *originTheme, QObject *parent) : Utils::Theme(originTheme, parent) + , m_constants(nullptr) { + QString constantsPath = Core::ICore::resourcePath() + + QStringLiteral("/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml"); + + QQmlEngine* engine = new QQmlEngine(this); + QQmlComponent component(engine, QUrl::fromLocalFile(constantsPath)); + + if (component.status() == QQmlComponent::Ready) { + m_constants = component.create(); + } + else if (component.status() == QQmlComponent::Error ) { + qCWarning(themeLog) << "Couldn't load" << constantsPath + << "due to the following error(s):"; + for (QQmlError error : component.errors()) + qCWarning(themeLog) << error.toString(); + } + else { + qCWarning(themeLog) << "Couldn't load" << constantsPath + << "the status of the QQmlComponent is" << component.status(); + } } QColor Theme::evaluateColorAtThemeInstance(const QString &themeColorName) @@ -129,6 +156,25 @@ QPixmap Theme::getPixmap(const QString &id) return QmlDesignerIconProvider::getPixmap(id); } +QString Theme::getIconUnicode(Theme::Icon i) +{ + if (!instance()->m_constants) + return QString(); + + const QMetaObject *m = instance()->metaObject(); + const char *enumName = "Icon"; + int enumIndex = m->indexOfEnumerator(enumName); + + if (enumIndex == -1) { + qCWarning(themeLog) << "Couldn't find enum" << enumName; + return QString(); + } + + QMetaEnum e = m->enumerator(enumIndex); + + return instance()->m_constants->property(e.valueToKey(i)).toString(); +} + QColor Theme::qmlDesignerBackgroundColorDarker() const { return getColor(QmlDesigner_BackgroundColorDarker); diff --git a/src/plugins/qmldesigner/components/componentcore/theme.h b/src/plugins/qmldesigner/components/componentcore/theme.h index 6940c0c1cf0..07ee4caca8a 100644 --- a/src/plugins/qmldesigner/components/componentcore/theme.h +++ b/src/plugins/qmldesigner/components/componentcore/theme.h @@ -41,12 +41,91 @@ namespace QmlDesigner { class QMLDESIGNERCORE_EXPORT Theme : public Utils::Theme { Q_OBJECT + + Q_ENUMS(Icon) + public: + enum Icon { + actionIcon, + actionIconBinding, + addColumnAfter, + addColumnBefore, + addFile, + addRowAfter, + addRowBefore, + addTable, + adsClose, + adsDetach, + adsDropDown, + alignBottom, + alignCenterHorizontal, + alignCenterVertical, + alignLeft, + alignRight, + alignTo, + alignTop, + anchorBaseline, + anchorBottom, + anchorFill, + anchorLeft, + anchorRight, + anchorTop, + annotationBubble, + annotationDecal, + centerHorizontal, + centerVertical, + closeCross, + decisionNode, + deleteColumn, + deleteRow, + deleteTable, + detach, + distributeBottom, + distributeCenterHorizontal, + distributeCenterVertical, + distributeLeft, + distributeOriginBottomRight, + distributeOriginCenter, + distributeOriginNone, + distributeOriginTopLeft, + distributeRight, + distributeSpacingHorizontal, + distributeSpacingVertical, + distributeTop, + edit, + fontStyleBold, + fontStyleItalic, + fontStyleStrikethrough, + fontStyleUnderline, + mergeCells, + redo, + splitColumns, + splitRows, + startNode, + testIcon, + textAlignBottom, + textAlignCenter, + textAlignLeft, + textAlignMiddle, + textAlignRight, + textAlignTop, + textBulletList, + textFullJustification, + textNumberedList, + tickIcon, + triState, + undo, + upDownIcon, + upDownSquare2, + wildcard + }; + static Theme *instance(); static QString replaceCssColors(const QString &input); static void setupTheme(QQmlEngine *engine); static QColor getColor(Color role); static QPixmap getPixmap(const QString &id); + static QString getIconUnicode(Theme::Icon i); Q_INVOKABLE QColor qmlDesignerBackgroundColorDarker() const; Q_INVOKABLE QColor qmlDesignerBackgroundColorDarkAlternate() const; @@ -58,9 +137,12 @@ public: Q_INVOKABLE int smallFontPixelSize() const; Q_INVOKABLE int captionFontPixelSize() const; Q_INVOKABLE bool highPixelDensity() const; + private: Theme(Utils::Theme *originTheme, QObject *parent); QColor evaluateColorAtThemeInstance(const QString &themeColorName); + + QObject *m_constants; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp index 7769fb43a91..9bc485fd906 100644 --- a/src/plugins/qmldesigner/designmodewidget.cpp +++ b/src/plugins/qmldesigner/designmodewidget.cpp @@ -60,6 +60,7 @@ #include #include #include +#include #include #include @@ -70,6 +71,7 @@ #include #include +#include using Core::MiniSplitter; using Core::IEditor; @@ -227,6 +229,26 @@ void DesignModeWidget::setup() QString sheet = QString::fromUtf8(Utils::FileReader::fetchQrc(":/qmldesigner/dockwidgets.css")); m_dockManager->setStyleSheet(Theme::replaceCssColors(sheet)); + // Setup icons + QColor buttonColor(Theme::getColor(Theme::QmlDesigner_TabLight)); // TODO Use correct color roles + QColor tabColor(Theme::getColor(Theme::QmlDesigner_TabDark)); + + const QString closeUnicode = Theme::getIconUnicode(Theme::Icon::adsClose); + const QString menuUnicode = Theme::getIconUnicode(Theme::Icon::adsDropDown); + const QString undockUnicode = Theme::getIconUnicode(Theme::Icon::adsDetach); + + const QString fontName = "qtds_propertyIconFont.ttf"; + const QIcon tabsCloseIcon = Utils::StyleHelper::getIconFromIconFont(fontName, closeUnicode, 28, 28, tabColor); + const QIcon menuIcon = Utils::StyleHelper::getIconFromIconFont(fontName, menuUnicode, 28, 28, buttonColor); + const QIcon undockIcon = Utils::StyleHelper::getIconFromIconFont(fontName, undockUnicode, 28, 28, buttonColor); + const QIcon closeIcon = Utils::StyleHelper::getIconFromIconFont(fontName, closeUnicode, 28, 28, buttonColor); + + m_dockManager->iconProvider().registerCustomIcon(ADS::TabCloseIcon, tabsCloseIcon); + m_dockManager->iconProvider().registerCustomIcon(ADS::DockAreaMenuIcon, menuIcon); + m_dockManager->iconProvider().registerCustomIcon(ADS::DockAreaUndockIcon, undockIcon); + m_dockManager->iconProvider().registerCustomIcon(ADS::DockAreaCloseIcon, closeIcon); + m_dockManager->iconProvider().registerCustomIcon(ADS::FloatingWidgetCloseIcon, closeIcon); + // Setup Actions and Menus Core::ActionContainer *mwindow = Core::ActionManager::actionContainer(Core::Constants::M_WINDOW); // Window > Views diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index 5fd0b7990db..21d1ffadf22 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -217,6 +217,11 @@ bool QmlDesignerPlugin::initialize(const QStringList & /*arguments*/, QString *e if (DesignerSettings::getValue(DesignerSettingsKey::STANDALONE_MODE).toBool()) GenerateResource::generateMenuEntry(); + QString fontPath = Core::ICore::resourcePath() + + QStringLiteral("/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/icons.ttf"); + if (QFontDatabase::addApplicationFont(fontPath) < 0) + qCWarning(qmldesignerLog) << "Could not add font " << fontPath << "to font database"; + return true; } From 104852e09d30be2758dd606016349405ce147883 Mon Sep 17 00:00:00 2001 From: Henning Gruendl Date: Fri, 24 Apr 2020 13:22:55 +0200 Subject: [PATCH 07/26] QmlDesigner: Update properties in property editor Add missing and cleanup existing properties in property editor. Task-number: QDS-1502 Change-Id: I7bff7bad32b3bfd0742dd1d06f7c3ba12ef1bbca Reviewed-by: Thomas Hartmann --- .../QtQuick/AdvancedSection.qml | 53 ++++- .../QtQuick/AnimatedImageSpecifics.qml | 95 +++++++++ .../QtQuick/BorderImageSpecifics.qml | 68 +++++- .../QtQuick/GridSpecifics.qml | 25 +++ .../QtQuick/ImageSpecifics.qml | 132 +++++++++++- .../QtQuick/MouseAreaSpecifics.qml | 193 +++++++++++++++++- .../QtQuick/TextInputSection.qml | 13 ++ .../HelperWidgets/FlickableSection.qml | 60 +++++- .../imports/HelperWidgets/FontSection.qml | 12 ++ .../HelperWidgets/StandardTextSection.qml | 72 ++++++- .../designercore/model/texttomodelmerger.cpp | 9 +- 11 files changed, 722 insertions(+), 10 deletions(-) create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AnimatedImageSpecifics.qml diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AdvancedSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AdvancedSection.qml index 4eb7420d740..9990ddf8c66 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AdvancedSection.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AdvancedSection.qml @@ -100,7 +100,7 @@ Section { } Label { - text: "State" + text: qsTr("State") } SecondColumnLayout { LineEdit { @@ -158,5 +158,56 @@ Section { } } + Label { + text: qsTr("Focus") + tooltip: qsTr("Holds whether the item has focus within the enclosing FocusScope.") + disabledState: !backendValues.focus.isAvailable + } + SecondColumnLayout { + CheckBox { + backendValue: backendValues.focus + text: backendValues.focus.valueToString + enabled: backendValues.focus.isAvailable + implicitWidth: 180 + } + ExpandingSpacer { + } + } + + Label { + text: qsTr("Active focus on tab") + tooltip: qsTr("Holds whether the item wants to be in the tab focus chain.") + disabledState: !backendValues.activeFocusOnTab.isAvailable + } + SecondColumnLayout { + CheckBox { + backendValue: backendValues.activeFocusOnTab + text: backendValues.activeFocusOnTab.valueToString + enabled: backendValues.activeFocusOnTab.isAvailable + implicitWidth: 180 + } + ExpandingSpacer { + } + } + + Label { + text: qsTr("Baseline offset") + tooltip: qsTr("Specifies the position of the item's baseline in local coordinates.") + disabledState: !backendValues.baselineOffset.isAvailable + } + SecondColumnLayout { + SpinBox { + sliderIndicatorVisible: true + backendValue: backendValues.baselineOffset + hasSlider: true + decimals: 0 + minimumValue: -1000 + maximumValue: 1000 + Layout.preferredWidth: 140 + enabled: backendValues.baselineOffset.isAvailable + } + ExpandingSpacer { + } + } } } diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AnimatedImageSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AnimatedImageSpecifics.qml new file mode 100644 index 00000000000..787e390cbde --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AnimatedImageSpecifics.qml @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +import QtQuick 2.1 +import HelperWidgets 2.0 +import QtQuick.Layouts 1.0 + +Column { + anchors.left: parent.left + anchors.right: parent.right + + ImageSpecifics { + } + + Section { + anchors.left: parent.left + anchors.right: parent.right + caption: qsTr("Animated Image") + + SectionLayout { + Label { + text: qsTr("Speed") + disabledState: !backendValues.speed.isAvailable + } + SecondColumnLayout { + SpinBox { + sliderIndicatorVisible: true + backendValue: backendValues.speed + hasSlider: true + decimals: 2 + minimumValue: 0 + maximumValue: 100 + Layout.preferredWidth: 140 + enabled: backendValues.speed.isAvailable + } + ExpandingSpacer { + } + } + + Label { + text: qsTr("Paused") + tooltip: qsTr("Holds whether the animated image is paused.") + disabledState: !backendValues.paused.isAvailable + } + + SecondColumnLayout { + CheckBox { + enabled: backendValues.paused.isAvailable + text: backendValues.paused.valueToString + backendValue: backendValues.paused + implicitWidth: 180 + } + ExpandingSpacer {} + } + + Label { + text: qsTr("Playing") + tooltip: qsTr("Holds whether the animated image is playing.") + disabledState: !backendValues.playing.isAvailable + } + + SecondColumnLayout { + CheckBox { + enabled: backendValues.playing.isAvailable + text: backendValues.playing.valueToString + backendValue: backendValues.playing + implicitWidth: 180 + } + ExpandingSpacer {} + } + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/BorderImageSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/BorderImageSpecifics.qml index 3d39d44e8fb..362ba144c56 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/BorderImageSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/BorderImageSpecifics.qml @@ -124,7 +124,7 @@ Column { } Label { - text: qsTr("Horizontal Fill mode") + text: qsTr("Horizontal Tile mode") } SecondColumnLayout { @@ -138,7 +138,7 @@ Column { } Label { - text: qsTr("Vertical Fill mode") + text: qsTr("Vertical Tile mode") } SecondColumnLayout { @@ -186,6 +186,70 @@ Column { } } + + Label { + text: qsTr("Mirror") + tooltip: qsTr("Specifies whether the image should be horizontally inverted.") + disabledState: !backendValues.mirror.isAvailable + } + + SecondColumnLayout { + CheckBox { + enabled: backendValues.mirror.isAvailable + text: backendValues.mirror.valueToString + backendValue: backendValues.mirror + implicitWidth: 180 + } + ExpandingSpacer {} + } + + Label { + text: qsTr("Smooth") + tooltip: qsTr("Specifies whether the image is smoothly filtered when scaled or transformed.") + disabledState: !backendValues.smooth.isAvailable + } + + SecondColumnLayout { + CheckBox { + enabled: backendValues.smooth.isAvailable + text: backendValues.smooth.valueToString + backendValue: backendValues.smooth + implicitWidth: 180 + } + ExpandingSpacer {} + } + + Label { + text: qsTr("Cache") + tooltip: qsTr("Specifies whether the image should be cached.") + disabledState: !backendValues.cache.isAvailable + } + + SecondColumnLayout { + CheckBox { + enabled: backendValues.cache.isAvailable + text: backendValues.cache.valueToString + backendValue: backendValues.cache + implicitWidth: 180 + } + ExpandingSpacer {} + } + + Label { + text: qsTr("Asynchronous") + tooltip: qsTr("Specifies that images on the local filesystem should be loaded asynchronously in a separate thread.") + disabledState: !backendValues.asynchronous.isAvailable + } + + SecondColumnLayout { + CheckBox { + enabled: backendValues.asynchronous.isAvailable + text: backendValues.asynchronous.valueToString + backendValue: backendValues.asynchronous + implicitWidth: 180 + } + ExpandingSpacer {} + } } } } diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/GridSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/GridSpecifics.qml index 37be5e57701..284849a4158 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/GridSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/GridSpecifics.qml @@ -95,7 +95,32 @@ Column { Layout.fillWidth: true scope: "Qt" } + } + Label { + text: qsTr("Horizontal item alignment") + } + + SecondColumnLayout { + ComboBox { + model: ["AlignLeft", "AlignRight" ,"AlignHCenter"] + backendValue: backendValues.horizontalItemAlignment + Layout.fillWidth: true + scope: "Grid" + } + } + + Label { + text: qsTr("Vertical item alignment") + } + + SecondColumnLayout { + ComboBox { + model: ["AlignTop", "AlignBottom" ,"AlignVCenter"] + backendValue: backendValues.verticalItemAlignment + Layout.fillWidth: true + scope: "Grid" + } } Label { diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/ImageSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/ImageSpecifics.qml index 8f742f06e24..60b97a11796 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/ImageSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/ImageSpecifics.qml @@ -58,7 +58,7 @@ Column { SecondColumnLayout { ComboBox { scope: "Image" - model: ["Stretch", "PreserveAspectFit", "PreserveAspectCrop", "Tile", "TileVertically", "TileHorizontally"] + model: ["Stretch", "PreserveAspectFit", "PreserveAspectCrop", "Tile", "TileVertically", "TileHorizontally", "Pad"] backendValue: backendValues.fillMode implicitWidth: 180 Layout.fillWidth: true @@ -105,6 +105,136 @@ Column { ExpandingSpacer { } } + + Label { + text: qsTr("Horizontal alignment") + } + + SecondColumnLayout { + ComboBox { + scope: "Image" + model: ["AlignLeft", "AlignRight", "AlignHCenter"] + backendValue: backendValues.horizontalAlignment + implicitWidth: 180 + Layout.fillWidth: true + } + + ExpandingSpacer { + } + } + + Label { + text: qsTr("Vertical alignment") + } + + SecondColumnLayout { + ComboBox { + scope: "Image" + model: ["AlignTop", "AlignBottom", "AlignVCenter"] + backendValue: backendValues.verticalAlignment + implicitWidth: 180 + Layout.fillWidth: true + } + + ExpandingSpacer { + } + } + + Label { + text: qsTr("Asynchronous") + tooltip: qsTr("Specifies that images on the local filesystem should be loaded asynchronously in a separate thread.") + disabledState: !backendValues.asynchronous.isAvailable + } + + SecondColumnLayout { + CheckBox { + enabled: backendValues.asynchronous.isAvailable + text: backendValues.asynchronous.valueToString + backendValue: backendValues.asynchronous + implicitWidth: 180 + } + ExpandingSpacer {} + } + + Label { + text: qsTr("Auto transform") + tooltip: qsTr("Specifies whether the image should automatically apply image transformation metadata such as EXIF orientation.") + disabledState: !backendValues.autoTransform.isAvailable + } + + SecondColumnLayout { + CheckBox { + enabled: backendValues.autoTransform.isAvailable + text: backendValues.autoTransform.valueToString + backendValue: backendValues.autoTransform + implicitWidth: 180 + } + ExpandingSpacer {} + } + + Label { + text: qsTr("Cache") + tooltip: qsTr("Specifies whether the image should be cached.") + disabledState: !backendValues.cache.isAvailable + } + + SecondColumnLayout { + CheckBox { + enabled: backendValues.cache.isAvailable + text: backendValues.cache.valueToString + backendValue: backendValues.cache + implicitWidth: 180 + } + ExpandingSpacer {} + } + + Label { + text: qsTr("Mipmap") + tooltip: qsTr("Specifies whether the image uses mipmap filtering when scaled or transformed.") + disabledState: !backendValues.mipmap.isAvailable + } + + SecondColumnLayout { + CheckBox { + enabled: backendValues.mipmap.isAvailable + text: backendValues.mipmap.valueToString + backendValue: backendValues.mipmap + implicitWidth: 180 + } + ExpandingSpacer {} + } + + Label { + text: qsTr("Mirror") + tooltip: qsTr("Specifies whether the image should be horizontally inverted.") + disabledState: !backendValues.mirror.isAvailable + } + + SecondColumnLayout { + CheckBox { + enabled: backendValues.mirror.isAvailable + text: backendValues.mirror.valueToString + backendValue: backendValues.mirror + implicitWidth: 180 + } + ExpandingSpacer {} + } + + Label { + text: qsTr("Smooth") + tooltip: qsTr("Specifies whether the image is smoothly filtered when scaled or transformed.") + disabledState: !backendValues.smooth.isAvailable + } + + SecondColumnLayout { + CheckBox { + enabled: backendValues.smooth.isAvailable + text: backendValues.smooth.valueToString + backendValue: backendValues.smooth + implicitWidth: 180 + } + ExpandingSpacer {} + } } } } diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/MouseAreaSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/MouseAreaSpecifics.qml index 71ff0260ba0..0ca7f3d888d 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/MouseAreaSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/MouseAreaSpecifics.qml @@ -54,7 +54,7 @@ Column { } Label { - text: qsTr("Hover Enabled") + text: qsTr("Hover enabled") tooltip: qsTr("This property holds whether hover events are handled.") } @@ -68,6 +68,197 @@ Column { ExpandingSpacer { } } + + Label { + text: qsTr("Accepted buttons") + tooltip: qsTr("This property holds the mouse buttons that the mouse area reacts to.") + } + + SecondColumnLayout { + ComboBox { + backendValue: backendValues.acceptedButtons + model: ["LeftButton", "RightButton", "MiddleButton", "BackButton", "ForwardButton", "AllButtons"] + Layout.fillWidth: true + scope: "Qt" + } + ExpandingSpacer { + } + } + + Label { + text: qsTr("Press and hold interval") + tooltip: qsTr("This property overrides the elapsed time in milliseconds before pressAndHold is emitted.") + } + + SecondColumnLayout { + SpinBox { + backendValue: backendValues.pressAndHoldInterval + minimumValue: 0 + maximumValue: 2000 + decimals: 0 + } + ExpandingSpacer { + } + } + + Label { + text: qsTr("Scroll gesture enabled") + tooltip: qsTr("This property controls whether this MouseArea responds to scroll gestures from non-mouse devices.") + } + + SecondColumnLayout { + CheckBox { + Layout.fillWidth: true + backendValue: backendValues.scrollGestureEnabled + text: backendValues.scrollGestureEnabled.valueToString + } + + ExpandingSpacer { + } + } + + Label { + text: qsTr("Cursor shape") + tooltip: qsTr("This property holds the cursor shape for this mouse area.") + } + + SecondColumnLayout { + ComboBox { + backendValue: backendValues.cursorShape + model: ["ArrowCursor", "UpArrowCursor", "CrossCursor", "WaitCursor", + "IBeamCursor", "SizeVerCursor", "SizeHorCursor", "SizeBDiagCursor", + "SizeFDiagCursor", "SizeAllCursor", "BlankCursor", "SplitVCursor", + "SplitHCursor", "PointingHandCursor", "ForbiddenCursor", "WhatsThisCursor", + "BusyCursor", "OpenHandCursor", "ClosedHandCursor", "DragCopyCursor", + "DragMoveCursor", "DragLinkCursor"] + Layout.fillWidth: true + scope: "Qt" + } + ExpandingSpacer { + } + } + + Label { + text: qsTr("Prevent stealing") + tooltip: qsTr("This property controls whether the mouse events may be stolen from this MouseArea.") + } + + SecondColumnLayout { + CheckBox { + Layout.fillWidth: true + backendValue: backendValues.preventStealing + text: backendValues.preventStealing.valueToString + } + + ExpandingSpacer { + } + } + + Label { + text: qsTr("Propagate composed events") + tooltip: qsTr("This property controls whether composed mouse events will automatically propagate to other MouseAreas.") + } + + SecondColumnLayout { + CheckBox { + Layout.fillWidth: true + backendValue: backendValues.propagateComposedEvents + text: backendValues.propagateComposedEvents.valueToString + } + + ExpandingSpacer { + } + } + } + } + + Section { + anchors.left: parent.left + anchors.right: parent.right + caption: qsTr("Drag") + + SectionLayout { + Label { + text: qsTr("Target") + tooltip: qsTr("Sets the id of the item to drag.") + } + SecondColumnLayout { + ItemFilterComboBox { + typeFilter: "QtQuick.QtObject" + validator: RegExpValidator { regExp: /(^$|^[a-z_]\w*)/ } + backendValue: backendValues.drag_target + Layout.fillWidth: true + } + + ExpandingSpacer { + } + } + + Label { + text: qsTr("Axis") + tooltip: qsTr("Specifies whether dragging can be done horizontally, vertically, or both.") + } + SecondColumnLayout { + ComboBox { + scope: "Drag" + model: ["XAxis", "YAxis", "XAndYAxis"] + backendValue: backendValues.drag_axis + Layout.fillWidth: true + } + + ExpandingSpacer { + } + } + + Label { + text: qsTr("Filter children") + tooltip: qsTr("Specifies whether a drag overrides descendant MouseAreas.") + } + + SecondColumnLayout { + CheckBox { + Layout.fillWidth: true + backendValue: backendValues.drag_filterChildren + text: backendValues.drag_filterChildren.valueToString + } + + ExpandingSpacer { + } + } + + Label { + text: qsTr("Threshold") + tooltip: qsTr("Determines the threshold in pixels of when the drag operation should start.") + } + + SecondColumnLayout { + SpinBox { + backendValue: backendValues.drag_threshold + minimumValue: 0 + maximumValue: 5000 + decimals: 0 + } + + ExpandingSpacer { + } + } + + Label { + text: qsTr("Smoothed") + tooltip: qsTr("If set to true, the target will be moved only after the drag operation has started.\n" + + "If set to false, the target will be moved straight to the current mouse position.") + } + + SecondColumnLayout { + CheckBox { + Layout.fillWidth: true + backendValue: backendValues.drag_smoothed + text: backendValues.drag_smoothed.valueToString + } + + ExpandingSpacer { + } + } } } } diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/TextInputSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/TextInputSection.qml index cfd972b0854..5c0e84d039b 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/TextInputSection.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/TextInputSection.qml @@ -113,6 +113,19 @@ Section { minimumValue: -200 } + Label { + visible: textInputSection.isTextInput + text: qsTr("Maximum length") + tooltip: qsTr("Sets the maximum permitted length of the text in the TextInput.") + } + SpinBox { + visible: textInputSection.isTextInput + Layout.fillWidth: true + backendValue: backendValues.maximumLength + minimumValue: 0 + maximumValue: 32767 + } + Label { text: qsTr("Flags") Layout.alignment: Qt.AlignTop diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FlickableSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FlickableSection.qml index 2b97df06467..11f46d29c52 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FlickableSection.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FlickableSection.qml @@ -47,7 +47,7 @@ Section { SecondColumnLayout { ComboBox { backendValue: backendValues.flickableDirection - model: ["AutoFlickDirection", "HorizontalFlick", "VerticalFlick", "HorizontalAndVerticalFlick"] + model: ["AutoFlickDirection", "AutoFlickIfNeeded", "HorizontalFlick", "VerticalFlick", "HorizontalAndVerticalFlick"] Layout.fillWidth: true scope: "Flickable" } @@ -63,7 +63,7 @@ Section { SecondColumnLayout { ComboBox { backendValue: backendValues.boundsBehavior - model: ["StopAtBounds", "DragOverBounds", "DragAndOvershootBounds"] + model: ["StopAtBounds", "DragOverBounds", "OvershootBounds", "DragAndOvershootBounds"] Layout.fillWidth: true scope: "Flickable" } @@ -166,6 +166,23 @@ Section { } } + Label { + text: qsTr("Synchronous drag") + tooltip: qsTr("If set to true, then when the mouse or touchpoint moves far enough to begin dragging\n" + + "the content, the content will jump, such that the content pixel which was under the\n" + + "cursor or touchpoint when pressed remains under that point.") + } + + SecondColumnLayout { + CheckBox { + Layout.fillWidth: true + backendValue: backendValues.synchronousDrag + text: backendValues.synchronousDrag.valueToString + } + ExpandingSpacer { + } + } + Label { text: qsTr("Content size") } @@ -246,6 +263,45 @@ Section { } } + Label { + text: qsTr("Origin") + } + + SecondColumnLayout { + Label { + text: "X" + width: root.labelWidth + } + + SpinBox { + backendValue: backendValues.originX + minimumValue: -8000 + maximumValue: 8000 + implicitWidth: root.spinBoxWidth + Layout.fillWidth: true + } + + Item { + width: 4 + height: 4 + } + + Label { + text: "Y" + width: root.labelWidth + } + + SpinBox { + backendValue: backendValues.originY + minimumValue: -8000 + maximumValue: 8000 + implicitWidth: root.spinBoxWidth + Layout.fillWidth: true + } + ExpandingSpacer { + } + } + Label { text: qsTr("Margins") } diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FontSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FontSection.qml index 4ef079af4c7..94a43424dac 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FontSection.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FontSection.qml @@ -276,5 +276,17 @@ Section { "Latin script,\n it is merely a cosmetic feature. Setting the preferShaping property to false will disable all such features\nwhen they are not required, which will improve performance in most cases.") } } + + Label { + text: qsTr("Hinting preference") + toolTip: qsTr("Sets the preferred hinting on the text.") + } + + ComboBox { + Layout.fillWidth: true + backendValue: getBackendValue("hintingPreference") + model: ["PreferDefaultHinting", "PreferNoHinting", "PreferVerticalHinting", "PreferFullHinting"] + scope: "Font" + } } } diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/StandardTextSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/StandardTextSection.qml index 6ecc8d525ce..6c5e6fde867 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/StandardTextSection.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/StandardTextSection.qml @@ -61,7 +61,7 @@ Section { Layout.fillWidth: true backendValue: backendValues.wrapMode scope: "Text" - model: ["NoWrap", "WordWrap", "WrapAnywhere", "WrapAtWordBoundaryOrAnywhere"] + model: ["NoWrap", "WordWrap", "WrapAnywhere", "Wrap"] } Label { @@ -77,6 +77,21 @@ Section { model: ["ElideNone", "ElideLeft", "ElideMiddle", "ElideRight"] } + Label { + visible: showElide + text: qsTr("Maximum line count") + tooltip: qsTr("Limits the number of lines that the text item will show.") + } + + SpinBox { + visible: showElide + Layout.fillWidth: true + backendValue: backendValues.maximumLineCount + minimumValue: 0 + maximumValue: 10000 + decimals: 0 + } + Label { text: qsTr("Alignment") } @@ -124,6 +139,7 @@ Section { toolTip: qsTr("Specifies how the font size of the displayed text is determined.") } ComboBox { + id: fontSizeMode visible: showFontSizeMode scope: "Text" model: ["FixedSize", "HorizontalFit", "VerticalFit", "Fit"] @@ -131,6 +147,48 @@ Section { Layout.fillWidth: true } + Label { + visible: showFontSizeMode + text: qsTr("Minimum size") + } + SecondColumnLayout { + visible: showFontSizeMode + + SpinBox { + enabled: fontSizeMode.currentIndex !== 0 + minimumValue: 0 + maximumValue: 500 + decimals: 0 + backendValue: backendValues.minimumPixelSize + Layout.fillWidth: true + Layout.minimumWidth: 60 + } + Label { + text: qsTr("Pixel") + tooltip: qsTr("Specifies the minimum font pixel size of scaled text.") + width: 42 + } + + Item { + width: 4 + height: 4 + } + + SpinBox { + enabled: fontSizeMode.currentIndex !== 0 + minimumValue: 0 + maximumValue: 500 + decimals: 0 + backendValue: backendValues.minimumPointSize + Layout.fillWidth: true + Layout.minimumWidth: 60 + } + Label { + text: qsTr("Point") + tooltip: qsTr("Specifies the minimum font point size of scaled text.") + width: 42 + } + } Label { visible: showLineHeight @@ -148,5 +206,17 @@ Section { stepSize: 0.1 } + Label { + visible: showLineHeight + text: qsTr("Line height mode") + toolTip: qsTr("Determines how the line height is specified.") + } + ComboBox { + visible: showLineHeight + scope: "Text" + model: ["ProportionalHeight", "FixedHeight"] + backendValue: backendValues.lineHeightMode + Layout.fillWidth: true + } } } diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index b7426c7a43c..91e4c9c7b05 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -91,7 +91,12 @@ QStringList globalQtEnums() "Horizontal", "Vertical", "AlignVCenter", "AlignLeft", "LeftToRight", "RightToLeft", "AlignHCenter", "AlignRight", "AlignBottom", "AlignBaseline", "AlignTop", "BottomLeft", "LeftEdge", "RightEdge", "BottomEdge", "TopEdge", "TabFocus", "ClickFocus", "StrongFocus", - "WheelFocus", "NoFocus" + "WheelFocus", "NoFocus", "ArrowCursor", "UpArrowCursor", "CrossCursor", "WaitCursor", + "IBeamCursor", "SizeVerCursor", "SizeHorCursor", "SizeBDiagCursor", "SizeFDiagCursor", + "SizeAllCursor", "BlankCursor", "SplitVCursor", "SplitHCursor", "PointingHandCursor", + "ForbiddenCursor", "WhatsThisCursor", "BusyCursor", "OpenHandCursor", "ClosedHandCursor", + "DragCopyCursor", "DragMoveCursor", "DragLinkCursor", "TopToBottom", + "LeftButton", "RightButton", "MiddleButton", "BackButton", "ForwardButton", "AllButtons" }; return list; @@ -101,7 +106,7 @@ QStringList knownEnumScopes() { static const QStringList list = { "TextInput", "TextEdit", "Material", "Universal", "Font", "Shape", "ShapePath", - "AbstractButton", "Text", "ShaderEffectSource" + "AbstractButton", "Text", "ShaderEffectSource", "Grid" }; return list; } From 2b6ce6cea5ffffc2f788ba08f3d9bb06bfcd498e Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 24 Apr 2020 13:01:20 +0200 Subject: [PATCH 08/26] Fix display of some file paths on Windows In particular, the "executable on host" field on RemoteLinux & friends had the wrong separators. Change-Id: Ic36d73e863c78dcefd5c670537dd7c86b081d173 Reviewed-by: hjk --- src/plugins/projectexplorer/projectconfigurationaspects.cpp | 4 ++-- src/plugins/projectexplorer/runconfigurationaspects.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/projectexplorer/projectconfigurationaspects.cpp b/src/plugins/projectexplorer/projectconfigurationaspects.cpp index 44e765e3c19..588318de592 100644 --- a/src/plugins/projectexplorer/projectconfigurationaspects.cpp +++ b/src/plugins/projectexplorer/projectconfigurationaspects.cpp @@ -178,12 +178,12 @@ void BaseStringAspect::toMap(QVariantMap &map) const FilePath BaseStringAspect::filePath() const { - return FilePath::fromString(d->m_value); + return FilePath::fromUserInput(d->m_value); } void BaseStringAspect::setFilePath(const FilePath &val) { - setValue(val.toString()); + setValue(val.toUserOutput()); } void BaseStringAspect::setLabelText(const QString &labelText) diff --git a/src/plugins/projectexplorer/runconfigurationaspects.cpp b/src/plugins/projectexplorer/runconfigurationaspects.cpp index 4ec47bca4e4..343ca369ea9 100644 --- a/src/plugins/projectexplorer/runconfigurationaspects.cpp +++ b/src/plugins/projectexplorer/runconfigurationaspects.cpp @@ -469,7 +469,7 @@ void ExecutableAspect::setPlaceHolderText(const QString &placeHolderText) void ExecutableAspect::setExecutable(const FilePath &executable) { - m_executable.setValue(executable.toString()); + m_executable.setFilePath(executable); m_executable.setShowToolTipOnLabel(true); } From ab840d004377f96ede62ce92d603f63d90818e89 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 24 Apr 2020 17:19:23 +0200 Subject: [PATCH 09/26] Doc: Fix description of how to get to global "lib search path" setting Change-Id: I7598f91a77c27578f1e6b106f6ae9b0f84481746 Reviewed-by: Leena Miettinen --- .../creator-only/creator-projects-settings-run-desktop.qdocinc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-run-desktop.qdocinc b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-run-desktop.qdocinc index e0b1c7187e4..732090a5238 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-run-desktop.qdocinc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-run-desktop.qdocinc @@ -53,7 +53,7 @@ To disable library linking for the current project, deselect the \uicontrol {Add build library search path to PATH} check box. To disable library linking for all projects, select \uicontrol Tools > - \uicontrol Options > \uicontrol General, and then deselect the + \uicontrol Options > \uicontrol {Build & Run}, and then deselect the \uicontrol {Add linker library search paths to run environment} check box. The \uicontrol {Use debug version of frameworks (DYLD_IMAGE_SUFFIX=_debug)} option From 5795ce2aae14692ceed23d3a673661373f9f8ce5 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Wed, 22 Apr 2020 23:24:54 +0200 Subject: [PATCH 10/26] McuSupport: Remove outdated Qt for MCUs kits Add a version to the generated Qt for MCUs kits. That version will increase with every change to the way Qt for MCUs kits get generated. If there are auto-detected Qt for MCUs kits with a different version than the current, remove these kits when a "fresh" gets generated. Task-number: QTCREATORBUG-23891 Change-Id: Iafcd2342d458f9c77ada47180cb61b3b4b090598 Reviewed-by: Eike Ziller --- src/plugins/mcusupport/mcusupportconstants.h | 1 + src/plugins/mcusupport/mcusupportoptions.cpp | 18 ++++++++++++++++++ src/plugins/mcusupport/mcusupportoptions.h | 2 ++ .../mcusupport/mcusupportoptionspage.cpp | 1 + 4 files changed, 22 insertions(+) diff --git a/src/plugins/mcusupport/mcusupportconstants.h b/src/plugins/mcusupport/mcusupportconstants.h index 88489b1196c..17fd68f181f 100644 --- a/src/plugins/mcusupport/mcusupportconstants.h +++ b/src/plugins/mcusupport/mcusupportconstants.h @@ -35,6 +35,7 @@ const char SETTINGS_ID[] = "CC.McuSupport.Configuration"; const char KIT_MCUTARGET_VENDOR_KEY[] = "McuSupport.McuTargetVendor"; const char KIT_MCUTARGET_MODEL_KEY[] = "McuSupport.McuTargetModel"; const char KIT_MCUTARGET_SDKVERSION_KEY[] = "McuSupport.McuTargetSdkVersion"; +const char KIT_MCUTARGET_KITVERSION_KEY[] = "McuSupport.McuTargetKitVersion"; const char SETTINGS_GROUP[] = "McuSupport"; const char SETTINGS_KEY_PACKAGE_PREFIX[] = "Package_"; diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 719030e3feb..342e273e6e3 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -61,6 +61,8 @@ namespace McuSupport { namespace Internal { +static const int KIT_VERSION = 1; // Bumps up whenever details in Kit creation change + static QString packagePathFromSettings(const QString &settingsKey, const QString &defaultPath = {}) { QSettings *s = Core::ICore::settings(); @@ -473,6 +475,7 @@ static void setKitProperties(const QString &kitName, ProjectExplorer::Kit *k, k->setValue(Constants::KIT_MCUTARGET_MODEL_KEY, mcuTarget->qulPlatform()); k->setValue(Constants::KIT_MCUTARGET_SDKVERSION_KEY, McuSupportOptions::supportedQulVersion().toString()); + k->setValue(Constants::KIT_MCUTARGET_KITVERSION_KEY, KIT_VERSION); k->setAutoDetected(true); k->makeSticky(); if (mcuTarget->toolChainPackage()->type() == McuToolChainPackage::TypeDesktop) @@ -613,6 +616,21 @@ QList McuSupportOptions::existingKits(const McuTarget *m }); } +QList McuSupportOptions::outdatedKits() +{ + return Utils::filtered(ProjectExplorer::KitManager::kits(), [](ProjectExplorer::Kit *kit) { + return kit->isAutoDetected() + && !kit->value(Constants::KIT_MCUTARGET_VENDOR_KEY).isNull() + && kit->value(Constants::KIT_MCUTARGET_KITVERSION_KEY) != KIT_VERSION; + }); +} + +void McuSupportOptions::removeOutdatedKits() +{ + for (auto kit : McuSupportOptions::outdatedKits()) + ProjectExplorer::KitManager::deregisterKit(kit); +} + ProjectExplorer::Kit *McuSupportOptions::newKit(const McuTarget *mcuTarget) { using namespace ProjectExplorer; diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h index b87452cca5c..2843ba6341c 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -168,6 +168,8 @@ public: QString kitName(const McuTarget* mcuTarget) const; QList existingKits(const McuTarget *mcuTargt); + static QList outdatedKits(); + static void removeOutdatedKits(); ProjectExplorer::Kit *newKit(const McuTarget *mcuTarget); void populatePackagesAndTargets(); static void registerQchFiles(); diff --git a/src/plugins/mcusupport/mcusupportoptionspage.cpp b/src/plugins/mcusupport/mcusupportoptionspage.cpp index e07899028d5..7fabe979314 100644 --- a/src/plugins/mcusupport/mcusupportoptionspage.cpp +++ b/src/plugins/mcusupport/mcusupportoptionspage.cpp @@ -231,6 +231,7 @@ void McuSupportOptionsWidget::apply() return; McuSupportOptions::registerQchFiles(); + McuSupportOptions::removeOutdatedKits(); const McuTarget *mcuTarget = currentMcuTarget(); if (!mcuTarget) From db0d7a2669acf4d51dfdb31ef092669d4d8782c5 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Thu, 23 Apr 2020 23:30:40 +0200 Subject: [PATCH 11/26] McuSupport: Make some functions in McuSupportOptions static There is no good enough reason to have them non-static, and upcoming changes will have it a bit easier with static calls. Additionally, make McuTarget::m_toolChainPackage const. Change-Id: I002d5d56606d3b43c4c7a2f63c59e97a81342c69 Reviewed-by: Eike Ziller --- src/plugins/mcusupport/mcusupportoptions.cpp | 36 +++++++++---------- src/plugins/mcusupport/mcusupportoptions.h | 12 +++---- .../mcusupport/mcusupportoptionspage.cpp | 10 +++--- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 342e273e6e3..15936c316ff 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -321,13 +321,13 @@ QVariant McuToolChainPackage::debuggerId() const } McuTarget::McuTarget(const QString &vendor, const QString &platform, - const QVector &packages, McuToolChainPackage *toolChainPackage) + const QVector &packages, + const McuToolChainPackage *toolChainPackage) : m_vendor(vendor) , m_qulPlatform(platform) , m_packages(packages) , m_toolChainPackage(toolChainPackage) { - QTC_CHECK(m_toolChainPackage == nullptr || m_packages.contains(m_toolChainPackage)); } QString McuTarget::vendor() const @@ -340,7 +340,7 @@ QVector McuTarget::packages() const return m_packages; } -McuToolChainPackage *McuTarget::toolChainPackage() const +const McuToolChainPackage *McuTarget::toolChainPackage() const { return m_toolChainPackage; } @@ -523,7 +523,7 @@ static void setKitDevice(ProjectExplorer::Kit *k, const McuTarget* mcuTarget) } static void setKitEnvironment(ProjectExplorer::Kit *k, const McuTarget* mcuTarget, - McuPackage *qtForMCUsSdkPackage) + const McuPackage *qtForMCUsSdkPackage) { using namespace ProjectExplorer; @@ -537,18 +537,17 @@ static void setKitEnvironment(ProjectExplorer::Kit *k, const McuTarget* mcuTarge && !CMakeProjectManager::CMakeToolManager::defaultCMakeTool()->hasFileApi()) pathAdditions.append(QDir::toNativeSeparators(qtForMCUsSdkPackage->path() + "/bin")); - QVector packagesIncludingSdk; - packagesIncludingSdk.reserve(mcuTarget->packages().size() + 1); - packagesIncludingSdk.append(mcuTarget->packages()); - packagesIncludingSdk.append(qtForMCUsSdkPackage); - - for (auto package : packagesIncludingSdk) { + auto processPackage = [&pathAdditions, &changes](const McuPackage *package) { if (package->addToPath()) pathAdditions.append(QDir::toNativeSeparators(package->path())); if (!package->environmentVariableName().isEmpty()) changes.append({package->environmentVariableName(), QDir::toNativeSeparators(package->path())}); - } + }; + for (auto package : mcuTarget->packages()) + processPackage(package); + processPackage(qtForMCUsSdkPackage); + pathAdditions.append("${Path}"); pathAdditions.append(QDir::toNativeSeparators(Core::ICore::libexecPath() + "/clang/bin")); const QString path = QLatin1String(Utils::HostOsInfo().isWindowsHost() ? "Path" : "PATH"); @@ -592,7 +591,7 @@ static void setKitQtVersionOptions(ProjectExplorer::Kit *k) QtSupport::QtKitAspect::setQtVersion(k, nullptr); } -QString McuSupportOptions::kitName(const McuTarget *mcuTarget) const +QString McuSupportOptions::kitName(const McuTarget *mcuTarget) { // TODO: get version from qulSdkPackage and insert into name const QString colorDepth = mcuTarget->colorDepth() > 0 @@ -607,10 +606,10 @@ QString McuSupportOptions::kitName(const McuTarget *mcuTarget) const .arg(supportedQulVersion().toString(), targetName, colorDepth); } -QList McuSupportOptions::existingKits(const McuTarget *mcuTargt) +QList McuSupportOptions::existingKits(const McuTarget *mcuTarget) { using namespace ProjectExplorer; - const QString mcuTargetKitName = kitName(mcuTargt); + const QString mcuTargetKitName = kitName(mcuTarget); return Utils::filtered(KitManager::kits(), [&mcuTargetKitName](Kit *kit) { return kit->isAutoDetected() && kit->unexpandedDisplayName() == mcuTargetKitName; }); @@ -631,19 +630,20 @@ void McuSupportOptions::removeOutdatedKits() ProjectExplorer::KitManager::deregisterKit(kit); } -ProjectExplorer::Kit *McuSupportOptions::newKit(const McuTarget *mcuTarget) +ProjectExplorer::Kit *McuSupportOptions::newKit(const McuTarget *mcuTarget, + const McuPackage *qtForMCUsSdk) { using namespace ProjectExplorer; - const auto init = [this, mcuTarget](Kit *k) { + const auto init = [mcuTarget, qtForMCUsSdk](Kit *k) { KitGuard kitGuard(k); setKitProperties(kitName(mcuTarget), k, mcuTarget); setKitDevice(k, mcuTarget); setKitToolchains(k, mcuTarget->toolChainPackage()); setKitDebugger(k, mcuTarget->toolChainPackage()); - setKitEnvironment(k, mcuTarget, qtForMCUsSdkPackage); - setKitCMakeOptions(k, mcuTarget, qtForMCUsSdkPackage->path()); + setKitEnvironment(k, mcuTarget, qtForMCUsSdk); + setKitCMakeOptions(k, mcuTarget, qtForMCUsSdk->path()); setKitQtVersionOptions(k); k->setup(); diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h index 2843ba6341c..72d395090f6 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -132,11 +132,11 @@ class McuTarget : public QObject public: McuTarget(const QString &vendor, const QString &platform, const QVector &packages, - McuToolChainPackage *toolChainPackage); + const McuToolChainPackage *toolChainPackage); QString vendor() const; QVector packages() const; - McuToolChainPackage *toolChainPackage() const; + const McuToolChainPackage *toolChainPackage() const; QString qulPlatform() const; void setColorDepth(int colorDepth); int colorDepth() const; @@ -146,7 +146,7 @@ private: const QString m_vendor; const QString m_qulPlatform; const QVector m_packages; - McuToolChainPackage *m_toolChainPackage; + const McuToolChainPackage *m_toolChainPackage; int m_colorDepth = -1; }; @@ -165,12 +165,12 @@ public: void setQulDir(const Utils::FilePath &dir); static Utils::FilePath qulDirFromSettings(); - QString kitName(const McuTarget* mcuTarget) const; + static QString kitName(const McuTarget* mcuTarget); - QList existingKits(const McuTarget *mcuTargt); + static QList existingKits(const McuTarget *mcuTarget); static QList outdatedKits(); static void removeOutdatedKits(); - ProjectExplorer::Kit *newKit(const McuTarget *mcuTarget); + static ProjectExplorer::Kit *newKit(const McuTarget *mcuTarget, const McuPackage *qtForMCUsSdk); void populatePackagesAndTargets(); static void registerQchFiles(); static void registerExamples(); diff --git a/src/plugins/mcusupport/mcusupportoptionspage.cpp b/src/plugins/mcusupport/mcusupportoptionspage.cpp index 7fabe979314..e4506b902d4 100644 --- a/src/plugins/mcusupport/mcusupportoptionspage.cpp +++ b/src/plugins/mcusupport/mcusupportoptionspage.cpp @@ -168,7 +168,7 @@ void McuSupportOptionsWidget::updateStatus() mcuTargetValid ? QString::fromLatin1( "A kit %1 for the selected target can be " "generated. Press Apply to generate it.") - .arg(m_options.kitName(mcuTarget)) + .arg(McuSupportOptions::kitName(mcuTarget)) : "Provide the package paths in order to create a kit " "for your target."); } @@ -237,9 +237,9 @@ void McuSupportOptionsWidget::apply() if (!mcuTarget) return; - for (auto existingKit : m_options.existingKits(mcuTarget)) + for (auto existingKit : McuSupportOptions::existingKits(mcuTarget)) ProjectExplorer::KitManager::deregisterKit(existingKit); - m_options.newKit(mcuTarget); + McuSupportOptions::newKit(mcuTarget, m_options.qtForMCUsSdkPackage); } void McuSupportOptionsWidget::populateMcuTargetsComboBox() @@ -247,8 +247,8 @@ void McuSupportOptionsWidget::populateMcuTargetsComboBox() m_options.populatePackagesAndTargets(); m_mcuTargetsComboBox->clear(); m_mcuTargetsComboBox->addItems( - Utils::transform(m_options.mcuTargets, [this](McuTarget *t){ - return m_options.kitName(t); + Utils::transform(m_options.mcuTargets, [](McuTarget *t) { + return McuSupportOptions::kitName(t); })); updateStatus(); } From f2b9bdd9f276d01cb90983875226892a78dc54c5 Mon Sep 17 00:00:00 2001 From: Vikas Pachdha Date: Mon, 27 Apr 2020 12:25:05 +0200 Subject: [PATCH 12/26] Fix QML designer item library crash Task-number: QDS-2011 Change-Id: Ibf0c6db47eb25b730bc31fc7b52b0ec93ab15a63 Reviewed-by: Thomas Hartmann --- src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h b/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h index 6c91d4917c2..6e70169a6af 100644 --- a/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h +++ b/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h @@ -29,6 +29,7 @@ #include "propertycontainer.h" #include +#include namespace QmlDesigner { @@ -88,7 +89,7 @@ public: void addHints(const QHash &hints); private: - QExplicitlySharedDataPointer m_data; + QSharedDataPointer m_data; }; class QMLDESIGNERCORE_EXPORT ItemLibraryInfo : public QObject From 4435a1997903bbc6d7a554de1daea9d25a21790f Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 24 Apr 2020 19:45:17 +0200 Subject: [PATCH 13/26] QmlDesigner: Add Combo box for states MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I91494e297cc2c1aa4b192081b5cd31acbca87ce9 Reviewed-by: Henning Gründl Reviewed-by: Thomas Hartmann --- .../propertyEditorQmlSources/QtQuick/AdvancedSection.qml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AdvancedSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AdvancedSection.qml index 9990ddf8c66..5434e4705bf 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AdvancedSection.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AdvancedSection.qml @@ -103,11 +103,14 @@ Section { text: qsTr("State") } SecondColumnLayout { - LineEdit { + + ComboBox { + Layout.fillWidth: true backendValue: backendValues.state - showTranslateCheckBox: false - enabled: anchorBackend.hasParent || isBaseState + model: allStateNames + valueType: ComboBox.String } + ExpandingSpacer { } } From 1cea268c9298ffd9477ab00f6507613286de8c59 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 24 Apr 2020 15:10:53 +0200 Subject: [PATCH 14/26] QmlJSEditor: Fix semantic highlighting Do not send empty ranges as they may mess up the highlighting of the file. Fixes: QTCREATORBUG-23729 Change-Id: I77adcccb3a3da890e87f0b2860b945819446a3a8 Reviewed-by: Ulf Hermann --- src/plugins/qmljseditor/qmljssemantichighlighter.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp index 65e9b0ca2e5..b9ef9dc7469 100644 --- a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp +++ b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp @@ -269,8 +269,11 @@ protected: } } - if (type != SemanticHighlighter::UnknownType) - addUse(location, type); + if (type != SemanticHighlighter::UnknownType) { + // do not add uses of length 0 - this messes up highlighting (e.g. anon functions) + if (location.length != 0) + addUse(location, type); + } } void processTypeId(UiQualifiedId *typeId) From 5ac3f2958f005eb093c2f0b7fb366c5669bfb62e Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 24 Apr 2020 19:44:37 +0200 Subject: [PATCH 15/26] Add StyleHelper functions for icon font Change-Id: I783f3405dafbd51bf7433084709a2362ed2bd759 Reviewed-by: Tim Jenssen --- src/libs/utils/stylehelper.cpp | 45 ++++++++++++++++++++++++++++++++++ src/libs/utils/stylehelper.h | 3 +++ 2 files changed, 48 insertions(+) diff --git a/src/libs/utils/stylehelper.cpp b/src/libs/utils/stylehelper.cpp index f91c24b52ac..68d40accbc6 100644 --- a/src/libs/utils/stylehelper.cpp +++ b/src/libs/utils/stylehelper.cpp @@ -28,6 +28,8 @@ #include "theme/theme.h" #include "hostosinfo.h" +#include + #include #include #include @@ -35,6 +37,7 @@ #include #include #include +#include #include // Clamps float color values within (0, 255) @@ -542,6 +545,48 @@ QLinearGradient StyleHelper::statusBarGradient(const QRect &statusBarRect) return grad; } +QIcon StyleHelper::getIconFromIconFont(const QString &fontName, const QString &iconSymbol, int fontSize, int iconSize, QColor color) +{ + QFontDatabase a; + + QTC_ASSERT(a.hasFamily(fontName), {}); + + if (a.hasFamily(fontName)) { + + QIcon icon; + QSize size(iconSize, iconSize); + + const int maxDpr = qRound(qApp->devicePixelRatio()); + for (int dpr = 1; dpr <= maxDpr; dpr++) { + QPixmap pixmap(size * dpr); + pixmap.setDevicePixelRatio(dpr); + pixmap.fill(Qt::transparent); + + QFont font(fontName); + font.setPixelSize(fontSize * dpr); + + QPainter painter(&pixmap); + painter.save(); + painter.setPen(color); + painter.setFont(font); + painter.drawText(QRectF(QPoint(0, 0), size), iconSymbol); + painter.restore(); + + icon.addPixmap(pixmap); + } + + return icon; + } + + return {}; +} + +QIcon StyleHelper::getIconFromIconFont(const QString &fontName, const QString &iconSymbol, int fontSize, int iconSize) +{ + QColor penColor = QApplication::palette("QWidget").color(QPalette::Normal, QPalette::ButtonText); + return getIconFromIconFont(fontName, iconSymbol, fontSize, iconSize, penColor); +} + QString StyleHelper::dpiSpecificImageFile(const QString &fileName) { // See QIcon::addFile() diff --git a/src/libs/utils/stylehelper.h b/src/libs/utils/stylehelper.h index 4bcec960ad5..09f32534352 100644 --- a/src/libs/utils/stylehelper.h +++ b/src/libs/utils/stylehelper.h @@ -93,6 +93,9 @@ public: static void tintImage(QImage &img, const QColor &tintColor); static QLinearGradient statusBarGradient(const QRect &statusBarRect); + static QIcon getIconFromIconFont(const QString &fontName, const QString &iconSymbol, int fontSize, int iconSize, QColor color); + static QIcon getIconFromIconFont(const QString &fontName, const QString &iconSymbol, int fontSize, int iconSize); + static QString dpiSpecificImageFile(const QString &fileName); static QString imageFileWithResolution(const QString &fileName, int dpr); static QList availableImageResolutions(const QString &fileName); From a0385503d5cbc6f0565269ae5db20e07b9271429 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 16 Apr 2020 18:18:17 +0200 Subject: [PATCH 16/26] QmlDesigner: Use proper icons in FlowEditor The icons are part of the icon font. Change-Id: I5f501ebf74561429738b5b2d4fd007ca22cd7e2d Reviewed-by: Tim Jenssen --- .../components/formeditor/formeditoritem.cpp | 105 ++++++++++++++---- .../components/formeditor/formeditoritem.h | 17 ++- 2 files changed, 95 insertions(+), 27 deletions(-) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp index 96a4cc5adf6..337cc0f7fc9 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp @@ -32,10 +32,13 @@ #include #include +#include + #include #include #include +#include #include #include #include @@ -47,6 +50,36 @@ namespace QmlDesigner { const int flowBlockSize = 200; +const int blockRadius = 18; +const int blockAdjust = 40; + +const char startNodeIcon[] = "\u0055"; + +void drawIcon(QPainter *painter, + int x, + int y, + const QString &iconSymbol, + int fontSize, int iconSize, + const QColor &penColor) +{ + static QFontDatabase a; + + const QString fontName = "qtds_propertyIconFont.ttf"; + + Q_ASSERT(a.hasFamily(fontName)); + + if (a.hasFamily(fontName)) { + QFont font(fontName); + font.setPixelSize(fontSize); + + painter->save(); + painter->setPen(penColor); + painter->setFont(font); + painter->drawText(QRectF(x, y, iconSize, iconSize), iconSymbol); + + painter->restore(); + } +} FormEditorScene *FormEditorItem::scene() const { return qobject_cast(QGraphicsItem::scene()); @@ -578,6 +611,7 @@ void FormEditorFlowActionItem::paint(QPainter *painter, const QStyleOptionGraphi return; painter->save(); + painter->setRenderHint(QPainter::Antialiasing); QPen pen; pen.setJoinStyle(Qt::MiterJoin); @@ -622,10 +656,9 @@ void FormEditorFlowActionItem::paint(QPainter *painter, const QStyleOptionGraphi fillColor = qmlItemNode().modelNode().auxiliaryData("fillColor").value(); if (fillColor.alpha() > 0) - painter->fillRect(boundingRect(), fillColor); - - painter->drawRect(boundingRect()); + painter->setBrush(fillColor); + painter->drawRoundedRect(boundingRect(), blockRadius, blockRadius); painter->restore(); } @@ -990,6 +1023,7 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi return; painter->save(); + painter->setRenderHint(QPainter::Antialiasing); ResolveConnection resolved(qmlItemNode()); @@ -1022,8 +1056,8 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi toRect.translate(QmlItemNode(resolved.to).flowPosition()); if (resolved.isStartLine) { - fromRect = QRectF(0,0,50,50); - fromRect.translate(QmlItemNode(resolved.to).flowPosition() + QPoint(-120, toRect.height() / 2 - 25)); + fromRect = QRectF(0, 0, 96, 96); + fromRect.translate(QmlItemNode(resolved.to).flowPosition() + QPoint(-180, toRect.height() / 2 - 96 / 2)); } toRect.translate(-pos()); @@ -1076,23 +1110,28 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi if (qmlItemNode().modelNode().hasAuxiliaryData("breakPoint")) breakOffset = qmlItemNode().modelNode().auxiliaryData("breakPoint").toInt(); + if (resolved.isStartLine) + fromRect.translate(0, inOffset); + paintConnection(painter, fromRect, toRect, width, adjustedWidth ,color, dash, outOffset, inOffset, breakOffset); if (resolved.isStartLine) { + + const QString icon = Theme::getIconUnicode(Theme::startNode); + QPen pen; pen.setCosmetic(true); - pen.setColor(color); painter->setPen(pen); - painter->drawRect(fromRect); - if (scaleFactor > 0.4) { - painter->drawLine(fromRect.topRight() + QPoint(20,10), fromRect.bottomRight() + QPoint(20,-10)); - painter->drawLine(fromRect.topRight() + QPoint(25,12), fromRect.bottomRight() + QPoint(25,-12)); - painter->drawLine(fromRect.topRight() + QPoint(30,15), fromRect.bottomRight() + QPoint(30,-15)); - painter->drawLine(fromRect.topRight() + QPoint(35,17), fromRect.bottomRight() + QPoint(35,-17)); - painter->drawLine(fromRect.topRight() + QPoint(40,20), fromRect.bottomRight() + QPoint(40,-20)); - } + const int iconAdjust = 48; + const int offset = 96; + const int size = fromRect.width(); + const int iconSize = size - iconAdjust; + const int x = fromRect.topRight().x() - offset; + const int y = fromRect.topRight().y(); + painter->drawRoundedRect(x, y , size - 10, size, size / 2, iconSize / 2); + drawIcon(painter, x + iconAdjust / 2, y + iconAdjust / 2, icon, iconSize, iconSize, color); } painter->restore(); @@ -1141,6 +1180,9 @@ void FormEditorFlowDecisionItem::paint(QPainter *painter, const QStyleOptionGrap painter->save(); + painter->setRenderHint(QPainter::Antialiasing); + painter->setRenderHint(QPainter::SmoothPixmapTransform); + QPen pen; pen.setJoinStyle(Qt::MiterJoin); pen.setCosmetic(true); @@ -1179,20 +1221,37 @@ void FormEditorFlowDecisionItem::paint(QPainter *painter, const QStyleOptionGrap if (qmlItemNode().modelNode().hasAuxiliaryData("fillColor")) fillColor = qmlItemNode().modelNode().auxiliaryData("fillColor").value(); + painter->save(); + + if (m_iconType == DecisionIcon) { + painter->translate(boundingRect().center()); + painter->rotate(45); + painter->translate(-boundingRect().center()); + } + if (fillColor.alpha() > 0) - painter->fillRect(boundingRect(), fillColor); + painter->setBrush(fillColor); - painter->drawLine(boundingRect().left(), boundingRect().center().y(), - boundingRect().center().x(), boundingRect().top()); + int radius = blockRadius; - painter->drawLine(boundingRect().center().x(), boundingRect().top(), - boundingRect().right(), boundingRect().center().y()); + const QRectF adjustedRect = boundingRect().adjusted(blockAdjust, + blockAdjust, + -blockAdjust, + -blockAdjust); - painter->drawLine(boundingRect().right(), boundingRect().center().y(), - boundingRect().center().x(), boundingRect().bottom()); + painter->drawRoundedRect(adjustedRect, radius, radius); - painter->drawLine(boundingRect().center().x(), boundingRect().bottom(), - boundingRect().left(), boundingRect().center().y()); + const int iconDecrement = 32; + const int iconSize = adjustedRect.width() - iconDecrement; + const int offset = iconDecrement / 2 + blockAdjust; + + painter->restore(); + + const QString icon = (m_iconType == + WildcardIcon) ? Theme::getIconUnicode(Theme::wildcard) + : Theme::getIconUnicode(Theme::decisionNode); + + drawIcon(painter, offset, offset, icon, iconSize, iconSize, flowColor); painter->restore(); } diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.h b/src/plugins/qmldesigner/components/formeditor/formeditoritem.h index d725afd0b05..91dcad44a42 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.h @@ -207,9 +207,17 @@ public: bool flowHitTest(const QPointF &point) const override; protected: - FormEditorFlowDecisionItem(const QmlItemNode &qmlItemNode, FormEditorScene* scene) - : FormEditorFlowItem(qmlItemNode, scene) + enum IconType { + DecisionIcon, + WildcardIcon + }; + + FormEditorFlowDecisionItem(const QmlItemNode &qmlItemNode, + FormEditorScene* scene, + IconType iconType = DecisionIcon) + : FormEditorFlowItem(qmlItemNode, scene), m_iconType(iconType) {} + IconType m_iconType; }; class FormEditorFlowWildcardItem : FormEditorFlowDecisionItem @@ -221,8 +229,9 @@ public: protected: FormEditorFlowWildcardItem(const QmlItemNode &qmlItemNode, FormEditorScene* scene) - : FormEditorFlowDecisionItem(qmlItemNode, scene) - {} + : FormEditorFlowDecisionItem(qmlItemNode, scene, WildcardIcon) + { + } }; inline int FormEditorItem::type() const From 18dfb7d42b5e6de3c33f2426d9d3e4f10c1902de Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 24 Apr 2020 19:52:32 +0200 Subject: [PATCH 17/26] QmlDesigner: Rename member Change-Id: Ia4f249b39b14dc18def62f4d275e3fd1f9f2b0bc Reviewed-by: Tim Jenssen --- .../qmldesigner/components/formeditor/transitiontool.cpp | 8 ++++---- .../qmldesigner/components/formeditor/transitiontool.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/plugins/qmldesigner/components/formeditor/transitiontool.cpp b/src/plugins/qmldesigner/components/formeditor/transitiontool.cpp index b1cee8c443b..e8222e8ac8a 100644 --- a/src/plugins/qmldesigner/components/formeditor/transitiontool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/transitiontool.cpp @@ -229,7 +229,7 @@ void TransitionTool::clear() void TransitionTool::mousePressEvent(const QList &itemList, QGraphicsSceneMouseEvent *event) { - if (m_block) + if (m_blockEvents) return; if (event->button() != Qt::LeftButton) @@ -291,7 +291,7 @@ void TransitionTool::dragMoveEvent(const QList &/*itemList*/, Q void TransitionTool::mouseReleaseEvent(const QList &itemList, QGraphicsSceneMouseEvent *event) { - if (m_block) + if (m_blockEvents) return; if (event->button() == Qt::LeftButton) { @@ -362,7 +362,7 @@ void TransitionTool::activateTool() void TransitionTool::unblock() { - m_block = false; + m_blockEvents = false; } QGraphicsLineItem *TransitionTool::lineItem() @@ -389,7 +389,7 @@ FormEditorItem *TransitionTool::currentFormEditorItem() const } void TransitionTool::createItems() { - m_block = true; + m_blockEvents = true; QTimer::singleShot(200, this, [this](){ unblock(); }); if (!lineItem()) diff --git a/src/plugins/qmldesigner/components/formeditor/transitiontool.h b/src/plugins/qmldesigner/components/formeditor/transitiontool.h index 6efa1d177a1..43c3894933e 100644 --- a/src/plugins/qmldesigner/components/formeditor/transitiontool.h +++ b/src/plugins/qmldesigner/components/formeditor/transitiontool.h @@ -92,7 +92,7 @@ private: std::unique_ptr m_lineItem; std::unique_ptr m_rectangleItem1; std::unique_ptr m_rectangleItem2; - bool m_block = true; + bool m_blockEvents = true; }; } //QmlDesigner From cef36248ee5dc05cfdee3a2ec239f9a44e828f03 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Mon, 27 Apr 2020 15:25:37 +0200 Subject: [PATCH 18/26] QmlDesigner: Fix crash Since we call updateItemSelection via a timer, there is no guarantee a model is attached. Task-number: QDS-1939 Change-Id: I37bf40cf3d6a057a8bc695d0d0ec73b6cf17fdb5 Reviewed-by: Miikka Heikkinen --- src/plugins/qmldesigner/components/navigator/navigatorview.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp index 86404e0ea0a..ea64f0715a7 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp @@ -410,6 +410,9 @@ void NavigatorView::selectedNodesChanged(const QList &/*selectedNodeL void NavigatorView::updateItemSelection() { + if (!isAttached()) + return; + QItemSelection itemSelection; foreach (const ModelNode &node, selectedModelNodes()) { const QModelIndex index = indexForModelNode(node); From 0a240be6bf66fc517b5e39e4deb9dbb42a1b2f65 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Mon, 27 Apr 2020 15:26:22 +0200 Subject: [PATCH 19/26] QmlDesigner: Fix SelectionContext::hasSingleSelectedModelNode This one should use AbstractView::asSingleSelectedModelNode. Change-Id: I6bddd62866d50cbda087924bf55446b6cd087085 Reviewed-by: Tim Jenssen --- .../qmldesigner/components/componentcore/selectioncontext.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/components/componentcore/selectioncontext.cpp b/src/plugins/qmldesigner/components/componentcore/selectioncontext.cpp index 7dba86920d6..59a9454b095 100644 --- a/src/plugins/qmldesigner/components/componentcore/selectioncontext.cpp +++ b/src/plugins/qmldesigner/components/componentcore/selectioncontext.cpp @@ -78,7 +78,8 @@ QList SelectionContext::selectedModelNodes() const bool SelectionContext::hasSingleSelectedModelNode() const { - return view()->hasSelectedModelNodes(); + return view()->hasSingleSelectedModelNode() + && firstSelectedModelNode().isValid(); } AbstractView *SelectionContext::view() const From 106e0430ed674bc50bb500ce35fb87b551c567dd Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 28 Apr 2020 08:11:07 +0200 Subject: [PATCH 20/26] Bump version Change-Id: Ieb662d20d5bba2e410039bcdeb2459129601187a Reviewed-by: Eike Ziller --- cmake/QtCreatorIDEBranding.cmake | 4 ++-- qbs/modules/qtc/qtc.qbs | 4 ++-- qtcreator_ide_branding.pri | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmake/QtCreatorIDEBranding.cmake b/cmake/QtCreatorIDEBranding.cmake index 7550b928634..1e10d7f0016 100644 --- a/cmake/QtCreatorIDEBranding.cmake +++ b/cmake/QtCreatorIDEBranding.cmake @@ -1,9 +1,9 @@ #BINARY_ARTIFACTS_BRANCH = master #PROJECT_USER_FILE_EXTENSION = .user -set(IDE_VERSION "4.12.0") # The IDE version. +set(IDE_VERSION "4.12.1") # The IDE version. set(IDE_VERSION_COMPAT "4.12.0") # The IDE Compatibility version. -set(IDE_VERSION_DISPLAY "4.12.0") # The IDE display version. +set(IDE_VERSION_DISPLAY "4.12.1") # The IDE display version. set(IDE_COPYRIGHT_YEAR "2020") # The IDE current copyright year. set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation. diff --git a/qbs/modules/qtc/qtc.qbs b/qbs/modules/qtc/qtc.qbs index 584a211d3a1..aa30add4a81 100644 --- a/qbs/modules/qtc/qtc.qbs +++ b/qbs/modules/qtc/qtc.qbs @@ -4,10 +4,10 @@ import qbs.FileInfo import "qtc.js" as HelperFunctions Module { - property string qtcreator_display_version: '4.12.0' + property string qtcreator_display_version: '4.12.1' property string ide_version_major: '4' property string ide_version_minor: '12' - property string ide_version_release: '0' + property string ide_version_release: '1' property string qtcreator_version: ide_version_major + '.' + ide_version_minor + '.' + ide_version_release diff --git a/qtcreator_ide_branding.pri b/qtcreator_ide_branding.pri index 19b31502f38..f9031c5982d 100644 --- a/qtcreator_ide_branding.pri +++ b/qtcreator_ide_branding.pri @@ -1,6 +1,6 @@ -QTCREATOR_VERSION = 4.12.0 +QTCREATOR_VERSION = 4.12.1 QTCREATOR_COMPAT_VERSION = 4.12.0 -QTCREATOR_DISPLAY_VERSION = 4.12.0 +QTCREATOR_DISPLAY_VERSION = 4.12.1 QTCREATOR_COPYRIGHT_YEAR = 2020 BINARY_ARTIFACTS_BRANCH = 4.12 From 5dfdeec3897a30572e3b23dc9c6f0ddb3fc35cfa Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Mon, 27 Apr 2020 23:24:53 +0200 Subject: [PATCH 21/26] CMake: build fix for unittests Change-Id: I1ead13e7b764a346ac49004ead2bf9ab6362ffb5 Reviewed-by: Eike Ziller --- src/libs/sqlite/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/sqlite/CMakeLists.txt b/src/libs/sqlite/CMakeLists.txt index d28195f7684..36737ca1a28 100644 --- a/src/libs/sqlite/CMakeLists.txt +++ b/src/libs/sqlite/CMakeLists.txt @@ -4,9 +4,9 @@ add_qtc_library(Sqlite SQLITE_ENABLE_UNLOCK_NOTIFY SQLITE_ENABLE_COLUMN_METADATA BUILD_SQLITE_LIBRARY DEPENDS Qt5::Core Threads::Threads ${CMAKE_DL_LIBS} - INCLUDES ../3rdparty/sqlite PUBLIC_INCLUDES "${CMAKE_CURRENT_LIST_DIR}" + ../3rdparty/sqlite SOURCES ../3rdparty/sqlite/sqlite3.c createtablesqlstatementbuilder.cpp createtablesqlstatementbuilder.h From 7982c440d5e74d9edf762d5ace0d0b9d3fb6623a Mon Sep 17 00:00:00 2001 From: Jeremy Ephron Date: Sun, 26 Apr 2020 13:54:50 -0700 Subject: [PATCH 22/26] Debugger: Fix STL map size bug on Windows Fixed a bug in obtaining the size of STL map with MinGW 32/64. Retrieved the size directly rather than unpacking the size from the data (which is not present in on Windows). Tested for compatibility with LLVM/LLDB on macOS. Change-Id: I4d836d6288465e82d694de0405965586683c1355 Reviewed-by: hjk --- share/qtcreator/debugger/stdtypes.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py index b08b9d603de..9d5cd0029ac 100644 --- a/share/qtcreator/debugger/stdtypes.py +++ b/share/qtcreator/debugger/stdtypes.py @@ -283,7 +283,8 @@ def qdump__std__map(d, value): return # stuff is actually (color, pad) with 'I@', but we can save cycles/ - (compare, stuff, parent, left, right, size) = value.split('pppppp') + (compare, stuff, parent, left, right) = value.split('ppppp') + size = value["_M_t"]["_M_impl"]["_M_node_count"].integer() d.check(0 <= size and size <= 100 * 1000 * 1000) d.putItemCount(size) From fc94174bf74bb9a6a51df4bc75443cffd6b27d23 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 27 Apr 2020 10:10:25 +0200 Subject: [PATCH 23/26] CMake build: Fix copying & installation of resources - just copy & install whole directories, like the qmake build (basically) - copy & install scripts/ only on macOS - do not copy or install welcomescreen/ which is no longer used Fixes: QTCREATORBUG-23907 Fixes: QTCREATORBUG-23909 Fixes: QTCREATORBUG-23911 Change-Id: I0f9016848d15b214c40f454f39c5560d1faa4f32 Reviewed-by: Cristian Adam --- share/qtcreator/CMakeLists.txt | 35 +++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/share/qtcreator/CMakeLists.txt b/share/qtcreator/CMakeLists.txt index 05f64cc2f15..303fb9c7d0b 100644 --- a/share/qtcreator/CMakeLists.txt +++ b/share/qtcreator/CMakeLists.txt @@ -1,25 +1,42 @@ -set(template_directories android cplusplus debugger glsl modeleditor qml qmldesigner - qmlicons qml-type-descriptions schemes scripts snippets styles templates themes welcomescreen) +set(resource_directories + android + cplusplus + debugger + glsl + indexer_preincludes + modeleditor + qml + qmldesigner + qmlicons + qml-type-descriptions + schemes + snippets + styles + templates + themes +) + +if (APPLE) + set(resource_directories ${resource_directories} scripts) +endif() add_custom_target(copy_share_to_builddir ALL COMMENT Copy files into build directory VERBATIM ) -foreach(dir IN ITEMS ${template_directories}) +# copy resource directories during build +foreach(dir IN ITEMS ${resource_directories}) add_custom_command(TARGET copy_share_to_builddir POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy_directory "${dir}" "${PROJECT_BINARY_DIR}/${IDE_DATA_PATH}/${dir}" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - COMMENT Copy files into build directory + COMMENT Copy resource directories into build directory VERBATIM ) endforeach() -install(DIRECTORY ${template_directories} DESTINATION "${IDE_DATA_PATH}") -install( - FILES indexer_preincludes/qglobal.h indexer_preincludes/windows.h - DESTINATION "${IDE_DATA_PATH}/indexer_preincludes" -) +# create install rule for resource directories +install(DIRECTORY ${resource_directories} DESTINATION "${IDE_DATA_PATH}") add_subdirectory(translations) From 185f03cb339dc7b88f5808e95b4297f4bd4882f2 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Thu, 23 Apr 2020 23:30:40 +0200 Subject: [PATCH 24/26] McuSupport: Identify existing Kits for MCU Targets via meta data ... instead of just by kit name. Although the Kit name is quite verbose, it is missing some of the information needed to realiably identify Kits for MCU Targets. Use the Kit meta data for that, instead. This adds the color depth to the kit meta data. Change-Id: I39bc9a681a423a4309290b0f47298dbcb83b2e54 Reviewed-by: Eike Ziller --- src/plugins/mcusupport/mcusupportconstants.h | 2 ++ src/plugins/mcusupport/mcusupportoptions.cpp | 29 +++++++++++++------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportconstants.h b/src/plugins/mcusupport/mcusupportconstants.h index 17fd68f181f..30d28f44df4 100644 --- a/src/plugins/mcusupport/mcusupportconstants.h +++ b/src/plugins/mcusupport/mcusupportconstants.h @@ -32,10 +32,12 @@ const char DEVICE_TYPE[] = "McuSupport.DeviceType"; const char DEVICE_ID[] = "McuSupport.Device"; const char RUNCONFIGURATION[] = "McuSupport.RunConfiguration"; const char SETTINGS_ID[] = "CC.McuSupport.Configuration"; + const char KIT_MCUTARGET_VENDOR_KEY[] = "McuSupport.McuTargetVendor"; const char KIT_MCUTARGET_MODEL_KEY[] = "McuSupport.McuTargetModel"; const char KIT_MCUTARGET_SDKVERSION_KEY[] = "McuSupport.McuTargetSdkVersion"; const char KIT_MCUTARGET_KITVERSION_KEY[] = "McuSupport.McuTargetKitVersion"; +const char KIT_MCUTARGET_COLORDEPTH_KEY[] = "McuSupport.McuTargetColorDepth"; const char SETTINGS_GROUP[] = "McuSupport"; const char SETTINGS_KEY_PACKAGE_PREFIX[] = "Package_"; diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 15936c316ff..d9aac20374a 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -61,7 +61,7 @@ namespace McuSupport { namespace Internal { -static const int KIT_VERSION = 1; // Bumps up whenever details in Kit creation change +static const int KIT_VERSION = 2; // Bumps up whenever details in Kit creation change static QString packagePathFromSettings(const QString &settingsKey, const QString &defaultPath = {}) { @@ -469,17 +469,18 @@ static void setKitProperties(const QString &kitName, ProjectExplorer::Kit *k, const McuTarget* mcuTarget) { using namespace ProjectExplorer; + using namespace Constants; k->setUnexpandedDisplayName(kitName); - k->setValue(Constants::KIT_MCUTARGET_VENDOR_KEY, mcuTarget->vendor()); - k->setValue(Constants::KIT_MCUTARGET_MODEL_KEY, mcuTarget->qulPlatform()); - k->setValue(Constants::KIT_MCUTARGET_SDKVERSION_KEY, - McuSupportOptions::supportedQulVersion().toString()); - k->setValue(Constants::KIT_MCUTARGET_KITVERSION_KEY, KIT_VERSION); + k->setValue(KIT_MCUTARGET_VENDOR_KEY, mcuTarget->vendor()); + k->setValue(KIT_MCUTARGET_MODEL_KEY, mcuTarget->qulPlatform()); + k->setValue(KIT_MCUTARGET_COLORDEPTH_KEY, mcuTarget->colorDepth()); + k->setValue(KIT_MCUTARGET_SDKVERSION_KEY, McuSupportOptions::supportedQulVersion().toString()); + k->setValue(KIT_MCUTARGET_KITVERSION_KEY, KIT_VERSION); k->setAutoDetected(true); k->makeSticky(); if (mcuTarget->toolChainPackage()->type() == McuToolChainPackage::TypeDesktop) - k->setDeviceTypeForIcon(Constants::DEVICE_TYPE); + k->setDeviceTypeForIcon(DEVICE_TYPE); QSet irrelevant = { SysRootKitAspect::id(), QtSupport::QtKitAspect::id() @@ -609,9 +610,17 @@ QString McuSupportOptions::kitName(const McuTarget *mcuTarget) QList McuSupportOptions::existingKits(const McuTarget *mcuTarget) { using namespace ProjectExplorer; - const QString mcuTargetKitName = kitName(mcuTarget); - return Utils::filtered(KitManager::kits(), [&mcuTargetKitName](Kit *kit) { - return kit->isAutoDetected() && kit->unexpandedDisplayName() == mcuTargetKitName; + using namespace Constants; + return Utils::filtered(KitManager::kits(), [mcuTarget](Kit *kit) { + return kit->isAutoDetected() + && kit->value(KIT_MCUTARGET_KITVERSION_KEY) == KIT_VERSION + && kit->value(KIT_MCUTARGET_SDKVERSION_KEY) == + McuSupportOptions::supportedQulVersion().toString() + && (!mcuTarget || ( + kit->value(KIT_MCUTARGET_VENDOR_KEY) == mcuTarget->vendor() + && kit->value(KIT_MCUTARGET_MODEL_KEY) == mcuTarget->qulPlatform() + && kit->value(KIT_MCUTARGET_COLORDEPTH_KEY) == mcuTarget->colorDepth() + )); }); } From 1352ec636fba5bb59e824c917eb023fe9a03d591 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 28 Apr 2020 09:17:06 +0200 Subject: [PATCH 25/26] Debugger: Simplify 'long long int' to 'long long' in display This also fixes the StdMap test case with LLDB 9.0.0 Change-Id: I0e4580b7e64d62664a81fd75a5e142717bf3563a Reviewed-by: Christian Stenger --- src/plugins/debugger/simplifytype.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/debugger/simplifytype.cpp b/src/plugins/debugger/simplifytype.cpp index f8bea299f61..202756a3edb 100644 --- a/src/plugins/debugger/simplifytype.cpp +++ b/src/plugins/debugger/simplifytype.cpp @@ -118,6 +118,7 @@ QString simplifyType(const QString &typeIn) type.remove(0, 7); type.replace("short int", "short"); + type.replace("long long int", "long long"); const bool isLibCpp = type.contains("std::__1"); type.replace("std::__cxx11::", "std::"); From 794f3a5f55e09c0cb3ecd43833f58d11b9fbc263 Mon Sep 17 00:00:00 2001 From: Leander Schulten Date: Wed, 18 Mar 2020 09:19:09 +0100 Subject: [PATCH 26/26] DoxygenGenerator: Ignore attributes in declarations Otherwise the doxygen generation will not work. Change-Id: I07889d84c179ec0ad931d9790f9270ebbd6d259d Reviewed-by: Christian Stenger --- src/plugins/cpptools/doxygengenerator.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/plugins/cpptools/doxygengenerator.cpp b/src/plugins/cpptools/doxygengenerator.cpp index 702f92e5247..398a31a8764 100644 --- a/src/plugins/cpptools/doxygengenerator.cpp +++ b/src/plugins/cpptools/doxygengenerator.cpp @@ -33,6 +33,7 @@ #include #include +#include #include #include #include @@ -81,7 +82,7 @@ QString DoxygenGenerator::generate(QTextCursor cursor, const QTextCursor initialCursor = cursor; const QChar &c = cursor.document()->characterAt(cursor.position()); - if (!c.isLetter() && c != QLatin1Char('_')) + if (!c.isLetter() && c != QLatin1Char('_') && c != QLatin1Char('[')) return QString(); // Try to find what would be the declaration we are interested in. @@ -109,8 +110,12 @@ QString DoxygenGenerator::generate(QTextCursor cursor, QString declCandidate = cursor.selectedText(); - if (declCandidate.startsWith(QLatin1String("Q_INVOKABLE"))) - declCandidate = declCandidate.mid(11); + // remove attributes like [[nodiscard]] because + // Document::Ptr::parse(Document::ParseDeclaration) fails on attributes + static QRegularExpression attribute("\\[\\s*\\[.*\\]\\s*\\]"); + declCandidate.replace(attribute, ""); + + declCandidate.replace("Q_INVOKABLE", ""); declCandidate.replace(QChar::ParagraphSeparator, QLatin1Char('\n'));