From 78cf5051f51ab7399a7d04d7c16d2da96b2a4012 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Thu, 15 Sep 2022 15:01:49 +0200 Subject: [PATCH] QmlDesigner: Merge cmake files To improve testability external dependencies are now broken with an interface. It is a first step to test individual units without injection of source files. Task-number: QDS-7571 Change-Id: I4255c8668022f1097947e4ea5788f2a6b605365d Reviewed-by: Qt CI Bot Reviewed-by: Reviewed-by: Tim Jenssen --- src/plugins/qmldesigner/CMakeLists.txt | 576 +++++++++++++-- .../assetexporterplugin/assetexporter.cpp | 3 +- .../assetexporterplugin.cpp | 3 +- .../assetexporterplugin/assetexporterview.cpp | 5 +- .../assetexporterplugin/assetexporterview.h | 2 +- .../assetslibraryiconprovider.cpp | 2 +- .../assetslibrary/assetslibrarymodel.cpp | 4 +- .../assetslibrary/assetslibraryview.cpp | 4 +- .../assetslibrary/assetslibraryview.h | 2 +- .../components/componentcore/abstractaction.h | 4 +- .../componentcore/abstractactiongroup.h | 2 +- .../componentcore/actioninterface.h | 2 +- .../componentcore/designeractionmanager.h | 3 +- .../designeractionmanagerview.cpp | 5 +- .../componentcore/designeractionmanagerview.h | 2 +- .../componentcore/modelnodeoperations.cpp | 29 +- .../componentcore/selectioncontext.h | 6 +- .../components/componentcore/theme.h | 4 +- .../components/componentcore/viewmanager.cpp | 32 +- .../components/componentcore/viewmanager.h | 9 +- .../components/componentcore/zoomaction.h | 4 +- .../connectioneditor/connectionview.cpp | 5 +- .../connectioneditor/connectionview.h | 2 +- .../connectioneditor/connectionviewwidget.cpp | 1 + .../curveeditor/curveeditorview.cpp | 5 +- .../components/curveeditor/curveeditorview.h | 2 +- .../components/debugview/debugview.cpp | 5 +- .../components/debugview/debugview.h | 2 +- .../components/edit3d/edit3dview.cpp | 4 +- .../components/edit3d/edit3dview.h | 6 +- .../components/edit3d/edit3dwidget.cpp | 5 +- .../components/eventlist/eventlist.cpp | 11 +- .../components/eventlist/eventlist.h | 2 - .../components/eventlist/eventlistdialog.cpp | 3 +- .../eventlist/eventlistpluginview.cpp | 8 +- .../eventlist/eventlistpluginview.h | 2 +- .../components/eventlist/eventlistview.cpp | 5 +- .../components/eventlist/eventlistview.h | 2 +- .../components/eventlist/nodelistview.cpp | 7 +- .../components/eventlist/nodelistview.h | 2 +- .../formeditor/abstractcustomtool.h | 2 +- .../formeditor/abstractformeditortool.h | 4 +- .../components/formeditor/formeditoritem.h | 6 +- .../components/formeditor/formeditorscene.h | 2 +- .../components/formeditor/formeditorview.cpp | 4 +- .../components/formeditor/formeditorview.h | 6 +- .../components/formeditor/resizehandleitem.h | 4 +- .../formeditor/rotationhandleitem.h | 4 +- .../components/integration/componentview.cpp | 5 +- .../components/integration/componentview.h | 2 +- .../components/integration/designdocument.cpp | 18 +- .../components/integration/designdocument.h | 7 +- .../integration/designdocumentview.cpp | 20 +- .../integration/designdocumentview.h | 10 +- .../itemlibrary/itemlibraryassetimporter.cpp | 16 +- .../itemlibrary/itemlibraryview.cpp | 11 +- .../components/itemlibrary/itemlibraryview.h | 3 +- .../materialbrowser/materialbrowserview.cpp | 4 +- .../materialbrowser/materialbrowserview.h | 2 +- .../materialeditor/materialeditorview.cpp | 5 +- .../materialeditor/materialeditorview.h | 2 +- .../components/navigator/navigatorview.cpp | 10 +- .../components/navigator/navigatorview.h | 2 +- .../components/navigator/navigatorwidget.cpp | 6 +- .../components/pathtool/pathtool.cpp | 4 +- .../components/pathtool/pathtool.h | 2 +- .../components/pathtool/pathtoolview.cpp | 5 +- .../components/pathtool/pathtoolview.h | 2 +- .../propertyeditorimageprovider.cpp | 2 +- .../propertyeditor/propertyeditorview.cpp | 5 +- .../propertyeditor/propertyeditorview.h | 3 +- .../components/qmldesignercomponents_global.h | 14 + .../components/sourcetool/sourcetool.cpp | 1 + .../stateseditor/stateseditorview.cpp | 5 +- .../stateseditor/stateseditorview.h | 2 +- .../stateseditornew/stateseditorview.cpp | 10 +- .../stateseditornew/stateseditorview.h | 2 +- .../components/texteditor/texteditorview.cpp | 5 +- .../components/texteditor/texteditorview.h | 8 +- .../texteditor/texteditorwidget.cpp | 1 + .../components/texttool/textedititem.cpp | 8 +- .../timelineeditor/timelineactions.cpp | 16 +- .../timelineeditor/timelineactions.h | 5 +- .../timelineeditor/timelinegraphicsscene.cpp | 9 +- .../timelineeditor/timelinegraphicsscene.h | 6 +- .../timelineeditor/timelineview.cpp | 6 +- .../components/timelineeditor/timelineview.h | 2 +- .../timelineeditor/timelinewidget.cpp | 2 +- .../transitioneditor/transitioneditorview.cpp | 5 +- .../transitioneditor/transitioneditorview.h | 2 +- .../componentsplugin/componentsplugin.cpp | 1 + .../imagecache/imagecachecollector.cpp | 6 +- .../imagecache/imagecachecollector.h | 3 + .../imagecache/imagecachefontcollector.cpp | 4 - .../imagecache/meshimagecachecollector.cpp | 11 +- .../imagecache/meshimagecachecollector.h | 1 + .../designercore/include/abstractview.h | 8 +- .../include/externaldependenciesinterface.h | 42 ++ .../designercore/include/metainfo.h | 2 + .../qmldesigner/designercore/include/model.h | 1 - .../designercore/include/nodeinstanceview.h | 5 +- .../include/qmldesignercorelib_global.h | 4 +- .../designercore/include/qmlmodelnodefacade.h | 2 + .../designercore/include/qmlobjectnode.h | 7 +- .../designercore/include/rewriterview.h | 3 +- .../include/subcomponentmanager.h | 4 +- .../instances/baseconnectionmanager.cpp | 3 +- .../instances/baseconnectionmanager.h | 3 +- .../instances/capturingconnectionmanager.cpp | 9 +- .../instances/capturingconnectionmanager.h | 3 +- .../instances/connectionmanager.cpp | 23 +- .../instances/connectionmanager.h | 3 +- .../instances/connectionmanagerinterface.h | 4 +- .../interactiveconnectionmanager.cpp | 5 +- .../instances/interactiveconnectionmanager.h | 3 +- .../designercore/instances/nodeinstance.cpp | 3 - .../instances/nodeinstanceserverproxy.cpp | 6 +- .../instances/nodeinstanceserverproxy.h | 4 +- .../instances/nodeinstanceview.cpp | 107 +-- .../designercore/instances/puppetcreator.cpp | 681 ------------------ .../designercore/instances/puppetcreator.h | 92 --- .../designercore/metainfo/metainfo.cpp | 43 +- .../metainfo/subcomponentmanager.cpp | 22 +- .../designercore/model/abstractview.cpp | 6 - .../qmldesigner/designercore/model/model.cpp | 16 - .../designercore/model/qmlitemnode.cpp | 4 - .../designercore/model/qmlmodelnodefacade.cpp | 24 +- .../designercore/model/qmlobjectnode.cpp | 26 +- .../designercore/model/qmlvisualnode.cpp | 16 +- .../designercore/model/rewriterview.cpp | 37 +- .../designercore/model/texttomodelmerger.cpp | 64 +- .../designercore/rewritertransaction.cpp | 12 +- src/plugins/qmldesigner/documentmanager.cpp | 2 +- src/plugins/qmldesigner/documentmanager.h | 9 +- .../qmldesigner/puppetenvironmentbuilder.cpp | 7 + .../qmldesigner/puppetenvironmentbuilder.h | 4 + src/plugins/qmldesigner/qmldesigner_global.h | 14 + src/plugins/qmldesigner/qmldesignercore.cmake | 454 ------------ .../qmldesignerexternaldependencies.cpp | 223 ++++++ .../qmldesignerexternaldependencies.h | 42 ++ src/plugins/qmldesigner/qmldesignerplugin.cpp | 51 +- src/plugins/qmldesigner/qmldesignerplugin.h | 20 +- .../qmldesigner/qmldesignerprojectmanager.cpp | 50 +- .../qmldesigner/qmldesignerprojectmanager.h | 5 +- .../qmlpreviewplugin/qmlpreviewactions.cpp | 3 +- .../qmlpreviewplugin/qmlpreviewplugin.cpp | 9 +- src/plugins/qmldesigner/settingspage.cpp | 65 +- src/plugins/qmldesigner/settingspage.h | 4 +- src/plugins/qmldesigner/shortcutmanager.cpp | 2 +- .../{ => utils}/designersettings.cpp | 0 .../{ => utils}/designersettings.h | 5 +- .../componentcore => utils}/hdrimage.cpp | 0 .../componentcore => utils}/hdrimage.h | 4 +- .../utils/qmldesignerutils_global.h | 14 + .../qml/qmldesigner/coretests/CMakeLists.txt | 12 +- .../coretests/testrewriterview.cpp | 5 +- .../qmldesigner/coretests/testrewriterview.h | 3 +- .../qmldesigner/coretests/tst_testcore.cpp | 521 ++++++++------ tests/auto/qml/qmldesigner/testview.cpp | 4 +- tests/auto/qml/qmldesigner/testview.h | 2 +- .../designercore/include/nodeinstanceview.h | 4 +- .../designercore/include/rewriterview.h | 4 +- tests/unit/unittest/CMakeLists.txt | 2 +- tests/unit/unittest/abstractviewmock.h | 3 + tests/unit/unittest/mocklistmodeleditorview.h | 3 + 165 files changed, 1865 insertions(+), 2077 deletions(-) create mode 100644 src/plugins/qmldesigner/components/qmldesignercomponents_global.h create mode 100644 src/plugins/qmldesigner/designercore/include/externaldependenciesinterface.h delete mode 100644 src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp delete mode 100644 src/plugins/qmldesigner/designercore/instances/puppetcreator.h create mode 100644 src/plugins/qmldesigner/qmldesigner_global.h delete mode 100644 src/plugins/qmldesigner/qmldesignercore.cmake create mode 100644 src/plugins/qmldesigner/qmldesignerexternaldependencies.cpp create mode 100644 src/plugins/qmldesigner/qmldesignerexternaldependencies.h rename src/plugins/qmldesigner/{ => utils}/designersettings.cpp (100%) rename src/plugins/qmldesigner/{ => utils}/designersettings.h (97%) rename src/plugins/qmldesigner/{components/componentcore => utils}/hdrimage.cpp (100%) rename src/plugins/qmldesigner/{components/componentcore => utils}/hdrimage.h (87%) create mode 100644 src/plugins/qmldesigner/utils/qmldesignerutils_global.h diff --git a/src/plugins/qmldesigner/CMakeLists.txt b/src/plugins/qmldesigner/CMakeLists.txt index d3da2d341c3..03926755093 100644 --- a/src/plugins/qmldesigner/CMakeLists.txt +++ b/src/plugins/qmldesigner/CMakeLists.txt @@ -11,6 +11,508 @@ add_feature_info("ProjectStorage" ${USE_PROJECTSTORAGE} "") env_with_default("QDS_WITH_QMLDOM" ENV_QDS_WITH_QMLDOM OFF) option(WITH_QMLDOM "Build with QmlDom" ${ENV_QDS_WITH_QMLDOM}) add_feature_info("Build with QmlDom" ${WITH_QMLDOM} "") + +add_qtc_library(QmlDesignerUtils STATIC + DEPENDS + Qt5::Gui + DEFINES QMLDESIGNERUTILS_LIBRARY + PUBLIC_DEFINES $<$:QMLDESIGNER_STATIC_LIBRARY> + PUBLIC_INCLUDES ${CMAKE_CURRENT_LIST_DIR}/utils + SOURCES_PREFIX ${CMAKE_CURRENT_LIST_DIR}/utils + SOURCES + designersettings.cpp designersettings.h + hdrimage.cpp hdrimage.h + qmldesignerutils_global.h +) + +add_qtc_library(QmlDesignerCore STATIC + DEPENDS + Threads::Threads + Qt5::CorePrivate + CPlusPlus + Utils + Qt5::Widgets + Qt5::Qml + Core + ProjectExplorer + QmakeProjectManager + QmlJS + QmlJSEditor + QmlJSTools + QmlProjectManager + QtSupport + PUBLIC_DEPENDS + QmlDesignerUtils + TextEditor + Sqlite + DEFINES QMLDESIGNERCORE_LIBRARY QMLDESIGNERUTILS_STATIC_LIBRARY + INCLUDES + ${CMAKE_CURRENT_LIST_DIR} + PUBLIC_INCLUDES + ${CMAKE_CURRENT_LIST_DIR}/designercore + ${CMAKE_CURRENT_LIST_DIR}/designercore/include + SOURCES_PREFIX ${CMAKE_CURRENT_LIST_DIR}/designercore + SOURCES + rewritertransaction.cpp + rewritertransaction.h +) + +extend_qtc_library(QmlDesignerCore + CONDITION UNIX AND NOT APPLE + PUBLIC_DEPENDS rt +) + +set(UI_FILES + ${CMAKE_CURRENT_LIST_DIR}/designercore/instances/puppetbuildprogressdialog.ui + ${CMAKE_CURRENT_LIST_DIR}/designercore/instances/puppetdialog.ui +) +qt_wrap_ui(UI_SOURCES ${UI_FILES}) + +extend_qtc_library(QmlDesignerCore + INCLUDES ${CMAKE_CURRENT_BINARY_DIR} + SOURCES + ${UI_SOURCES} + ${UI_FILES} +) +set_source_files_properties(${UI_FILES} PROPERTIES SKIP_AUTOUIC ON) + +extend_qtc_library(QmlDesignerCore + INCLUDES ${CMAKE_CURRENT_LIST_DIR}/designercore/exceptions + SOURCES_PREFIX ${CMAKE_CURRENT_LIST_DIR}/designercore/exceptions + SOURCES + exception.cpp + invalidargumentexception.cpp + invalididexception.cpp + invalidmetainfoexception.cpp + invalidmodelnodeexception.cpp + invalidmodelstateexception.cpp + invalidpropertyexception.cpp + invalidqmlsourceexception.cpp + invalidreparentingexception.cpp + invalidslideindexexception.cpp + notimplementedexception.cpp + removebasestateexception.cpp + rewritingexception.cpp +) + +extend_qtc_library(QmlDesignerCore + INCLUDES ${CMAKE_CURRENT_LIST_DIR}/designercore/filemanager + SOURCES_PREFIX ${CMAKE_CURRENT_LIST_DIR}/designercore/filemanager + SOURCES + addarraymembervisitor.cpp + addarraymembervisitor.h + addobjectvisitor.cpp + addobjectvisitor.h + addpropertyvisitor.cpp + addpropertyvisitor.h + astobjecttextextractor.cpp + astobjecttextextractor.h + changeimportsvisitor.cpp + changeimportsvisitor.h + changeobjecttypevisitor.cpp + changeobjecttypevisitor.h + changepropertyvisitor.cpp + changepropertyvisitor.h + firstdefinitionfinder.cpp + firstdefinitionfinder.h + moveobjectbeforeobjectvisitor.cpp + moveobjectbeforeobjectvisitor.h + moveobjectvisitor.cpp + moveobjectvisitor.h + objectlengthcalculator.cpp + objectlengthcalculator.h + qmlrefactoring.cpp + qmlrefactoring.h + qmlrewriter.cpp + qmlrewriter.h + removepropertyvisitor.cpp + removepropertyvisitor.h + removeuiobjectmembervisitor.cpp + removeuiobjectmembervisitor.h +) + +extend_qtc_library(QmlDesignerCore + INCLUDES ${CMAKE_CURRENT_LIST_DIR}/designercore/imagecache + SOURCES_PREFIX ${CMAKE_CURRENT_LIST_DIR}/designercore/imagecache + SOURCES + asynchronousexplicitimagecache.cpp + asynchronousimagecache.cpp + asynchronousimagefactory.cpp + asynchronousimagefactory.h + imagecachecollector.cpp + imagecachecollector.h + imagecachedispatchcollector.h + imagecachecollectorinterface.h + imagecacheconnectionmanager.cpp + imagecacheconnectionmanager.h + imagecachefontcollector.cpp + imagecachefontcollector.h + imagecachegenerator.cpp + imagecachegenerator.h + imagecachegeneratorinterface.h + imagecachestorage.h + imagecachestorageinterface.h + meshimagecachecollector.cpp + meshimagecachecollector.h + synchronousimagecache.cpp + timestampprovider.cpp + timestampprovider.h + timestampproviderinterface.h +) + +extend_qtc_library(QmlDesignerCore + SOURCES_PREFIX ${CMAKE_CURRENT_LIST_DIR}/designercore/include + SOURCES + abstractproperty.h + abstractview.h + anchorline.h + annotation.h + asynchronousexplicitimagecache.h + asynchronousimagecache.h + auxiliarydata.h + auxiliarydataproperties.h + basetexteditmodifier.h + bindingproperty.h + componenttextmodifier.h + customnotifications.h + documentmessage.h + enumerationmetainfo.h + exception.h + externaldependenciesinterface.h + forwardview.h + imagecacheauxiliarydata.h + import.h + invalidargumentexception.h + invalididexception.h + invalidmetainfoexception.h + invalidmodelnodeexception.h + invalidmodelstateexception.h + invalidpropertyexception.h + invalidqmlsourceexception.h + invalidreparentingexception.h + invalidslideindexexception.h + itemlibraryinfo.h + mathutils.h + metainfo.h + metainforeader.h + model.h + modelmerger.h + modelnode.h + modelnodepositionstorage.h + nodeabstractproperty.h + nodehints.h + nodeinstance.h + nodeinstanceview.h + nodelistproperty.h + nodemetainfo.h + nodeproperty.h + notimplementedexception.h + plaintexteditmodifier.h + propertycontainer.h + propertymetainfo.h + propertynode.h + propertyparser.h + qmlanchors.h + qmlchangeset.h + qmlconnections.h + qmldesignercorelib_global.h + qmlitemnode.h + qmlmodelnodefacade.h + qmlobjectnode.h + qmlstate.h + qmltimeline.h + qmltimelinekeyframegroup.h + removebasestateexception.h + rewriterview.h + rewritingexception.h + signalhandlerproperty.h + stylesheetmerger.h + subcomponentmanager.h + synchronousimagecache.h + textmodifier.h + variantproperty.h +) + +extend_qtc_library(QmlDesignerCore + INCLUDES + ${CMAKE_CURRENT_LIST_DIR}/designercore/metainfo + SOURCES_PREFIX ${CMAKE_CURRENT_LIST_DIR}/designercore/metainfo + SOURCES + itemlibraryinfo.cpp + metainfo.cpp + metainforeader.cpp + nodehints.cpp + nodemetainfo.cpp + subcomponentmanager.cpp +) + +extend_qtc_library(QmlDesignerCore + PUBLIC_INCLUDES ${CMAKE_CURRENT_LIST_DIR}/designercore/instances + SOURCES_PREFIX ${CMAKE_CURRENT_LIST_DIR}/designercore/instances + SOURCES + baseconnectionmanager.cpp + baseconnectionmanager.h + connectionmanager.cpp + connectionmanager.h + connectionmanagerinterface.cpp + connectionmanagerinterface.h + nodeinstance.cpp + nodeinstanceserverproxy.cpp + nodeinstanceserverproxy.h + nodeinstanceview.cpp + puppetbuildprogressdialog.cpp + puppetbuildprogressdialog.h + puppetstarter.cpp + puppetstarter.h + puppetdialog.cpp + puppetdialog.h + qprocessuniqueptr.h +) + +extend_qtc_library(QmlDesignerCore + INCLUDES ${CMAKE_CURRENT_LIST_DIR}/designercore/model + SOURCES_PREFIX ${CMAKE_CURRENT_LIST_DIR}/designercore/model + SOURCES + abstractproperty.cpp + abstractview.cpp + anchorline.cpp + annotation.cpp + bindingproperty.cpp + componenttextmodifier.cpp + documentmessage.cpp + import.cpp + internalbindingproperty.cpp + internalbindingproperty.h + internalnode.cpp + internalnode_p.h + internalnodeabstractproperty.cpp + internalnodeabstractproperty.h + internalnodelistproperty.cpp + internalnodelistproperty.h + internalnodeproperty.cpp + internalnodeproperty.h + internalproperty.cpp + internalproperty.h + internalsignalhandlerproperty.cpp + internalsignalhandlerproperty.h + internalvariantproperty.cpp + internalvariantproperty.h + model.cpp + model_p.h + modelmerger.cpp + modelnode.cpp + modelnodepositionrecalculator.cpp + modelnodepositionrecalculator.h + modelnodepositionstorage.cpp + modeltotextmerger.cpp + modeltotextmerger.h + nodeabstractproperty.cpp + nodelistproperty.cpp + nodeproperty.cpp + plaintexteditmodifier.cpp + propertycontainer.cpp + propertynode.cpp + propertyparser.cpp + qml3dnode.cpp + qmlanchors.cpp + qmlchangeset.cpp + qmlconnections.cpp + qmlitemnode.cpp + qmlmodelnodefacade.cpp + qmlobjectnode.cpp + qmlstate.cpp + qmltextgenerator.cpp + qmltextgenerator.h + qmltimeline.cpp + qmltimelinekeyframegroup.cpp + qmlvisualnode.cpp + rewriteaction.cpp + rewriteaction.h + rewriteactioncompressor.cpp + rewriteactioncompressor.h + rewriterview.cpp + signalhandlerproperty.cpp + stylesheetmerger.cpp + textmodifier.cpp + texttomodelmerger.cpp + texttomodelmerger.h + variantproperty.cpp +) + +extend_qtc_library(QmlDesignerCore + INCLUDES ${CMAKE_CURRENT_LIST_DIR}/designercore/pluginmanager + SOURCES_PREFIX ${CMAKE_CURRENT_LIST_DIR}/designercore/pluginmanager + SOURCES + widgetpluginmanager.cpp + widgetpluginmanager.h + widgetpluginpath.cpp + widgetpluginpath.h +) + +extend_qtc_library(QmlDesignerCore + SOURCES_PREFIX ${CMAKE_CURRENT_LIST_DIR}/../../../share/qtcreator/qml/qmlpuppet + INCLUDES + ${CMAKE_CURRENT_LIST_DIR}/../../../share/qtcreator/qml/qmlpuppet/commands + ${CMAKE_CURRENT_LIST_DIR}/../../../share/qtcreator/qml/qmlpuppet/container + PUBLIC_INCLUDES + "${CMAKE_CURRENT_LIST_DIR}/../../../share/qtcreator/qml/qmlpuppet/interfaces" + "${CMAKE_CURRENT_LIST_DIR}/../../../share/qtcreator/qml/qmlpuppet/types" + SOURCES + commands/captureddatacommand.h + commands/changeauxiliarycommand.cpp + commands/changeauxiliarycommand.h + commands/changebindingscommand.cpp + commands/changebindingscommand.h + commands/changefileurlcommand.cpp + commands/changefileurlcommand.h + commands/changeidscommand.cpp + commands/changeidscommand.h + commands/changelanguagecommand.cpp + commands/changelanguagecommand.h + commands/changenodesourcecommand.cpp + commands/changenodesourcecommand.h + commands/changepreviewimagesizecommand.cpp + commands/changepreviewimagesizecommand.h + commands/changeselectioncommand.cpp + commands/changeselectioncommand.h + commands/changestatecommand.cpp + commands/changestatecommand.h + commands/changevaluescommand.cpp + commands/changevaluescommand.h + commands/childrenchangedcommand.cpp + commands/childrenchangedcommand.h + commands/clearscenecommand.cpp + commands/clearscenecommand.h + commands/completecomponentcommand.cpp + commands/completecomponentcommand.h + commands/componentcompletedcommand.cpp + commands/componentcompletedcommand.h + commands/createinstancescommand.cpp + commands/createinstancescommand.h + commands/createscenecommand.cpp + commands/createscenecommand.h + commands/debugoutputcommand.cpp + commands/debugoutputcommand.h + commands/endpuppetcommand.cpp + commands/endpuppetcommand.h + commands/informationchangedcommand.cpp + commands/informationchangedcommand.h + commands/nanotracecommand.cpp + commands/nanotracecommand.h + commands/inputeventcommand.cpp + commands/inputeventcommand.h + commands/pixmapchangedcommand.cpp + commands/pixmapchangedcommand.h + commands/puppetalivecommand.cpp + commands/puppetalivecommand.h + commands/puppettocreatorcommand.cpp + commands/puppettocreatorcommand.h + commands/removeinstancescommand.cpp + commands/removeinstancescommand.h + commands/removepropertiescommand.cpp + commands/removepropertiescommand.h + commands/removesharedmemorycommand.cpp + commands/removesharedmemorycommand.h + commands/reparentinstancescommand.cpp + commands/reparentinstancescommand.h + commands/requestmodelnodepreviewimagecommand.cpp + commands/requestmodelnodepreviewimagecommand.h + commands/scenecreatedcommand.h + commands/statepreviewimagechangedcommand.cpp + commands/statepreviewimagechangedcommand.h + commands/synchronizecommand.h + commands/tokencommand.cpp + commands/tokencommand.h + commands/update3dviewstatecommand.cpp + commands/update3dviewstatecommand.h + commands/valueschangedcommand.cpp + commands/valueschangedcommand.h + commands/view3dactioncommand.cpp + commands/view3dactioncommand.h + + container/addimportcontainer.cpp + container/addimportcontainer.h + container/idcontainer.cpp + container/idcontainer.h + container/imagecontainer.cpp + container/imagecontainer.h + container/informationcontainer.cpp + container/informationcontainer.h + container/instancecontainer.cpp + container/instancecontainer.h + container/mockuptypecontainer.cpp + container/mockuptypecontainer.h + container/propertyabstractcontainer.cpp + container/propertyabstractcontainer.h + container/propertybindingcontainer.cpp + container/propertybindingcontainer.h + container/propertyvaluecontainer.cpp + container/propertyvaluecontainer.h + container/reparentcontainer.cpp + container/reparentcontainer.h + container/sharedmemory.h + + interfaces/commondefines.h + interfaces/nodeinstanceclientinterface.h + interfaces/nodeinstanceglobal.h + interfaces/nodeinstanceserverinterface.cpp + interfaces/nodeinstanceserverinterface.h + + types/enumeration.h +) + +extend_qtc_library(QmlDesignerCore + SOURCES_PREFIX designercore/projectstorage + PUBLIC_INCLUDES designercore/projectstorage + SOURCES + commontypecache.h + directorypathcompressor.h + filesysteminterface.h + filesystem.cpp filesystem.h + filestatus.h + filestatuscache.cpp filestatuscache.h + nonlockingmutex.h + projectstorageinterface.h + projectstoragefwd.h + projectstorageinfotypes.h + projectstoragepathwatcher.h + projectstoragepathwatcherinterface.h + projectstoragepathwatchernotifierinterface.h + projectstoragepathwatcher.h + projectstoragepathwatchertypes.h + projectstorageprinting.h + projectstoragetypes.h + projectstorageupdater.cpp projectstorageupdater.h + projectstorage.cpp projectstorage.h + sourcepath.h + sourcepathcache.h + sourcepathcache.h + sourcepathcachetypes.h + sourcepathview.h + storagecache.h + storagecacheentry.h + storagecachefwd.h + qmldocumentparserinterface.h + qmltypesparserinterface.h + qmltypesparser.cpp qmltypesparser.h + qmldocumentparser.cpp qmldocumentparser.h +) + +extend_qtc_library(QmlDesignerCore + CONDITION UNIX + SOURCES_PREFIX ${CMAKE_CURRENT_LIST_DIR}/../../../share/qtcreator/qml/qmlpuppet/container + SOURCES sharedmemory_unix.cpp +) + +extend_qtc_library(QmlDesignerCore + CONDITION NOT UNIX + SOURCES_PREFIX ${CMAKE_CURRENT_LIST_DIR}/../../../share/qtcreator/qml/qmlpuppet/container + SOURCES sharedmemory_qt.cpp +) + +file(GLOB PROJECTSTORAGE_EXCLUDED_SOURCES designercore/projectstorage/*.cpp) +set_property(SOURCE ${PROJECTSTORAGE_EXCLUDED_SOURCES} PROPERTY SKIP_AUTOMOC ON) + add_qtc_plugin(QmlDesigner CONDITION Qt5_VERSION VERSION_GREATER_EQUAL 6.2.0 AND TARGET Qt5::QuickWidgets AND TARGET Qt5::Svg DEPENDS @@ -20,17 +522,30 @@ add_qtc_plugin(QmlDesigner IDE_LIBRARY_BASENAME=\"${IDE_LIBRARY_BASE_PATH}\" SHARE_QML_PATH="${CMAKE_CURRENT_SOURCE_DIR}/../../../share/qtcreator/qmldesigner" $<$:QDS_USE_PROJECTSTORAGE> + QMLDESIGNER_LIBRARY QMLDESIGNERCORE_STATIC_LIBRARY QMLDESIGNERUTILS_STATIC_LIBRARY + INCLUDES + ${CMAKE_CURRENT_LIST_DIR}/components + ${CMAKE_CURRENT_LIST_DIR}/components/assetslibrary + ${CMAKE_CURRENT_LIST_DIR}/components/debugview + ${CMAKE_CURRENT_LIST_DIR}/components/edit3d + ${CMAKE_CURRENT_LIST_DIR}/components/formeditor + ${CMAKE_CURRENT_LIST_DIR}/components/integration + ${CMAKE_CURRENT_LIST_DIR}/components/itemlibrary + ${CMAKE_CURRENT_LIST_DIR}/components/materialbrowser + ${CMAKE_CURRENT_LIST_DIR}/components/materialeditor + ${CMAKE_CURRENT_LIST_DIR}/components/navigator + ${CMAKE_CURRENT_LIST_DIR}/components/propertyeditor + ${CMAKE_CURRENT_LIST_DIR}/components/stateseditor + ${CMAKE_CURRENT_LIST_DIR}/components/texteditor PUBLIC_INCLUDES - "${CMAKE_CURRENT_LIST_DIR}" - "${CMAKE_CURRENT_LIST_DIR}/designercore/include" - "${CMAKE_CURRENT_LIST_DIR}/../../../share/qtcreator/qml/qmlpuppet/interfaces" - "${CMAKE_CURRENT_LIST_DIR}/../../../share/qtcreator/qml/qmlpuppet/types" + ${CMAKE_CURRENT_LIST_DIR} + PUBLIC_DEPENDS + QmlDesignerCore PLUGIN_DEPENDS Core ProjectExplorer QmlJSEditor QmakeProjectManager QmlProjectManager - QtSupport TextEditor + QtSupport PLUGIN_RECOMMENDS QmlPreview SOURCES - designersettings.cpp designersettings.h designmodecontext.cpp designmodecontext.h designmodewidget.cpp designmodewidget.h documentmanager.cpp documentmanager.h @@ -39,9 +554,11 @@ add_qtc_plugin(QmlDesigner generateresource.cpp generateresource.h openuiqmlfiledialog.cpp openuiqmlfiledialog.h openuiqmlfiledialog.ui puppetenvironmentbuilder.cpp puppetenvironmentbuilder.h + qmldesigner_global.h qmldesignerconstants.h qmldesignericons.h qmldesignerplugin.cpp qmldesignerplugin.h + qmldesignerexternaldependencies.cpp qmldesignerexternaldependencies.h qmldesignerprojectmanager.cpp qmldesignerprojectmanager.h settingspage.cpp settingspage.h settingspage.ui shortcutmanager.cpp shortcutmanager.h @@ -57,9 +574,6 @@ add_qtc_plugin(QmlDesigner QMLDESIGNER_PLUGIN_PATH "${QmlDesignerPluginInstallPrefix}" ) -include(qmldesignercore.cmake) -extend_with_qmldesigner_core(QmlDesigner) - function(get_and_add_as_subdirectory name repository git_tag build_dir source_dir source_subdir) # make the configuration in the build dir file(MAKE_DIRECTORY ${build_dir}/${name}) @@ -191,6 +705,14 @@ add_qtc_plugin(qtquickplugin add_subdirectory(studioplugin) +extend_qtc_plugin(QmlDesigner + SOURCES_PREFIX components + PUBLIC_INCLUDES components + DEFINES QMLDESIGNERCOMPONENTS_LIBRARY + SOURCES + qmldesignercomponents_global.h +) + extend_qtc_plugin(QmlDesigner SOURCES_PREFIX components/componentcore PUBLIC_INCLUDES components/componentcore @@ -217,7 +739,6 @@ extend_qtc_plugin(QmlDesigner selectioncontext.cpp selectioncontext.h theme.cpp theme.h zoomaction.cpp zoomaction.h - hdrimage.cpp hdrimage.h svgpasteaction.cpp svgpasteaction.h viewmanager.cpp viewmanager.h ) @@ -472,41 +993,6 @@ extend_qtc_plugin(QmlDesigner ) -extend_qtc_plugin(QmlDesigner - SOURCES_PREFIX designercore/projectstorage - SOURCES - commontypecache.h - directorypathcompressor.h - filesysteminterface.h - filesystem.cpp filesystem.h - filestatus.h - filestatuscache.cpp filestatuscache.h - nonlockingmutex.h - projectstorageinterface.h - projectstoragefwd.h - projectstorageinfotypes.h - projectstoragepathwatcher.h - projectstoragepathwatcherinterface.h - projectstoragepathwatchernotifierinterface.h - projectstoragepathwatcher.h - projectstoragepathwatchertypes.h - projectstorageprinting.h - projectstoragetypes.h - projectstorageupdater.cpp projectstorageupdater.h - sourcepath.h - sourcepathcache.h - sourcepathcache.h - sourcepathcachetypes.h - sourcepathview.h - storagecache.h - storagecacheentry.h - storagecachefwd.h - qmldocumentparserinterface.h - qmltypesparserinterface.h - qmltypesparser.cpp qmltypesparser.h - qmldocumentparser.cpp qmldocumentparser.h -) - extend_qtc_plugin(QmlDesigner SOURCES_PREFIX designercore/instances SOURCES diff --git a/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp b/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp index 9201f16d639..e98ad21ba68 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp +++ b/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp @@ -269,7 +269,8 @@ void AssetExporter::preprocessQmlFile(const Utils::FilePath &path) textEdit.setPlainText(QString::fromUtf8(reader.data())); NotIndentingTextEditModifier *modifier = new NotIndentingTextEditModifier(&textEdit); modifier->setParent(model.get()); - auto rewriterView = std::make_unique(QmlDesigner::RewriterView::Validate); + auto rewriterView = std::make_unique(m_view->externalDependencies(), + QmlDesigner::RewriterView::Validate); rewriterView->setCheckSemanticErrors(false); rewriterView->setTextModifier(modifier); model->attachView(rewriterView.get()); diff --git a/src/plugins/qmldesigner/assetexporterplugin/assetexporterplugin.cpp b/src/plugins/qmldesigner/assetexporterplugin/assetexporterplugin.cpp index 78124870540..292eb9e9166 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/assetexporterplugin.cpp +++ b/src/plugins/qmldesigner/assetexporterplugin/assetexporterplugin.cpp @@ -43,7 +43,8 @@ AssetExporterPlugin::AssetExporterPlugin() auto *designerPlugin = QmlDesigner::QmlDesignerPlugin::instance(); auto &viewManager = designerPlugin->viewManager(); - m_view = viewManager.registerView(std::make_unique()); + m_view = viewManager.registerView(std::make_unique( + designerPlugin->externalDependenciesForPluginInitializationOnly())); // Add dumper templates for factory instantiation. Component::addNodeDumper(); diff --git a/src/plugins/qmldesigner/assetexporterplugin/assetexporterview.cpp b/src/plugins/qmldesigner/assetexporterplugin/assetexporterview.cpp index 7d3b18eee43..c4b6a8d2917 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/assetexporterview.cpp +++ b/src/plugins/qmldesigner/assetexporterplugin/assetexporterview.cpp @@ -23,8 +23,9 @@ const int MinRetry = 2; namespace QmlDesigner { -AssetExporterView::AssetExporterView() - : m_timer(this) +AssetExporterView::AssetExporterView(ExternalDependenciesInterface &externalDependencies) + : AbstractView(externalDependencies) + , m_timer(this) { m_timer.setInterval(RetryIntervalMs); // We periodically check if file is loaded. diff --git a/src/plugins/qmldesigner/assetexporterplugin/assetexporterview.h b/src/plugins/qmldesigner/assetexporterplugin/assetexporterview.h index 9d5dd365f1b..307a9768af0 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/assetexporterview.h +++ b/src/plugins/qmldesigner/assetexporterplugin/assetexporterview.h @@ -29,7 +29,7 @@ public: Loaded }; - AssetExporterView(); + AssetExporterView(ExternalDependenciesInterface &externalDependencies); bool loadQmlFile(const Utils::FilePath &path, uint timeoutSecs = 10); bool saveQmlFile(QString *error) const; diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibraryiconprovider.cpp b/src/plugins/qmldesigner/components/assetslibrary/assetslibraryiconprovider.cpp index 570f49391fd..870da80f735 100644 --- a/src/plugins/qmldesigner/components/assetslibrary/assetslibraryiconprovider.cpp +++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibraryiconprovider.cpp @@ -4,8 +4,8 @@ #include "assetslibraryiconprovider.h" #include "assetslibrarymodel.h" -#include #include +#include #include namespace QmlDesigner { diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.cpp b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.cpp index 07205b5c730..fc4a17eb118 100644 --- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.cpp +++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.cpp @@ -7,10 +7,10 @@ #include #include -#include -#include #include #include +#include +#include #include diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.cpp b/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.cpp index 1d14ae1adb5..56a536c82e8 100644 --- a/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.cpp +++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.cpp @@ -43,7 +43,9 @@ public: SynchronousImageCache synchronousFontImageCache{storage, timeStampProvider, fontCollector}; }; -AssetsLibraryView::AssetsLibraryView() {} +AssetsLibraryView::AssetsLibraryView(ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} +{} AssetsLibraryView::~AssetsLibraryView() {} diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.h b/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.h index cea3885c78c..4194195ec56 100644 --- a/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.h +++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibraryview.h @@ -19,7 +19,7 @@ class AssetsLibraryView : public AbstractView Q_OBJECT public: - AssetsLibraryView(); + AssetsLibraryView(ExternalDependenciesInterface &externalDependencies); ~AssetsLibraryView() override; bool hasWidget() const override; diff --git a/src/plugins/qmldesigner/components/componentcore/abstractaction.h b/src/plugins/qmldesigner/components/componentcore/abstractaction.h index 0a676d5c05f..081740b03dc 100644 --- a/src/plugins/qmldesigner/components/componentcore/abstractaction.h +++ b/src/plugins/qmldesigner/components/componentcore/abstractaction.h @@ -10,7 +10,7 @@ namespace QmlDesigner { -class QMLDESIGNERCORE_EXPORT DefaultAction : public QAction +class QMLDESIGNERCOMPONENTS_EXPORT DefaultAction : public QAction { Q_OBJECT @@ -25,7 +25,7 @@ protected: SelectionContext m_selectionContext; }; -class QMLDESIGNERCORE_EXPORT AbstractAction : public ActionInterface +class QMLDESIGNERCOMPONENTS_EXPORT AbstractAction : public ActionInterface { public: AbstractAction(const QString &description = QString()); diff --git a/src/plugins/qmldesigner/components/componentcore/abstractactiongroup.h b/src/plugins/qmldesigner/components/componentcore/abstractactiongroup.h index 504ae85ef1c..a523bd2d48c 100644 --- a/src/plugins/qmldesigner/components/componentcore/abstractactiongroup.h +++ b/src/plugins/qmldesigner/components/componentcore/abstractactiongroup.h @@ -11,7 +11,7 @@ namespace QmlDesigner { -class QMLDESIGNERCORE_EXPORT AbstractActionGroup : public ActionInterface +class QMLDESIGNERCOMPONENTS_EXPORT AbstractActionGroup : public ActionInterface { public: AbstractActionGroup(const QString &displayName); diff --git a/src/plugins/qmldesigner/components/componentcore/actioninterface.h b/src/plugins/qmldesigner/components/componentcore/actioninterface.h index 926b2ae870d..bad16f6d91a 100644 --- a/src/plugins/qmldesigner/components/componentcore/actioninterface.h +++ b/src/plugins/qmldesigner/components/componentcore/actioninterface.h @@ -12,7 +12,7 @@ QT_END_NAMESPACE namespace QmlDesigner { -class QMLDESIGNERCORE_EXPORT ActionInterface +class QMLDESIGNERCOMPONENTS_EXPORT ActionInterface { public: enum Type { diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h index 7c2630d965b..416afb86261 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanager.h @@ -78,7 +78,8 @@ private: QToolBar *m_toolBar; }; -class QMLDESIGNERCORE_EXPORT DesignerActionManager { +class QMLDESIGNERCOMPONENTS_EXPORT DesignerActionManager +{ public: DesignerActionManager(DesignerActionManagerView *designerActionManagerView); ~DesignerActionManager(); diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.cpp b/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.cpp index ba3bdb1c603..222a425494a 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.cpp +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.cpp @@ -11,8 +11,9 @@ namespace QmlDesigner { -DesignerActionManagerView::DesignerActionManagerView() - : m_designerActionManager(this) +DesignerActionManagerView::DesignerActionManagerView(ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} + , m_designerActionManager(this) , m_isInRewriterTransaction(false) , m_setupContextDirty(false) { diff --git a/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.h b/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.h index 17dbdbde2cb..8893af1e12e 100644 --- a/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.h +++ b/src/plugins/qmldesigner/components/componentcore/designeractionmanagerview.h @@ -16,7 +16,7 @@ class DesignerActionManagerView : public AbstractView { Q_OBJECT public: - DesignerActionManagerView(); + DesignerActionManagerView(ExternalDependenciesInterface &externalDependencies); void modelAttached(Model *model) override; void modelAboutToBeDetached(Model *model) override; diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp index 861397227e8..cffd11f1fa5 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp +++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp @@ -578,10 +578,14 @@ static QString toUpper(const QString &signal) return ret; } -static void addSignal(const QString &typeName, const QString &itemId, const QString &signalName, bool isRootModelNode) +static void addSignal(const QString &typeName, + const QString &itemId, + const QString &signalName, + bool isRootModelNode, + ExternalDependenciesInterface &externanDependencies) { auto model = Model::create("Item", 2, 0); - RewriterView rewriterView(RewriterView::Amend); + RewriterView rewriterView(externanDependencies, RewriterView::Amend); auto textEdit = qobject_cast (Core::EditorManager::currentEditor()->widget()); @@ -700,12 +704,19 @@ void addSignalHandlerOrGotoImplementation(const SelectionContext &selectionState if (dialog->signal().isEmpty()) return; - qmlObjectNode.view()->executeInTransaction("NavigatorTreeModel:exportItem", [=](){ - - addSignal(typeName, itemId, dialog->signal(), isModelNodeRoot); + qmlObjectNode.view()->executeInTransaction("NavigatorTreeModel:exportItem", [=]() { + addSignal(typeName, + itemId, + dialog->signal(), + isModelNodeRoot, + selectionState.view()->externalDependencies()); }); - addSignal(typeName, itemId, dialog->signal(), isModelNodeRoot); + addSignal(typeName, + itemId, + dialog->signal(), + isModelNodeRoot, + selectionState.view()->externalDependencies()); //Move cursor to correct curser position const QString filePath = Core::EditorManager::currentDocument()->filePath().toString(); @@ -1524,7 +1535,8 @@ void styleMerge(const SelectionContext &selectionContext, const QString &templat textEditTemplate.setPlainText(imports + qmlTemplateString); NotIndentingTextEditModifier textModifierTemplate(&textEditTemplate); - QScopedPointer templateRewriterView(new RewriterView(RewriterView::Amend)); + QScopedPointer templateRewriterView( + new RewriterView(selectionContext.view()->externalDependencies(), RewriterView::Amend)); templateRewriterView->setTextModifier(&textModifierTemplate); templateModel->attachView(templateRewriterView.data()); templateRewriterView->setCheckSemanticErrors(false); @@ -1543,7 +1555,8 @@ void styleMerge(const SelectionContext &selectionContext, const QString &templat textEditStyle.setPlainText(parentRewriterView->textModifierContent()); NotIndentingTextEditModifier textModifierStyle(&textEditStyle); - QScopedPointer styleRewriterView(new RewriterView(RewriterView::Amend)); + QScopedPointer styleRewriterView( + new RewriterView(selectionContext.view()->externalDependencies(), RewriterView::Amend)); styleRewriterView->setTextModifier(&textModifierStyle); styleModel->attachView(styleRewriterView.data()); diff --git a/src/plugins/qmldesigner/components/componentcore/selectioncontext.h b/src/plugins/qmldesigner/components/componentcore/selectioncontext.h index e9242bc1dde..fee7922d370 100644 --- a/src/plugins/qmldesigner/components/componentcore/selectioncontext.h +++ b/src/plugins/qmldesigner/components/componentcore/selectioncontext.h @@ -1,17 +1,17 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 -#include #include #include #include +#include #pragma once namespace QmlDesigner { -class QMLDESIGNERCORE_EXPORT SelectionContext { - +class QMLDESIGNERCOMPONENTS_EXPORT SelectionContext +{ public: enum class UpdateMode { Normal, diff --git a/src/plugins/qmldesigner/components/componentcore/theme.h b/src/plugins/qmldesigner/components/componentcore/theme.h index e9b751e49d7..4864e6e4c94 100644 --- a/src/plugins/qmldesigner/components/componentcore/theme.h +++ b/src/plugins/qmldesigner/components/componentcore/theme.h @@ -3,7 +3,7 @@ #pragma once -#include +#include #include @@ -16,7 +16,7 @@ QT_END_NAMESPACE namespace QmlDesigner { -class QMLDESIGNERCORE_EXPORT Theme : public Utils::Theme +class QMLDESIGNERCOMPONENTS_EXPORT Theme : public Utils::Theme { Q_OBJECT public: diff --git a/src/plugins/qmldesigner/components/componentcore/viewmanager.cpp b/src/plugins/qmldesigner/components/componentcore/viewmanager.cpp index 9d0589da28a..df768198266 100644 --- a/src/plugins/qmldesigner/components/componentcore/viewmanager.cpp +++ b/src/plugins/qmldesigner/components/componentcore/viewmanager.cpp @@ -47,9 +47,26 @@ static Q_LOGGING_CATEGORY(viewBenchmark, "qtc.viewmanager.attach", QtWarningMsg) class ViewManagerData { public: - ViewManagerData(AsynchronousImageCache &imageCache) - : itemLibraryView(imageCache) - , propertyEditorView(imageCache) + ViewManagerData(AsynchronousImageCache &imageCache, + ExternalDependenciesInterface &externalDependencies) + : debugView{externalDependencies} + , designerActionManagerView{externalDependencies} + , nodeInstanceView(QCoreApplication::arguments().contains("-capture-puppet-stream") + ? capturingConnectionManager + : connectionManager, + externalDependencies) + , componentView{externalDependencies} + , edit3DView{externalDependencies} + , formEditorView{externalDependencies} + , textEditorView{externalDependencies} + , assetsLibraryView{externalDependencies} + , itemLibraryView(imageCache, externalDependencies) + , navigatorView{externalDependencies} + , propertyEditorView(imageCache, externalDependencies) + , materialEditorView{externalDependencies} + , materialBrowserView{externalDependencies} + , statesEditorView{externalDependencies} + , newStatesEditorView{externalDependencies} {} InteractiveConnectionManager connectionManager; @@ -57,9 +74,7 @@ public: QmlModelState savedState; Internal::DebugView debugView; DesignerActionManagerView designerActionManagerView; - NodeInstanceView nodeInstanceView{ - QCoreApplication::arguments().contains("-capture-puppet-stream") ? capturingConnectionManager - : connectionManager}; + NodeInstanceView nodeInstanceView; ComponentView componentView; Edit3DView edit3DView; FormEditorView formEditorView; @@ -81,8 +96,9 @@ static CrumbleBar *crumbleBar() { return QmlDesignerPlugin::instance()->mainWidget()->crumbleBar(); } -ViewManager::ViewManager(AsynchronousImageCache &imageCache) - : d(std::make_unique(imageCache)) +ViewManager::ViewManager(AsynchronousImageCache &imageCache, + ExternalDependenciesInterface &externalDependencies) + : d(std::make_unique(imageCache, externalDependencies)) { d->formEditorView.setGotoErrorCallback([this](int line, int column) { d->textEditorView.gotoCursorPosition(line, column); diff --git a/src/plugins/qmldesigner/components/componentcore/viewmanager.h b/src/plugins/qmldesigner/components/componentcore/viewmanager.h index f6efc5bd626..e62454787b8 100644 --- a/src/plugins/qmldesigner/components/componentcore/viewmanager.h +++ b/src/plugins/qmldesigner/components/componentcore/viewmanager.h @@ -3,7 +3,9 @@ #pragma once -#include "abstractview.h" +#include + +#include #include @@ -28,10 +30,11 @@ namespace Internal { class DesignModeWidget; } class ViewManagerData; -class QMLDESIGNERCORE_EXPORT ViewManager +class QMLDESIGNERCOMPONENTS_EXPORT ViewManager { public: - ViewManager(class AsynchronousImageCache &imageCache); + ViewManager(class AsynchronousImageCache &imageCache, + class ExternalDependenciesInterface &externalDependencies); ~ViewManager(); void attachRewriterView(); diff --git a/src/plugins/qmldesigner/components/componentcore/zoomaction.h b/src/plugins/qmldesigner/components/componentcore/zoomaction.h index 8abdf69b534..8c33de7b4cb 100644 --- a/src/plugins/qmldesigner/components/componentcore/zoomaction.h +++ b/src/plugins/qmldesigner/components/componentcore/zoomaction.h @@ -2,7 +2,7 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 #pragma once -#include +#include #include #include @@ -15,7 +15,7 @@ QT_END_NAMESPACE namespace QmlDesigner { -class QMLDESIGNERCORE_EXPORT ZoomAction : public QWidgetAction +class QMLDESIGNERCOMPONENTS_EXPORT ZoomAction : public QWidgetAction { Q_OBJECT diff --git a/src/plugins/qmldesigner/components/connectioneditor/connectionview.cpp b/src/plugins/qmldesigner/components/connectioneditor/connectionview.cpp index ad10765c7aa..a5a790717ea 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/connectionview.cpp +++ b/src/plugins/qmldesigner/components/connectioneditor/connectionview.cpp @@ -24,8 +24,9 @@ namespace QmlDesigner { namespace Internal { -ConnectionView::ConnectionView() - : m_connectionViewWidget(new ConnectionViewWidget()) +ConnectionView::ConnectionView(ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} + , m_connectionViewWidget(new ConnectionViewWidget()) , m_connectionModel(new ConnectionModel(this)) , m_bindingModel(new BindingModel(this)) , m_dynamicPropertiesModel(new DynamicPropertiesModel(false, this)) diff --git a/src/plugins/qmldesigner/components/connectioneditor/connectionview.h b/src/plugins/qmldesigner/components/connectioneditor/connectionview.h index f98dd582b70..a3a0301ebee 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/connectionview.h +++ b/src/plugins/qmldesigner/components/connectioneditor/connectionview.h @@ -28,7 +28,7 @@ class ConnectionView : public AbstractView Q_OBJECT public: - ConnectionView(); + ConnectionView(ExternalDependenciesInterface &externalDependencies); ~ConnectionView() override; // AbstractView diff --git a/src/plugins/qmldesigner/components/connectioneditor/connectionviewwidget.cpp b/src/plugins/qmldesigner/components/connectioneditor/connectionviewwidget.cpp index 0b1ec34a166..00779cbe516 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/connectionviewwidget.cpp +++ b/src/plugins/qmldesigner/components/connectioneditor/connectionviewwidget.cpp @@ -13,6 +13,7 @@ #include "theme.h" #include "signalhandlerproperty.h" +#include #include #include diff --git a/src/plugins/qmldesigner/components/curveeditor/curveeditorview.cpp b/src/plugins/qmldesigner/components/curveeditor/curveeditorview.cpp index 0646e8de73d..488912c9d8d 100644 --- a/src/plugins/qmldesigner/components/curveeditor/curveeditorview.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/curveeditorview.cpp @@ -21,8 +21,9 @@ namespace QmlDesigner { -CurveEditorView::CurveEditorView() - : m_block(false) +CurveEditorView::CurveEditorView(ExternalDependenciesInterface &externalDepoendencies) + : AbstractView{externalDepoendencies} + , m_block(false) , m_model(new CurveEditorModel()) , m_editor(new CurveEditor(m_model)) { diff --git a/src/plugins/qmldesigner/components/curveeditor/curveeditorview.h b/src/plugins/qmldesigner/components/curveeditor/curveeditorview.h index 0972a2df449..a248cf3e26b 100644 --- a/src/plugins/qmldesigner/components/curveeditor/curveeditorview.h +++ b/src/plugins/qmldesigner/components/curveeditor/curveeditorview.h @@ -16,7 +16,7 @@ class CurveEditorView : public AbstractView Q_OBJECT public: - explicit CurveEditorView(); + explicit CurveEditorView(ExternalDependenciesInterface &externalDepoendencies); ~CurveEditorView() override; public: diff --git a/src/plugins/qmldesigner/components/debugview/debugview.cpp b/src/plugins/qmldesigner/components/debugview/debugview.cpp index fd6ef9f4354..286e1000f3e 100644 --- a/src/plugins/qmldesigner/components/debugview/debugview.cpp +++ b/src/plugins/qmldesigner/components/debugview/debugview.cpp @@ -39,8 +39,9 @@ namespace QmlDesigner { namespace Internal { -DebugView::DebugView() - : m_debugViewWidget(new DebugViewWidget) +DebugView::DebugView(ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} + , m_debugViewWidget(new DebugViewWidget) { } diff --git a/src/plugins/qmldesigner/components/debugview/debugview.h b/src/plugins/qmldesigner/components/debugview/debugview.h index f54828beaf6..8c9d368c390 100644 --- a/src/plugins/qmldesigner/components/debugview/debugview.h +++ b/src/plugins/qmldesigner/components/debugview/debugview.h @@ -17,7 +17,7 @@ class DebugView : public AbstractView Q_OBJECT public: - DebugView(); + DebugView(ExternalDependenciesInterface &externalDependencies); ~DebugView() override; // AbstractView diff --git a/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp b/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp index 54195cf78c5..1cae6a2a39a 100644 --- a/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp +++ b/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp @@ -10,7 +10,6 @@ #include "metainfo.h" #include "nodehints.h" #include "seekerslider.h" -#include "view3dactioncommand.h" #include #include @@ -31,7 +30,8 @@ namespace QmlDesigner { -Edit3DView::Edit3DView() +Edit3DView::Edit3DView(ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} { m_compressionTimer.setInterval(1000); m_compressionTimer.setSingleShot(true); diff --git a/src/plugins/qmldesigner/components/edit3d/edit3dview.h b/src/plugins/qmldesigner/components/edit3d/edit3dview.h index 2f8aa07e001..b3c7be17a0e 100644 --- a/src/plugins/qmldesigner/components/edit3d/edit3dview.h +++ b/src/plugins/qmldesigner/components/edit3d/edit3dview.h @@ -2,6 +2,8 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 #pragma once +#include + #include #include @@ -22,12 +24,12 @@ class Edit3DAction; class Edit3DCameraAction; class SeekerSlider; -class QMLDESIGNERCORE_EXPORT Edit3DView : public AbstractView +class QMLDESIGNERCOMPONENTS_EXPORT Edit3DView : public AbstractView { Q_OBJECT public: - Edit3DView(); + Edit3DView(ExternalDependenciesInterface &externalDependencies); ~Edit3DView() override; WidgetInfo widgetInfo() override; diff --git a/src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp b/src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp index c10799b6c53..91e70e34d0b 100644 --- a/src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp +++ b/src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp @@ -1,10 +1,10 @@ // Copyright (C) 2020 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 +#include "edit3dwidget.h" #include "edit3dactions.h" #include "edit3dcanvas.h" #include "edit3dview.h" -#include "edit3dwidget.h" #include "edit3dvisibilitytogglesmenu.h" #include "metainfo.h" #include "modelnodeoperations.h" @@ -12,8 +12,9 @@ #include "qmldesignerplugin.h" #include "qmlvisualnode.h" #include "viewmanager.h" -#include +#include #include +#include #include #include diff --git a/src/plugins/qmldesigner/components/eventlist/eventlist.cpp b/src/plugins/qmldesigner/components/eventlist/eventlist.cpp index 1745ced4c69..d4e9cc32cf5 100644 --- a/src/plugins/qmldesigner/components/eventlist/eventlist.cpp +++ b/src/plugins/qmldesigner/components/eventlist/eventlist.cpp @@ -44,12 +44,12 @@ static Utils::FilePath findFile(const Utils::FilePath &path, const QString &file return {}; } - -NodeListView *EventList::st_nodeView = nullptr; +static std::unique_ptr st_nodeView; void EventList::setNodeProperties(AbstractView *view) { - st_nodeView = new NodeListView(view); + st_nodeView = std::make_unique(view->externalDependencies()); + view->model()->attachView(st_nodeView.get()); } void EventList::selectNode(int internalId) @@ -108,7 +108,7 @@ QStandardItemModel *EventList::nodeModel() NodeListView *EventList::nodeListView() { - return st_nodeView; + return st_nodeView.get(); } ModelNode EventList::modelNode(const QString &id) @@ -196,7 +196,8 @@ void EventList::initialize(EventListPluginView *parent) } if (!m_eventView) { - m_eventView = std::make_unique(); + m_eventView = std::make_unique(parent->externalDependencies()); + m_model->attachView(m_eventView.get()); } } diff --git a/src/plugins/qmldesigner/components/eventlist/eventlist.h b/src/plugins/qmldesigner/components/eventlist/eventlist.h index 4712322a469..5ee68256623 100644 --- a/src/plugins/qmldesigner/components/eventlist/eventlist.h +++ b/src/plugins/qmldesigner/components/eventlist/eventlist.h @@ -49,8 +49,6 @@ public: void write(const QString &text); private: - static NodeListView *st_nodeView; - std::unique_ptr m_model; std::unique_ptr m_eventView; Utils::FilePath m_path; diff --git a/src/plugins/qmldesigner/components/eventlist/eventlistdialog.cpp b/src/plugins/qmldesigner/components/eventlist/eventlistdialog.cpp index 0c6c84c3447..b695bbb53db 100644 --- a/src/plugins/qmldesigner/components/eventlist/eventlistdialog.cpp +++ b/src/plugins/qmldesigner/components/eventlist/eventlistdialog.cpp @@ -75,7 +75,8 @@ void EventListDialog::initialize(EventList &events) Model *model = events.model(); m_modifier->setParent(model); - m_rewriter = new RewriterView(QmlDesigner::RewriterView::Validate); + m_rewriter = new RewriterView(events.view()->externalDependencies(), + QmlDesigner::RewriterView::Validate); m_rewriter->setParent(model); m_rewriter->setTextModifier(m_modifier); m_rewriter->setCheckSemanticErrors(false); diff --git a/src/plugins/qmldesigner/components/eventlist/eventlistpluginview.cpp b/src/plugins/qmldesigner/components/eventlist/eventlistpluginview.cpp index e74465f40a1..47b0043b571 100644 --- a/src/plugins/qmldesigner/components/eventlist/eventlistpluginview.cpp +++ b/src/plugins/qmldesigner/components/eventlist/eventlistpluginview.cpp @@ -7,11 +7,12 @@ #include "eventlistdialog.h" #include "signalhandlerproperty.h" +#include #include +#include #include #include #include -#include namespace QmlDesigner { @@ -30,8 +31,9 @@ SignalHandlerProperty signalPropertyFromAction(ActionInterface *interface) return SignalHandlerProperty(); } -EventListPluginView::EventListPluginView() - : m_eventlist() +EventListPluginView::EventListPluginView(ExternalDependenciesInterface &externalDepoendencies) + : AbstractView{externalDepoendencies} + , m_eventlist() , m_eventListDialog(nullptr) , m_assigner(nullptr) , m_signalConnector(nullptr) diff --git a/src/plugins/qmldesigner/components/eventlist/eventlistpluginview.h b/src/plugins/qmldesigner/components/eventlist/eventlistpluginview.h index 9264503ce90..95627693262 100644 --- a/src/plugins/qmldesigner/components/eventlist/eventlistpluginview.h +++ b/src/plugins/qmldesigner/components/eventlist/eventlistpluginview.h @@ -16,7 +16,7 @@ class EventListPluginView : public AbstractView Q_OBJECT public: - EventListPluginView(); + EventListPluginView(ExternalDependenciesInterface &externalDepoendencies); ~EventListPluginView() override = default; void registerActions(); diff --git a/src/plugins/qmldesigner/components/eventlist/eventlistview.cpp b/src/plugins/qmldesigner/components/eventlist/eventlistview.cpp index 58619c854db..d8b74c88d49 100644 --- a/src/plugins/qmldesigner/components/eventlist/eventlistview.cpp +++ b/src/plugins/qmldesigner/components/eventlist/eventlistview.cpp @@ -50,8 +50,9 @@ QStringList EventListModel::connectEvents(const QStringList &eventIds) return out; } -EventListView::EventListView() - : m_eventlist() +EventListView::EventListView(ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} + , m_eventlist() , m_model(std::make_unique()) {} diff --git a/src/plugins/qmldesigner/components/eventlist/eventlistview.h b/src/plugins/qmldesigner/components/eventlist/eventlistview.h index 8ca045e6afb..896d0129338 100644 --- a/src/plugins/qmldesigner/components/eventlist/eventlistview.h +++ b/src/plugins/qmldesigner/components/eventlist/eventlistview.h @@ -51,7 +51,7 @@ class EventListView : public AbstractView Q_OBJECT public: - explicit EventListView(); + explicit EventListView(ExternalDependenciesInterface &externalDependencies); ~EventListView() override; void nodeRemoved(const ModelNode &removedNode, diff --git a/src/plugins/qmldesigner/components/eventlist/nodelistview.cpp b/src/plugins/qmldesigner/components/eventlist/nodelistview.cpp index 3131688798a..1c769094e5b 100644 --- a/src/plugins/qmldesigner/components/eventlist/nodelistview.cpp +++ b/src/plugins/qmldesigner/components/eventlist/nodelistview.cpp @@ -41,11 +41,10 @@ NodeListModel::NodeListModel(QObject *parent) setSortRole(internalIdRole); } -NodeListView::NodeListView(AbstractView *parent) - : m_itemModel(new NodeListModel(this)) +NodeListView::NodeListView(ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} + , m_itemModel(new NodeListModel(this)) { - setParent(parent); - parent->model()->attachView(this); reset(); } diff --git a/src/plugins/qmldesigner/components/eventlist/nodelistview.h b/src/plugins/qmldesigner/components/eventlist/nodelistview.h index 98878f996d6..0f7fbaa73fc 100644 --- a/src/plugins/qmldesigner/components/eventlist/nodelistview.h +++ b/src/plugins/qmldesigner/components/eventlist/nodelistview.h @@ -33,7 +33,7 @@ class NodeListView : public AbstractView Q_OBJECT public: - explicit NodeListView(AbstractView *parent); + explicit NodeListView(ExternalDependenciesInterface &externalDependencies); ~NodeListView() override; int currentNode() const; diff --git a/src/plugins/qmldesigner/components/formeditor/abstractcustomtool.h b/src/plugins/qmldesigner/components/formeditor/abstractcustomtool.h index cca5d7dcc77..381c077e94f 100644 --- a/src/plugins/qmldesigner/components/formeditor/abstractcustomtool.h +++ b/src/plugins/qmldesigner/components/formeditor/abstractcustomtool.h @@ -6,7 +6,7 @@ namespace QmlDesigner { -class QMLDESIGNERCORE_EXPORT AbstractCustomTool : public QmlDesigner::AbstractFormEditorTool +class QMLDESIGNERCOMPONENTS_EXPORT AbstractCustomTool : public QmlDesigner::AbstractFormEditorTool { public: AbstractCustomTool(); diff --git a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h index 0074a194dd5..aeef186c767 100644 --- a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h +++ b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h @@ -4,7 +4,7 @@ #include "formeditoritem.h" -#include +#include #include "snapper.h" @@ -16,7 +16,7 @@ namespace QmlDesigner { class FormEditorView; -class QMLDESIGNERCORE_EXPORT AbstractFormEditorTool +class QMLDESIGNERCOMPONENTS_EXPORT AbstractFormEditorTool { friend FormEditorView; diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.h b/src/plugins/qmldesigner/components/formeditor/formeditoritem.h index 2bca5ffd574..e697d99a191 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.h @@ -2,9 +2,11 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 #pragma once -#include #include "snappinglinecreator.h" +#include +#include + #include #include @@ -25,7 +27,7 @@ namespace Internal { class MoveController; } -class QMLDESIGNERCORE_EXPORT FormEditorItem : public QGraphicsItem +class QMLDESIGNERCOMPONENTS_EXPORT FormEditorItem : public QGraphicsItem { friend FormEditorScene; diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorscene.h b/src/plugins/qmldesigner/components/formeditor/formeditorscene.h index 76c085be061..12231f4af9c 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorscene.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorscene.h @@ -21,7 +21,7 @@ class FormEditorItem; class FormEditorView; class LayerItem; -class QMLDESIGNERCORE_EXPORT FormEditorScene : public QGraphicsScene +class QMLDESIGNERCOMPONENTS_EXPORT FormEditorScene : public QGraphicsScene { Q_OBJECT diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index 225751dc71d..bc86af85179 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -42,7 +42,9 @@ namespace QmlDesigner { -FormEditorView::FormEditorView() {} +FormEditorView::FormEditorView(ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} +{} FormEditorScene* FormEditorView::scene() const { diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h index c70a606e235..eefbb6cfd6e 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h @@ -2,6 +2,8 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 #pragma once +#include + #include #include @@ -34,12 +36,12 @@ class DragTool; class ItemLibraryEntry; class QmlItemNode; -class QMLDESIGNERCORE_EXPORT FormEditorView : public AbstractView +class QMLDESIGNERCOMPONENTS_EXPORT FormEditorView : public AbstractView { Q_OBJECT public: - FormEditorView(); + FormEditorView(ExternalDependenciesInterface &externalDependencies); ~FormEditorView() override; // AbstractView diff --git a/src/plugins/qmldesigner/components/formeditor/resizehandleitem.h b/src/plugins/qmldesigner/components/formeditor/resizehandleitem.h index f24dc6fc294..26b53813ae5 100644 --- a/src/plugins/qmldesigner/components/formeditor/resizehandleitem.h +++ b/src/plugins/qmldesigner/components/formeditor/resizehandleitem.h @@ -4,13 +4,13 @@ #include "resizecontroller.h" -#include +#include #include namespace QmlDesigner { -class QMLDESIGNERCORE_EXPORT ResizeHandleItem : public QGraphicsItem +class QMLDESIGNERCOMPONENTS_EXPORT ResizeHandleItem : public QGraphicsItem { public: enum diff --git a/src/plugins/qmldesigner/components/formeditor/rotationhandleitem.h b/src/plugins/qmldesigner/components/formeditor/rotationhandleitem.h index ae518e4e9d3..3124adca465 100644 --- a/src/plugins/qmldesigner/components/formeditor/rotationhandleitem.h +++ b/src/plugins/qmldesigner/components/formeditor/rotationhandleitem.h @@ -4,13 +4,13 @@ #include "rotationcontroller.h" -#include +#include #include namespace QmlDesigner { -class QMLDESIGNERCORE_EXPORT RotationHandleItem : public QGraphicsItem +class QMLDESIGNERCOMPONENTS_EXPORT RotationHandleItem : public QGraphicsItem { public: enum diff --git a/src/plugins/qmldesigner/components/integration/componentview.cpp b/src/plugins/qmldesigner/components/integration/componentview.cpp index 6cd8c69a042..ada9b82f008 100644 --- a/src/plugins/qmldesigner/components/integration/componentview.cpp +++ b/src/plugins/qmldesigner/components/integration/componentview.cpp @@ -15,8 +15,9 @@ namespace QmlDesigner { -ComponentView::ComponentView() - : m_standardItemModel(new QStandardItemModel(this)) +ComponentView::ComponentView(ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} + , m_standardItemModel(new QStandardItemModel(this)) , m_componentAction(new ComponentAction(this)) { } diff --git a/src/plugins/qmldesigner/components/integration/componentview.h b/src/plugins/qmldesigner/components/integration/componentview.h index 145549fbf6e..72f0ddc68af 100644 --- a/src/plugins/qmldesigner/components/integration/componentview.h +++ b/src/plugins/qmldesigner/components/integration/componentview.h @@ -27,7 +27,7 @@ public: ModelNodeRole = Qt::UserRole }; - ComponentView(); + ComponentView(ExternalDependenciesInterface &externalDependencies); void modelAttached(Model *model) override; void modelAboutToBeDetached(Model *model) override; diff --git a/src/plugins/qmldesigner/components/integration/designdocument.cpp b/src/plugins/qmldesigner/components/integration/designdocument.cpp index 97cc756697e..530f8ccba38 100644 --- a/src/plugins/qmldesigner/components/integration/designdocument.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocument.cpp @@ -60,13 +60,15 @@ namespace QmlDesigner { DesignDocument acts as a facade to a model representing a qml document, and the different views/widgets accessing it. */ -DesignDocument::DesignDocument(ProjectStorage &projectStorage) +DesignDocument::DesignDocument(ProjectStorage &projectStorage, + ExternalDependenciesInterface &externalDependencies) : m_documentModel(Model::create("QtQuick.Item", 1, 0)) - , m_subComponentManager(new SubComponentManager(m_documentModel.get(), this)) - , m_rewriterView(new RewriterView(RewriterView::Amend)) + , m_subComponentManager(new SubComponentManager(m_documentModel.get(), externalDependencies)) + , m_rewriterView(new RewriterView(externalDependencies, RewriterView::Amend)) , m_documentLoaded(false) , m_currentTarget(nullptr) , m_projectStorage(projectStorage) + , m_externalDependencies{externalDependencies} { } @@ -477,11 +479,11 @@ void DesignDocument::deleteSelected() void DesignDocument::copySelected() { - DesignDocumentView view; + DesignDocumentView view{m_externalDependencies}; currentModel()->attachView(&view); - DesignDocumentView::copyModelNodes(view.selectedModelNodes()); + DesignDocumentView::copyModelNodes(view.selectedModelNodes(), m_externalDependencies); } void DesignDocument::cutSelected() @@ -537,12 +539,12 @@ void DesignDocument::paste() if (TimelineActions::clipboardContainsKeyframes()) // pasting keyframes is handled in TimelineView return; - auto pasteModel = DesignDocumentView::pasteToModel(); + auto pasteModel = DesignDocumentView::pasteToModel(m_externalDependencies); if (!pasteModel) return; - DesignDocumentView view; + DesignDocumentView view{m_externalDependencies}; pasteModel->attachView(&view); ModelNode rootNode(view.rootModelNode()); QList selectedNodes = rootNode.directSubModelNodes(); @@ -662,7 +664,7 @@ void DesignDocument::selectAll() if (!currentModel()) return; - DesignDocumentView view; + DesignDocumentView view{m_externalDependencies}; currentModel()->attachView(&view); QList allNodesExceptRootNode(view.allModelNodes()); diff --git a/src/plugins/qmldesigner/components/integration/designdocument.h b/src/plugins/qmldesigner/components/integration/designdocument.h index fd5c01f8ad6..502cf672c29 100644 --- a/src/plugins/qmldesigner/components/integration/designdocument.h +++ b/src/plugins/qmldesigner/components/integration/designdocument.h @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -33,12 +34,13 @@ class CrumbleBarInfo; class ViewManager; class AbstractView; -class QMLDESIGNERCORE_EXPORT DesignDocument: public QObject +class QMLDESIGNERCOMPONENTS_EXPORT DesignDocument : public QObject { Q_OBJECT public: - DesignDocument(ProjectStorage &projectStorage); + DesignDocument(ProjectStorage &projectStorage, + ExternalDependenciesInterface &externalDependencies); ~DesignDocument() override; QString displayName() const; @@ -139,6 +141,7 @@ private: // variables bool m_documentLoaded; ProjectExplorer::Target *m_currentTarget; ProjectStorage &m_projectStorage; + ExternalDependenciesInterface &m_externalDependencies; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/integration/designdocumentview.cpp b/src/plugins/qmldesigner/components/integration/designdocumentview.cpp index c217bda183b..d954ad24496 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentview.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocumentview.cpp @@ -22,8 +22,9 @@ namespace QmlDesigner { -DesignDocumentView::DesignDocumentView() - : m_modelMerger(new ModelMerger(this)) +DesignDocumentView::DesignDocumentView(ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} + , m_modelMerger(new ModelMerger(this)) { } @@ -79,7 +80,6 @@ void DesignDocumentView::fromClipboard() // } } - QString DesignDocumentView::toText() const { auto outputModel = Model::create("QtQuick.Rectangle", 1, 0, model()); @@ -97,7 +97,8 @@ QString DesignDocumentView::toText() const textEdit.setPlainText(imports + QStringLiteral("Item {\n}\n")); NotIndentingTextEditModifier modifier(&textEdit); - QScopedPointer rewriterView(new RewriterView(RewriterView::Amend)); + QScopedPointer rewriterView( + new RewriterView(externalDependencies(), RewriterView::Amend)); rewriterView->setCheckSemanticErrors(false); rewriterView->setTextModifier(&modifier); outputModel->setRewriterView(rewriterView.data()); @@ -126,7 +127,7 @@ void DesignDocumentView::fromText(const QString &text) textEdit.setPlainText(imports + text); NotIndentingTextEditModifier modifier(&textEdit); - RewriterView rewriterView; + RewriterView rewriterView{externalDependencies()}; rewriterView.setCheckSemanticErrors(false); rewriterView.setTextModifier(&modifier); inputModel->setRewriterView(&rewriterView); @@ -151,7 +152,7 @@ static Model *currentModel() return nullptr; } -std::unique_ptr DesignDocumentView::pasteToModel() +std::unique_ptr DesignDocumentView::pasteToModel(ExternalDependenciesInterface &externalDependencies) { Model *parentModel = currentModel(); @@ -167,7 +168,7 @@ std::unique_ptr DesignDocumentView::pasteToModel() pasteModel->setFileUrl(parentModel->fileUrl()); pasteModel->changeImports(parentModel->imports(), {}); - DesignDocumentView view; + DesignDocumentView view{externalDependencies}; pasteModel->attachView(&view); view.fromClipboard(); @@ -175,7 +176,8 @@ std::unique_ptr DesignDocumentView::pasteToModel() return pasteModel; } -void DesignDocumentView::copyModelNodes(const QList &nodesToCopy) +void DesignDocumentView::copyModelNodes(const QList &nodesToCopy, + ExternalDependenciesInterface &externalDependencies) { Model *parentModel = currentModel(); @@ -201,7 +203,7 @@ void DesignDocumentView::copyModelNodes(const QList &nodesToCopy) } } - DesignDocumentView view; + DesignDocumentView view{externalDependencies}; copyModel->attachView(&view); if (selectedNodes.count() == 1) { diff --git a/src/plugins/qmldesigner/components/integration/designdocumentview.h b/src/plugins/qmldesigner/components/integration/designdocumentview.h index 7ed8addee0d..6294f2be30f 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentview.h +++ b/src/plugins/qmldesigner/components/integration/designdocumentview.h @@ -4,6 +4,7 @@ #pragma once #include +#include #include @@ -11,11 +12,11 @@ namespace QmlDesigner { class ModelMerger; -class QMLDESIGNERCORE_EXPORT DesignDocumentView : public AbstractView +class QMLDESIGNERCOMPONENTS_EXPORT DesignDocumentView : public AbstractView { Q_OBJECT public: - DesignDocumentView(); + DesignDocumentView(ExternalDependenciesInterface &externalDependencies); ~DesignDocumentView() override; ModelNode insertModel(const ModelNode &modelNode); @@ -27,8 +28,9 @@ public: QString toText() const; void fromText(const QString &text); - static std::unique_ptr pasteToModel(); - static void copyModelNodes(const QList &nodesToCopy); + static std::unique_ptr pasteToModel(ExternalDependenciesInterface &externalDependencies); + static void copyModelNodes(const QList &nodesToCopy, + ExternalDependenciesInterface &externalDependencies); private: std::unique_ptr m_modelMerger; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp index d7551626287..d83eb4fb6c8 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp @@ -5,10 +5,10 @@ #include "qmldesignerplugin.h" #include "qmldesignerconstants.h" -#include "rewriterview.h" #include "model.h" -#include "puppetcreator.h" +#include "puppetstarter.h" #include "rewritertransaction.h" +#include "rewriterview.h" #include "rewritingexception.h" #include @@ -568,9 +568,6 @@ void ItemLibraryAssetImporter::startNextImportProcess() Model *model = doc ? doc->currentModel() : nullptr; if (model) { - PuppetCreator puppetCreator(doc->currentTarget(), model); - puppetCreator.createQml2PuppetExecutableIfMissing(); - bool done = false; while (!m_puppetQueue.isEmpty() && !done) { const ParseData pd = m_parseData.value(m_puppetQueue.takeLast()); @@ -581,7 +578,8 @@ void ItemLibraryAssetImporter::startNextImportProcess() << pd.outDir.absolutePath() << QString::fromUtf8(optDoc.toJson()); m_currentImportId = pd.importId; - m_puppetProcess = puppetCreator.createPuppetProcess( + m_puppetProcess = PuppetStarter::createPuppetProcess( + {}, "custom", {}, [&] {}, @@ -611,15 +609,13 @@ void ItemLibraryAssetImporter::startNextIconProcess() Model *model = doc ? doc->currentModel() : nullptr; if (model) { - PuppetCreator puppetCreator(doc->currentTarget(), model); - puppetCreator.createQml2PuppetExecutableIfMissing(); - bool done = false; while (!m_puppetQueue.isEmpty() && !done) { const ParseData pd = m_parseData.value(m_puppetQueue.takeLast()); QStringList puppetArgs; puppetArgs << "--rendericon" << QString::number(24) << pd.iconFile << pd.iconSource; - m_puppetProcess = puppetCreator.createPuppetProcess( + m_puppetProcess = PuppetStarter::createPuppetProcess( + {}, "custom", {}, [&] {}, diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp index 2ab52f155b2..7d90020d961 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp @@ -2,12 +2,14 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 #include "itemlibraryview.h" -#include "itemlibrarywidget.h" #include "itemlibraryassetimportdialog.h" +#include "itemlibrarywidget.h" #include "metainfo.h" #include #include +#include #include +#include #include #include #include @@ -17,14 +19,15 @@ #include #include #include +#include #include #include -#include namespace QmlDesigner { -ItemLibraryView::ItemLibraryView(AsynchronousImageCache &imageCache) - : AbstractView() +ItemLibraryView::ItemLibraryView(AsynchronousImageCache &imageCache, + ExternalDependenciesInterface &externalDependencies) + : AbstractView(externalDependencies) , m_imageCache(imageCache) {} diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h index 1d575fea7f0..c6d3abf0b72 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h @@ -16,7 +16,8 @@ class ItemLibraryView : public AbstractView Q_OBJECT public: - ItemLibraryView(class AsynchronousImageCache &imageCache); + ItemLibraryView(class AsynchronousImageCache &imageCache, + ExternalDependenciesInterface &externalDependencies); ~ItemLibraryView() override; bool hasWidget() const override; diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp index f6f9bb498d5..72832442eff 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp @@ -25,7 +25,9 @@ namespace QmlDesigner { -MaterialBrowserView::MaterialBrowserView() {} +MaterialBrowserView::MaterialBrowserView(ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} +{} MaterialBrowserView::~MaterialBrowserView() {} diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h index 31b0310f4c4..ebd6f637c9d 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h @@ -18,7 +18,7 @@ class MaterialBrowserView : public AbstractView Q_OBJECT public: - MaterialBrowserView(); + MaterialBrowserView(ExternalDependenciesInterface &externalDependencies); ~MaterialBrowserView() override; bool hasWidget() const override; diff --git a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp index 9ddfbe73bec..e3c294c8349 100644 --- a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp +++ b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp @@ -48,8 +48,9 @@ namespace QmlDesigner { -MaterialEditorView::MaterialEditorView() - : m_stackedWidget(new QStackedWidget) +MaterialEditorView::MaterialEditorView(ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} + , m_stackedWidget(new QStackedWidget) , m_dynamicPropertiesModel(new Internal::DynamicPropertiesModel(true, this)) { m_updateShortcut = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_F7), m_stackedWidget); diff --git a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.h b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.h index 1789d17d44c..0e4581e48cb 100644 --- a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.h +++ b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.h @@ -31,7 +31,7 @@ class MaterialEditorView : public AbstractView Q_OBJECT public: - MaterialEditorView(); + MaterialEditorView(ExternalDependenciesInterface &externalDependencies); ~MaterialEditorView() override; bool hasWidget() const override; diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp index 143ac28eb45..2175f786691 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp @@ -88,8 +88,9 @@ static inline void moveNodesDown(const QList &nodes) namespace QmlDesigner { -NavigatorView::NavigatorView() - : m_blockSelectionChangedSignal(false) +NavigatorView::NavigatorView(ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} + , m_blockSelectionChangedSignal(false) { } @@ -702,10 +703,8 @@ void NavigatorView::setupWidget() m_widget = new NavigatorWidget(this); m_treeModel = new NavigatorTreeModel(this); -#ifndef QMLDESIGNER_TEST auto navigatorContext = new Internal::NavigatorContext(m_widget.data()); Core::ICore::addContextObject(navigatorContext); -#endif m_treeModel->setView(this); m_widget->setTreeModel(m_treeModel.data()); @@ -722,7 +721,6 @@ void NavigatorView::setupWidget() connect(m_widget.data(), &NavigatorWidget::textFilterChanged, this, &NavigatorView::textFilterChanged); -#ifndef QMLDESIGNER_TEST const QString fontName = "qtds_propertyIconFont.ttf"; const QSize size = QSize(28, 28); @@ -808,8 +806,6 @@ void NavigatorView::setupWidget() treeWidget()->setItemDelegateForColumn(NavigatorTreeModel::ColumnType::Alias, aliasDelegate); treeWidget()->setItemDelegateForColumn(NavigatorTreeModel::ColumnType::Visibility, visibilityDelegate); treeWidget()->setItemDelegateForColumn(NavigatorTreeModel::ColumnType::Lock, lockDelegate); - -#endif //QMLDESIGNER_TEST } } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.h b/src/plugins/qmldesigner/components/navigator/navigatorview.h index 1fe0cf06253..74caa3fa4ad 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.h +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.h @@ -40,7 +40,7 @@ class NavigatorView : public AbstractView Q_OBJECT public: - NavigatorView(); + NavigatorView(ExternalDependenciesInterface &externalDependencies); ~NavigatorView() override; bool hasWidget() const override; diff --git a/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp b/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp index e7f320ce8d8..83517b68f24 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp @@ -5,17 +5,19 @@ #include "navigatorwidget.h" #include "navigatorview.h" +#include #include +#include #include #include #include -#include #include #include #include #include #include +#include #include #include @@ -56,11 +58,9 @@ NavigatorWidget::NavigatorWidget(NavigatorView *view) setWindowTitle(tr("Navigator", "Title of navigator view")); -#ifndef QMLDESIGNER_TEST QByteArray sheet = Utils::FileReader::fetchQrc(":/qmldesigner/stylesheet.css"); sheet += Utils::FileReader::fetchQrc(":/qmldesigner/scrollbar.css"); setStyleSheet(Theme::replaceCssColors(QString::fromUtf8(sheet))); -#endif QmlDesignerPlugin::trackWidgetFocusTime(this, Constants::EVENT_NAVIGATORVIEW_TIME); } diff --git a/src/plugins/qmldesigner/components/pathtool/pathtool.cpp b/src/plugins/qmldesigner/components/pathtool/pathtool.cpp index 7e88114f08a..46adc62ef83 100644 --- a/src/plugins/qmldesigner/components/pathtool/pathtool.cpp +++ b/src/plugins/qmldesigner/components/pathtool/pathtool.cpp @@ -117,8 +117,8 @@ protected: } }; -PathTool::PathTool() - : m_pathToolView(this) +PathTool::PathTool(ExternalDependenciesInterface &externalDepoendencies) + : m_pathToolView(this, externalDepoendencies) { auto textToolAction = new PathToolAction; QmlDesignerPlugin::instance()->designerActionManager().addDesignerAction(textToolAction); diff --git a/src/plugins/qmldesigner/components/pathtool/pathtool.h b/src/plugins/qmldesigner/components/pathtool/pathtool.h index 6cdaa2728d4..5d242467d44 100644 --- a/src/plugins/qmldesigner/components/pathtool/pathtool.h +++ b/src/plugins/qmldesigner/components/pathtool/pathtool.h @@ -20,7 +20,7 @@ class PathTool : public QObject, public AbstractCustomTool { Q_OBJECT public: - PathTool(); + PathTool(ExternalDependenciesInterface &externalDepoendencies); ~PathTool() override; void mousePressEvent(const QList &itemList, diff --git a/src/plugins/qmldesigner/components/pathtool/pathtoolview.cpp b/src/plugins/qmldesigner/components/pathtool/pathtoolview.cpp index 20538573148..13ecab6cf5e 100644 --- a/src/plugins/qmldesigner/components/pathtool/pathtoolview.cpp +++ b/src/plugins/qmldesigner/components/pathtool/pathtoolview.cpp @@ -14,8 +14,9 @@ namespace QmlDesigner { -PathToolView::PathToolView(PathTool *pathTool) - : m_pathTool(pathTool) +PathToolView::PathToolView(PathTool *pathTool, ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} + , m_pathTool(pathTool) { } diff --git a/src/plugins/qmldesigner/components/pathtool/pathtoolview.h b/src/plugins/qmldesigner/components/pathtool/pathtoolview.h index e6d4664bddc..fe384045267 100644 --- a/src/plugins/qmldesigner/components/pathtool/pathtoolview.h +++ b/src/plugins/qmldesigner/components/pathtool/pathtoolview.h @@ -13,7 +13,7 @@ class PathToolView : public AbstractView { Q_OBJECT public: - PathToolView(PathTool *pathTool); + PathToolView(PathTool *pathTool, ExternalDependenciesInterface &externalDependencies); void nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent, const NodeAbstractProperty &oldPropertyParent, AbstractView::PropertyChangeFlags propertyChange) override; void variantPropertiesChanged(const QList& propertyList, PropertyChangeFlags propertyChange) override; diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorimageprovider.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorimageprovider.cpp index c519a375dd6..90dd2caaebe 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorimageprovider.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorimageprovider.cpp @@ -4,8 +4,8 @@ #include "propertyeditorimageprovider.h" #include "assetslibrarymodel.h" -#include #include +#include #include #include diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp index 66036118aa9..aa876885883 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp @@ -48,8 +48,9 @@ static bool propertyIsAttachedLayoutProperty(const PropertyName &propertyName) return propertyName.contains("Layout."); } -PropertyEditorView::PropertyEditorView(AsynchronousImageCache &imageCache) - : AbstractView() +PropertyEditorView::PropertyEditorView(AsynchronousImageCache &imageCache, + ExternalDependenciesInterface &externalDependencies) + : AbstractView(externalDependencies) , m_imageCache(imageCache) , m_updateShortcut(nullptr) , m_timerId(0) diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.h index e28e0fda63a..d6045da131b 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.h +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.h @@ -29,7 +29,8 @@ class PropertyEditorView: public AbstractView Q_OBJECT public: - PropertyEditorView(class AsynchronousImageCache &imageCache); + PropertyEditorView(class AsynchronousImageCache &imageCache, + ExternalDependenciesInterface &externalDependencies); ~PropertyEditorView() override; bool hasWidget() const override; diff --git a/src/plugins/qmldesigner/components/qmldesignercomponents_global.h b/src/plugins/qmldesigner/components/qmldesignercomponents_global.h new file mode 100644 index 00000000000..32ef8db2888 --- /dev/null +++ b/src/plugins/qmldesigner/components/qmldesignercomponents_global.h @@ -0,0 +1,14 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 + +#pragma once + +#include + +#if defined(QMLDESIGNERCOMPONENTS_LIBRARY) +#define QMLDESIGNERCOMPONENTS_EXPORT Q_DECL_EXPORT +#elif defined(QMLDESIGNERCOMPONENTS_STATIC_LIBRARY) +#define QMLDESIGNERCOMPONENTS_EXPORT +#else +#define QMLDESIGNERCOMPONENTS_EXPORT Q_DECL_IMPORT +#endif diff --git a/src/plugins/qmldesigner/components/sourcetool/sourcetool.cpp b/src/plugins/qmldesigner/components/sourcetool/sourcetool.cpp index 3380aa7d352..5732235b508 100644 --- a/src/plugins/qmldesigner/components/sourcetool/sourcetool.cpp +++ b/src/plugins/qmldesigner/components/sourcetool/sourcetool.cpp @@ -13,6 +13,7 @@ #include "nodemetainfo.h" #include "qmlitemnode.h" +#include #include #include diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp index f70789310cc..5a17a613d22 100644 --- a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp +++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp @@ -33,8 +33,9 @@ namespace QmlDesigner { We always have 'one' current state, where we get updates from (see sceneChanged()). In case the current state is the base state, we render the base state + all other states. */ -StatesEditorView::StatesEditorView() - : m_statesEditorModel(new StatesEditorModel(this)) +StatesEditorView::StatesEditorView(ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} + , m_statesEditorModel(new StatesEditorModel(this)) , m_lastIndex(-1) , m_editor(nullptr) { diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h index 8477065d2ae..1060829265f 100644 --- a/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h +++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorview.h @@ -17,7 +17,7 @@ class StatesEditorView : public AbstractView { Q_OBJECT public: - explicit StatesEditorView(); + explicit StatesEditorView(ExternalDependenciesInterface &externalDependencies); ~StatesEditorView() override; void renameState(int internalNodeId,const QString &newName); diff --git a/src/plugins/qmldesigner/components/stateseditornew/stateseditorview.cpp b/src/plugins/qmldesigner/components/stateseditornew/stateseditorview.cpp index a8e28f62e06..6901aa7e575 100644 --- a/src/plugins/qmldesigner/components/stateseditornew/stateseditorview.cpp +++ b/src/plugins/qmldesigner/components/stateseditornew/stateseditorview.cpp @@ -57,10 +57,12 @@ namespace Experimental { We always have 'one' current state, where we get updates from (see sceneChanged()). In case the current state is the base state, we render the base state + all other states. */ -StatesEditorView::StatesEditorView() : - m_statesEditorModel(new StatesEditorModel(this)), - m_lastIndex(-1), - m_editor(nullptr) + +StatesEditorView::StatesEditorView(ExternalDependenciesInterface &externalDependencies) + : AbstractView(externalDependencies) + , m_statesEditorModel(new StatesEditorModel(this)) + , m_lastIndex(-1) + , m_editor(nullptr) { Q_ASSERT(m_statesEditorModel); // base state diff --git a/src/plugins/qmldesigner/components/stateseditornew/stateseditorview.h b/src/plugins/qmldesigner/components/stateseditornew/stateseditorview.h index 8442917c544..57adacd87b8 100644 --- a/src/plugins/qmldesigner/components/stateseditornew/stateseditorview.h +++ b/src/plugins/qmldesigner/components/stateseditornew/stateseditorview.h @@ -45,7 +45,7 @@ class StatesEditorView : public AbstractView { Q_OBJECT public: - explicit StatesEditorView(); + explicit StatesEditorView(ExternalDependenciesInterface &externalDependencies); ~StatesEditorView() override; void renameState(int internalNodeId,const QString &newName); diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp b/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp index d445f59257b..9ad1db8dfb0 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp +++ b/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp @@ -42,8 +42,9 @@ namespace QmlDesigner { const char TEXTEDITOR_CONTEXT_ID[] = "QmlDesigner.TextEditorContext"; -TextEditorView::TextEditorView() - : m_widget(new TextEditorWidget(this)) +TextEditorView::TextEditorView(ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} + , m_widget(new TextEditorWidget(this)) , m_textEditorContext(new Internal::TextEditorContext(m_widget)) { Core::ICore::addContextObject(m_textEditorContext); diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorview.h b/src/plugins/qmldesigner/components/texteditor/texteditorview.h index bb448162a60..780105bfc7d 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorview.h +++ b/src/plugins/qmldesigner/components/texteditor/texteditorview.h @@ -2,9 +2,11 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 #pragma once -#include #include +#include + +#include #include @@ -20,12 +22,12 @@ class TextEditorContext; class TextEditorWidget; -class QMLDESIGNERCORE_EXPORT TextEditorView : public AbstractView +class QMLDESIGNERCOMPONENTS_EXPORT TextEditorView : public AbstractView { Q_OBJECT public: - TextEditorView(); + TextEditorView(ExternalDependenciesInterface &externalDependencies); ~TextEditorView() override; // AbstractView diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp index e8e6fd23437..51622b944a0 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp +++ b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include diff --git a/src/plugins/qmldesigner/components/texttool/textedititem.cpp b/src/plugins/qmldesigner/components/texttool/textedititem.cpp index f16a2e5120b..cc763b9c929 100644 --- a/src/plugins/qmldesigner/components/texttool/textedititem.cpp +++ b/src/plugins/qmldesigner/components/texttool/textedititem.cpp @@ -3,7 +3,9 @@ #include "textedititem.h" +#include #include +#include #include #include #include @@ -32,7 +34,11 @@ void TextEditItem::writeTextToProperty() if (text().isEmpty()) m_formEditorItem->qmlItemNode().removeProperty("text"); else if (m_formEditorItem->qmlItemNode().isTranslatableText("text")) - m_formEditorItem->qmlItemNode().setBindingProperty("text", QmlObjectNode::generateTranslatableText(text())); + m_formEditorItem->qmlItemNode().setBindingProperty( + "text", + QmlObjectNode::generateTranslatableText( + text(), + m_formEditorItem->formEditorView()->externalDependencies().designerSettings())); else m_formEditorItem->qmlItemNode().setVariantProperty("text", text()); } diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelineactions.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelineactions.cpp index 33c8424a0b0..714c7b188f7 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelineactions.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelineactions.cpp @@ -56,19 +56,20 @@ void TimelineActions::copyAllKeyframesForTarget(const ModelNode &targetNode, const QmlTimeline &timeline) { DesignDocumentView::copyModelNodes(Utils::transform(timeline.keyframeGroupsForTarget(targetNode), - &QmlTimelineKeyframeGroup::modelNode)); + &QmlTimelineKeyframeGroup::modelNode), + targetNode.view()->externalDependencies()); } void TimelineActions::pasteKeyframesToTarget(const ModelNode &targetNode, const QmlTimeline &timeline) { if (timeline.isValid()) { - auto pasteModel = DesignDocumentView::pasteToModel(); + auto pasteModel = DesignDocumentView::pasteToModel(targetNode.view()->externalDependencies()); if (!pasteModel) return; - DesignDocumentView view; + DesignDocumentView view{targetNode.view()->externalDependencies()}; pasteModel->attachView(&view); if (!view.rootModelNode().isValid()) @@ -113,7 +114,8 @@ void TimelineActions::pasteKeyframesToTarget(const ModelNode &targetNode, } } -void TimelineActions::copyKeyframes(const QList &keyframes) +void TimelineActions::copyKeyframes(const QList &keyframes, + ExternalDependenciesInterface &externalDependencies) { QList nodes; for (const auto &node : keyframes) { @@ -137,7 +139,7 @@ void TimelineActions::copyKeyframes(const QList &keyframes) nodes << node; } - DesignDocumentView::copyModelNodes(nodes); + DesignDocumentView::copyModelNodes(nodes, externalDependencies); } bool isKeyframe(const ModelNode &node) @@ -238,12 +240,12 @@ std::vector> getFramesRelative(const ModelNode &par void TimelineActions::pasteKeyframes(AbstractView *timelineView, const QmlTimeline &timeline) { - auto pasteModel = DesignDocumentView::pasteToModel(); + auto pasteModel = DesignDocumentView::pasteToModel(timelineView->externalDependencies()); if (!pasteModel) return; - DesignDocumentView view; + DesignDocumentView view{timelineView->externalDependencies()}; pasteModel->attachView(&view); if (!view.rootModelNode().isValid()) diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelineactions.h b/src/plugins/qmldesigner/components/timelineeditor/timelineactions.h index 6857cf48991..a5fe8bc4b65 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelineactions.h +++ b/src/plugins/qmldesigner/components/timelineeditor/timelineactions.h @@ -8,6 +8,8 @@ namespace QmlDesigner { +class ExternalDependenciesInterface; + class TimelineActions { public: @@ -18,7 +20,8 @@ public: static void copyAllKeyframesForTarget(const ModelNode &targetNode, const QmlTimeline &timeline); static void pasteKeyframesToTarget(const ModelNode &targetNode, const QmlTimeline &timeline); - static void copyKeyframes(const QList &keyframes); + static void copyKeyframes(const QList &keyframes, + ExternalDependenciesInterface &externalDependencies); static void pasteKeyframes(AbstractView *timelineView, const QmlTimeline &TimelineActions); static bool clipboardContainsKeyframes(); diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.cpp index dfa00985dd3..7a2204b2dcc 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.cpp @@ -62,12 +62,14 @@ QList allTimelineFrames(const QmlTimeline &timeline) return returnList; } -TimelineGraphicsScene::TimelineGraphicsScene(TimelineWidget *parent) +TimelineGraphicsScene::TimelineGraphicsScene(TimelineWidget *parent, + ExternalDependenciesInterface &m_externalDependencies) : AbstractScrollGraphicsScene(parent) , m_parent(parent) , m_layout(new TimelineGraphicsLayout(this)) , m_currentFrameIndicator(new TimelineFrameHandle) , m_tools(this) + , m_externalDependencies{m_externalDependencies} { addItem(m_layout); addItem(m_currentFrameIndicator); @@ -735,8 +737,9 @@ void TimelineGraphicsScene::pasteKeyframesToTarget(const ModelNode &targetNode) void TimelineGraphicsScene::copySelectedKeyframes() { - TimelineActions::copyKeyframes( - Utils::transform(selectedKeyframes(), &TimelineKeyframeItem::frameNode)); + TimelineActions::copyKeyframes(Utils::transform(selectedKeyframes(), + &TimelineKeyframeItem::frameNode), + m_externalDependencies); } void TimelineGraphicsScene::pasteSelectedKeyframes() diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.h b/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.h index 169fce71fd3..3c790ac21b5 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.h +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.h @@ -30,6 +30,7 @@ class TimelineKeyframeItem; class TimelinePlaceholder; class TimelineGraphicsLayout; class TimelineToolBar; +class ExternalDependenciesInterface; class AbstractScrollGraphicsScene : public QGraphicsScene { @@ -87,7 +88,8 @@ class TimelineGraphicsScene : public AbstractScrollGraphicsScene Q_OBJECT public: - explicit TimelineGraphicsScene(TimelineWidget *parent); + explicit TimelineGraphicsScene(TimelineWidget *parent, + ExternalDependenciesInterface &m_externalDependencies); ~TimelineGraphicsScene() override; @@ -192,6 +194,8 @@ private: TimelineToolDelegate m_tools; + ExternalDependenciesInterface &m_externalDependencies; + // sorted, unique cache of keyframes positions, used for snapping QVector m_keyframePositionsCache; QElapsedTimer m_usageTimer; diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelineview.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelineview.cpp index 2dff844ef14..c3aa2a18283 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelineview.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelineview.cpp @@ -15,6 +15,7 @@ #include #include +#include #include #include #include @@ -45,8 +46,9 @@ namespace QmlDesigner { -TimelineView::TimelineView() - : m_timelineWidget(nullptr) +TimelineView::TimelineView(ExternalDependenciesInterface &externalDepoendencies) + : AbstractView{externalDepoendencies} + , m_timelineWidget(nullptr) { EasingCurve::registerStreamOperators(); setEnabled(false); diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelineview.h b/src/plugins/qmldesigner/components/timelineeditor/timelineview.h index a0dd51dafa6..758cbe51238 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelineview.h +++ b/src/plugins/qmldesigner/components/timelineeditor/timelineview.h @@ -18,7 +18,7 @@ class TimelineView : public AbstractView Q_OBJECT public: - explicit TimelineView(); + explicit TimelineView(ExternalDependenciesInterface &externalDepoendencies); ~TimelineView() override; //Abstract View WidgetInfo widgetInfo() override; diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp index 6cbfe5cd698..c483029e5d5 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp @@ -100,7 +100,7 @@ TimelineWidget::TimelineWidget(TimelineView *view) , m_scrollbar(new QScrollBar(this)) , m_statusBar(new QLabel(this)) , m_timelineView(view) - , m_graphicsScene(new TimelineGraphicsScene(this)) + , m_graphicsScene(new TimelineGraphicsScene(this, view->externalDependencies())) , m_addButton(new QPushButton(this)) , m_onboardingContainer(new QWidget(this)) , m_loopPlayback(false) diff --git a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.cpp b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.cpp index 9bf04e8e0c5..f179a72fd8f 100644 --- a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.cpp +++ b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.cpp @@ -40,8 +40,9 @@ namespace QmlDesigner { -TransitionEditorView::TransitionEditorView() - : m_transitionEditorWidget(nullptr) +TransitionEditorView::TransitionEditorView(ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} + , m_transitionEditorWidget(nullptr) { } diff --git a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.h b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.h index e25820965f5..20860d0f08c 100644 --- a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.h +++ b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.h @@ -16,7 +16,7 @@ class TransitionEditorView : public AbstractView Q_OBJECT public: - explicit TransitionEditorView(); + explicit TransitionEditorView(ExternalDependenciesInterface &externalDependencies); ~TransitionEditorView() override; //Abstract View WidgetInfo widgetInfo() override; diff --git a/src/plugins/qmldesigner/componentsplugin/componentsplugin.cpp b/src/plugins/qmldesigner/componentsplugin/componentsplugin.cpp index fabcceb3239..36f664e21f2 100644 --- a/src/plugins/qmldesigner/componentsplugin/componentsplugin.cpp +++ b/src/plugins/qmldesigner/componentsplugin/componentsplugin.cpp @@ -7,6 +7,7 @@ #include "addtabdesigneraction.h" #include "entertabdesigneraction.h" +#include #include #include diff --git a/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp b/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp index c1ece4c93db..b99914322a1 100644 --- a/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp +++ b/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.cpp @@ -41,10 +41,12 @@ QString fileToString(const QString &filename) ImageCacheCollector::ImageCacheCollector(ImageCacheConnectionManager &connectionManager, QSize captureImageMinimumSize, QSize captureImageMaximumSize, + ExternalDependenciesInterface &externalDependencies, ImageCacheCollectorNullImageHandling nullImageHandling) : m_connectionManager{connectionManager} , captureImageMinimumSize{captureImageMinimumSize} , captureImageMaximumSize{captureImageMaximumSize} + , m_externalDependencies{externalDependencies} , nullImageHandling{nullImageHandling} {} @@ -56,8 +58,8 @@ void ImageCacheCollector::start(Utils::SmallStringView name, CaptureCallback captureCallback, AbortCallback abortCallback) { - RewriterView rewriterView{RewriterView::Amend}; - NodeInstanceView nodeInstanceView{m_connectionManager}; + RewriterView rewriterView{m_externalDependencies, RewriterView::Amend}; + NodeInstanceView nodeInstanceView{m_connectionManager, m_externalDependencies}; nodeInstanceView.setCaptureImageMinimumAndMaximumSize(captureImageMinimumSize, captureImageMaximumSize); diff --git a/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.h b/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.h index 9491d093dc2..a8c4298d9b8 100644 --- a/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.h +++ b/src/plugins/qmldesigner/designercore/imagecache/imagecachecollector.h @@ -22,6 +22,7 @@ class NotIndentingTextEditModifier; class ImageCacheConnectionManager; class RewriterView; class NodeInstanceView; +class ExternalDependenciesInterface; enum class ImageCacheCollectorNullImageHandling { CaptureNullImage, DontCaptureNullImage }; @@ -31,6 +32,7 @@ public: ImageCacheCollector(ImageCacheConnectionManager &connectionManager, QSize captureImageMinimumSize, QSize captureImageMaximumSize, + ExternalDependenciesInterface &externalDependencies, ImageCacheCollectorNullImageHandling nullImageHandling = {}); ~ImageCacheCollector(); @@ -57,6 +59,7 @@ private: QPointer m_target; QSize captureImageMinimumSize; QSize captureImageMaximumSize; + ExternalDependenciesInterface &m_externalDependencies; ImageCacheCollectorNullImageHandling nullImageHandling{}; }; diff --git a/src/plugins/qmldesigner/designercore/imagecache/imagecachefontcollector.cpp b/src/plugins/qmldesigner/designercore/imagecache/imagecachefontcollector.cpp index efd8bf1ad08..101e1227a01 100644 --- a/src/plugins/qmldesigner/designercore/imagecache/imagecachefontcollector.cpp +++ b/src/plugins/qmldesigner/designercore/imagecache/imagecachefontcollector.cpp @@ -3,10 +3,6 @@ #include "imagecachefontcollector.h" -#ifndef QMLDESIGNER_TEST // Tests don't care about UI, and can't have theme dependency here -#include -#endif - #include #include #include diff --git a/src/plugins/qmldesigner/designercore/imagecache/meshimagecachecollector.cpp b/src/plugins/qmldesigner/designercore/imagecache/meshimagecachecollector.cpp index 0a9cd7d6d32..bae2e5703af 100644 --- a/src/plugins/qmldesigner/designercore/imagecache/meshimagecachecollector.cpp +++ b/src/plugins/qmldesigner/designercore/imagecache/meshimagecachecollector.cpp @@ -12,14 +12,15 @@ namespace QmlDesigner { -MeshImageCacheCollector::MeshImageCacheCollector( - ImageCacheConnectionManager &connectionManager, - QSize captureImageMinimumSize, - QSize captureImageMaximumSize, - ImageCacheCollectorNullImageHandling nullImageHandling) +MeshImageCacheCollector::MeshImageCacheCollector(ImageCacheConnectionManager &connectionManager, + QSize captureImageMinimumSize, + QSize captureImageMaximumSize, + ExternalDependenciesInterface &externalDependencies, + ImageCacheCollectorNullImageHandling nullImageHandling) : m_imageCacheCollector(connectionManager, captureImageMinimumSize, captureImageMaximumSize, + externalDependencies, nullImageHandling) {} diff --git a/src/plugins/qmldesigner/designercore/imagecache/meshimagecachecollector.h b/src/plugins/qmldesigner/designercore/imagecache/meshimagecachecollector.h index 68534d888d5..c7f4e3df1f5 100644 --- a/src/plugins/qmldesigner/designercore/imagecache/meshimagecachecollector.h +++ b/src/plugins/qmldesigner/designercore/imagecache/meshimagecachecollector.h @@ -20,6 +20,7 @@ public: MeshImageCacheCollector(ImageCacheConnectionManager &connectionManager, QSize captureImageMinimumSize, QSize captureImageMaximumSize, + ExternalDependenciesInterface &externalDependencies, ImageCacheCollectorNullImageHandling nullImageHandling = {}); ~MeshImageCacheCollector(); diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h index 885a41f791e..589b3d571b4 100644 --- a/src/plugins/qmldesigner/designercore/include/abstractview.h +++ b/src/plugins/qmldesigner/designercore/include/abstractview.h @@ -39,6 +39,7 @@ class NodeInstanceView; class RewriterView; class QmlModelState; class QmlTimeline; +class ExternalDependenciesInterface; enum DesignerWidgetFlags { DisableOnError, @@ -78,7 +79,9 @@ public: EmptyPropertiesRemoved = 0x2 }; Q_DECLARE_FLAGS(PropertyChangeFlags, PropertyChangeFlag) - AbstractView() {} + AbstractView(ExternalDependenciesInterface &externalDependencies) + : m_externalDependencies{externalDependencies} + {} ~AbstractView() override; @@ -259,6 +262,8 @@ public: bool isEnabled() const; void setEnabled(bool b); + ExternalDependenciesInterface &externalDependencies() const { return m_externalDependencies; } + bool isBlockingNotifications() const { return m_isBlockingNotifications; } class NotificationBlocker @@ -290,6 +295,7 @@ private: //functions private: QPointer m_model; + ExternalDependenciesInterface &m_externalDependencies; bool m_enabled = true; bool m_isBlockingNotifications = false; }; diff --git a/src/plugins/qmldesigner/designercore/include/externaldependenciesinterface.h b/src/plugins/qmldesigner/designercore/include/externaldependenciesinterface.h new file mode 100644 index 00000000000..1a67704f824 --- /dev/null +++ b/src/plugins/qmldesigner/designercore/include/externaldependenciesinterface.h @@ -0,0 +1,42 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 + +#pragma once + +#include + +namespace QmlDesigner { + +class DesignerSettings; + +class ExternalDependenciesInterface +{ + // Tis class worksaround external dependencies. In the long run the caller should + // be refactored and the dependencies cleaned up. Don't use it as a shortcut to provide + // functionality! +public: + ExternalDependenciesInterface() = default; + ExternalDependenciesInterface(const ExternalDependenciesInterface &) = delete; + ExternalDependenciesInterface &operator=(const ExternalDependenciesInterface &) = delete; + + virtual double formEditorDevicePixelRatio() const = 0; + virtual QString defaultPuppetFallbackDirectory() const = 0; + virtual QString qmlPuppetFallbackDirectory() const = 0; + virtual QString defaultPuppetToplevelBuildDirectory() const = 0; + virtual QUrl projectUrl() const = 0; + virtual QString currentProjectDirPath() const = 0; + virtual QList designerSettingsEdit3DViewBackgroundColor() const = 0; + virtual QColor designerSettingsEdit3DViewGridColor() const = 0; + virtual QUrl currentResourcePath() const = 0; + virtual void parseItemLibraryDescriptions() = 0; + virtual const DesignerSettings &designerSettings() const = 0; + virtual void undoOnCurrentDesignDocument() = 0; + virtual bool viewManagerUsesRewriterView(class RewriterView *view) const = 0; + virtual void viewManagerDiableWidgets() = 0; + virtual QString itemLibraryImportUserComponentsTitle() const = 0; + virtual bool isQt6Import() const = 0; + virtual bool hasStartupTarget() const = 0; + virtual PuppetStartData puppetStartData(const class Model &model) const = 0; +}; + +} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/include/metainfo.h b/src/plugins/qmldesigner/designercore/include/metainfo.h index fcf6507d155..caf46c9cb94 100644 --- a/src/plugins/qmldesigner/designercore/include/metainfo.h +++ b/src/plugins/qmldesigner/designercore/include/metainfo.h @@ -49,6 +49,8 @@ public: static void setPluginPaths(const QStringList &paths); + static void disableParseItemLibraryDescriptionsUgly(); // ugly hack around broken tests + private: bool isGlobal() const; diff --git a/src/plugins/qmldesigner/designercore/include/model.h b/src/plugins/qmldesigner/designercore/include/model.h index d5413d64c18..93ae97fb890 100644 --- a/src/plugins/qmldesigner/designercore/include/model.h +++ b/src/plugins/qmldesigner/designercore/include/model.h @@ -74,7 +74,6 @@ public: } QUrl fileUrl() const; - QUrl projectUrl() const; void setFileUrl(const QUrl &url); const MetaInfo metaInfo() const; diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h index b936db1536b..581089972c5 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h @@ -54,6 +54,7 @@ class CompleteComponentCommand; class InformationContainer; class TokenCommand; class ConnectionManagerInterface; +class ExternalDependenciesInterface; class QMLDESIGNERCORE_EXPORT NodeInstanceView : public AbstractView, public NodeInstanceClientInterface { @@ -64,7 +65,8 @@ class QMLDESIGNERCORE_EXPORT NodeInstanceView : public AbstractView, public Node public: using Pointer = QWeakPointer; - explicit NodeInstanceView(ConnectionManagerInterface &connectionManager); + explicit NodeInstanceView(ConnectionManagerInterface &connectionManager, + ExternalDependenciesInterface &externalDependencies); ~NodeInstanceView() override; void modelAttached(Model *model) override; @@ -256,6 +258,7 @@ private: ModelCache m_nodeInstanceCache; QHash m_statePreviewImage; ConnectionManagerInterface &m_connectionManager; + ExternalDependenciesInterface &m_externalDependencies; std::unique_ptr m_nodeInstanceServer; QImage m_baseStatePreviewImage; QElapsedTimer m_lastCrashTime; diff --git a/src/plugins/qmldesigner/designercore/include/qmldesignercorelib_global.h b/src/plugins/qmldesigner/designercore/include/qmldesignercorelib_global.h index 8f909c50b41..6be86cdc750 100644 --- a/src/plugins/qmldesigner/designercore/include/qmldesignercorelib_global.h +++ b/src/plugins/qmldesigner/designercore/include/qmldesignercorelib_global.h @@ -12,9 +12,9 @@ // Unnecessary since core isn't a dll any more. -#if defined(QMLDESIGNER_LIBRARY) +#if defined(QMLDESIGNERCORE_LIBRARY) #define QMLDESIGNERCORE_EXPORT Q_DECL_EXPORT -#elif defined(QMLDESIGNER_STATIC_LIBRARY) +#elif defined(QMLDESIGNERCORE_STATIC_LIBRARY) #define QMLDESIGNERCORE_EXPORT #else #define QMLDESIGNERCORE_EXPORT Q_DECL_IMPORT diff --git a/src/plugins/qmldesigner/designercore/include/qmlmodelnodefacade.h b/src/plugins/qmldesigner/designercore/include/qmlmodelnodefacade.h index 868681afd55..c07a0f4584e 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlmodelnodefacade.h +++ b/src/plugins/qmldesigner/designercore/include/qmlmodelnodefacade.h @@ -29,6 +29,8 @@ public: NodeInstanceView *nodeInstanceView() const; bool isRootNode() const; + static void enableUglyWorkaroundForIsValidQmlModelNodeFacadeInTests(); + protected: QmlModelNodeFacade(const ModelNode &modelNode) : m_modelNode(modelNode) diff --git a/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h b/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h index e0b178a47bc..5dd4d32ecaa 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h +++ b/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h @@ -17,6 +17,7 @@ class QmlItemNode; class QmlPropertyChanges; class MoveManipulator; class QmlVisualNode; +class DesignerSettings; class QMLDESIGNERCORE_EXPORT QmlObjectNode : public QmlModelNodeFacade { @@ -99,11 +100,13 @@ public: static QVariant instanceValue(const ModelNode &modelNode, const PropertyName &name); - static QString generateTranslatableText(const QString& text); + static QString generateTranslatableText(const QString &text, + const DesignerSettings &designerSettings); static QString stripedTranslatableTextFunction(const QString &text); - static QString convertToCorrectTranslatableFunction(const QString &text); + static QString convertToCorrectTranslatableFunction(const QString &text, + const DesignerSettings &designerSettings); QString simplifiedTypeName() const; diff --git a/src/plugins/qmldesigner/designercore/include/rewriterview.h b/src/plugins/qmldesigner/designercore/include/rewriterview.h index a7dc9cc07ea..d9da1301768 100644 --- a/src/plugins/qmldesigner/designercore/include/rewriterview.h +++ b/src/plugins/qmldesigner/designercore/include/rewriterview.h @@ -53,7 +53,8 @@ public: }; public: - RewriterView(DifferenceHandling differenceHandling = RewriterView::Amend); + RewriterView(ExternalDependenciesInterface &externalDependencies, + DifferenceHandling differenceHandling = RewriterView::Amend); ~RewriterView() override; void modelAttached(Model *model) override; diff --git a/src/plugins/qmldesigner/designercore/include/subcomponentmanager.h b/src/plugins/qmldesigner/designercore/include/subcomponentmanager.h index d6692b5a993..cf6b6b9867d 100644 --- a/src/plugins/qmldesigner/designercore/include/subcomponentmanager.h +++ b/src/plugins/qmldesigner/designercore/include/subcomponentmanager.h @@ -24,7 +24,8 @@ class QMLDESIGNERCORE_EXPORT SubComponentManager : public QObject { Q_OBJECT public: - explicit SubComponentManager(Model *model, QObject *parent = nullptr); + explicit SubComponentManager(Model *model, + class ExternalDependenciesInterface &externalDependencies); void update(const QUrl &fileUrl, const QList &imports); void addAndParseImport(const Import &import); @@ -58,6 +59,7 @@ private: // variables QUrl m_filePath; QDir m_filePathDir; QPointer m_model; + ExternalDependenciesInterface &m_externalDependencies; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/instances/baseconnectionmanager.cpp b/src/plugins/qmldesigner/designercore/instances/baseconnectionmanager.cpp index 08ed4268a2e..4a22d266c92 100644 --- a/src/plugins/qmldesigner/designercore/instances/baseconnectionmanager.cpp +++ b/src/plugins/qmldesigner/designercore/instances/baseconnectionmanager.cpp @@ -16,7 +16,8 @@ namespace QmlDesigner { void BaseConnectionManager::setUp(NodeInstanceServerInterface *nodeInstanceServer, const QString &, ProjectExplorer::Target *, - [[maybe_unused]] AbstractView *view) + [[maybe_unused]] AbstractView *view, + ExternalDependenciesInterface &) { m_nodeInstanceServer = nodeInstanceServer; m_isActive = true; diff --git a/src/plugins/qmldesigner/designercore/instances/baseconnectionmanager.h b/src/plugins/qmldesigner/designercore/instances/baseconnectionmanager.h index 1616a7ea29e..3145c46a5c0 100644 --- a/src/plugins/qmldesigner/designercore/instances/baseconnectionmanager.h +++ b/src/plugins/qmldesigner/designercore/instances/baseconnectionmanager.h @@ -29,7 +29,8 @@ public: void setUp(NodeInstanceServerInterface *nodeInstanceServer, const QString &qrcMappingString, ProjectExplorer::Target *target, - AbstractView *view) override; + AbstractView *view, + ExternalDependenciesInterface &) override; void shutDown() override; void setCrashCallback(std::function callback) override; diff --git a/src/plugins/qmldesigner/designercore/instances/capturingconnectionmanager.cpp b/src/plugins/qmldesigner/designercore/instances/capturingconnectionmanager.cpp index 2f51d23b9b5..eca65b6aa76 100644 --- a/src/plugins/qmldesigner/designercore/instances/capturingconnectionmanager.cpp +++ b/src/plugins/qmldesigner/designercore/instances/capturingconnectionmanager.cpp @@ -15,9 +15,14 @@ namespace QmlDesigner { void CapturingConnectionManager::setUp(NodeInstanceServerInterface *nodeInstanceServer, const QString &qrcMappingString, ProjectExplorer::Target *target, - AbstractView *view) + AbstractView *view, + ExternalDependenciesInterface &externalDependencies) { - InteractiveConnectionManager::setUp(nodeInstanceServer, qrcMappingString, target, view); + InteractiveConnectionManager::setUp(nodeInstanceServer, + qrcMappingString, + target, + view, + externalDependencies); int indexOfCapturePuppetStream = QCoreApplication::arguments().indexOf( "-capture-puppet-stream"); diff --git a/src/plugins/qmldesigner/designercore/instances/capturingconnectionmanager.h b/src/plugins/qmldesigner/designercore/instances/capturingconnectionmanager.h index c56758d5e22..66da9151e6a 100644 --- a/src/plugins/qmldesigner/designercore/instances/capturingconnectionmanager.h +++ b/src/plugins/qmldesigner/designercore/instances/capturingconnectionmanager.h @@ -15,7 +15,8 @@ public: void setUp(NodeInstanceServerInterface *nodeInstanceServer, const QString &qrcMappingString, ProjectExplorer::Target *target, - AbstractView *view) override; + AbstractView *view, + ExternalDependenciesInterface &externalDependencies) override; void processFinished(int exitCode, QProcess::ExitStatus exitStatus, const QString &connectionName) override; diff --git a/src/plugins/qmldesigner/designercore/instances/connectionmanager.cpp b/src/plugins/qmldesigner/designercore/instances/connectionmanager.cpp index f3edfe0ab4e..ab351af239f 100644 --- a/src/plugins/qmldesigner/designercore/instances/connectionmanager.cpp +++ b/src/plugins/qmldesigner/designercore/instances/connectionmanager.cpp @@ -5,11 +5,9 @@ #include "endpuppetcommand.h" #include "nodeinstanceserverproxy.h" #include "nodeinstanceview.h" -#include "puppetcreator.h" +#include "puppetstarter.h" -#ifndef QMLDESIGNER_TEST -#include -#endif +#include #include @@ -27,14 +25,14 @@ ConnectionManager::~ConnectionManager() = default; void ConnectionManager::setUp(NodeInstanceServerInterface *nodeInstanceServerProxy, const QString &qrcMappingString, ProjectExplorer::Target *target, - AbstractView *view) + AbstractView *view, + ExternalDependenciesInterface &externalDependencies) { - BaseConnectionManager::setUp(nodeInstanceServerProxy, qrcMappingString, target, view); - - PuppetCreator puppetCreator(target, view->model()); - puppetCreator.setQrcMappingString(qrcMappingString); - - puppetCreator.createQml2PuppetExecutableIfMissing(); + BaseConnectionManager::setUp(nodeInstanceServerProxy, + qrcMappingString, + target, + view, + externalDependencies); for (Connection &connection : m_connections) { @@ -43,7 +41,8 @@ void ConnectionManager::setUp(NodeInstanceServerInterface *nodeInstanceServerPro connection.localServer->listen(socketToken); connection.localServer->setMaxPendingConnections(1); - connection.qmlPuppetProcess = puppetCreator.createPuppetProcess( + connection.qmlPuppetProcess = PuppetStarter::createPuppetProcess( + externalDependencies.puppetStartData(*view->model()), connection.mode, socketToken, [&] { printProcessOutput(connection.qmlPuppetProcess.get(), connection.name); }, diff --git a/src/plugins/qmldesigner/designercore/instances/connectionmanager.h b/src/plugins/qmldesigner/designercore/instances/connectionmanager.h index a232e33e400..6c33b5f46ba 100644 --- a/src/plugins/qmldesigner/designercore/instances/connectionmanager.h +++ b/src/plugins/qmldesigner/designercore/instances/connectionmanager.h @@ -29,7 +29,8 @@ public: void setUp(NodeInstanceServerInterface *nodeInstanceServerProxy, const QString &qrcMappingString, ProjectExplorer::Target *target, - AbstractView *view) override; + AbstractView *view, + ExternalDependenciesInterface &externalDependencies) override; void shutDown() override; void writeCommand(const QVariant &command) override; diff --git a/src/plugins/qmldesigner/designercore/instances/connectionmanagerinterface.h b/src/plugins/qmldesigner/designercore/instances/connectionmanagerinterface.h index 209ff998b1d..d0549c54019 100644 --- a/src/plugins/qmldesigner/designercore/instances/connectionmanagerinterface.h +++ b/src/plugins/qmldesigner/designercore/instances/connectionmanagerinterface.h @@ -19,6 +19,7 @@ namespace QmlDesigner { class NodeInstanceServerInterface; class AbstractView; +class ExternalDependenciesInterface; class QMLDESIGNERCORE_EXPORT ConnectionManagerInterface { @@ -49,7 +50,8 @@ public: virtual void setUp(NodeInstanceServerInterface *nodeInstanceServer, const QString &qrcMappingString, ProjectExplorer::Target *target, - AbstractView *view) + AbstractView *view, + ExternalDependenciesInterface &externalDependencies) = 0; virtual void shutDown() = 0; diff --git a/src/plugins/qmldesigner/designercore/instances/interactiveconnectionmanager.cpp b/src/plugins/qmldesigner/designercore/instances/interactiveconnectionmanager.cpp index b410c2bd2f6..41a3f970eda 100644 --- a/src/plugins/qmldesigner/designercore/instances/interactiveconnectionmanager.cpp +++ b/src/plugins/qmldesigner/designercore/instances/interactiveconnectionmanager.cpp @@ -24,9 +24,10 @@ InteractiveConnectionManager::InteractiveConnectionManager() void InteractiveConnectionManager::setUp(NodeInstanceServerInterface *nodeInstanceServer, const QString &qrcMappingString, ProjectExplorer::Target *target, - AbstractView *view) + AbstractView *view, + ExternalDependenciesInterface &externalDependencies) { - ConnectionManager::setUp(nodeInstanceServer, qrcMappingString, target, view); + ConnectionManager::setUp(nodeInstanceServer, qrcMappingString, target, view, externalDependencies); int timeOutTime = QmlDesignerPlugin::settings() .value(DesignerSettingsKey::PUPPET_KILL_TIMEOUT).toInt(); diff --git a/src/plugins/qmldesigner/designercore/instances/interactiveconnectionmanager.h b/src/plugins/qmldesigner/designercore/instances/interactiveconnectionmanager.h index e862d1c88d0..057bc2d4c23 100644 --- a/src/plugins/qmldesigner/designercore/instances/interactiveconnectionmanager.h +++ b/src/plugins/qmldesigner/designercore/instances/interactiveconnectionmanager.h @@ -17,7 +17,8 @@ public: void setUp(NodeInstanceServerInterface *nodeInstanceServer, const QString &qrcMappingString, ProjectExplorer::Target *target, - AbstractView *view) override; + AbstractView *view, + ExternalDependenciesInterface &externalDependencies) override; void shutDown() override; diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp index ca3bd9b9350..1fbea423b38 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp @@ -4,9 +4,6 @@ #include "nodeinstance.h" #include -#ifndef QMLDESIGNER_TEST -#include -#endif #include #include diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp index 93ff5eb10fa..cd22932472c 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp @@ -4,7 +4,6 @@ #include "nodeinstanceserverproxy.h" #include "connectionmanagerinterface.h" -#include "puppetcreator.h" #include #include @@ -71,7 +70,8 @@ static Q_LOGGING_CATEGORY(instanceViewBenchmark, "qtc.nodeinstances.init", QtWar NodeInstanceServerProxy::NodeInstanceServerProxy(NodeInstanceView *nodeInstanceView, ProjectExplorer::Target *target, - ConnectionManagerInterface &connectionManager) + ConnectionManagerInterface &connectionManager, + ExternalDependenciesInterface &externalDependencies) : m_nodeInstanceView(nodeInstanceView) , m_connectionManager{connectionManager} @@ -79,7 +79,7 @@ NodeInstanceServerProxy::NodeInstanceServerProxy(NodeInstanceView *nodeInstanceV if (instanceViewBenchmark().isInfoEnabled()) m_benchmarkTimer.start(); - m_connectionManager.setUp(this, qrcMappingString(), target, nodeInstanceView); + m_connectionManager.setUp(this, qrcMappingString(), target, nodeInstanceView, externalDependencies); qCInfo(instanceViewBenchmark) << "puppets setup:" << m_benchmarkTimer.elapsed(); } diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h index ebbeaad3b1a..a39a1a4587d 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h @@ -26,6 +26,7 @@ class NodeInstanceView; class NodeInstanceClientProxy; class BaseConnectionManager; class ConnectionManagerInterface; +class ExternalDependenciesInterface; class NodeInstanceServerProxy : public NodeInstanceServerInterface { @@ -36,7 +37,8 @@ class NodeInstanceServerProxy : public NodeInstanceServerInterface public: explicit NodeInstanceServerProxy(NodeInstanceView *nodeInstanceView, ProjectExplorer::Target *target, - ConnectionManagerInterface &connectionManager); + ConnectionManagerInterface &connectionManager, + ExternalDependenciesInterface &externalDependencies); ~NodeInstanceServerProxy() override; void createInstances(const CreateInstancesCommand &command) override; void changeFileUrl(const ChangeFileUrlCommand &command) override; diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 7cf699c6176..bbdbc7cf424 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -56,6 +56,7 @@ #include #include +#include #include #include #include @@ -63,14 +64,7 @@ #include #include -#ifndef QMLDESIGNER_TEST -#include -#include -#include -#include -#include -#include -#endif +#include #include @@ -128,8 +122,11 @@ namespace QmlDesigner { \sa ~NodeInstanceView, setRenderOffScreen() */ -NodeInstanceView::NodeInstanceView(ConnectionManagerInterface &connectionManager) - : m_connectionManager(connectionManager) +NodeInstanceView::NodeInstanceView(ConnectionManagerInterface &connectionManager, + ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} + , m_connectionManager(connectionManager) + , m_externalDependencies(externalDependencies) , m_baseStatePreviewImage(QSize(100, 100), QImage::Format_ARGB32) , m_restartProcessTimerId(0) , m_fileSystemWatcher(new QFileSystemWatcher(this)) @@ -1180,39 +1177,26 @@ CreateSceneCommand NodeInstanceView::createCreateSceneCommand() if (stateNode.isValid() && stateNode.metaInfo().isQtQuickState()) stateInstanceId = stateNode.internalId(); - QColor gridColor; - QList backgroundColor; + QColor gridColor = m_externalDependencies.designerSettingsEdit3DViewGridColor(); + QList backgroundColor = m_externalDependencies.designerSettingsEdit3DViewBackgroundColor(); -#ifndef QMLDESIGNER_TEST - backgroundColor = Edit3DViewConfig::load(DesignerSettingsKey::EDIT3DVIEW_BACKGROUND_COLOR); - QList gridColorList = Edit3DViewConfig::load(DesignerSettingsKey::EDIT3DVIEW_GRID_COLOR); - if (!gridColorList.isEmpty()) - gridColor = gridColorList.at(0); -#endif - - return CreateSceneCommand( - instanceContainerList, - reparentContainerList, - idContainerList, - valueContainerList, - bindingContainerList, - auxiliaryContainerVector, - importVector, - mockupTypesVector, - model()->fileUrl(), -#ifndef QMLDESIGNER_TEST - QUrl::fromLocalFile( - QmlDesigner::DocumentManager::currentResourcePath().toFileInfo().absoluteFilePath()), -#else - QUrl::fromLocalFile(QFileInfo(model()->fileUrl().toLocalFile()).absolutePath()), -#endif - m_edit3DToolStates[model()->fileUrl()], - lastUsedLanguage, - m_captureImageMinimumSize, - m_captureImageMaximumSize, - stateInstanceId, - backgroundColor, - gridColor); + return CreateSceneCommand(instanceContainerList, + reparentContainerList, + idContainerList, + valueContainerList, + bindingContainerList, + auxiliaryContainerVector, + importVector, + mockupTypesVector, + model()->fileUrl(), + m_externalDependencies.currentResourcePath(), + m_edit3DToolStates[model()->fileUrl()], + lastUsedLanguage, + m_captureImageMinimumSize, + m_captureImageMaximumSize, + stateInstanceId, + backgroundColor, + gridColor); } ClearSceneCommand NodeInstanceView::createClearSceneCommand() const @@ -1715,11 +1699,7 @@ void NodeInstanceView::handlePuppetToCreatorCommand(const PuppetToCreatorCommand if (hasModelNodeForInternalId(container.instanceId()) && !image.isNull()) { auto node = modelNodeForInternalId(container.instanceId()); if (node.isValid()) { -#ifndef QMLDESIGNER_TEST - const double ratio = QmlDesignerPlugin::formEditorDevicePixelRatio(); -#else - const double ratio = 1; -#endif + const double ratio = m_externalDependencies.formEditorDevicePixelRatio(); const int dim = Constants::MODELNODE_PREVIEW_IMAGE_DIMENSIONS * ratio; if (image.height() != dim || image.width() != dim) image = image.scaled(dim, dim, Qt::KeepAspectRatio); @@ -1742,7 +1722,10 @@ void NodeInstanceView::handlePuppetToCreatorCommand(const PuppetToCreatorCommand std::unique_ptr NodeInstanceView::createNodeInstanceServerProxy() { - return std::make_unique(this, m_currentTarget, m_connectionManager); + return std::make_unique(this, + m_currentTarget, + m_connectionManager, + m_externalDependencies); } void NodeInstanceView::selectedNodesChanged(const QList &selectedNodeList, @@ -1778,11 +1761,7 @@ void NodeInstanceView::requestModelNodePreviewImage(const ModelNode &node, const } else if (node.isComponent()) { componentPath = node.metaInfo().componentFileName(); } -#ifndef QMLDESIGNER_TEST - const double ratio = QmlDesignerPlugin::formEditorDevicePixelRatio(); -#else - const double ratio = 1; -#endif + const double ratio = m_externalDependencies.formEditorDevicePixelRatio(); const int dim = Constants::MODELNODE_PREVIEW_IMAGE_DIMENSIONS * ratio; m_nodeInstanceServer->requestModelNodePreviewImage( RequestModelNodePreviewImageCommand(instance.instanceId(), QSize(dim, dim), @@ -1837,11 +1816,7 @@ QVariant NodeInstanceView::previewImageDataForImageNode(const ModelNode &modelNo ModelNodePreviewImageData imageData; imageData.id = modelNode.id(); imageData.type = QString::fromLatin1(modelNode.type()); -#ifndef QMLDESIGNER_TEST - const double ratio = QmlDesignerPlugin::formEditorDevicePixelRatio(); -#else - const double ratio = 1; -#endif + const double ratio = m_externalDependencies.formEditorDevicePixelRatio(); if (imageSource.isEmpty() && modelNode.metaInfo().isQtQuick3DTexture()) { // Texture node may have sourceItem instead @@ -1903,11 +1878,9 @@ QVariant NodeInstanceView::previewImageDataForImageNode(const ModelNode &modelNo originalPixmap = QPixmap::fromImage(paintImage); } } else { -#ifndef QMLDESIGNER_TEST if (imageFi.suffix() == "hdr") originalPixmap = HdrImage{imageSource}.toPixmap(); else -#endif originalPixmap.load(imageSource); } if (!originalPixmap.isNull()) { @@ -1989,11 +1962,8 @@ void NodeInstanceView::updateWatcher(const QString &path) QStringList newFiles; QStringList newDirs; QStringList qsbFiles; -#ifndef QMLDESIGNER_TEST - const QString projPath = QmlDesignerPlugin::instance()->documentManager().currentProjectDirPath().toString(); -#else - const QString projPath = QFileInfo(model()->fileUrl().toLocalFile()).absolutePath(); -#endif + + const QString projPath = m_externalDependencies.currentProjectDirPath(); if (projPath.isEmpty()) return; @@ -2118,11 +2088,8 @@ void NodeInstanceView::updateQsbPathToFilterMap() return; const QStringList shaderToolFiles = bs->shaderToolFiles(); -#ifndef QMLDESIGNER_TEST - const QString projPath = QmlDesignerPlugin::instance()->documentManager().currentProjectDirPath().toString(); -#else - const QString projPath = QFileInfo(model()->fileUrl().toLocalFile()).absolutePath(); -#endif + const QString projPath = m_externalDependencies.currentProjectDirPath(); + if (projPath.isEmpty()) return; diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp deleted file mode 100644 index cc4703b2f07..00000000000 --- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp +++ /dev/null @@ -1,681 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 - -#include "puppetcreator.h" - -#include "puppetbuildprogressdialog.h" - -#include -#ifndef QMLDESIGNER_TEST -#include -#endif - -#include - -#include - -#include -#include - -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static Q_LOGGING_CATEGORY(puppetStart, "qtc.puppet.start", QtWarningMsg) -static Q_LOGGING_CATEGORY(puppetBuild, "qtc.puppet.build", QtWarningMsg) - -using namespace ProjectExplorer; - -namespace QmlDesigner { - -class EventFilter : public QObject { - -public: - bool eventFilter(QObject *o, QEvent *event) final - { - if (event->type() == QEvent::MouseButtonPress - || event->type() == QEvent::MouseButtonRelease - || event->type() == QEvent::KeyPress - || event->type() == QEvent::KeyRelease) { - return true; - } - - return QObject::eventFilter(o, event); - } -}; - -QHash PuppetCreator::m_qml2PuppetForKitPuppetHash; - -QByteArray PuppetCreator::qtHash() const -{ - QtSupport::QtVersion *currentQtVersion = QtSupport::QtKitAspect::qtVersion(m_target->kit()); - if (currentQtVersion) { - return QCryptographicHash::hash(currentQtVersion->dataPath().toString().toUtf8(), - QCryptographicHash::Sha1) - .toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals); - } - - return QByteArray(); -} - -QDateTime PuppetCreator::qtLastModified() const -{ - QtSupport::QtVersion *currentQtVersion = QtSupport::QtKitAspect::qtVersion(m_target->kit()); - if (currentQtVersion) - return currentQtVersion->libraryPath().lastModified(); - - return QDateTime(); -} - -QDateTime PuppetCreator::puppetSourceLastModified() const -{ - const QString basePuppetSourcePath = puppetSourceDirectoryPath(); - - const QStringList sourceDirectoryPaths = { - basePuppetSourcePath + "/commands", - basePuppetSourcePath + "/container", - basePuppetSourcePath + "/instances", - basePuppetSourcePath + "/interfaces", - basePuppetSourcePath + "/types", - basePuppetSourcePath + "/qmlpuppet", - basePuppetSourcePath + "/qmlpuppet/instances", - basePuppetSourcePath + "/qml2puppet", - basePuppetSourcePath + "/qml2puppet/instances" - }; - - QDateTime lastModified; - for (const QString &directoryPath : sourceDirectoryPaths) { - const QFileInfoList fileEntrys = QDir(directoryPath).entryInfoList(); - for (const QFileInfo &fileEntry : fileEntrys) { - const QDateTime filePathLastModified = fileEntry.lastModified(); - if (lastModified < filePathLastModified) - lastModified = filePathLastModified; - } - } - - return lastModified; -} - -bool PuppetCreator::useOnlyFallbackPuppet() const -{ -#ifndef QMLDESIGNER_TEST - if (!m_target || !m_target->kit()->isValid()) - qWarning() << "Invalid kit for QML puppet"; - return QmlDesignerPlugin::settings().value(DesignerSettingsKey::USE_DEFAULT_PUPPET).toBool() - || m_target == nullptr || !m_target->kit()->isValid(); -#else - return true; -#endif -} - -QString PuppetCreator::getStyleConfigFileName() const -{ -#ifndef QMLDESIGNER_TEST - if (m_target) { - for (const Utils::FilePath &fileName : m_target->project()->files(ProjectExplorer::Project::SourceFiles)) { - if (fileName.fileName() == "qtquickcontrols2.conf") - return fileName.toString(); - } - } -#endif - return QString(); -} - -bool PuppetCreator::usesVirtualKeyboard() const -{ -#ifndef QMLDESIGNER_TEST - if (m_target) { - auto *qmlbuild = qobject_cast(m_target->buildSystem()); - - const Utils::EnvironmentItem virtualKeyboard("QT_IM_MODULE", "qtvirtualkeyboard"); - return qmlbuild && qmlbuild->environment().indexOf(virtualKeyboard); - } - -#endif - return false; -} - -PuppetCreator::PuppetCreator(ProjectExplorer::Target *target, const Model *model) - - : m_target(target) - , m_availablePuppetType(FallbackPuppet) - , m_model(model) -{ -} - -QProcessUniquePointer PuppetCreator::createPuppetProcess( - const QString &puppetMode, - const QString &socketToken, - std::function processOutputCallback, - std::function processFinishCallback, - const QStringList &customOptions) const -{ - return puppetProcess(qml2PuppetPath(m_availablePuppetType), - qmlPuppetDirectory(m_availablePuppetType), - puppetMode, - socketToken, - processOutputCallback, - processFinishCallback, - customOptions); -} - -QProcessUniquePointer PuppetCreator::puppetProcess( - const QString &puppetPath, - const QString &workingDirectory, - const QString &puppetMode, - const QString &socketToken, - std::function processOutputCallback, - std::function processFinishCallback, - const QStringList &customOptions) const -{ - QProcessUniquePointer puppetProcess{new QProcess}; - puppetProcess->setObjectName(puppetMode); - puppetProcess->setProcessEnvironment(processEnvironment()); - - QObject::connect(QCoreApplication::instance(), - &QCoreApplication::aboutToQuit, - puppetProcess.get(), - &QProcess::kill); - QObject::connect(puppetProcess.get(), - static_cast(&QProcess::finished), - processFinishCallback); - -#ifndef QMLDESIGNER_TEST - QString forwardOutput = QmlDesignerPlugin::settings().value(DesignerSettingsKey:: - FORWARD_PUPPET_OUTPUT).toString(); -#else - QString forwardOutput("all"); -#endif - if (forwardOutput == puppetMode || forwardOutput == "all") { - puppetProcess->setProcessChannelMode(QProcess::MergedChannels); - QObject::connect(puppetProcess.get(), &QProcess::readyRead, processOutputCallback); - } - puppetProcess->setWorkingDirectory(workingDirectory); - - bool forceFreeType = false; - if (Utils::HostOsInfo::isWindowsHost() && m_target) { - const QVariant customData = m_target->additionalData("CustomForceFreeType"); - - if (customData.isValid()) - forceFreeType = customData.toBool(); - } - - QString forceFreeTypeOption; - if (forceFreeType) - forceFreeTypeOption = "-platform windows:fontengine=freetype"; - - if (puppetMode == "custom") { - QStringList args = customOptions; - args << "-graphicssystem raster"; - args << forceFreeTypeOption; - puppetProcess->start(puppetPath, args); - } else { - puppetProcess->start(puppetPath, {socketToken, puppetMode, "-graphicssystem raster", forceFreeTypeOption }); - } - -#ifndef QMLDESIGNER_TEST - QString debugPuppet = QmlDesignerPlugin::settings().value(DesignerSettingsKey:: - DEBUG_PUPPET).toString(); -#else - QString debugPuppet("all"); -#endif - if (debugPuppet == puppetMode || debugPuppet == "all") { - QMessageBox::information(Core::ICore::dialogParent(), - QCoreApplication::translate("PuppetCreator", "Puppet is starting..."), - QCoreApplication::translate("PuppetCreator", "You can now attach your debugger to the %1 puppet with process id: %2.") - .arg(puppetMode, QString::number(puppetProcess->processId()))); - } - - return puppetProcess; -} - -static QString idealProcessCount() -{ - int processCount = QThread::idealThreadCount() + 1; - if (processCount < 1) - processCount = 4; - - return QString::number(processCount); -} - -bool PuppetCreator::build(const QString &qmlPuppetProjectFilePath) const -{ - PuppetBuildProgressDialog progressDialog; - progressDialog.setParent(Core::ICore::dialogParent()); - - m_compileLog.clear(); - - Utils::TemporaryDirectory buildDirectory("qml-puppet-build"); - - bool buildSucceeded = false; - - - /* Ensure the model dialog is shown and no events are delivered to the rest of Qt Creator. */ - EventFilter eventFilter; - QCoreApplication::instance()->installEventFilter(&eventFilter); - progressDialog.show(); - QCoreApplication::processEvents(); - QCoreApplication::instance()->removeEventFilter(&eventFilter); - /* Now the modal dialog will block input to the rest of Qt Creator. - We can call process events without risking a mode change. */ - - if (qtIsSupported()) { - if (buildDirectory.isValid()) { - QStringList qmakeArguments; - qmakeArguments.append("-r"); - qmakeArguments.append("-after"); - qmakeArguments.append("DESTDIR=" + qmlPuppetDirectory(UserSpacePuppet)); -#ifdef QT_DEBUG - qmakeArguments.append("CONFIG+=debug"); -#else - qmakeArguments.append("CONFIG+=release"); -#endif - qmakeArguments.append(qmlPuppetProjectFilePath); - buildSucceeded = startBuildProcess(buildDirectory.path().path(), qmakeCommand(), qmakeArguments, &progressDialog); - if (buildSucceeded) { - progressDialog.show(); - QString buildingCommand = buildCommand(); - QStringList buildArguments; - if (buildingCommand == "make") { - buildArguments.append("-j"); - buildArguments.append(idealProcessCount()); - } - buildSucceeded = startBuildProcess(buildDirectory.path().path(), buildingCommand, buildArguments, &progressDialog); - } - - if (!buildSucceeded) { - progressDialog.setWindowTitle(QCoreApplication::translate("PuppetCreator", "QML Emulation Layer (QML Puppet) Building was Unsuccessful")); - progressDialog.setErrorMessage(QCoreApplication::translate("PuppetCreator", - "The QML emulation layer (QML Puppet) cannot be built. " - "The fallback emulation layer, which does not support all features, will be used." - )); - // now we want to keep the dialog open - progressDialog.exec(); - } - } - } else { - Core::AsynchronousMessageBox::warning(QCoreApplication::translate("PuppetCreator", "Qt Version is not supported"), - QCoreApplication::translate("PuppetCreator", - "The QML emulation layer (QML Puppet) cannot be built because the Qt version is too old " - "or it cannot run natively on your computer. " - "The fallback emulation layer, which does not support all features, will be used." - )); - } - - return buildSucceeded; -} - -static void warnAboutInvalidKit() -{ - Core::AsynchronousMessageBox::warning(QCoreApplication::translate("PuppetCreator", "Kit is invalid"), - QCoreApplication::translate("PuppetCreator", - "The QML emulation layer (QML Puppet) cannot be built because the kit is not configured correctly. " - "For example the compiler can be misconfigured. " - "Fix the kit configuration and restart %1. " - "Otherwise, the fallback emulation layer, which does not support all features, will be used." - ).arg(Core::Constants::IDE_DISPLAY_NAME)); -} - -static Utils::FilePath pathForBinPuppet(ProjectExplorer::Target *target) -{ - if (!target || !target->kit()) - return {}; - - QtSupport::QtVersion *currentQtVersion = QtSupport::QtKitAspect::qtVersion(target->kit()); - - if (currentQtVersion) - return currentQtVersion->binPath().pathAppended("qml2puppet").withExecutableSuffix(); - - return {}; -} - -void PuppetCreator::createQml2PuppetExecutableIfMissing() -{ - m_availablePuppetType = FallbackPuppet; - - if (!useOnlyFallbackPuppet()) { - // check if there was an already failing try to get the UserSpacePuppet - // -> imagine as result a FallbackPuppet and nothing will happen again - if (m_qml2PuppetForKitPuppetHash.value(m_target->id(), UserSpacePuppet) == UserSpacePuppet ) { - if (checkPuppetIsReady(qml2PuppetPath(UserSpacePuppet))) { - m_availablePuppetType = UserSpacePuppet; - } else { - if (m_target->kit()->isValid()) { - bool buildSucceeded = build(qml2PuppetProjectFile()); - if (buildSucceeded) - m_availablePuppetType = UserSpacePuppet; - } else { - warnAboutInvalidKit(); - } - m_qml2PuppetForKitPuppetHash.insert(m_target->id(), m_availablePuppetType); - } - } - } else if (m_target && m_target->kit() && m_target->kit()->isValid()) { - if (pathForBinPuppet(m_target).isExecutableFile()) - m_availablePuppetType = BinPathPuppet; - } -} - -QString PuppetCreator::defaultPuppetToplevelBuildDirectory() -{ - return Core::ICore::userResourcePath("qmlpuppet/").toString(); -} - -QString PuppetCreator::qmlPuppetToplevelBuildDirectory() const -{ -#ifndef QMLDESIGNER_TEST - QString puppetToplevelBuildDirectory = QmlDesignerPlugin::settings().value( - DesignerSettingsKey::PUPPET_TOPLEVEL_BUILD_DIRECTORY).toString(); - if (puppetToplevelBuildDirectory.isEmpty()) - return defaultPuppetToplevelBuildDirectory(); - return puppetToplevelBuildDirectory; -#else - return QString(); -#endif -} - -QString PuppetCreator::qmlPuppetDirectory(PuppetType puppetType) const -{ - if (puppetType == UserSpacePuppet) - return qmlPuppetToplevelBuildDirectory() + '/' + QCoreApplication::applicationVersion() - + '/' + QString::fromLatin1(qtHash()); - -#ifndef QMLDESIGNER_TEST - if (puppetType == BinPathPuppet) - return pathForBinPuppet(m_target).toFileInfo().absoluteDir().canonicalPath(); - - return qmlPuppetFallbackDirectory(QmlDesignerPlugin::settings()); -#else - return QString(); -#endif -} - -QString PuppetCreator::defaultPuppetFallbackDirectory() -{ - if (Utils::HostOsInfo::isMacHost()) - return Core::ICore::libexecPath("qmldesigner").toString(); - else - return Core::ICore::libexecPath().toString(); -} - -QString PuppetCreator::qmlPuppetFallbackDirectory([[maybe_unused]] const DesignerSettings &settings) -{ -#ifndef QMLDESIGNER_TEST - QString puppetFallbackDirectory = settings.value( - DesignerSettingsKey::PUPPET_DEFAULT_DIRECTORY).toString(); - if (puppetFallbackDirectory.isEmpty() || !QFileInfo::exists(puppetFallbackDirectory)) - return defaultPuppetFallbackDirectory(); - return puppetFallbackDirectory; -#else - return QString(); -#endif -} - -QString PuppetCreator::qml2PuppetPath(PuppetType puppetType) const -{ - return qmlPuppetDirectory(puppetType) + "/qml2puppet" + QTC_HOST_EXE_SUFFIX; -} - -static void filterOutQtBaseImportPath(QStringList *stringList) -{ - Utils::erase(*stringList, [](const QString &string) { - QDir dir(string); - return dir.dirName() == "qml" && !dir.entryInfoList(QStringList("QtTest"), QDir::Dirs).isEmpty(); - }); -} - -QProcessEnvironment PuppetCreator::processEnvironment() const -{ - static const QString pathSep = Utils::HostOsInfo::pathListSeparator(); - Utils::Environment environment = Utils::Environment::systemEnvironment(); - if (QTC_GUARD(m_target)) { - if (!useOnlyFallbackPuppet() || m_availablePuppetType == BinPathPuppet) { - m_target->kit()->addToBuildEnvironment(environment); - const QtSupport::QtVersion *qt = QtSupport::QtKitAspect::qtVersion(m_target->kit()); - if (QTC_GUARD(qt)) { // Kits without a Qt version should not have a puppet! - // Update PATH to include QT_HOST_BINS - environment.prependOrSetPath(qt->hostBinPath()); - } - } - } - environment.set("QML_BAD_GUI_RENDER_LOOP", "true"); - environment.set("QML_PUPPET_MODE", "true"); - environment.set("QML_DISABLE_DISK_CACHE", "true"); - environment.set("QMLPUPPET_RENDER_EFFECTS", "true"); - if (!environment.hasKey("QT_SCREEN_SCALE_FACTORS") && !environment.hasKey("QT_SCALE_FACTOR")) - environment.set("QT_AUTO_SCREEN_SCALE_FACTOR", "1"); - -#ifndef QMLDESIGNER_TEST - const QString controlsStyle = QmlDesignerPlugin::settings().value(DesignerSettingsKey:: - CONTROLS_STYLE).toString(); - - const bool smoothRendering = QmlDesignerPlugin::settings().value(DesignerSettingsKey::SMOOTH_RENDERING) - .toBool(); - - if (smoothRendering) - environment.set("QMLPUPPET_SMOOTH_RENDERING", "true"); -#else - const QString controlsStyle; -#endif - if (!controlsStyle.isEmpty()) { - environment.set("QT_QUICK_CONTROLS_STYLE", controlsStyle); - environment.set("QT_LABS_CONTROLS_STYLE", controlsStyle); - } - -#ifndef QMLDESIGNER_TEST - environment.set("FORMEDITOR_DEVICE_PIXEL_RATIO", QString::number(QmlDesignerPlugin::formEditorDevicePixelRatio())); -#endif - - const QString styleConfigFileName = getStyleConfigFileName(); - - if (!m_qrcMapping.isEmpty()) { - environment.set("QMLDESIGNER_RC_PATHS", m_qrcMapping); - } - - if (usesVirtualKeyboard()) { - environment.set("QT_IM_MODULE", "qtvirtualkeyboard"); - environment.set("QT_VIRTUALKEYBOARD_DESKTOP_DISABLE", "1"); - } - -#ifndef QMLDESIGNER_TEST - // set env var if QtQuick3D import exists - QmlDesigner::Import import = QmlDesigner::Import::createLibraryImport("QtQuick3D", "1.0"); - if (m_model->hasImport(import, true, true)) - environment.set("QMLDESIGNER_QUICK3D_MODE", "true"); - - import = QmlDesigner::Import::createLibraryImport("QtQuick3D.Particles3D", "1.0"); - if (m_model->hasImport(import, true, true)) - environment.set("QMLDESIGNER_QUICK3D_PARTICLES3D_MODE", "true"); - - import = QmlDesigner::Import::createLibraryImport("QtCharts", "2.0"); - if (m_model->hasImport(import, true, true)) { - environment.set("QMLDESIGNER_FORCE_QAPPLICATION", "true"); - } else if (m_target) { - auto bs = qobject_cast(m_target->buildSystem()); - if (bs && bs->widgetApp()) - environment.set("QMLDESIGNER_FORCE_QAPPLICATION", "true"); - } - - bool particlemode = QmlDesigner::QmlDesignerPlugin::settings().value("particleMode").toBool(); - if (!particlemode) - environment.set("QT_QUICK3D_DISABLE_PARTICLE_SYSTEMS", "1"); - else - environment.set("QT_QUICK3D_EDITOR_PARTICLE_SYSTEMS", "1"); -#endif - - QStringList importPaths = m_model->importPaths(); - - /* For the fallback puppet we have to remove the path to the original qtbase plugins to avoid conflics */ - if (m_availablePuppetType == FallbackPuppet) - filterOutQtBaseImportPath(&importPaths); - - if (!styleConfigFileName.isEmpty()) - environment.appendOrSet("QT_QUICK_CONTROLS_CONF", styleConfigFileName); - - QStringList customFileSelectors; - - if (m_target) { - QStringList designerImports = m_target->additionalData("QmlDesignerImportPath").toStringList(); - importPaths.append(designerImports); - - customFileSelectors = m_target->additionalData("CustomFileSelectorsData").toStringList(); - - if (auto multiLanguageAspect = QmlProjectManager::QmlMultiLanguageAspect::current(m_target)) { - if (!multiLanguageAspect->databaseFilePath().isEmpty()) - environment.set("QT_MULTILANGUAGE_DATABASE", multiLanguageAspect->databaseFilePath().toString()); - } - } - - customFileSelectors.append("DesignMode"); - - if (m_availablePuppetType == FallbackPuppet) - importPaths.prepend(QLibraryInfo::location(QLibraryInfo::Qml2ImportsPath)); - - environment.appendOrSet("QML2_IMPORT_PATH", importPaths.join(pathSep), pathSep); - - if (!customFileSelectors.isEmpty()) - environment.appendOrSet("QML_FILE_SELECTORS", customFileSelectors.join(","), pathSep); - - qCInfo(puppetStart) << Q_FUNC_INFO; - qCInfo(puppetStart) << "Puppet qrc mapping" << m_qrcMapping; - qCInfo(puppetStart) << "Puppet import paths:" << importPaths; - qCInfo(puppetStart) << "Puppet environment:" << environment.toStringList(); - qCInfo(puppetStart) << "Puppet selectors:" << customFileSelectors; - - return environment.toProcessEnvironment(); -} - -QString PuppetCreator::buildCommand() const -{ - const Utils::Environment environment = m_target->kit()->buildEnvironment(); - - if (ToolChain *toolChain = ToolChainKitAspect::cxxToolChain(m_target->kit())) - return toolChain->makeCommand(environment).toString(); - - return QString(); -} - -QString PuppetCreator::qmakeCommand() const -{ - QtSupport::QtVersion *currentQtVersion = QtSupport::QtKitAspect::qtVersion(m_target->kit()); - if (currentQtVersion) - return currentQtVersion->qmakeFilePath().toString(); - - return QString(); -} - -void PuppetCreator::setQrcMappingString(const QString qrcMapping) -{ - m_qrcMapping = qrcMapping; -} - -bool PuppetCreator::startBuildProcess(const QString &buildDirectoryPath, - const QString &command, - const QStringList &processArguments, - PuppetBuildProgressDialog *progressDialog) const -{ - if (command.isEmpty()) - return false; - - const QString errorOutputFilePath(buildDirectoryPath + "/build_error_output.txt"); - if (QFile::exists(errorOutputFilePath)) - QFile(errorOutputFilePath).remove(); - progressDialog->setErrorOutputFile(errorOutputFilePath); - - QProcess process; - process.setStandardErrorFile(errorOutputFilePath); - process.setProcessChannelMode(QProcess::SeparateChannels); - process.setProcessEnvironment(processEnvironment()); - process.setWorkingDirectory(buildDirectoryPath); - process.start(command, processArguments); - if (!process.waitForStarted()) - return false; - while (process.waitForReadyRead(100) || process.state() == QProcess::Running) { - if (progressDialog->useFallbackPuppet()) - return false; - - QCoreApplication::processEvents(QEventLoop::ExcludeSocketNotifiers); - - QByteArray newOutput = process.readAllStandardOutput(); - if (!newOutput.isEmpty()) { - progressDialog->newBuildOutput(newOutput); - m_compileLog.append(QString::fromLatin1(newOutput)); - } - } - - process.waitForFinished(); - - qCInfo(puppetBuild) << Q_FUNC_INFO; - qCInfo(puppetBuild) << m_compileLog; - m_compileLog.clear(); - - if (process.exitStatus() == QProcess::NormalExit && process.exitCode() == 0) - return true; - - return false; -} - -QString PuppetCreator::puppetSourceDirectoryPath() -{ - return Core::ICore::resourcePath("qml/qmlpuppet").toString(); -} - -QString PuppetCreator::qml2PuppetProjectFile() -{ - return puppetSourceDirectoryPath() + "/qml2puppet/qml2puppet.pro"; -} - -bool PuppetCreator::checkPuppetIsReady(const QString &puppetPath) const -{ - QFileInfo puppetFileInfo(puppetPath); - if (puppetFileInfo.exists()) { - QDateTime puppetExecutableLastModified = puppetFileInfo.lastModified(); - - return puppetExecutableLastModified > qtLastModified() && puppetExecutableLastModified > puppetSourceLastModified(); - } - - return false; -} - -static bool nonEarlyQt5Version(const QVersionNumber ¤tQtVersionNumber) -{ - return currentQtVersionNumber >= QVersionNumber(5, 2, 0) || currentQtVersionNumber < QVersionNumber(5, 0, 0); -} - -bool PuppetCreator::qtIsSupported() const -{ - QtSupport::QtVersion *currentQtVersion = QtSupport::QtKitAspect::qtVersion(m_target->kit()); - - return currentQtVersion - && currentQtVersion->isValid() - && nonEarlyQt5Version(currentQtVersion->qtVersion()) - && currentQtVersion->type() == QtSupport::Constants::DESKTOPQT; -} - -} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.h b/src/plugins/qmldesigner/designercore/instances/puppetcreator.h deleted file mode 100644 index d61005b95bb..00000000000 --- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.h +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 - -#pragma once - -#include "qprocessuniqueptr.h" - -#include - -#include -#include - -#include - -namespace ProjectExplorer { -class Target; -} // namespace ProjectExplorer - -namespace QmlDesigner { - -class PuppetBuildProgressDialog; -class Model; - -class PuppetCreator -{ -public: - enum PuppetType { FallbackPuppet, UserSpacePuppet, BinPathPuppet }; - - PuppetCreator(ProjectExplorer::Target *target, const Model *model); - - void createQml2PuppetExecutableIfMissing(); - - QProcessUniquePointer createPuppetProcess( - const QString &puppetMode, - const QString &socketToken, - std::function processOutputCallback, - std::function processFinishCallback, - const QStringList &customOptions = {}) const; - - void setQrcMappingString(const QString qrcMapping); - - static QString defaultPuppetToplevelBuildDirectory(); - static QString defaultPuppetFallbackDirectory(); - static QString qmlPuppetFallbackDirectory(const DesignerSettings &settings); -protected: - bool build(const QString &qmlPuppetProjectFilePath) const; - - - QString qmlPuppetToplevelBuildDirectory() const; - QString qmlPuppetDirectory(PuppetType puppetPathType) const; - QString qml2PuppetPath(PuppetType puppetType) const; - - bool startBuildProcess(const QString &buildDirectoryPath, - const QString &command, - const QStringList &processArguments = QStringList(), - PuppetBuildProgressDialog *progressDialog = nullptr) const; - static QString puppetSourceDirectoryPath(); - static QString qml2PuppetProjectFile(); - - bool checkPuppetIsReady(const QString &puppetPath) const; - bool qtIsSupported() const; - QProcessUniquePointer puppetProcess(const QString &puppetPath, - const QString &workingDirectory, - const QString &puppetMode, - const QString &socketToken, - std::function processOutputCallback, - std::function processFinishCallback, - const QStringList &customOptions) const; - - QProcessEnvironment processEnvironment() const; - - QString buildCommand() const; - QString qmakeCommand() const; - - QByteArray qtHash() const; - QDateTime qtLastModified() const; - QDateTime puppetSourceLastModified() const; - - bool useOnlyFallbackPuppet() const; - QString getStyleConfigFileName() const; - bool usesVirtualKeyboard() const; - -private: - mutable QString m_compileLog; - ProjectExplorer::Target *m_target = nullptr; - PuppetType m_availablePuppetType; - static QHash m_qml2PuppetForKitPuppetHash; - const Model *m_model = nullptr; - QString m_qrcMapping; -}; - -} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp index 24b612d8088..a0204609e34 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp @@ -70,10 +70,10 @@ public: bool m_isInitialized; }; -MetaInfoPrivate::MetaInfoPrivate(MetaInfo *q) : - m_itemLibraryInfo(new ItemLibraryInfo()), - m_q(q), - m_isInitialized(false) +MetaInfoPrivate::MetaInfoPrivate(MetaInfo *q) + : m_itemLibraryInfo(new ItemLibraryInfo()) + , m_q(q) + , m_isInitialized(false) { if (!m_q->isGlobal()) m_itemLibraryInfo->setBaseInfo(MetaInfo::global().itemLibraryInfo()); @@ -85,15 +85,19 @@ void MetaInfoPrivate::clear() m_isInitialized = false; } +namespace { +bool enableParseItemLibraryDescriptions = true; +} + void MetaInfoPrivate::initialize() { - parseItemLibraryDescriptions(); + if (enableParseItemLibraryDescriptions) + parseItemLibraryDescriptions(); m_isInitialized = true; } void MetaInfoPrivate::parseItemLibraryDescriptions() { -#ifndef QMLDESIGNER_TEST Internal::WidgetPluginManager pluginManager; for (const QString &pluginDir : qAsConst(m_q->s_pluginDirs)) pluginManager.addPath(pluginDir); @@ -104,9 +108,12 @@ void MetaInfoPrivate::parseItemLibraryDescriptions() reader.readMetaInfoFile(plugin->metaInfo()); } catch (const InvalidMetaInfoException &e) { qWarning() << e.description(); - const QString errorMessage = plugin->metaInfo() + QLatin1Char('\n') + QLatin1Char('\n') + reader.errors().join(QLatin1Char('\n')); - Core::AsynchronousMessageBox::warning(QCoreApplication::translate("QmlDesigner::Internal::MetaInfoPrivate", "Invalid meta info"), - errorMessage); + const QString errorMessage = plugin->metaInfo() + QLatin1Char('\n') + QLatin1Char('\n') + + reader.errors().join(QLatin1Char('\n')); + Core::AsynchronousMessageBox::warning( + QCoreApplication::translate("QmlDesigner::Internal::MetaInfoPrivate", + "Invalid meta info"), + errorMessage); } } @@ -117,16 +124,23 @@ void MetaInfoPrivate::parseItemLibraryDescriptions() reader.readMetaInfoFile(path.toString()); } catch (const InvalidMetaInfoException &e) { qWarning() << e.description(); - const QString errorMessage = path.toString() + QLatin1Char('\n') + QLatin1Char('\n') + reader.errors().join(QLatin1Char('\n')); - Core::AsynchronousMessageBox::warning(QCoreApplication::translate("QmlDesigner::Internal::MetaInfoPrivate", "Invalid meta info"), - errorMessage); + const QString errorMessage = path.toString() + QLatin1Char('\n') + QLatin1Char('\n') + + reader.errors().join(QLatin1Char('\n')); + Core::AsynchronousMessageBox::warning( + QCoreApplication::translate("QmlDesigner::Internal::MetaInfoPrivate", + "Invalid meta info"), + errorMessage); } } -#endif } } // namespace Internal +void MetaInfo::disableParseItemLibraryDescriptionsUgly() +{ + Internal::enableParseItemLibraryDescriptions = false; +} + using QmlDesigner::Internal::MetaInfoPrivate; MetaInfo MetaInfo::s_global; @@ -156,8 +170,7 @@ MetaInfo::MetaInfo(const MetaInfo &metaInfo) = default; */ MetaInfo::MetaInfo() : m_p(new MetaInfoPrivate(this)) -{ -} +{} MetaInfo::~MetaInfo() = default; diff --git a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp index 3c58092416d..6f1e9c7bc3c 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp @@ -2,14 +2,13 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 #include "subcomponentmanager.h" - -#include -#include -#include - -#include "model.h" #include "metainforeader.h" +#include +#include +#include +#include + #include #include #include @@ -40,9 +39,10 @@ QT_END_NAMESPACE namespace QmlDesigner { static const QString s_qmlFilePattern = QStringLiteral("*.qml"); -SubComponentManager::SubComponentManager(Model *model, QObject *parent) - : QObject(parent), - m_model(model) +SubComponentManager::SubComponentManager(Model *model, + ExternalDependenciesInterface &externalDependencies) + : m_model(model) + , m_externalDependencies{externalDependencies} { connect(&m_watcher, &QFileSystemWatcher::directoryChanged, this, [this](const QString &path) { parseDirectory(path); }); @@ -357,9 +357,7 @@ void SubComponentManager::registerQmlFile(const QFileInfo &fileInfo, const QStri ItemLibraryEntry itemLibraryEntry; itemLibraryEntry.setType(componentName.toUtf8()); itemLibraryEntry.setName(baseComponentName); -#ifndef QMLDESIGNER_TEST - itemLibraryEntry.setCategory(ItemLibraryImport::userComponentsTitle()); -#endif + itemLibraryEntry.setCategory(m_externalDependencies.itemLibraryImportUserComponentsTitle()); itemLibraryEntry.setCustomComponentSource(fileInfo.absoluteFilePath()); if (!qualifier.isEmpty()) itemLibraryEntry.setRequiredImport(fixedQualifier); diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp index b1c6ef23607..10aaf813da1 100644 --- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp +++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp @@ -15,12 +15,6 @@ #include #include -#ifndef QMLDESIGNER_TEST -#include -#include -#include -#endif - #include #include #include diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp index 927d66e5140..c78d19a2c41 100644 --- a/src/plugins/qmldesigner/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/designercore/model/model.cpp @@ -29,12 +29,6 @@ #include -#ifndef QMLDESIGNER_TEST -#include -#include -#include -#endif - #include #include @@ -1738,16 +1732,6 @@ QUrl Model::fileUrl() const return d->fileUrl(); } -QUrl Model::projectUrl() const -{ -#ifndef QMLDESIGNER_TEST - DesignDocument *document = QmlDesignerPlugin::instance()->viewManager().currentDesignDocument(); - if (document) - return QUrl::fromLocalFile(document->projectFolder().toString()); -#endif - return {}; -} - /*! \brief Sets the URL against which relative URLs within the model should be resolved. \param url the base URL, i.e. the qml file path. diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp index e3770a3c42e..319600ca103 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp @@ -26,10 +26,6 @@ #include #include -#ifndef QMLDESIGNER_TEST -#include -#endif - namespace QmlDesigner { bool QmlItemNode::isItemOrWindow(const ModelNode &modelNode) diff --git a/src/plugins/qmldesigner/designercore/model/qmlmodelnodefacade.cpp b/src/plugins/qmldesigner/designercore/model/qmlmodelnodefacade.cpp index 3ec22360d85..290ad6c89c2 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlmodelnodefacade.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlmodelnodefacade.cpp @@ -41,20 +41,28 @@ bool QmlModelNodeFacade::isValid() const return isValidQmlModelNodeFacade(m_modelNode); } +namespace { +bool workaroundForIsValidQmlModelNodeFacadeInTests = false; +} + bool QmlModelNodeFacade::isValidQmlModelNodeFacade(const ModelNode &modelNode) { - return modelNode.isValid() -#ifndef QMLDESIGNER_TEST //This is a hack to keep tests working without instances - && nodeInstanceView(modelNode) - && nodeInstanceView(modelNode)->hasInstanceForModelNode(modelNode) - && nodeInstanceView(modelNode)->instanceForModelNode(modelNode).isValid(); -#else - ; -#endif + if (workaroundForIsValidQmlModelNodeFacadeInTests) { + return modelNode.isValid(); + } + + return modelNode.isValid() && nodeInstanceView(modelNode) + && nodeInstanceView(modelNode)->hasInstanceForModelNode(modelNode) + && nodeInstanceView(modelNode)->instanceForModelNode(modelNode).isValid(); } bool QmlModelNodeFacade::isRootNode() const { return modelNode().isRootNode(); } + +void QmlModelNodeFacade::enableUglyWorkaroundForIsValidQmlModelNodeFacadeInTests() +{ + workaroundForIsValidQmlModelNodeFacadeInTests = true; +} } //QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp index 3bb73e586e8..eca9b697254 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp @@ -17,14 +17,11 @@ #include "variantproperty.h" #include +#include #include #include -#ifndef QMLDESIGNER_TEST -#include -#endif - #include #include @@ -658,26 +655,18 @@ QVariant QmlObjectNode::instanceValue(const ModelNode &modelNode, const Property return modelNode.view()->nodeInstanceView()->instanceForModelNode(modelNode).property(name); } -QString QmlObjectNode::generateTranslatableText([[maybe_unused]] const QString &text) +QString QmlObjectNode::generateTranslatableText([[maybe_unused]] const QString &text, + const DesignerSettings &settings) { -#ifndef QMLDESIGNER_TEST - - if (QmlDesignerPlugin::settings().value( - DesignerSettingsKey::TYPE_OF_QSTR_FUNCTION).toInt()) - - switch (QmlDesignerPlugin::settings().value( - DesignerSettingsKey::TYPE_OF_QSTR_FUNCTION).toInt()) { + if (settings.value(DesignerSettingsKey::TYPE_OF_QSTR_FUNCTION).toInt()) + switch (settings.value(DesignerSettingsKey::TYPE_OF_QSTR_FUNCTION).toInt()) { case 0: return QString(QStringLiteral("qsTr(\"%1\")")).arg(text); case 1: return QString(QStringLiteral("qsTrId(\"%1\")")).arg(text); case 2: return QString(QStringLiteral("qsTranslate(\"%1\", \"context\")")).arg(text); default: break; - } return QString(QStringLiteral("qsTr(\"%1\")")).arg(text); -#else - return QString(); -#endif } QString QmlObjectNode::stripedTranslatableTextFunction(const QString &text) @@ -690,9 +679,10 @@ QString QmlObjectNode::stripedTranslatableTextFunction(const QString &text) return text; } -QString QmlObjectNode::convertToCorrectTranslatableFunction(const QString &text) +QString QmlObjectNode::convertToCorrectTranslatableFunction(const QString &text, + const DesignerSettings &designerSettings) { - return generateTranslatableText(stripedTranslatableTextFunction(text)); + return generateTranslatableText(stripedTranslatableTextFunction(text), designerSettings); } TypeName QmlObjectNode::instanceType(const PropertyName &name) const diff --git a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp index 31544acfdde..0fb9209b3f1 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp @@ -11,6 +11,8 @@ #include "qmlanchors.h" #include "itemlibraryinfo.h" +#include + #include "plaintexteditmodifier.h" #include "rewriterview.h" #include "modelmerger.h" @@ -218,7 +220,8 @@ static QmlObjectNode createQmlObjectNodeFromSource(AbstractView *view, textEdit.setPlainText(source); NotIndentingTextEditModifier modifier(&textEdit); - QScopedPointer rewriterView(new RewriterView(RewriterView::Amend)); + QScopedPointer rewriterView( + new RewriterView(view->externalDependencies(), RewriterView::Amend)); rewriterView->setCheckSemanticErrors(false); rewriterView->setTextModifier(&modifier); rewriterView->setAllowComponentRoot(true); @@ -235,12 +238,12 @@ static QmlObjectNode createQmlObjectNodeFromSource(AbstractView *view, return {}; } -static QString imagePlaceHolderPath(Model *model) +static QString imagePlaceHolderPath(AbstractView *view) { - QFileInfo info(model->projectUrl().toLocalFile() + "/images/place_holder.png"); + QFileInfo info(view->externalDependencies().projectUrl().toLocalFile() + "/images/place_holder.png"); if (info.exists()) { - const QDir dir(QFileInfo(model->fileUrl().toLocalFile()).absoluteDir()); + const QDir dir(QFileInfo(view->model()->fileUrl().toLocalFile()).absoluteDir()); return dir.relativeFilePath(info.filePath()); } @@ -272,12 +275,13 @@ QmlObjectNode QmlVisualNode::createQmlObjectNode(AbstractView *view, for (const auto &property : itemLibraryEntry.properties()) { if (property.type() == "binding") { - const QString value = QmlObjectNode::convertToCorrectTranslatableFunction(property.value().toString()); + const QString value = QmlObjectNode::convertToCorrectTranslatableFunction( + property.value().toString(), view->externalDependencies().designerSettings()); propertyBindingList.append(PropertyBindingEntry(property.name(), value)); } else if (property.type() == "enum") { propertyEnumList.append(PropertyBindingEntry(property.name(), property.value().toString())); } else if (property.value().toString() == QString::fromLatin1(imagePlaceHolder)) { - propertyPairList.append({property.name(), imagePlaceHolderPath(view->model()) }); + propertyPairList.append({property.name(), imagePlaceHolderPath(view)}); } else { propertyPairList.append({property.name(), property.value()}); } diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp index f3790dad834..4ed69e89d67 100644 --- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp @@ -9,6 +9,8 @@ #include #include +#include +#include #include #include #include @@ -21,11 +23,6 @@ #include #include -#ifndef QMLDESIGNER_TEST -#include -#include -#endif - #include #include #include @@ -46,21 +43,16 @@ namespace QmlDesigner { const char annotationsEscapeSequence[] = "##^##"; -bool debugQmlPuppet() +bool debugQmlPuppet(const DesignerSettings &settings) { -#ifndef QMLDESIGNER_TEST - if (!QmlDesignerPlugin::instance()) - return false; - const QString debugPuppet = QmlDesignerPlugin::instance()->settings().value(DesignerSettingsKey:: - DEBUG_PUPPET).toString(); + const QString debugPuppet = settings.value(DesignerSettingsKey::DEBUG_PUPPET).toString(); return !debugPuppet.isEmpty(); -#else - return false; -#endif } -RewriterView::RewriterView(DifferenceHandling differenceHandling) - : m_differenceHandling(differenceHandling) +RewriterView::RewriterView(ExternalDependenciesInterface &externalDependencies, + DifferenceHandling differenceHandling) + : AbstractView{externalDependencies} + , m_differenceHandling(differenceHandling) , m_positionStorage(new ModelNodePositionStorage) , m_modelToTextMerger(new Internal::ModelToTextMerger(this)) , m_textToModelMerger(new Internal::TextToModelMerger(this)) @@ -888,7 +880,8 @@ void RewriterView::setupCanonicalHashes() const void RewriterView::handleLibraryInfoUpdate() { // Trigger dummy amend to reload document when library info changes - if (isAttached() && !m_modelAttachPending && !debugQmlPuppet()) + if (isAttached() && !m_modelAttachPending + && !debugQmlPuppet(externalDependencies().designerSettings())) m_amendTimer.start(); } @@ -1093,16 +1086,10 @@ void RewriterView::qmlTextChanged() if (m_instantQmlTextUpdate) { amendQmlText(); } else { -#ifndef QMLDESIGNER_TEST - auto &viewManager = QmlDesignerPlugin::instance()->viewManager(); - if (viewManager.usesRewriterView(this)) { - QmlDesignerPlugin::instance()->viewManager().disableWidgets(); + if (externalDependencies().viewManagerUsesRewriterView(this)) { + externalDependencies().viewManagerDiableWidgets(); m_amendTimer.start(); } -#else - /*Keep test synchronous*/ - amendQmlText(); -#endif } break; } diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index 65f1041fae0..16a0ea407f9 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -3,35 +3,26 @@ #include "texttomodelmerger.h" -#include "documentmessage.h" -#include "modelnodepositionstorage.h" #include "abstractproperty.h" #include "bindingproperty.h" +#include "documentmessage.h" #include "filemanager/firstdefinitionfinder.h" #include "filemanager/objectlengthcalculator.h" #include "filemanager/qmlrefactoring.h" #include "itemlibraryinfo.h" #include "metainfo.h" +#include "modelnodepositionstorage.h" #include "nodemetainfo.h" #include "nodeproperty.h" -#include "signalhandlerproperty.h" #include "propertyparser.h" #include "rewriterview.h" +#include "signalhandlerproperty.h" #include "variantproperty.h" +#include #include #include -#ifndef QMLDESIGNER_TEST -#include -#include -#include - -#include -#include - -#endif - #include #include #include @@ -2243,40 +2234,31 @@ void TextToModelMerger::collectImportErrors(QList *errors) if (supportedQtQuickVersion(import.version())) { hasQtQuick = true; -#ifndef QMLDESIGNER_TEST - auto target = ProjectExplorer::SessionManager::startupTarget(); - if (target) { - QtSupport::QtVersion *currentQtVersion = QtSupport::QtKitAspect::qtVersion( - target->kit()); - if (currentQtVersion && currentQtVersion->isValid()) { - const bool qt6import = import.version().startsWith("6"); + auto &externalDependencies = m_rewriterView->externalDependencies(); + if (externalDependencies.hasStartupTarget()) { + const bool qt6import = import.version().startsWith("6"); - if (currentQtVersion->qtVersion().majorVersion() == 5 - && (m_hasVersionlessImport || qt6import)) { - const QmlJS::DiagnosticMessage diagnosticMessage( - QmlJS::Severity::Error, - SourceLocation(0, 0, 0, 0), - QCoreApplication::translate( - "QmlDesigner::TextToModelMerger", - "Qt Quick 6 is not supported with a Qt 5 kit.")); - errors->prepend(DocumentMessage(diagnosticMessage, - QUrl::fromLocalFile( - m_document->fileName().path()))); - } - } else { - const QmlJS::DiagnosticMessage - diagnosticMessage(QmlJS::Severity::Error, - SourceLocation(0, 0, 0, 0), - QCoreApplication::translate( - "QmlDesigner::TextToModelMerger", - "The Design Mode requires a valid Qt kit.")); + if (!externalDependencies.isQt6Import() && (m_hasVersionlessImport || qt6import)) { + const QmlJS::DiagnosticMessage diagnosticMessage( + QmlJS::Severity::Error, + SourceLocation(0, 0, 0, 0), + QCoreApplication::translate( + "QmlDesigner::TextToModelMerger", + "Qt Quick 6 is not supported with a Qt 5 kit.")); errors->prepend( DocumentMessage(diagnosticMessage, QUrl::fromLocalFile(m_document->fileName().path()))); } + } else { + const QmlJS::DiagnosticMessage diagnosticMessage( + QmlJS::Severity::Error, + SourceLocation(0, 0, 0, 0), + QCoreApplication::translate("QmlDesigner::TextToModelMerger", + "The Design Mode requires a valid Qt kit.")); + errors->prepend( + DocumentMessage(diagnosticMessage, + QUrl::fromLocalFile(m_document->fileName().path()))); } -#endif - } else { const QmlJS::DiagnosticMessage diagnosticMessage(QmlJS::Severity::Error, diff --git a/src/plugins/qmldesigner/designercore/rewritertransaction.cpp b/src/plugins/qmldesigner/designercore/rewritertransaction.cpp index 5253d412e2a..1afdcbc64bc 100644 --- a/src/plugins/qmldesigner/designercore/rewritertransaction.cpp +++ b/src/plugins/qmldesigner/designercore/rewritertransaction.cpp @@ -3,16 +3,12 @@ #include "rewritertransaction.h" #include -#include +#include #include +#include #include -#ifndef QMLDESIGNER_TEST -#include -#include -#endif - #include namespace QmlDesigner { @@ -99,9 +95,7 @@ void RewriterTransaction::rollback() m_valid = false; view()->emitRewriterEndTransaction(); -#ifndef QMLDESIGNER_TEST - QmlDesignerPlugin::instance()->currentDesignDocument()->undo(); -#endif + view()->externalDependencies().undoOnCurrentDesignDocument(); if (m_activeIdentifier) { qDebug() << "Rollback RewriterTransaction:" << m_identifier << m_identifierNumber; m_identifierList.removeOne(m_identifier + QByteArrayLiteral("-") + QByteArray::number(m_identifierNumber)); diff --git a/src/plugins/qmldesigner/documentmanager.cpp b/src/plugins/qmldesigner/documentmanager.cpp index 202df9bb4ec..14c68b42b71 100644 --- a/src/plugins/qmldesigner/documentmanager.cpp +++ b/src/plugins/qmldesigner/documentmanager.cpp @@ -225,7 +225,7 @@ void DocumentManager::setCurrentDesignDocument(Core::IEditor *editor) auto found = m_designDocuments.find(editor); if (found == m_designDocuments.end()) { auto &inserted = m_designDocuments[editor] = std::make_unique( - m_projectManager.projectStorage()); + m_projectManager.projectStorage(), m_externalDependencies); m_currentDesignDocument = inserted.get(); m_currentDesignDocument->setEditor(editor); } else { diff --git a/src/plugins/qmldesigner/documentmanager.h b/src/plugins/qmldesigner/documentmanager.h index 738e2782818..5123a763f7d 100644 --- a/src/plugins/qmldesigner/documentmanager.h +++ b/src/plugins/qmldesigner/documentmanager.h @@ -3,6 +3,8 @@ #pragma once +#include "qmldesigner_global.h" + #include #include #include @@ -21,12 +23,14 @@ class QmlDesignerProjectManager; Q_DECLARE_LOGGING_CATEGORY(documentManagerLog) -class QMLDESIGNERCORE_EXPORT DocumentManager : public QObject +class QMLDESIGNER_EXPORT DocumentManager : public QObject { Q_OBJECT public: - DocumentManager(QmlDesignerProjectManager &projectManager) + DocumentManager(QmlDesignerProjectManager &projectManager, + ExternalDependenciesInterface &externalDependencies) : m_projectManager{projectManager} + , m_externalDependencies{externalDependencies} {} void setCurrentDesignDocument(Core::IEditor *editor); @@ -56,6 +60,7 @@ private: std::map> m_designDocuments; QPointer m_currentDesignDocument; QmlDesignerProjectManager &m_projectManager; + ExternalDependenciesInterface &m_externalDependencies; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/puppetenvironmentbuilder.cpp b/src/plugins/qmldesigner/puppetenvironmentbuilder.cpp index 24e0469f048..40c3bdab069 100644 --- a/src/plugins/qmldesigner/puppetenvironmentbuilder.cpp +++ b/src/plugins/qmldesigner/puppetenvironmentbuilder.cpp @@ -67,6 +67,13 @@ QProcessEnvironment PuppetEnvironmentBuilder::processEnvironment() const return m_environment.toProcessEnvironment(); } +QProcessEnvironment PuppetEnvironmentBuilder::createEnvironment( + ProjectExplorer::Target *target, const DesignerSettings &designerSettings, const Model &model) +{ + PuppetEnvironmentBuilder builder{target, designerSettings, model}; + return builder.processEnvironment(); +} + bool PuppetEnvironmentBuilder::usesVirtualKeyboard() const { if (m_target) { diff --git a/src/plugins/qmldesigner/puppetenvironmentbuilder.h b/src/plugins/qmldesigner/puppetenvironmentbuilder.h index 09aab672a20..3003a26be52 100644 --- a/src/plugins/qmldesigner/puppetenvironmentbuilder.h +++ b/src/plugins/qmldesigner/puppetenvironmentbuilder.h @@ -28,6 +28,10 @@ public: QProcessEnvironment processEnvironment() const; + static QProcessEnvironment createEnvironment(ProjectExplorer::Target *target, + const class DesignerSettings &designerSettings, + const class Model &model); + private: PuppetType determinePuppetType() const; bool usesVirtualKeyboard() const; diff --git a/src/plugins/qmldesigner/qmldesigner_global.h b/src/plugins/qmldesigner/qmldesigner_global.h new file mode 100644 index 00000000000..5a856ffd388 --- /dev/null +++ b/src/plugins/qmldesigner/qmldesigner_global.h @@ -0,0 +1,14 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 + +#pragma once + +#include + +#if defined(QMLDESIGNER_LIBRARY) +#define QMLDESIGNER_EXPORT Q_DECL_EXPORT +#elif defined(QMLDESIGNER_STATIC_LIBRARY) +#define QMLDESIGNER_EXPORT +#else +#define QMLDESIGNER_EXPORT Q_DECL_IMPORT +#endif diff --git a/src/plugins/qmldesigner/qmldesignercore.cmake b/src/plugins/qmldesigner/qmldesignercore.cmake deleted file mode 100644 index 7863ba30726..00000000000 --- a/src/plugins/qmldesigner/qmldesignercore.cmake +++ /dev/null @@ -1,454 +0,0 @@ -# shared with tests - -if(CMAKE_VERSION VERSION_LESS 3.17.0) -set(CMAKE_CURRENT_FUNCTION_LIST_DIR ${CMAKE_CURRENT_LIST_DIR}) -endif() - -function(extend_with_qmldesigner_core target_name) - if(NOT TARGET ${target_name}) - return() - endif() - - extend_qtc_target(${target_name} - DEPENDS - Threads::Threads - Qt5::CorePrivate - CPlusPlus - Sqlite - Utils - Qt5::Widgets - Qt5::Qml - Core - ProjectExplorer - QmakeProjectManager - QmlJS - QmlJSEditor - QmlJSTools - QmlProjectManager - QtSupport - TextEditor - INCLUDES - ${CMAKE_CURRENT_FUNCTION_LIST_DIR} - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/components - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/components/componentcore - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/components/debugview - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/components/edit3d - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/components/formeditor - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/components/integration - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/components/itemlibrary - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/components/navigator - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/components/propertyeditor - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/components/stateseditor - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/components/texteditor - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/designercore - SOURCES_PREFIX ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/designercore - SOURCES - rewritertransaction.cpp - rewritertransaction.h - ) - - # autouic gets confused when adding the ui files to tests in the qtquickdesigner repo, - # so manually add them for UIC - set(UI_FILES - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/designercore/instances/puppetbuildprogressdialog.ui - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/designercore/instances/puppetdialog.ui - ) - qt_wrap_ui(UI_SOURCES ${UI_FILES}) - extend_qtc_target(${target_name} - INCLUDES ${CMAKE_CURRENT_BINARY_DIR} - SOURCES - ${UI_SOURCES} - ${UI_FILES} - ) - set_source_files_properties(${UI_FILES} PROPERTIES SKIP_AUTOUIC ON) - - extend_qtc_target(${target_name} - INCLUDES - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/designercore/exceptions - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/designercore/filemanager - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/designercore/imagecache - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/designercore/include - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/designercore/instances - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/designercore/metainfo - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/designercore/model - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/designercore/pluginmanager - SOURCES_PREFIX ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/designercore - SOURCES - exceptions/exception.cpp - exceptions/invalidargumentexception.cpp - exceptions/invalididexception.cpp - exceptions/invalidmetainfoexception.cpp - exceptions/invalidmodelnodeexception.cpp - exceptions/invalidmodelstateexception.cpp - exceptions/invalidpropertyexception.cpp - exceptions/invalidqmlsourceexception.cpp - exceptions/invalidreparentingexception.cpp - exceptions/invalidslideindexexception.cpp - exceptions/notimplementedexception.cpp - exceptions/removebasestateexception.cpp - exceptions/rewritingexception.cpp - - filemanager/addarraymembervisitor.cpp - filemanager/addarraymembervisitor.h - filemanager/addobjectvisitor.cpp - filemanager/addobjectvisitor.h - filemanager/addpropertyvisitor.cpp - filemanager/addpropertyvisitor.h - filemanager/astobjecttextextractor.cpp - filemanager/astobjecttextextractor.h - filemanager/changeimportsvisitor.cpp - filemanager/changeimportsvisitor.h - filemanager/changeobjecttypevisitor.cpp - filemanager/changeobjecttypevisitor.h - filemanager/changepropertyvisitor.cpp - filemanager/changepropertyvisitor.h - filemanager/firstdefinitionfinder.cpp - filemanager/firstdefinitionfinder.h - filemanager/moveobjectbeforeobjectvisitor.cpp - filemanager/moveobjectbeforeobjectvisitor.h - filemanager/moveobjectvisitor.cpp - filemanager/moveobjectvisitor.h - filemanager/objectlengthcalculator.cpp - filemanager/objectlengthcalculator.h - filemanager/qmlrefactoring.cpp - filemanager/qmlrefactoring.h - filemanager/qmlrewriter.cpp - filemanager/qmlrewriter.h - filemanager/removepropertyvisitor.cpp - filemanager/removepropertyvisitor.h - filemanager/removeuiobjectmembervisitor.cpp - filemanager/removeuiobjectmembervisitor.h - - imagecache/asynchronousexplicitimagecache.cpp - imagecache/asynchronousimagecache.cpp - imagecache/asynchronousimagefactory.cpp - imagecache/asynchronousimagefactory.h - imagecache/imagecachecollector.cpp - imagecache/imagecachecollector.h - imagecache/imagecachedispatchcollector.h - imagecache/imagecachecollectorinterface.h - imagecache/imagecacheconnectionmanager.cpp - imagecache/imagecacheconnectionmanager.h - imagecache/imagecachefontcollector.cpp - imagecache/imagecachefontcollector.h - imagecache/imagecachegenerator.cpp - imagecache/imagecachegenerator.h - imagecache/imagecachegeneratorinterface.h - imagecache/imagecachestorage.h - imagecache/imagecachestorageinterface.h - imagecache/meshimagecachecollector.cpp - imagecache/meshimagecachecollector.h - imagecache/synchronousimagecache.cpp - imagecache/timestampprovider.cpp - imagecache/timestampprovider.h - imagecache/timestampproviderinterface.h - - include/abstractproperty.h - include/abstractview.h - include/anchorline.h - include/annotation.h - include/asynchronousexplicitimagecache.h - include/asynchronousimagecache.h - include/auxiliarydata.h - include/auxiliarydataproperties.h - include/basetexteditmodifier.h - include/bindingproperty.h - include/componenttextmodifier.h - include/customnotifications.h - include/documentmessage.h - include/enumerationmetainfo.h - include/exception.h - include/forwardview.h - include/imagecacheauxiliarydata.h - include/import.h - include/invalidargumentexception.h - include/invalididexception.h - include/invalidmetainfoexception.h - include/invalidmodelnodeexception.h - include/invalidmodelstateexception.h - include/invalidpropertyexception.h - include/invalidqmlsourceexception.h - include/invalidreparentingexception.h - include/invalidslideindexexception.h - include/itemlibraryinfo.h - include/mathutils.h - include/metainfo.h - include/metainforeader.h - include/model.h - include/modelmerger.h - include/modelnode.h - include/modelnodepositionstorage.h - include/nodeabstractproperty.h - include/nodehints.h - include/nodeinstance.h - include/nodeinstanceview.h - include/nodelistproperty.h - include/nodemetainfo.h - include/nodeproperty.h - include/notimplementedexception.h - include/plaintexteditmodifier.h - include/propertycontainer.h - include/propertymetainfo.h - include/propertynode.h - include/propertyparser.h - include/qmlanchors.h - include/qmlchangeset.h - include/qmlconnections.h - include/qmldesignercorelib_global.h - include/qmlitemnode.h - include/qmlmodelnodefacade.h - include/qmlobjectnode.h - include/qmlstate.h - include/qmltimeline.h - include/qmltimelinekeyframegroup.h - include/removebasestateexception.h - include/rewriterview.h - include/rewritingexception.h - include/signalhandlerproperty.h - include/stylesheetmerger.h - include/subcomponentmanager.h - include/synchronousimagecache.h - include/textmodifier.h - include/variantproperty.h - - instances/baseconnectionmanager.cpp - instances/baseconnectionmanager.h - instances/connectionmanager.cpp - instances/connectionmanager.h - instances/connectionmanagerinterface.cpp - instances/connectionmanagerinterface.h - instances/nodeinstance.cpp - instances/nodeinstanceserverproxy.cpp - instances/nodeinstanceserverproxy.h - instances/nodeinstanceview.cpp - instances/puppetbuildprogressdialog.cpp - instances/puppetbuildprogressdialog.h - instances/puppetcreator.cpp - instances/puppetcreator.h - instances/puppetstarter.cpp - instances/puppetstarter.h - instances/puppetstartdata.h - instances/puppetdialog.cpp - instances/puppetdialog.h - instances/qprocessuniqueptr.h - - metainfo/itemlibraryinfo.cpp - metainfo/metainfo.cpp - metainfo/metainforeader.cpp - metainfo/nodehints.cpp - metainfo/nodemetainfo.cpp - metainfo/subcomponentmanager.cpp - - model/abstractproperty.cpp - model/abstractview.cpp - model/anchorline.cpp - model/annotation.cpp - model/bindingproperty.cpp - model/componenttextmodifier.cpp - model/documentmessage.cpp - model/import.cpp - model/internalbindingproperty.cpp - model/internalbindingproperty.h - model/internalnode.cpp - model/internalnode_p.h - model/internalnodeabstractproperty.cpp - model/internalnodeabstractproperty.h - model/internalnodelistproperty.cpp - model/internalnodelistproperty.h - model/internalnodeproperty.cpp - model/internalnodeproperty.h - model/internalproperty.cpp - model/internalproperty.h - model/internalsignalhandlerproperty.cpp - model/internalsignalhandlerproperty.h - model/internalvariantproperty.cpp - model/internalvariantproperty.h - model/model.cpp - model/model_p.h - model/modelmerger.cpp - model/modelnode.cpp - model/modelnodepositionrecalculator.cpp - model/modelnodepositionrecalculator.h - model/modelnodepositionstorage.cpp - model/modeltotextmerger.cpp - model/modeltotextmerger.h - model/nodeabstractproperty.cpp - model/nodelistproperty.cpp - model/nodeproperty.cpp - model/plaintexteditmodifier.cpp - model/propertycontainer.cpp - model/propertynode.cpp - model/propertyparser.cpp - model/qml3dnode.cpp - model/qmlanchors.cpp - model/qmlchangeset.cpp - model/qmlconnections.cpp - model/qmlitemnode.cpp - model/qmlmodelnodefacade.cpp - model/qmlobjectnode.cpp - model/qmlstate.cpp - model/qmltextgenerator.cpp - model/qmltextgenerator.h - model/qmltimeline.cpp - model/qmltimelinekeyframegroup.cpp - model/qmlvisualnode.cpp - model/rewriteaction.cpp - model/rewriteaction.h - model/rewriteactioncompressor.cpp - model/rewriteactioncompressor.h - model/rewriterview.cpp - model/signalhandlerproperty.cpp - model/stylesheetmerger.cpp - model/textmodifier.cpp - model/texttomodelmerger.cpp - model/texttomodelmerger.h - model/variantproperty.cpp - - pluginmanager/widgetpluginmanager.cpp - pluginmanager/widgetpluginmanager.h - pluginmanager/widgetpluginpath.cpp - pluginmanager/widgetpluginpath.h - - projectstorage/projectstorage.cpp - projectstorage/projectstorage.h - ) - - extend_qtc_target(${target_name} - SOURCES_PREFIX ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../../../share/qtcreator/qml/qmlpuppet - INCLUDES - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../../../share/qtcreator/qml/qmlpuppet/commands - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../../../share/qtcreator/qml/qmlpuppet/container - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../../../share/qtcreator/qml/qmlpuppet/interfaces - ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../../../share/qtcreator/qml/qmlpuppet/types - SOURCES - commands/captureddatacommand.h - commands/changeauxiliarycommand.cpp - commands/changeauxiliarycommand.h - commands/changebindingscommand.cpp - commands/changebindingscommand.h - commands/changefileurlcommand.cpp - commands/changefileurlcommand.h - commands/changeidscommand.cpp - commands/changeidscommand.h - commands/changelanguagecommand.cpp - commands/changelanguagecommand.h - commands/changenodesourcecommand.cpp - commands/changenodesourcecommand.h - commands/changepreviewimagesizecommand.cpp - commands/changepreviewimagesizecommand.h - commands/changeselectioncommand.cpp - commands/changeselectioncommand.h - commands/changestatecommand.cpp - commands/changestatecommand.h - commands/changevaluescommand.cpp - commands/changevaluescommand.h - commands/childrenchangedcommand.cpp - commands/childrenchangedcommand.h - commands/clearscenecommand.cpp - commands/clearscenecommand.h - commands/completecomponentcommand.cpp - commands/completecomponentcommand.h - commands/componentcompletedcommand.cpp - commands/componentcompletedcommand.h - commands/createinstancescommand.cpp - commands/createinstancescommand.h - commands/createscenecommand.cpp - commands/createscenecommand.h - commands/debugoutputcommand.cpp - commands/debugoutputcommand.h - commands/endpuppetcommand.cpp - commands/endpuppetcommand.h - commands/informationchangedcommand.cpp - commands/informationchangedcommand.h - commands/nanotracecommand.cpp - commands/nanotracecommand.h - commands/inputeventcommand.cpp - commands/inputeventcommand.h - commands/pixmapchangedcommand.cpp - commands/pixmapchangedcommand.h - commands/puppetalivecommand.cpp - commands/puppetalivecommand.h - commands/puppettocreatorcommand.cpp - commands/puppettocreatorcommand.h - commands/removeinstancescommand.cpp - commands/removeinstancescommand.h - commands/removepropertiescommand.cpp - commands/removepropertiescommand.h - commands/removesharedmemorycommand.cpp - commands/removesharedmemorycommand.h - commands/reparentinstancescommand.cpp - commands/reparentinstancescommand.h - commands/requestmodelnodepreviewimagecommand.cpp - commands/requestmodelnodepreviewimagecommand.h - commands/scenecreatedcommand.h - commands/statepreviewimagechangedcommand.cpp - commands/statepreviewimagechangedcommand.h - commands/synchronizecommand.h - commands/tokencommand.cpp - commands/tokencommand.h - commands/update3dviewstatecommand.cpp - commands/update3dviewstatecommand.h - commands/valueschangedcommand.cpp - commands/valueschangedcommand.h - commands/view3dactioncommand.cpp - commands/view3dactioncommand.h - - container/addimportcontainer.cpp - container/addimportcontainer.h - container/idcontainer.cpp - container/idcontainer.h - container/imagecontainer.cpp - container/imagecontainer.h - container/informationcontainer.cpp - container/informationcontainer.h - container/instancecontainer.cpp - container/instancecontainer.h - container/mockuptypecontainer.cpp - container/mockuptypecontainer.h - container/propertyabstractcontainer.cpp - container/propertyabstractcontainer.h - container/propertybindingcontainer.cpp - container/propertybindingcontainer.h - container/propertyvaluecontainer.cpp - container/propertyvaluecontainer.h - container/reparentcontainer.cpp - container/reparentcontainer.h - container/sharedmemory.h - - interfaces/commondefines.h - interfaces/nodeinstanceclientinterface.h - interfaces/nodeinstanceglobal.h - interfaces/nodeinstanceserverinterface.cpp - interfaces/nodeinstanceserverinterface.h - - types/enumeration.h - ) - - extend_qtc_target(${target_name} - CONDITION UNIX - SOURCES_PREFIX ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../../../share/qtcreator/qml/qmlpuppet/container - SOURCES sharedmemory_unix.cpp - ) - - extend_qtc_target(${target_name} - CONDITION UNIX AND NOT APPLE - DEPENDS rt - ) - - extend_qtc_target(${target_name} - CONDITION NOT UNIX - SOURCES_PREFIX ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../../../share/qtcreator/qml/qmlpuppet/container - SOURCES sharedmemory_qt.cpp - ) - - set(export_symbol_declaration DEFINES QMLDESIGNER_LIBRARY) - if (QTC_STATIC_BUILD) - set(export_symbol_declaration PUBLIC_DEFINES QMLDESIGNER_STATIC_LIBRARY) - endif() - extend_qtc_target(${target_name} ${export_symbol_declaration}) - -endfunction() - -file(GLOB PROJECTSTORAGE_EXCLUDED_SOURCES designercore/projectstorage/*.cpp) -set_property(SOURCE ${PROJECTSTORAGE_EXCLUDED_SOURCES} PROPERTY SKIP_AUTOMOC ON) - diff --git a/src/plugins/qmldesigner/qmldesignerexternaldependencies.cpp b/src/plugins/qmldesigner/qmldesignerexternaldependencies.cpp new file mode 100644 index 00000000000..d49bdc54810 --- /dev/null +++ b/src/plugins/qmldesigner/qmldesignerexternaldependencies.cpp @@ -0,0 +1,223 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 + +#include "qmldesignerexternaldependencies.h" + +#include "qmldesignerplugin.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +namespace QmlDesigner { + +double ExternalDependencies::formEditorDevicePixelRatio() const +{ + return QmlDesignerPlugin::formEditorDevicePixelRatio(); +} + +QString ExternalDependencies::defaultPuppetFallbackDirectory() const +{ + if (Utils::HostOsInfo::isMacHost()) + return Core::ICore::libexecPath("qmldesigner").toString(); + else + return Core::ICore::libexecPath().toString(); +} + +QString ExternalDependencies::qmlPuppetFallbackDirectory() const +{ + QString puppetFallbackDirectory = m_designerSettings + .value(DesignerSettingsKey::PUPPET_DEFAULT_DIRECTORY) + .toString(); + if (puppetFallbackDirectory.isEmpty() || !QFileInfo::exists(puppetFallbackDirectory)) + return defaultPuppetFallbackDirectory(); + return puppetFallbackDirectory; +} + +QString ExternalDependencies::defaultPuppetToplevelBuildDirectory() const +{ + return Core::ICore::userResourcePath("qmlpuppet/").toString(); +} + +QUrl ExternalDependencies::projectUrl() const +{ + DesignDocument *document = QmlDesignerPlugin::instance()->viewManager().currentDesignDocument(); + if (document) + return QUrl::fromLocalFile(document->projectFolder().toString()); + + return {}; +} + +QString ExternalDependencies::currentProjectDirPath() const +{ + return QmlDesignerPlugin::instance()->documentManager().currentProjectDirPath().toString(); +} + +QList ExternalDependencies::designerSettingsEdit3DViewBackgroundColor() const +{ + return Edit3DViewConfig::load(DesignerSettingsKey::EDIT3DVIEW_BACKGROUND_COLOR); +} + +QColor ExternalDependencies::designerSettingsEdit3DViewGridColor() const +{ + QList gridColorList = Edit3DViewConfig::load(DesignerSettingsKey::EDIT3DVIEW_GRID_COLOR); + if (!gridColorList.isEmpty()) + return gridColorList.front(); + + return {}; +} + +QUrl ExternalDependencies::currentResourcePath() const +{ + return QUrl::fromLocalFile( + QmlDesigner::DocumentManager::currentResourcePath().toFileInfo().absoluteFilePath()); +} + +void ExternalDependencies::parseItemLibraryDescriptions() {} + +const DesignerSettings &ExternalDependencies::designerSettings() const +{ + return m_designerSettings; +} + +void ExternalDependencies::undoOnCurrentDesignDocument() +{ + QmlDesignerPlugin::instance()->currentDesignDocument()->undo(); +} + +bool ExternalDependencies::viewManagerUsesRewriterView(RewriterView *view) const +{ + return QmlDesignerPlugin::instance()->viewManager().usesRewriterView(view); +} + +void ExternalDependencies::viewManagerDiableWidgets() +{ + QmlDesignerPlugin::instance()->viewManager().disableWidgets(); +} + +QString ExternalDependencies::itemLibraryImportUserComponentsTitle() const +{ + return ItemLibraryImport::userComponentsTitle(); +} + +bool ExternalDependencies::isQt6Import() const +{ + auto target = ProjectExplorer::SessionManager::startupTarget(); + if (target) { + QtSupport::QtVersion *currentQtVersion = QtSupport::QtKitAspect::qtVersion(target->kit()); + if (currentQtVersion && currentQtVersion->isValid()) { + return currentQtVersion->qtVersion().majorVersion() != 6; + } + } + + return false; +} + +bool ExternalDependencies::hasStartupTarget() const +{ + auto target = ProjectExplorer::SessionManager::startupTarget(); + if (target) { + QtSupport::QtVersion *currentQtVersion = QtSupport::QtKitAspect::qtVersion(target->kit()); + if (currentQtVersion && currentQtVersion->isValid()) { + return true; + } + } + + return false; +} + +namespace { +Utils::FilePath defaultPuppetFallbackDirectory() +{ + if (Utils::HostOsInfo::isMacHost()) + return Core::ICore::libexecPath("qmldesigner"); + + return Core::ICore::libexecPath(); +} + +Utils::FilePath qmlPuppetFallbackDirectory(const DesignerSettings &settings) +{ + auto puppetFallbackDirectory = Utils::FilePath::fromString( + settings.value(DesignerSettingsKey::PUPPET_DEFAULT_DIRECTORY).toString()); + if (puppetFallbackDirectory.isEmpty() || !puppetFallbackDirectory.exists()) + return defaultPuppetFallbackDirectory(); + return puppetFallbackDirectory; +} + +Utils::FilePath workingDirectoryForKitPuppet(ProjectExplorer::Target *target) +{ + if (!target || !target->kit()) + return {}; + + QtSupport::QtVersion *currentQtVersion = QtSupport::QtKitAspect::qtVersion(target->kit()); + + if (currentQtVersion) + return currentQtVersion->binPath(); + + return {}; +} + +Utils::FilePath qmlPuppetWorkingDirectory(ProjectExplorer::Target *target, + const DesignerSettings &settings) +{ + auto path = workingDirectoryForKitPuppet(target); + + if (path.isEmpty()) + return qmlPuppetFallbackDirectory(settings); + + return path; +} + +QString qmlPuppetExecutablePath(const Utils::FilePath &workingDirectory) +{ + return workingDirectory.pathAppended("qml2puppet").withExecutableSuffix().toString(); +} + +bool isForcingFreeType(ProjectExplorer::Target *target) +{ + if (Utils::HostOsInfo::isWindowsHost() && target) { + const QVariant customData = target->additionalData("CustomForceFreeType"); + + if (customData.isValid()) + return customData.toBool(); + } + + return false; +} + +QString createFreeTypeOption(ProjectExplorer::Target *target) +{ + if (isForcingFreeType(target)) + return "-platform windows:fontengine=freetype"; + + return {}; +} + +} // namespace + +PuppetStartData ExternalDependencies::puppetStartData(const Model &model) const +{ + PuppetStartData data; + auto target = ProjectExplorer::SessionManager::startupTarget(); + auto workingDirectory = qmlPuppetWorkingDirectory(target, m_designerSettings); + + data.puppetPath = qmlPuppetExecutablePath(workingDirectory); + data.workingDirectoryPath = workingDirectory.toString(); + data.environment = PuppetEnvironmentBuilder::createEnvironment(target, m_designerSettings, model); + data.debugPuppet = m_designerSettings.value(DesignerSettingsKey::DEBUG_PUPPET).toString(); + data.freeTypeOption = createFreeTypeOption(target); + data.forwardOutput = m_designerSettings.value(DesignerSettingsKey::FORWARD_PUPPET_OUTPUT).toString(); + + return data; +} + +} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/qmldesignerexternaldependencies.h b/src/plugins/qmldesigner/qmldesignerexternaldependencies.h new file mode 100644 index 00000000000..40c4f9d2f33 --- /dev/null +++ b/src/plugins/qmldesigner/qmldesignerexternaldependencies.h @@ -0,0 +1,42 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 + +#pragma once + +#include "designersettings.h" + +#include + +namespace QmlDesigner { + +class ExternalDependencies : public ExternalDependenciesInterface +{ +public: + ExternalDependencies(const DesignerSettings &designerSettings) + : m_designerSettings(designerSettings) + {} + + double formEditorDevicePixelRatio() const override; + QString defaultPuppetFallbackDirectory() const override; + QString qmlPuppetFallbackDirectory() const override; + QString defaultPuppetToplevelBuildDirectory() const override; + QUrl projectUrl() const override; + QString currentProjectDirPath() const override; + QList designerSettingsEdit3DViewBackgroundColor() const override; + QColor designerSettingsEdit3DViewGridColor() const override; + QUrl currentResourcePath() const override; + void parseItemLibraryDescriptions() override; + const DesignerSettings &designerSettings() const override; + void undoOnCurrentDesignDocument() override; + bool viewManagerUsesRewriterView(RewriterView *view) const override; + void viewManagerDiableWidgets() override; + QString itemLibraryImportUserComponentsTitle() const override; + bool isQt6Import() const override; + bool hasStartupTarget() const override; + PuppetStartData puppetStartData(const class Model &model) const override; + +private: + const DesignerSettings &m_designerSettings; +}; + +} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index 0decbcace86..179131b4851 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -10,21 +10,23 @@ #include "nodeinstanceview.h" #include "openuiqmlfiledialog.h" #include "qmldesignerconstants.h" +#include "qmldesignerexternaldependencies.h" #include "qmldesignerprojectmanager.h" #include "quick2propertyeditorview.h" #include "settingspage.h" -#include -#include -#include #include +#include #include +#include +#include #include +#include +#include +#include #include #include #include -#include -#include #include #include @@ -114,11 +116,12 @@ class QmlDesignerPluginPrivate { public: DesignerSettings settings{Core::ICore::instance()->settings()}; - QmlDesignerProjectManager projectManager; - ViewManager viewManager{projectManager.asynchronousImageCache()}; - DocumentManager documentManager{projectManager}; + ExternalDependencies externalDependencies{settings}; + QmlDesignerProjectManager projectManager{externalDependencies}; + ViewManager viewManager{projectManager.asynchronousImageCache(), externalDependencies}; + DocumentManager documentManager{projectManager, externalDependencies}; ShortCutManager shortCutManager; - SettingsPage settingsPage; + SettingsPage settingsPage{externalDependencies}; DesignModeWidget mainWidget; QtQuickDesignerFactory m_qtQuickDesignerFactory; bool blockEditorChange = false; @@ -287,25 +290,29 @@ bool QmlDesignerPlugin::delayedInitialize() }); MetaInfo::setPluginPaths(pluginPaths); - d->viewManager.registerView(std::make_unique()); + d->viewManager.registerView( + std::make_unique(d->externalDependencies)); - auto timelineView = d->viewManager.registerView(std::make_unique()); + auto timelineView = d->viewManager.registerView( + std::make_unique(d->externalDependencies)); timelineView->registerActions(); - d->viewManager.registerView(std::make_unique()); + d->viewManager.registerView( + std::make_unique(d->externalDependencies)); auto eventlistView = d->viewManager.registerView( - std::make_unique()); + std::make_unique(d->externalDependencies)); eventlistView->registerActions(); auto transitionEditorView = d->viewManager.registerView( - std::make_unique()); + std::make_unique(d->externalDependencies)); transitionEditorView->registerActions(); d->viewManager.registerFormEditorTool(std::make_unique()); d->viewManager.registerFormEditorTool(std::make_unique()); d->viewManager.registerFormEditorTool(std::make_unique()); - d->viewManager.registerFormEditorTool(std::make_unique()); + d->viewManager.registerFormEditorTool( + std::make_unique(d->externalDependencies)); d->viewManager.registerFormEditorTool(std::make_unique()); if (QmlProjectManager::QmlProject::isQtDesignStudio()) { @@ -729,12 +736,7 @@ const DocumentManager &QmlDesignerPlugin::documentManager() const ViewManager &QmlDesignerPlugin::viewManager() { - return d->viewManager; -} - -const ViewManager &QmlDesignerPlugin::viewManager() const -{ - return d->viewManager; + return instance()->d->viewManager; } DesignerActionManager &QmlDesignerPlugin::designerActionManager() @@ -747,7 +749,12 @@ const DesignerActionManager &QmlDesignerPlugin::designerActionManager() const return d->viewManager.designerActionManager(); } -DesignerSettings& QmlDesignerPlugin::settings() +ExternalDependenciesInterface &QmlDesignerPlugin::externalDependenciesForPluginInitializationOnly() +{ + return instance()->d->externalDependencies; +} + +DesignerSettings &QmlDesignerPlugin::settings() { return instance()->d->settings; } diff --git a/src/plugins/qmldesigner/qmldesignerplugin.h b/src/plugins/qmldesigner/qmldesignerplugin.h index d34e0ae1c3c..e0782efd47e 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.h +++ b/src/plugins/qmldesigner/qmldesignerplugin.h @@ -3,15 +3,16 @@ #pragma once -#include +#include "documentmanager.h" +#include "qmldesigner_global.h" +#include "shortcutmanager.h" + +#include +#include #include #include -#include "documentmanager.h" -#include "viewmanager.h" -#include "shortcutmanager.h" -#include #include @@ -25,10 +26,11 @@ namespace QmlDesigner { class QmlDesignerPluginPrivate; class AsynchronousImageCache; +class ExternalDependenciesInterface; namespace Internal { class DesignModeWidget; } -class QMLDESIGNERCORE_EXPORT QmlDesignerPlugin final : public ExtensionSystem::IPlugin +class QMLDESIGNER_EXPORT QmlDesignerPlugin final : public ExtensionSystem::IPlugin { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "QmlDesigner.json") @@ -47,13 +49,13 @@ public: DocumentManager &documentManager(); const DocumentManager &documentManager() const; - ViewManager &viewManager(); - const ViewManager &viewManager() const; + static ViewManager &viewManager(); DesignerActionManager &designerActionManager(); const DesignerActionManager &designerActionManager() const; - static DesignerSettings& settings(); + static DesignerSettings &settings(); + static ExternalDependenciesInterface &externalDependenciesForPluginInitializationOnly(); // if you use it your code smells DesignDocument *currentDesignDocument() const; Internal::DesignModeWidget *mainWidget() const; diff --git a/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp b/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp index 4e4ab0ea23f..f9c925479b2 100644 --- a/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp +++ b/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp @@ -97,6 +97,12 @@ auto makeCollecterDispatcherChain(ImageCacheCollector &nodeInstanceCollector, class QmlDesignerProjectManager::ImageCacheData { +public: + ImageCacheData(ExternalDependenciesInterface &externalDependencies) + : meshImageCollector{connectionManager, QSize{300, 300}, QSize{600, 600}, externalDependencies} + , nodeInstanceCollector{connectionManager, QSize{300, 300}, QSize{600, 600}, externalDependencies} + {} + public: Sqlite::Database database{Utils::PathString{ Core::ICore::cacheResourcePath("imagecache-v2.db").toString()}, @@ -104,8 +110,8 @@ public: Sqlite::LockingMode::Normal}; ImageCacheStorage storage{database}; ImageCacheConnectionManager connectionManager; - MeshImageCacheCollector meshImageCollector{connectionManager, QSize{300, 300}, QSize{600, 600}}; - ImageCacheCollector nodeInstanceCollector{connectionManager, QSize{300, 300}, QSize{600, 600}}; + MeshImageCacheCollector meshImageCollector; + ImageCacheCollector nodeInstanceCollector; ImageCacheDispatchCollector dispatchCollector{makeCollecterDispatcherChain(nodeInstanceCollector, meshImageCollector)}; @@ -116,6 +122,15 @@ public: class QmlDesignerProjectManager::PreviewImageCacheData { +public: + PreviewImageCacheData(ExternalDependenciesInterface &externalDependencies) + : collector{connectionManager, + QSize{300, 300}, + QSize{1000, 1000}, + externalDependencies, + ImageCacheCollectorNullImageHandling::DontCaptureNullImage} + {} + public: Sqlite::Database database{Utils::PathString{ Core::ICore::cacheResourcePath("previewcache.db").toString()}, @@ -123,10 +138,7 @@ public: Sqlite::LockingMode::Normal}; ImageCacheStorage storage{database}; ImageCacheConnectionManager connectionManager; - ImageCacheCollector collector{connectionManager, - QSize{300, 300}, - QSize{1000, 1000}, - ImageCacheCollectorNullImageHandling::DontCaptureNullImage}; + ImageCacheCollector collector; PreviewTimeStampProvider timeStampProvider; AsynchronousExplicitImageCache cache{storage}; AsynchronousImageFactory factory{storage, timeStampProvider, collector}; @@ -154,24 +166,28 @@ class QmlDesignerProjectManager::QmlDesignerProjectManagerProjectData { public: QmlDesignerProjectManagerProjectData(ImageCacheStorage &storage, - ::ProjectExplorer::Project *project) - : factory{storage, timeStampProvider, collector} + ::ProjectExplorer::Project *project, + ExternalDependenciesInterface &externalDependencies) + : collector{connectionManager, + QSize{300, 300}, + QSize{1000, 1000}, + externalDependencies, + ImageCacheCollectorNullImageHandling::DontCaptureNullImage} + , factory{storage, timeStampProvider, collector} , projectStorageData{project} {} ImageCacheConnectionManager connectionManager; - ImageCacheCollector collector{connectionManager, - QSize{300, 300}, - QSize{1000, 1000}, - ImageCacheCollectorNullImageHandling::DontCaptureNullImage}; + ImageCacheCollector collector; PreviewTimeStampProvider timeStampProvider; AsynchronousImageFactory factory; ProjectStorageData projectStorageData; QPointer<::ProjectExplorer::Target> activeTarget; }; -QmlDesignerProjectManager::QmlDesignerProjectManager() - : m_previewImageCacheData{std::make_unique()} +QmlDesignerProjectManager::QmlDesignerProjectManager(ExternalDependenciesInterface &externalDependencies) + : m_previewImageCacheData{std::make_unique(externalDependencies)} + , m_externalDependencies{externalDependencies} { auto editorManager = ::Core::EditorManager::instance(); QObject::connect(editorManager, &::Core::EditorManager::editorOpened, [&](auto *editor) { @@ -351,8 +367,8 @@ QStringList qmlTypes(::ProjectExplorer::Target *target) void QmlDesignerProjectManager::projectAdded(::ProjectExplorer::Project *project) { if (qEnvironmentVariableIsSet("QDS_ACTIVATE_PROJECT_STORAGE")) { - m_projectData = std::make_unique(m_previewImageCacheData->storage, - project); + m_projectData = std::make_unique( + m_previewImageCacheData->storage, project, m_externalDependencies); m_projectData->activeTarget = project->activeTarget(); QObject::connect(project, &::ProjectExplorer::Project::fileListChanged, [&]() { @@ -385,7 +401,7 @@ void QmlDesignerProjectManager::projectRemoved(::ProjectExplorer::Project *) {} QmlDesignerProjectManager::ImageCacheData *QmlDesignerProjectManager::imageCacheData() { std::call_once(imageCacheFlag, [this]() { - m_imageCacheData = std::make_unique(); + m_imageCacheData = std::make_unique(m_externalDependencies); auto setTargetInImageCache = [imageCacheData = m_imageCacheData.get()](ProjectExplorer::Target *target) { if (target == imageCacheData->nodeInstanceCollector.target()) diff --git a/src/plugins/qmldesigner/qmldesignerprojectmanager.h b/src/plugins/qmldesigner/qmldesignerprojectmanager.h index b4cc14309ba..51ffb6755ab 100644 --- a/src/plugins/qmldesigner/qmldesignerprojectmanager.h +++ b/src/plugins/qmldesigner/qmldesignerprojectmanager.h @@ -24,6 +24,8 @@ class Target; namespace QmlDesigner { +class ExternalDependenciesInterface; + class QmlDesignerProjectManager : public QObject { Q_OBJECT @@ -33,7 +35,7 @@ class QmlDesignerProjectManager : public QObject class ImageCacheData; public: - QmlDesignerProjectManager(); + QmlDesignerProjectManager(ExternalDependenciesInterface &externalDependencies); ~QmlDesignerProjectManager(); void registerPreviewImageProvider(QQmlEngine *engine) const; @@ -64,5 +66,6 @@ private: std::unique_ptr m_imageCacheData; std::unique_ptr m_previewImageCacheData; std::unique_ptr m_projectData; + ExternalDependenciesInterface &m_externalDependencies; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewactions.cpp b/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewactions.cpp index 313a3315bd1..97f1a695938 100644 --- a/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewactions.cpp +++ b/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewactions.cpp @@ -4,8 +4,9 @@ #include "qmlpreviewplugin.h" #include "qmlpreviewactions.h" -#include +#include #include +#include #include diff --git a/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewplugin.cpp b/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewplugin.cpp index 5bd678db885..0b526338de7 100644 --- a/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewplugin.cpp +++ b/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewplugin.cpp @@ -4,12 +4,13 @@ #include "qmlpreviewplugin.h" #include "qmlpreviewactions.h" -#include -#include -#include -#include #include +#include +#include +#include +#include #include +#include #include #include diff --git a/src/plugins/qmldesigner/settingspage.cpp b/src/plugins/qmldesigner/settingspage.cpp index 060a5627887..02e775c5987 100644 --- a/src/plugins/qmldesigner/settingspage.cpp +++ b/src/plugins/qmldesigner/settingspage.cpp @@ -2,10 +2,10 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 #include "settingspage.h" -#include "qmldesignerconstants.h" -#include "qmldesignerplugin.h" #include "designersettings.h" -#include "puppetcreator.h" +#include "qmldesignerconstants.h" +#include "qmldesignerexternaldependencies.h" +#include "qmldesignerplugin.h" #include "ui_settingspage.h" #include @@ -37,7 +37,7 @@ class SettingsPageWidget final : public Core::IOptionsPageWidget Q_DECLARE_TR_FUNCTIONS(QmlDesigner::Internal::SettingsPage) public: - explicit SettingsPageWidget(); + explicit SettingsPageWidget(ExternalDependencies &externalDependencies); void apply() final; @@ -46,9 +46,11 @@ public: private: Ui::SettingsPage m_ui; + ExternalDependencies &m_externalDependencies; }; -SettingsPageWidget::SettingsPageWidget() +SettingsPageWidget::SettingsPageWidget(ExternalDependencies &externalDependencies) + : m_externalDependencies(externalDependencies) { m_ui.setupUi(this); @@ -57,18 +59,16 @@ SettingsPageWidget::SettingsPageWidget() m_ui.designerShowDebuggerCheckBox->setChecked(true); } ); - connect(m_ui.resetFallbackPuppetPathButton, &QPushButton::clicked, [=]() { - m_ui.fallbackPuppetPathLineEdit->setPath( - PuppetCreator::defaultPuppetFallbackDirectory()); - } - ); - m_ui.fallbackPuppetPathLineEdit->lineEdit()->setPlaceholderText(PuppetCreator::defaultPuppetFallbackDirectory()); + connect(m_ui.resetFallbackPuppetPathButton, &QPushButton::clicked, [&]() { + m_ui.fallbackPuppetPathLineEdit->setPath(externalDependencies.defaultPuppetFallbackDirectory()); + }); + m_ui.fallbackPuppetPathLineEdit->lineEdit()->setPlaceholderText( + externalDependencies.defaultPuppetFallbackDirectory()); - connect(m_ui.resetQmlPuppetBuildPathButton, &QPushButton::clicked, [=]() { + connect(m_ui.resetQmlPuppetBuildPathButton, &QPushButton::clicked, [&]() { m_ui.puppetBuildPathLineEdit->setPath( - PuppetCreator::defaultPuppetToplevelBuildDirectory()); - } - ); + externalDependencies.defaultPuppetToplevelBuildDirectory()); + }); connect(m_ui.useDefaultPuppetRadioButton, &QRadioButton::toggled, m_ui.fallbackPuppetPathLineEdit, &QLineEdit::setEnabled); connect(m_ui.useQtRelatedPuppetRadioButton, &QRadioButton::toggled, @@ -128,15 +128,15 @@ QHash SettingsPageWidget::newSettings() const m_ui.debugPuppetComboBox->currentText()); QString newFallbackPuppetPath = m_ui.fallbackPuppetPathLineEdit->filePath().toString(); - QTC_CHECK(PuppetCreator::defaultPuppetFallbackDirectory() == - m_ui.fallbackPuppetPathLineEdit->lineEdit()->placeholderText()); + QTC_CHECK(m_externalDependencies.defaultPuppetFallbackDirectory() + == m_ui.fallbackPuppetPathLineEdit->lineEdit()->placeholderText()); if (newFallbackPuppetPath.isEmpty()) newFallbackPuppetPath = m_ui.fallbackPuppetPathLineEdit->lineEdit()->placeholderText(); - QString oldFallbackPuppetPath = PuppetCreator::qmlPuppetFallbackDirectory(QmlDesignerPlugin::settings()); + QString oldFallbackPuppetPath = m_externalDependencies.qmlPuppetFallbackDirectory(); if (oldFallbackPuppetPath != newFallbackPuppetPath && QFileInfo::exists(newFallbackPuppetPath)) { - if (newFallbackPuppetPath == PuppetCreator::defaultPuppetFallbackDirectory()) + if (newFallbackPuppetPath == m_externalDependencies.defaultPuppetFallbackDirectory()) settings.insert(DesignerSettingsKey::PUPPET_DEFAULT_DIRECTORY, QString()); else settings.insert(DesignerSettingsKey::PUPPET_DEFAULT_DIRECTORY, newFallbackPuppetPath); @@ -144,8 +144,9 @@ QHash SettingsPageWidget::newSettings() const settings.insert(DesignerSettingsKey::PUPPET_DEFAULT_DIRECTORY, QString()); } - if (!m_ui.puppetBuildPathLineEdit->filePath().isEmpty() && - m_ui.puppetBuildPathLineEdit->filePath().toString() != PuppetCreator::defaultPuppetToplevelBuildDirectory()) { + if (!m_ui.puppetBuildPathLineEdit->filePath().isEmpty() + && m_ui.puppetBuildPathLineEdit->filePath().toString() + != m_externalDependencies.defaultPuppetToplevelBuildDirectory()) { settings.insert(DesignerSettingsKey::PUPPET_TOPLEVEL_BUILD_DIRECTORY, m_ui.puppetBuildPathLineEdit->filePath().toString()); } @@ -168,8 +169,7 @@ QHash SettingsPageWidget::newSettings() const void SettingsPageWidget::setSettings(const DesignerSettings &settings) { - m_ui.spinItemSpacing->setValue(settings.value( - DesignerSettingsKey::ITEMSPACING).toInt()); + m_ui.spinItemSpacing->setValue(settings.value(DesignerSettingsKey::ITEMSPACING).toInt()); m_ui.spinSnapMargin->setValue(settings.value( DesignerSettingsKey::CONTAINERPADDING).toInt()); m_ui.spinCanvasWidth->setValue(settings.value( @@ -203,14 +203,17 @@ void SettingsPageWidget::setSettings(const DesignerSettings &settings) m_ui.styleLineEdit->setText(settings.value( DesignerSettingsKey::CONTROLS_STYLE).toString()); - QString puppetFallbackDirectory = settings.value( - DesignerSettingsKey::PUPPET_DEFAULT_DIRECTORY, - PuppetCreator::defaultPuppetFallbackDirectory()).toString(); + QString puppetFallbackDirectory = settings + .value(DesignerSettingsKey::PUPPET_DEFAULT_DIRECTORY, + m_externalDependencies.defaultPuppetFallbackDirectory()) + .toString(); m_ui.fallbackPuppetPathLineEdit->setPath(puppetFallbackDirectory); - QString puppetToplevelBuildDirectory = settings.value( - DesignerSettingsKey::PUPPET_TOPLEVEL_BUILD_DIRECTORY, - PuppetCreator::defaultPuppetToplevelBuildDirectory()).toString(); + QString puppetToplevelBuildDirectory = settings + .value(DesignerSettingsKey::PUPPET_TOPLEVEL_BUILD_DIRECTORY, + m_externalDependencies + .defaultPuppetToplevelBuildDirectory()) + .toString(); m_ui.puppetBuildPathLineEdit->setPath(puppetToplevelBuildDirectory); m_ui.forwardPuppetOutputComboBox->setCurrentText(settings.value( @@ -275,12 +278,12 @@ void SettingsPageWidget::apply() QmlDesignerPlugin::settings().insert(settings); } -SettingsPage::SettingsPage() +SettingsPage::SettingsPage(ExternalDependencies &externalDependencies) { setId("B.QmlDesigner"); setDisplayName(SettingsPageWidget::tr("Qt Quick Designer")); setCategory(QmlJSEditor::Constants::SETTINGS_CATEGORY_QML); - setWidgetCreator([] { return new SettingsPageWidget; }); + setWidgetCreator([&] { return new SettingsPageWidget(externalDependencies); }); } } // Internal diff --git a/src/plugins/qmldesigner/settingspage.h b/src/plugins/qmldesigner/settingspage.h index 0f48bdc3445..42a338f890f 100644 --- a/src/plugins/qmldesigner/settingspage.h +++ b/src/plugins/qmldesigner/settingspage.h @@ -6,12 +6,14 @@ #include namespace QmlDesigner { +class ExternalDependencies; + namespace Internal { class SettingsPage final : public Core::IOptionsPage { public: - SettingsPage(); + SettingsPage(ExternalDependencies &externalDependencies); }; } // namespace Internal diff --git a/src/plugins/qmldesigner/shortcutmanager.cpp b/src/plugins/qmldesigner/shortcutmanager.cpp index 8bf3f47baa2..22f91f95438 100644 --- a/src/plugins/qmldesigner/shortcutmanager.cpp +++ b/src/plugins/qmldesigner/shortcutmanager.cpp @@ -3,7 +3,7 @@ #include "shortcutmanager.h" -#include "designersettings.h" +#include #include #include diff --git a/src/plugins/qmldesigner/designersettings.cpp b/src/plugins/qmldesigner/utils/designersettings.cpp similarity index 100% rename from src/plugins/qmldesigner/designersettings.cpp rename to src/plugins/qmldesigner/utils/designersettings.cpp diff --git a/src/plugins/qmldesigner/designersettings.h b/src/plugins/qmldesigner/utils/designersettings.h similarity index 97% rename from src/plugins/qmldesigner/designersettings.h rename to src/plugins/qmldesigner/utils/designersettings.h index 4f2543536d0..32fd7dd2987 100644 --- a/src/plugins/qmldesigner/designersettings.h +++ b/src/plugins/qmldesigner/utils/designersettings.h @@ -3,7 +3,7 @@ #pragma once -#include +#include "qmldesignerutils_global.h" #include #include @@ -56,7 +56,7 @@ const char SMOOTH_RENDERING[] = "SmoothRendering"; const char OLD_STATES_EDITOR[] = "OldStatesEditor"; } -class QMLDESIGNERCORE_EXPORT DesignerSettings +class QMLDESIGNERUTILS_EXPORT DesignerSettings { public: DesignerSettings(QSettings *settings); @@ -68,6 +68,7 @@ public: private: void fromSettings(QSettings *); void toSettings(QSettings *) const; + void restoreValue(QSettings *settings, const QByteArray &key, const QVariant &defaultValue = QVariant()); void storeValue(QSettings *settings, const QByteArray &key, const QVariant &value) const; diff --git a/src/plugins/qmldesigner/components/componentcore/hdrimage.cpp b/src/plugins/qmldesigner/utils/hdrimage.cpp similarity index 100% rename from src/plugins/qmldesigner/components/componentcore/hdrimage.cpp rename to src/plugins/qmldesigner/utils/hdrimage.cpp diff --git a/src/plugins/qmldesigner/components/componentcore/hdrimage.h b/src/plugins/qmldesigner/utils/hdrimage.h similarity index 87% rename from src/plugins/qmldesigner/components/componentcore/hdrimage.h rename to src/plugins/qmldesigner/utils/hdrimage.h index 7d254dadc92..f4794d4c205 100644 --- a/src/plugins/qmldesigner/components/componentcore/hdrimage.h +++ b/src/plugins/qmldesigner/utils/hdrimage.h @@ -2,7 +2,7 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 #pragma once -#include +#include "qmldesignerutils_global.h" #include #include @@ -10,7 +10,7 @@ namespace QmlDesigner { -class QMLDESIGNERCORE_EXPORT HdrImage +class QMLDESIGNERUTILS_EXPORT HdrImage { public: HdrImage(const QString &fileName); diff --git a/src/plugins/qmldesigner/utils/qmldesignerutils_global.h b/src/plugins/qmldesigner/utils/qmldesignerutils_global.h new file mode 100644 index 00000000000..bb7d2cc2187 --- /dev/null +++ b/src/plugins/qmldesigner/utils/qmldesignerutils_global.h @@ -0,0 +1,14 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 + +#pragma once + +#include + +#if defined(QMLDESIGNERUTILS_LIBRARY) +#define QMLDESIGNERUTILS_EXPORT Q_DECL_EXPORT +#elif defined(QMLDESIGNERUTILS_STATIC_LIBRARY) +#define QMLDESIGNERUTILS_EXPORT +#else +#define QMLDESIGNERUTILS_EXPORT Q_DECL_IMPORT +#endif diff --git a/tests/auto/qml/qmldesigner/coretests/CMakeLists.txt b/tests/auto/qml/qmldesigner/coretests/CMakeLists.txt index 5ce2cffa82a..d7fce48ef7f 100644 --- a/tests/auto/qml/qmldesigner/coretests/CMakeLists.txt +++ b/tests/auto/qml/qmldesigner/coretests/CMakeLists.txt @@ -1,13 +1,19 @@ add_qtc_test(tst_qml_testcore EXCLUDE_FROM_PRECHECK CONDITION TARGET QmlProjectManager AND Qt5_VERSION VERSION_GREATER_EQUAL 6.2.0 - DEPENDS Sqlite + DEPENDS + Sqlite + QmlDesignerCore + Qt5::Widgets + Qt5::Qml DEFINES QT_CREATOR - QMLDESIGNER_TEST IDE_PLUGIN_PATH="${PROJECT_BINARY_DIR}/${IDE_PLUGIN_PATH}" IDE_DATA_PATH="${PROJECT_BINARY_DIR}/${IDE_DATA_PATH}" TESTSRCDIR="${CMAKE_CURRENT_SOURCE_DIR}" + QMLDESIGNERCORE_STATIC_LIBRARY QMLDESIGNERUTILS_STATIC_LIBRARY + INCLUDES + "${CMAKE_CURRENT_LIST_DIR}/../../../../../share/qtcreator/qml/qmlpuppet/commands" SOURCES ../data/testfiles.qrc ../testview.cpp @@ -20,5 +26,3 @@ add_qtc_test(tst_qml_testcore ../testconnectionmanager.h ) -include(../../../../../src/plugins/qmldesigner/qmldesignercore.cmake) -extend_with_qmldesigner_core(tst_qml_testcore) diff --git a/tests/auto/qml/qmldesigner/coretests/testrewriterview.cpp b/tests/auto/qml/qmldesigner/coretests/testrewriterview.cpp index 015bb582d60..9e3866dea3e 100644 --- a/tests/auto/qml/qmldesigner/coretests/testrewriterview.cpp +++ b/tests/auto/qml/qmldesigner/coretests/testrewriterview.cpp @@ -58,8 +58,9 @@ VariantProperty TestModelToTextMerger::findAddedVariantProperty(const VariantPro return VariantProperty(); } -TestRewriterView::TestRewriterView(DifferenceHandling differenceHandling) - : RewriterView(differenceHandling) +TestRewriterView::TestRewriterView(ExternalDependenciesInterface &externalDependencies, + DifferenceHandling differenceHandling) + : RewriterView(externalDependencies, differenceHandling) { //Unit tests do not like the semantic errors setCheckSemanticErrors(false); diff --git a/tests/auto/qml/qmldesigner/coretests/testrewriterview.h b/tests/auto/qml/qmldesigner/coretests/testrewriterview.h index 20d27fe6d87..e8af846a136 100644 --- a/tests/auto/qml/qmldesigner/coretests/testrewriterview.h +++ b/tests/auto/qml/qmldesigner/coretests/testrewriterview.h @@ -26,7 +26,8 @@ class TestRewriterView : public RewriterView Q_OBJECT public: - TestRewriterView(DifferenceHandling differenceHandling = RewriterView::Validate); + TestRewriterView(ExternalDependenciesInterface &externalDependencies, + DifferenceHandling differenceHandling = RewriterView::Validate); Internal::TestModelToTextMerger *modelToTextMerger() const; Internal::TextToModelMerger *textToModelMerger() const; diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp index 0fc0e2f3445..47ea5bbc792 100644 --- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp +++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp @@ -10,19 +10,22 @@ #include #include +#include +#include +#include +#include #include #include #include #include -#include -#include -#include -#include -#include #include -#include +#include +#include #include +#include #include +#include +#include #include "../testconnectionmanager.h" #include "../testview.h" @@ -120,10 +123,52 @@ static void initializeMetaTypeSystem(const QString &resourcePath) qWarning() << qPrintable(errorAndWarning); } -static std::unique_ptr createModel(const QString &typeName, - int major = 2, - int minor = 1, - Model *metaInfoPropxyModel = 0) +namespace { + +class ExternalDependenciesFake : public QObject, public ExternalDependenciesInterface +{ +public: + ExternalDependenciesFake(Model &model) + : model{model} + {} + + double formEditorDevicePixelRatio() const override { return 1.; } + QString currentProjectDirPath() const override + { + return QFileInfo(model.fileUrl().toLocalFile()).absolutePath(); + } + + QUrl currentResourcePath() const override + { + return QUrl::fromLocalFile(QFileInfo(model.fileUrl().toLocalFile()).absolutePath()); + } + + QString defaultPuppetFallbackDirectory() const override { return {}; } + QString defaultPuppetToplevelBuildDirectory() const override { return {}; } + QString qmlPuppetFallbackDirectory() const override { return {}; } + QUrl projectUrl() const override { return {}; } + QList designerSettingsEdit3DViewBackgroundColor() const override { return {}; } + QColor designerSettingsEdit3DViewGridColor() const override { return {}; } + void parseItemLibraryDescriptions() override {} + const QmlDesigner::DesignerSettings &designerSettings() const override { return settings; } + void undoOnCurrentDesignDocument() override {} + bool viewManagerUsesRewriterView(class RewriterView *) const override { return true; } + void viewManagerDiableWidgets() override {} + QString itemLibraryImportUserComponentsTitle() const override { return {}; } + bool isQt6Import() const override { return false; } + bool hasStartupTarget() const override { return false; } + PuppetStartData puppetStartData(const class Model &) const override { return {}; } + +public: + QSettings qsettings; + QmlDesigner::DesignerSettings settings{&qsettings}; + Model &model; +}; + +std::unique_ptr createModel(const QString &typeName, + int major = 2, + int minor = 1, + Model *metaInfoPropxyModel = 0) { QApplication::processEvents(); @@ -131,25 +176,41 @@ static std::unique_ptr createModel(const QString &typeName, QPlainTextEdit *textEdit = new QPlainTextEdit; QObject::connect(model.get(), &QObject::destroyed, textEdit, &QObject::deleteLater); - textEdit->setPlainText(QString("import %1 %3.%4; %2{}").arg(typeName.split(".").first()) - .arg(typeName.split(".").last()) - .arg(major) - .arg(minor)); + textEdit->setPlainText(QString("import %1 %3.%4; %2{}") + .arg(typeName.split(".").first()) + .arg(typeName.split(".").last()) + .arg(major) + .arg(minor)); NotIndentingTextEditModifier *modifier = new NotIndentingTextEditModifier(textEdit); modifier->setParent(textEdit); - auto rewriterView = new QmlDesigner::RewriterView(QmlDesigner::RewriterView::Validate); + auto externalDependencies = new ExternalDependenciesFake{*model}; + externalDependencies->setParent(model.get()); + + auto rewriterView = new QmlDesigner::RewriterView(*externalDependencies, + QmlDesigner::RewriterView::Validate); rewriterView->setParent(model.get()); - //rewriterView->setCheckSemanticErrors(false); + rewriterView->setCheckSemanticErrors(false); rewriterView->setTextModifier(modifier); model->attachView(rewriterView); return model; - } +auto createTextRewriterView( + Model &model, RewriterView::DifferenceHandling differenceHandling = RewriterView::Amend) +{ + auto externalDependencies = new ExternalDependenciesFake{model}; + auto rewriter = std::make_unique(*externalDependencies, differenceHandling); + externalDependencies->setParent(rewriter.get()); + + return rewriter; +} + +} // namespace + tst_TestCore::tst_TestCore() : QObject() { @@ -160,6 +221,8 @@ tst_TestCore::tst_TestCore() void tst_TestCore::initTestCase() { + QmlModelNodeFacade::enableUglyWorkaroundForIsValidQmlModelNodeFacadeInTests(); + MetaInfo::disableParseItemLibraryDescriptionsUgly(); Exception::setShouldAssert(false); if (!QmlJS::ModelManagerInterface::instance()) @@ -228,9 +291,9 @@ void tst_TestCore::loadEmptyCoreModel() auto model1(Model::create("QtQuick.Item")); - QScopedPointer testRewriterView1(new TestRewriterView()); + auto testRewriterView1 = createTextRewriterView(*model1); testRewriterView1->setTextModifier(&modifier1); - model1->attachView(testRewriterView1.data()); + model1->attachView(testRewriterView1.get()); QPlainTextEdit textEdit2; textEdit2.setPlainText("import QtQuick 1.1; Item{}"); @@ -238,9 +301,9 @@ void tst_TestCore::loadEmptyCoreModel() auto model2(Model::create("QtQuick.Item")); - QScopedPointer testRewriterView2(new TestRewriterView()); + auto testRewriterView2 = createTextRewriterView(*model2); testRewriterView2->setTextModifier(&modifier2); - model2->attachView(testRewriterView2.data()); + model2->attachView(testRewriterView2.get()); QVERIFY(compareTree(testRewriterView1->rootModelNode(), testRewriterView2->rootModelNode())); } @@ -261,9 +324,9 @@ void tst_TestCore::testRewriterView2() ModelNode rootModelNode(view->rootModelNode()); QVERIFY(rootModelNode.isValid()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); while (testRewriterView->hasIncompleteTypeInformation()) { QApplication::processEvents(QEventLoop::AllEvents, 1000); @@ -321,7 +384,7 @@ void tst_TestCore::testRewriterView2() .value(), QVariant(90)); - model->detachView(testRewriterView.data()); + model->detachView(testRewriterView.get()); } catch (Exception &e) { QFAIL(qPrintable(e.description())); } @@ -341,10 +404,10 @@ void tst_TestCore::testRewriterView() auto model(Model::create("QtQuick.Item", 2, 15)); QVERIFY(model.get()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); testRewriterView->setCheckSemanticErrors(true); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); while (testRewriterView->hasIncompleteTypeInformation()) { QApplication::processEvents(QEventLoop::AllEvents, 1000); @@ -402,7 +465,7 @@ void tst_TestCore::testRewriterView() QCOMPARE(testRewriterView->modelToTextMerger()->findAddedVariantProperty(childNode.variantProperty("x")).value(), QVariant(70)); QCOMPARE(testRewriterView->modelToTextMerger()->findAddedVariantProperty(childNode.variantProperty("y")).value(), QVariant(90)); - model->detachView(testRewriterView.data()); + model->detachView(testRewriterView.get()); } catch (Exception &e) { QFAIL(qPrintable(e.description())); } @@ -423,9 +486,9 @@ void tst_TestCore::testRewriterErrors() ModelNode rootModelNode(view->rootModelNode()); QVERIFY(rootModelNode.isValid()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(testRewriterView->errors().isEmpty()); testRewriterView->setCheckSemanticErrors(true); @@ -448,9 +511,9 @@ void tst_TestCore::saveEmptyCoreModel() auto model1(Model::create("QtQuick.Item")); - QScopedPointer testRewriterView1(new TestRewriterView()); + auto testRewriterView1 = createTextRewriterView(*model1); testRewriterView1->setTextModifier(&modifier1); - model1->attachView(testRewriterView1.data()); + model1->attachView(testRewriterView1.get()); QPlainTextEdit textEdit2; textEdit2.setPlainText("import QtQuick 1.1; Item{}"); @@ -458,9 +521,9 @@ void tst_TestCore::saveEmptyCoreModel() auto model2(Model::create("QtQuick.Item")); - QScopedPointer testRewriterView2(new TestRewriterView()); + auto testRewriterView2 = createTextRewriterView(*model2); testRewriterView2->setTextModifier(&modifier2); - model2->attachView(testRewriterView2.data()); + model2->attachView(testRewriterView2.get()); QVERIFY(compareTree(testRewriterView1->rootModelNode(), testRewriterView2->rootModelNode())); } @@ -476,9 +539,9 @@ void tst_TestCore::loadAttributesInCoreModel() auto model1(Model::create("QtQuick.Item")); - QScopedPointer testRewriterView1(new TestRewriterView()); + auto testRewriterView1 = createTextRewriterView(*model1); testRewriterView1->setTextModifier(&modifier1); - model1->attachView(testRewriterView1.data()); + model1->attachView(testRewriterView1.get()); QPlainTextEdit textEdit2; textEdit2.setPlainText("import QtQuick 1.1; Item{}"); @@ -486,9 +549,9 @@ void tst_TestCore::loadAttributesInCoreModel() auto model2(Model::create("QtQuick.Item")); - QScopedPointer testRewriterView2(new TestRewriterView()); + auto testRewriterView2 = createTextRewriterView(*model2); testRewriterView2->setTextModifier(&modifier2); - model2->attachView(testRewriterView2.data()); + model2->attachView(testRewriterView2.get()); ModelNode rootModelNode = testRewriterView2->rootModelNode(); @@ -511,9 +574,9 @@ void tst_TestCore::saveAttributesInCoreModel() auto model1(Model::create("QtQuick.Item")); - QScopedPointer testRewriterView1(new TestRewriterView()); + auto testRewriterView1 = createTextRewriterView(*model1); testRewriterView1->setTextModifier(&modifier1); - model1->attachView(testRewriterView1.data()); + model1->attachView(testRewriterView1.get()); QVERIFY(testRewriterView1->errors().isEmpty()); @@ -527,9 +590,9 @@ void tst_TestCore::saveAttributesInCoreModel() auto model2(Model::create("QtQuick.Item")); - QScopedPointer testRewriterView2(new TestRewriterView()); + auto testRewriterView2 = createTextRewriterView(*model2); testRewriterView2->setTextModifier(&modifier2); - model2->attachView(testRewriterView2.data()); + model2->attachView(testRewriterView2.get()); QVERIFY(testRewriterView2->errors().isEmpty()); @@ -604,9 +667,9 @@ void tst_TestCore::testRewriterDynamicProperties() auto model1(Model::create("QtQuick.Item")); - QScopedPointer testRewriterView1(new TestRewriterView()); + auto testRewriterView1 = createTextRewriterView(*model1); testRewriterView1->setTextModifier(&modifier1); - model1->attachView(testRewriterView1.data()); + model1->attachView(testRewriterView1.get()); QVERIFY(testRewriterView1->errors().isEmpty()); @@ -699,9 +762,9 @@ void tst_TestCore::testRewriterDynamicProperties() // // auto model2(Model::create("QtQuick.Item")); // - // QScopedPointer testRewriterView2(new TestRewriterView()); + // auto testRewriterView2 = createTextRewriterView(*model2); // testRewriterView2->setTextModifier(&modifier2); - // model2->attachView(testRewriterView2.data()); + // model2->attachView(testRewriterView2.get()); // // testRewriterView2->rootModelNode().variantProperty("pushed").setDynamicTypeNameAndValue("bool", QVariant(false)); // @@ -726,9 +789,9 @@ void tst_TestCore::testRewriterGroupedProperties() auto model1(Model::create("QtQuick.Text")); - QScopedPointer testRewriterView1(new TestRewriterView()); + auto testRewriterView1 = createTextRewriterView(*model1); testRewriterView1->setTextModifier(&modifier1); - model1->attachView(testRewriterView1.data()); + model1->attachView(testRewriterView1.get()); QVERIFY(testRewriterView1->errors().isEmpty()); @@ -808,9 +871,9 @@ void tst_TestCore::testRewriterPreserveOrder() auto model(Model::create("QtQuick.Text")); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&modifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(testRewriterView->errors().isEmpty()); @@ -843,9 +906,9 @@ void tst_TestCore::testRewriterPreserveOrder() auto model(Model::create("QtQuick.Text")); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&modifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(testRewriterView->errors().isEmpty()); @@ -897,9 +960,9 @@ void tst_TestCore::testRewriterActionCompression() auto model1(Model::create("QtQuick.Rectangle")); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model1); testRewriterView->setTextModifier(&modifier1); - model1->attachView(testRewriterView.data()); + model1->attachView(testRewriterView.get()); QVERIFY(testRewriterView->errors().isEmpty()); @@ -952,9 +1015,9 @@ void tst_TestCore::testRewriterImports() auto model(Model::create("QtQuick.Item")); model->setFileUrl(QUrl::fromLocalFile(fileName)); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&modifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(testRewriterView->errors().isEmpty()); @@ -998,9 +1061,9 @@ void tst_TestCore::testRewriterChangeImports() auto model(Model::create("QtQuick.Rectangle")); - QScopedPointer testRewriterView(new TestRewriterView(RewriterView::Amend)); + auto testRewriterView = createTextRewriterView(*model, RewriterView::Amend); testRewriterView->setTextModifier(&modifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(testRewriterView->errors().isEmpty()); @@ -1082,9 +1145,9 @@ void tst_TestCore::testRewriterUnicodeChars() auto model(Model::create("QtQuick.Rectangle")); - QScopedPointer testRewriterView(new TestRewriterView(RewriterView::Amend)); + auto testRewriterView = createTextRewriterView(*model, RewriterView::Amend); testRewriterView->setTextModifier(&modifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(testRewriterView->errors().isEmpty()); @@ -1112,9 +1175,9 @@ void tst_TestCore::testRewriterTransactionAddingAfterReparenting() auto model(Model::create("QtQuick.Rectangle")); - QScopedPointer testRewriterView(new TestRewriterView(RewriterView::Amend)); + auto testRewriterView = createTextRewriterView(*model, RewriterView::Amend); testRewriterView->setTextModifier(&modifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(testRewriterView->errors().isEmpty()); @@ -1154,9 +1217,9 @@ void tst_TestCore::testRewriterReparentToNewNode() auto model(Model::create("QtQuick.Rectangle")); - QScopedPointer testRewriterView(new TestRewriterView(RewriterView::Amend)); + auto testRewriterView = createTextRewriterView(*model, RewriterView::Amend); testRewriterView->setTextModifier(&modifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(testRewriterView->errors().isEmpty()); @@ -1253,9 +1316,9 @@ void tst_TestCore::testRewriterBehaivours() auto model(Model::create("QtQuick.Rectangle")); - QScopedPointer testRewriterView(new TestRewriterView(RewriterView::Amend)); + auto testRewriterView = createTextRewriterView(*model, RewriterView::Amend); testRewriterView->setTextModifier(&modifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); //qDebug() << testRewriterView->errors().first().toString(); QVERIFY(testRewriterView->errors().isEmpty()); @@ -1356,9 +1419,9 @@ void tst_TestCore::testRewriterSignalDefinition() auto model(Model::create("QtQuick.Text")); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&modifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(testRewriterView->errors().isEmpty()); @@ -1486,9 +1549,9 @@ void tst_TestCore::testRewriterForGradientMagic() auto model(Model::create("QtQuick.Text")); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&modifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(testRewriterView->errors().isEmpty()); @@ -1506,13 +1569,13 @@ void tst_TestCore::testRewriterForGradientMagic() QScopedPointer view1(new TestView); model1->attachView(view1.data()); - QScopedPointer testRewriterView1(new TestRewriterView()); + auto testRewriterView1 = createTextRewriterView(*model1); QPlainTextEdit textEdit1; textEdit1.setPlainText("import QtQuick 2.1; Item {}"); NotIndentingTextEditModifier modifier1(&textEdit1); testRewriterView1->setTextModifier(&modifier1); - model1->attachView(testRewriterView1.data()); + model1->attachView(testRewriterView1.get()); QVERIFY(testRewriterView1->errors().isEmpty()); @@ -1562,10 +1625,10 @@ void tst_TestCore::testStatesVersionFailing() ModelNode rootModelNode(view->rootModelNode()); QVERIFY(rootModelNode.isValid()); QCOMPARE(rootModelNode.type(), QmlDesigner::TypeName("QtQuick.Item")); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(rootModelNode.isValid()); QCOMPARE(rootModelNode.type(), QmlDesigner::TypeName("QtQuick.Rectangle")); @@ -1645,9 +1708,9 @@ void tst_TestCore::loadSubItems() auto model1(Model::create("QtQuick.Item", 2, 0)); - QScopedPointer testRewriterView1(new TestRewriterView()); + auto testRewriterView1 = createTextRewriterView(*model1); testRewriterView1->setTextModifier(&modifier1); - model1->attachView(testRewriterView1.data()); + model1->attachView(testRewriterView1.get()); } void tst_TestCore::createInvalidCoreModel() @@ -1807,10 +1870,10 @@ void tst_TestCore::testBasicStates() ModelNode rootModelNode(view->rootModelNode()); QVERIFY(rootModelNode.isValid()); QCOMPARE(rootModelNode.type(), QmlDesigner::TypeName("QtQuick.Item")); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(rootModelNode.isValid()); QCOMPARE(rootModelNode.type(), QmlDesigner::TypeName("QtQuick.Rectangle")); @@ -1906,9 +1969,9 @@ void tst_TestCore::testBasicStatesQtQuick20() auto model(Model::create("QtQuick.Item")); QVERIFY(model.get()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootModelNode(testRewriterView->rootModelNode()); QVERIFY(rootModelNode.isValid()); @@ -2234,9 +2297,9 @@ void tst_TestCore::testModelNodePropertyDynamicSource() auto model(Model::create("QtQuick.Item", 2, 1)); QVERIFY(model.get()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(model.get()); ModelNode rootModelNode(testRewriterView->rootModelNode()); @@ -2491,7 +2554,8 @@ void tst_TestCore::testModelRemoveNode() model->attachView(view.data()); TestConnectionManager connectionManager; - NodeInstanceView nodeInstanceView{connectionManager}; + ExternalDependenciesFake externalDependenciesFake{*model}; + NodeInstanceView nodeInstanceView{connectionManager, externalDependenciesFake}; model->attachView(&nodeInstanceView); QCOMPARE(view->rootModelNode().directSubModelNodes().count(), 0); @@ -2618,9 +2682,9 @@ void tst_TestCore::reparentingNodeLikeDragAndDrop() auto model(Model::create("QtQuick.Item")); QVERIFY(model.get()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QScopedPointer view(new TestView); QVERIFY(view.data()); @@ -3068,11 +3132,10 @@ void tst_TestCore::testRewriterId() ModelNode rootModelNode(view->rootModelNode()); QVERIFY(rootModelNode.isValid()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QCOMPARE(rootModelNode.type(), QmlDesigner::TypeName("QtQuick.Rectangle")); QVERIFY(rootModelNode.isValid()); @@ -3112,10 +3175,10 @@ void tst_TestCore::testRewriterNodeReparentingTransaction1() ModelNode rootModelNode(view->rootModelNode()); QVERIFY(rootModelNode.isValid()); QCOMPARE(rootModelNode.type(), QmlDesigner::TypeName("QtQuick.Item")); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(rootModelNode.isValid()); @@ -3157,10 +3220,10 @@ void tst_TestCore::testRewriterNodeReparentingTransaction2() ModelNode rootModelNode(view->rootModelNode()); QVERIFY(rootModelNode.isValid()); QCOMPARE(rootModelNode.type(), QmlDesigner::TypeName("QtQuick.Item")); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(rootModelNode.isValid()); @@ -3223,10 +3286,10 @@ void tst_TestCore::testRewriterNodeReparentingTransaction3() ModelNode rootModelNode(view->rootModelNode()); QVERIFY(rootModelNode.isValid()); QCOMPARE(rootModelNode.type(), QmlDesigner::TypeName("QtQuick.Item")); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(rootModelNode.isValid()); @@ -3273,10 +3336,10 @@ void tst_TestCore::testRewriterNodeReparentingTransaction4() ModelNode rootModelNode(view->rootModelNode()); QVERIFY(rootModelNode.isValid()); QCOMPARE(rootModelNode.type(), QmlDesigner::TypeName("QtQuick.Item")); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(rootModelNode.isValid()); @@ -3324,10 +3387,10 @@ void tst_TestCore::testRewriterAddNodeTransaction() ModelNode rootModelNode(view->rootModelNode()); QVERIFY(rootModelNode.isValid()); QCOMPARE(rootModelNode.type(), QmlDesigner::TypeName("QtQuick.Item")); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(rootModelNode.isValid()); @@ -3368,11 +3431,11 @@ void tst_TestCore::testRewriterComponentId() QVERIFY(view.data()); model->attachView(view.data()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); QVERIFY(!model->rewriterView()); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(model->rewriterView()); QVERIFY(model->hasNodeMetaInfo("QtQuick.Item", 2, 1)); @@ -3407,10 +3470,10 @@ void tst_TestCore::testRewriterTransactionRewriter() ModelNode rootModelNode(view->rootModelNode()); QVERIFY(rootModelNode.isValid()); QCOMPARE(rootModelNode.type(), QmlDesigner::TypeName("QtQuick.Item")); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(rootModelNode.isValid()); @@ -3476,9 +3539,9 @@ void tst_TestCore::testRewriterPropertyDeclarations() QVERIFY(view.data()); model->attachView(view.data()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(testRewriterView->errors().isEmpty()); @@ -3538,9 +3601,9 @@ void tst_TestCore::testRewriterPropertyAliases() QVERIFY(view.data()); model->attachView(view.data()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootModelNode(view->rootModelNode()); QVERIFY(rootModelNode.isValid()); @@ -3598,9 +3661,9 @@ void tst_TestCore::testRewriterPositionAndOffset() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -3700,9 +3763,9 @@ void tst_TestCore::testRewriterComponentTextModifier() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -3739,9 +3802,9 @@ void tst_TestCore::testRewriterComponentTextModifier() QCOMPARE(componentTextModifier.text(), qmlExpected); auto componentModel(Model::create("QtQuick.Item", 1, 1)); - QScopedPointer testRewriterViewComponent(new TestRewriterView()); + auto testRewriterViewComponent = createTextRewriterView(*componentModel); testRewriterViewComponent->setTextModifier(&componentTextModifier); - componentModel->attachView(testRewriterViewComponent.data()); + componentModel->attachView(testRewriterViewComponent.get()); ModelNode componentrootNode = testRewriterViewComponent->rootModelNode(); QVERIFY(componentrootNode.isValid()); @@ -3771,9 +3834,9 @@ void tst_TestCore::testRewriterPreserveType() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -3816,9 +3879,9 @@ void tst_TestCore::testRewriterForArrayMagic() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -3868,9 +3931,9 @@ void tst_TestCore::testRewriterWithSignals() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -3911,9 +3974,9 @@ void tst_TestCore::testRewriterNodeSliding() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -3951,10 +4014,10 @@ void tst_TestCore::testRewriterExceptionHandling() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); testRewriterView->setCheckSemanticErrors(true); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -4009,9 +4072,9 @@ void tst_TestCore::testRewriterFirstDefinitionInside() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -4079,9 +4142,9 @@ void tst_TestCore::testCopyModelRewriter1() model1->attachView(view1.data()); // read in 1 - QScopedPointer testRewriterView1(new TestRewriterView()); + auto testRewriterView1 = createTextRewriterView(*model1); testRewriterView1->setTextModifier(&textModifier1); - model1->attachView(testRewriterView1.data()); + model1->attachView(testRewriterView1.get()); ModelNode rootNode1 = view1->rootModelNode(); QVERIFY(rootNode1.isValid()); @@ -4098,9 +4161,9 @@ void tst_TestCore::testCopyModelRewriter1() model2->attachView(view2.data()); // read in 2 - QScopedPointer testRewriterView2(new TestRewriterView()); + auto testRewriterView2 = createTextRewriterView(*model2); testRewriterView2->setTextModifier(&textModifier2); - model2->attachView(testRewriterView2.data()); + model2->attachView(testRewriterView2.get()); ModelNode rootNode2 = view2->rootModelNode(); QVERIFY(rootNode2.isValid()); @@ -4294,9 +4357,9 @@ void tst_TestCore::testMergeModelRewriter1() templateModel->attachView(templateView.data()); // read in 1 - QScopedPointer templateRewriterView(new TestRewriterView()); + auto templateRewriterView = createTextRewriterView(*templateModel); templateRewriterView->setTextModifier(&textModifier1); - templateModel->attachView(templateRewriterView.data()); + templateModel->attachView(templateRewriterView.get()); ModelNode templateRootNode = templateView->rootModelNode(); QVERIFY(templateRootNode.isValid()); @@ -4312,9 +4375,9 @@ void tst_TestCore::testMergeModelRewriter1() styleModel->attachView(styleView.data()); // read in 2 - QScopedPointer styleRewriterView(new TestRewriterView()); + auto styleRewriterView = createTextRewriterView(*styleModel); styleRewriterView->setTextModifier(&textModifier2); - styleModel->attachView(styleRewriterView.data()); + styleModel->attachView(styleRewriterView.get()); StylesheetMerger merger(templateView.data(), styleView.data()); merger.merge(); @@ -4384,9 +4447,9 @@ void tst_TestCore::testCopyModelRewriter2() templateModel->attachView(view1.data()); // read in 1 - QScopedPointer testRewriterView1(new TestRewriterView()); + auto testRewriterView1 = createTextRewriterView(*templateModel); testRewriterView1->setTextModifier(&textModifier1); - templateModel->attachView(testRewriterView1.data()); + templateModel->attachView(testRewriterView1.get()); ModelNode rootNode1 = view1->rootModelNode(); QVERIFY(rootNode1.isValid()); @@ -4403,9 +4466,9 @@ void tst_TestCore::testCopyModelRewriter2() QScopedPointer view2(new TestView); styleModel->attachView(view2.data()); - QScopedPointer styleRewriterView(new TestRewriterView()); + auto styleRewriterView = createTextRewriterView(*styleModel); styleRewriterView->setTextModifier(&textModifier2); - styleModel->attachView(styleRewriterView.data()); + styleModel->attachView(styleRewriterView.get()); ModelNode rootNode2 = view2->rootModelNode(); QVERIFY(rootNode2.isValid()); @@ -4465,7 +4528,9 @@ void tst_TestCore::testSubComponentManager() auto model(createModel("QtQuick.Rectangle", 2, 15)); model->setFileUrl(QUrl::fromLocalFile(fileName)); - QScopedPointer subComponentManager(new SubComponentManager(model.get())); + ExternalDependenciesFake externalDependenciesFake{*model}; + QScopedPointer subComponentManager( + new SubComponentManager(model.get(), externalDependenciesFake)); subComponentManager->update(QUrl::fromLocalFile(fileName), model->imports()); QVERIFY(model->hasNodeMetaInfo("QtQuick.Rectangle", 2, 15)); @@ -4521,9 +4586,9 @@ void tst_TestCore::testAnchorsAndRewriting() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -4587,9 +4652,9 @@ void tst_TestCore::testAnchorsAndRewritingCenter() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -4659,11 +4724,11 @@ void tst_TestCore::loadQml() QVERIFY(rootModelNode.isValid()); QCOMPARE(rootModelNode.type(), QmlDesigner::TypeName("QtQuick.Item")); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setCheckSemanticErrors(true); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); while (testRewriterView->hasIncompleteTypeInformation()) { QApplication::processEvents(QEventLoop::AllEvents, 1000); @@ -4921,10 +4986,10 @@ void tst_TestCore::testMetaInfoQtQuickVersion2() auto model(Model::create("QtQuick.Item")); QVERIFY(model.get()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootModelNode = testRewriterView->rootModelNode(); QVERIFY(rootModelNode.isValid()); @@ -5030,7 +5095,7 @@ void tst_TestCore::testQtQuick20Basic() auto model(Model::create("QtQuick.Item")); QVERIFY(model.get()); - auto testRewriterView = std::make_unique(); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&modifier); model->attachView(testRewriterView.get()); @@ -5052,7 +5117,7 @@ void tst_TestCore::testQtQuick20BasicRectangle() auto model(Model::create("QtQuick.Item")); QVERIFY(model.get()); - auto testRewriterView = std::make_unique(); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&modifier); model->attachView(testRewriterView.get()); @@ -5098,7 +5163,7 @@ void tst_TestCore::testQtQuickControls2() QVERIFY(view.data()); model->attachView(view.data()); - auto testRewriterView = std::make_unique(); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&modifier); model->attachView(testRewriterView.get()); @@ -5192,7 +5257,7 @@ void tst_TestCore::testImplicitComponents() QVERIFY(view.data()); model->attachView(view.data()); - auto testRewriterView = std::make_unique(); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&modifier); model->attachView(testRewriterView.get()); @@ -5252,7 +5317,7 @@ void tst_TestCore::testRevisionedProperties() QVERIFY(view.data()); model->attachView(view.data()); - auto testRewriterView = std::make_unique(); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setCheckSemanticErrors(true); testRewriterView->setTextModifier(&modifier); model->attachView(testRewriterView.get()); @@ -5286,7 +5351,7 @@ void tst_TestCore::testStatesRewriter() QVERIFY(view.data()); model->attachView(view.data()); - auto testRewriterView = std::make_unique(); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&modifier); model->attachView(testRewriterView.get()); @@ -5335,7 +5400,7 @@ void tst_TestCore::testGradientsRewriter() QVERIFY(view.data()); model->attachView(view.data()); - auto testRewriterView = std::make_unique(); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&modifier); model->attachView(testRewriterView.get()); @@ -6655,8 +6720,8 @@ void tst_TestCore::testInstancesAttachToExistingModel() // Attach NodeInstanceView TestConnectionManager connectionManager; - - NodeInstanceView instanceView{connectionManager}; + ExternalDependenciesFake externalDependenciesFake{*model}; + NodeInstanceView instanceView{connectionManager, externalDependenciesFake}; model->attachView(&instanceView); @@ -6739,7 +6804,7 @@ void tst_TestCore::testQmlModelStateWithName() auto model1(Model::create("QtQuick.Item")); - auto testRewriterView1 = std::make_unique(); + auto testRewriterView1 = createTextRewriterView(*model1); testRewriterView1->setTextModifier(&modifier1); model1->attachView(testRewriterView1.get()); @@ -6791,7 +6856,7 @@ void tst_TestCore::testRewriterAutomaticSemicolonAfterChangedProperty() auto model1(Model::create("QtQuick.Item")); - auto testRewriterView1 = std::make_unique(); + auto testRewriterView1 = createTextRewriterView(*model1); testRewriterView1->setTextModifier(&modifier1); model1->attachView(testRewriterView1.get()); @@ -6835,9 +6900,9 @@ void tst_TestCore::testModelPropertyValueTypes() auto model1(Model::create("QtQuick.Item")); - QScopedPointer testRewriterView1(new TestRewriterView()); + auto testRewriterView1 = createTextRewriterView(*model1); testRewriterView1->setTextModifier(&modifier1); - model1->attachView(testRewriterView1.data()); + model1->attachView(testRewriterView1.get()); QVERIFY(testRewriterView1->errors().isEmpty()); @@ -6936,9 +7001,9 @@ void tst_TestCore::testModelChangeType() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -7045,9 +7110,9 @@ void tst_TestCore::loadAnchors() auto model(Model::create("QtQuick.Item")); - QScopedPointer testRewriterView1(new TestRewriterView()); + auto testRewriterView1 = createTextRewriterView(*model); testRewriterView1->setTextModifier(&modifier1); - model->attachView(testRewriterView1.data()); + model->attachView(testRewriterView1.get()); auto testView = std::make_unique(); model->attachView(testView.get()); @@ -7084,9 +7149,9 @@ void tst_TestCore::changeAnchors() auto model(Model::create("QtQuick.Item")); - QScopedPointer testRewriterView1(new TestRewriterView()); + auto testRewriterView1 = createTextRewriterView(*model); testRewriterView1->setTextModifier(&modifier1); - model->attachView(testRewriterView1.data()); + model->attachView(testRewriterView1.get()); auto testView = std::make_unique(); @@ -7147,9 +7212,9 @@ void tst_TestCore::anchorToSibling() auto model(Model::create("QtQuick.Item")); - QScopedPointer testRewriterView1(new TestRewriterView()); + auto testRewriterView1 = createTextRewriterView(*model); testRewriterView1->setTextModifier(&modifier1); - model->attachView(testRewriterView1.data()); + model->attachView(testRewriterView1.get()); auto testView = std::make_unique(); @@ -7193,9 +7258,9 @@ void tst_TestCore::removeFillAnchorByDetaching() auto model(Model::create("QtQuick.Item")); - QScopedPointer testRewriterView1(new TestRewriterView()); + auto testRewriterView1 = createTextRewriterView(*model); testRewriterView1->setTextModifier(&modifier1); - model->attachView(testRewriterView1.data()); + model->attachView(testRewriterView1.get()); auto testView = std::make_unique(); @@ -7274,9 +7339,9 @@ void tst_TestCore::removeFillAnchorByChanging() auto model(Model::create("QtQuick.Item")); - QScopedPointer testRewriterView1(new TestRewriterView()); + auto testRewriterView1 = createTextRewriterView(*model); testRewriterView1->setTextModifier(&modifier1); - model->attachView(testRewriterView1.data()); + model->attachView(testRewriterView1.get()); auto testView = std::make_unique(); @@ -7541,9 +7606,9 @@ void tst_TestCore::testRewriterChangeId() QVERIFY(view.data()); model->attachView(view.data()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootModelNode(view->rootModelNode()); QVERIFY(rootModelNode.isValid()); @@ -7579,9 +7644,9 @@ void tst_TestCore::testRewriterRemoveId() QVERIFY(view.data()); model->attachView(view.data()); - QScopedPointer testRewriterView(new TestRewriterView(TestRewriterView::Amend)); + auto testRewriterView = createTextRewriterView(*model, TestRewriterView::Amend); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootModelNode(view->rootModelNode()); QVERIFY(rootModelNode.isValid()); @@ -7611,9 +7676,9 @@ void tst_TestCore::testRewriterChangeValueProperty() QVERIFY(view.data()); model->attachView(view.data()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootModelNode(view->rootModelNode()); QVERIFY(rootModelNode.isValid()); @@ -7651,9 +7716,9 @@ void tst_TestCore::testRewriterRemoveValueProperty() QVERIFY(view.data()); model->attachView(view.data()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootModelNode(view->rootModelNode()); QVERIFY(rootModelNode.isValid()); @@ -7693,9 +7758,9 @@ void tst_TestCore::testRewriterSignalProperty() QVERIFY(view.data()); model->attachView(view.data()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootModelNode(view->rootModelNode()); QVERIFY(rootModelNode.isValid()); @@ -7718,9 +7783,9 @@ void tst_TestCore::testRewriterObjectTypeProperty() QVERIFY(view.data()); model->attachView(view.data()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootModelNode(view->rootModelNode()); QVERIFY(rootModelNode.isValid()); @@ -7766,9 +7831,9 @@ void tst_TestCore::testRewriterPropertyChanges() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -7817,9 +7882,9 @@ void tst_TestCore::testRewriterListModel() auto model(Model::create("QtQuick.Item", 2, 1)); QVERIFY(model.get()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QScopedPointer view(new TestView); model->attachView(view.data()); @@ -7857,9 +7922,9 @@ void tst_TestCore::testRewriterAddProperty() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -7901,9 +7966,9 @@ void tst_TestCore::testRewriterAddPropertyInNestedObject() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -7947,9 +8012,9 @@ void tst_TestCore::testRewriterAddObjectDefinition() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -7980,9 +8045,9 @@ void tst_TestCore::testRewriterAddStatesArray() QScopedPointer view(new TestView); model->attachView(view.data()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -8042,9 +8107,9 @@ void tst_TestCore::testRewriterRemoveStates() QScopedPointer view(new TestView); model->attachView(view.data()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -8101,9 +8166,9 @@ void tst_TestCore::testRewriterRemoveObjectDefinition() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -8160,9 +8225,9 @@ void tst_TestCore::testRewriterRemoveScriptBinding() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -8213,9 +8278,9 @@ void tst_TestCore::testRewriterNodeReparenting() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -8321,9 +8386,9 @@ void tst_TestCore::testRewriterNodeReparentingWithTransaction() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -8382,9 +8447,9 @@ void tst_TestCore::testRewriterMovingInOut() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -8440,9 +8505,9 @@ void tst_TestCore::testRewriterMovingInOutWithTransaction() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -8494,9 +8559,9 @@ void tst_TestCore::testRewriterComplexMovingInOut() model->attachView(view.data()); // read in - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); ModelNode rootNode = view->rootModelNode(); QVERIFY(rootNode.isValid()); @@ -8582,9 +8647,9 @@ void tst_TestCore::removeCenteredInAnchorByDetaching() auto model(Model::create("QtQuick.Item")); - QScopedPointer testRewriterView1(new TestRewriterView()); + auto testRewriterView1 = createTextRewriterView(*model); testRewriterView1->setTextModifier(&modifier1); - model->attachView(testRewriterView1.data()); + model->attachView(testRewriterView1.get()); auto testView = std::make_unique(); @@ -8682,9 +8747,9 @@ void tst_TestCore::loadTestFiles() auto model(Model::create("QtQuick.Item", 1, 1)); QVERIFY(model.get()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(model.get()); ModelNode rootModelNode(testRewriterView->rootModelNode()); @@ -8704,9 +8769,9 @@ void tst_TestCore::loadTestFiles() auto model(Model::create("QtQuick.Item", 2, 1)); QVERIFY(model.get()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(model.get()); ModelNode rootModelNode(testRewriterView->rootModelNode()); @@ -8733,9 +8798,9 @@ void tst_TestCore::loadTestFiles() auto model(Model::create("QtQuick.Item", 2, 1)); QVERIFY(model.get()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(model.get()); ModelNode rootModelNode(testRewriterView->rootModelNode()); @@ -8781,9 +8846,9 @@ void tst_TestCore::loadTestFiles() auto model(Model::create("QtQuick.Item", 2, 1)); QVERIFY(model.get()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(testRewriterView->errors().isEmpty()); @@ -8818,9 +8883,9 @@ void tst_TestCore::loadGradient() auto model(Model::create("QtQuick.Item", 2, 1)); QVERIFY(model.get()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(model.get()); ModelNode rootModelNode(testRewriterView->rootModelNode()); @@ -8916,9 +8981,9 @@ void tst_TestCore::changeGradientId() auto model(Model::create("QtQuick.Item", 2, 1)); QVERIFY(model.get()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(model.get()); ModelNode rootModelNode(testRewriterView->rootModelNode()); @@ -9016,9 +9081,9 @@ void tst_TestCore::writeAnnotations() auto model(Model::create("QtQuick.Item", 2, 1)); QVERIFY(model.get()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(model.get()); ModelNode rootModelNode(testRewriterView->rootModelNode()); @@ -9034,7 +9099,7 @@ void tst_TestCore::writeAnnotations() const QString metaSource = testRewriterView->auxiliaryDataAsQML(); QmlJS::SimpleReader reader; - checkChildNodes(reader.readFromSource(metaSource), testRewriterView.data()); + checkChildNodes(reader.readFromSource(metaSource), testRewriterView.get()); testRewriterView->writeAuxiliaryData(); const QString textWithMeta = testRewriterView->textModifier()->text(); @@ -9070,9 +9135,9 @@ void tst_TestCore::readAnnotations() auto model(Model::create("QtQuick.Item", 2, 1)); QVERIFY(model.get()); - QScopedPointer testRewriterView(new TestRewriterView()); + auto testRewriterView = createTextRewriterView(*model); testRewriterView->setTextModifier(&textModifier); - model->attachView(testRewriterView.data()); + model->attachView(testRewriterView.get()); QVERIFY(model.get()); ModelNode rootModelNode(testRewriterView->rootModelNode()); diff --git a/tests/auto/qml/qmldesigner/testview.cpp b/tests/auto/qml/qmldesigner/testview.cpp index d698023e88b..21ec77d7667 100644 --- a/tests/auto/qml/qmldesigner/testview.cpp +++ b/tests/auto/qml/qmldesigner/testview.cpp @@ -15,7 +15,9 @@ #include #include -TestView::TestView() {} +TestView::TestView(QmlDesigner::ExternalDependenciesInterface *externalDependencies) + : QmlDesigner::AbstractView{*externalDependencies} +{} void TestView::modelAttached(QmlDesigner::Model *model) { diff --git a/tests/auto/qml/qmldesigner/testview.h b/tests/auto/qml/qmldesigner/testview.h index e8983efa265..e08cb07667f 100644 --- a/tests/auto/qml/qmldesigner/testview.h +++ b/tests/auto/qml/qmldesigner/testview.h @@ -29,7 +29,7 @@ public: QStringList arguments; }; - TestView(); + TestView(QmlDesigner::ExternalDependenciesInterface *externalDependencies = nullptr); void modelAttached(QmlDesigner::Model *model); void modelAboutToBeDetached(QmlDesigner::Model *model); diff --git a/tests/unit/mockup/qmldesigner/designercore/include/nodeinstanceview.h b/tests/unit/mockup/qmldesigner/designercore/include/nodeinstanceview.h index c89da382844..7c948dfa014 100644 --- a/tests/unit/mockup/qmldesigner/designercore/include/nodeinstanceview.h +++ b/tests/unit/mockup/qmldesigner/designercore/include/nodeinstanceview.h @@ -17,7 +17,9 @@ class NodeInstanceView : public AbstractView Q_OBJECT public: - NodeInstanceView([[maybe_unused]] QObject *parent) {} + NodeInstanceView(ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} + {} ~NodeInstanceView() override {} void modelAttached([[maybe_unused]] Model *model) override {} diff --git a/tests/unit/mockup/qmldesigner/designercore/include/rewriterview.h b/tests/unit/mockup/qmldesigner/designercore/include/rewriterview.h index be1ba9e7d88..edde6b32e52 100644 --- a/tests/unit/mockup/qmldesigner/designercore/include/rewriterview.h +++ b/tests/unit/mockup/qmldesigner/designercore/include/rewriterview.h @@ -44,7 +44,9 @@ public: }; public: - RewriterView(DifferenceHandling, QObject *) {} + RewriterView(DifferenceHandling, ExternalDependenciesInterface &externalDependencies) + : AbstractView{externalDependencies} + {} ~RewriterView() override {} void modelAttached(Model *) override {} diff --git a/tests/unit/unittest/CMakeLists.txt b/tests/unit/unittest/CMakeLists.txt index 4e04d2e6f20..dc390d92633 100644 --- a/tests/unit/unittest/CMakeLists.txt +++ b/tests/unit/unittest/CMakeLists.txt @@ -158,7 +158,7 @@ extend_qtc_test(unittest "${QmlDesignerDir}/../../../share/qtcreator/qml/qmlpuppet/interfaces" "${QmlDesignerDir}/../../../share/qtcreator/qml/qmlpuppet/types" DEFINES - QMLDESIGNER_TEST QMLDESIGNER_STATIC_LIBRARY + QMLDESIGNERCORE_STATIC_LIBRARY QMLDESIGNER_STATIC_LIBRARY SOURCES_PREFIX "${QmlDesignerDir}" SOURCES diff --git a/tests/unit/unittest/abstractviewmock.h b/tests/unit/unittest/abstractviewmock.h index 5d3ba2a49e4..45a599f7f75 100644 --- a/tests/unit/unittest/abstractviewmock.h +++ b/tests/unit/unittest/abstractviewmock.h @@ -10,5 +10,8 @@ class AbstractViewMock : public QmlDesigner::AbstractView { public: + AbstractViewMock(QmlDesigner::ExternalDependenciesInterface *externalDependencies = nullptr) + : QmlDesigner::AbstractView{*externalDependencies} + {} MOCK_METHOD(void, nodeOrderChanged, (const QmlDesigner::NodeListProperty &listProperty), (override)); }; diff --git a/tests/unit/unittest/mocklistmodeleditorview.h b/tests/unit/unittest/mocklistmodeleditorview.h index ba2c2b66b57..ec00129d430 100644 --- a/tests/unit/unittest/mocklistmodeleditorview.h +++ b/tests/unit/unittest/mocklistmodeleditorview.h @@ -10,6 +10,9 @@ class MockListModelEditorView : public QmlDesigner::AbstractView { public: + MockListModelEditorView(QmlDesigner::ExternalDependenciesInterface *externalDependencies = nullptr) + : AbstractView{*externalDependencies} + {} MOCK_METHOD(void, variantPropertiesChanged, (const QList &propertyList,