aboutsummaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
Diffstat (limited to 'share')
-rw-r--r--share/qtcreator/CMakeLists.txt1
-rw-r--r--share/qtcreator/android/sdk_definitions.json12
-rw-r--r--share/qtcreator/debugger-with-python2/README.txt (renamed from share/qtcreator/debugger/python2/README.txt)0
-rw-r--r--share/qtcreator/debugger-with-python2/android_stdtypes.py (renamed from share/qtcreator/debugger/python2/android_stdtypes.py)0
-rw-r--r--share/qtcreator/debugger-with-python2/boosttypes.py (renamed from share/qtcreator/debugger/python2/boosttypes.py)0
-rw-r--r--share/qtcreator/debugger-with-python2/cdbbridge.py (renamed from share/qtcreator/debugger/python2/cdbbridge.py)0
-rw-r--r--share/qtcreator/debugger-with-python2/creatortypes.py (renamed from share/qtcreator/debugger/python2/creatortypes.py)0
-rw-r--r--share/qtcreator/debugger-with-python2/dumper.py (renamed from share/qtcreator/debugger/python2/dumper.py)0
-rw-r--r--share/qtcreator/debugger-with-python2/gdbbridge.py (renamed from share/qtcreator/debugger/python2/gdbbridge.py)4
-rw-r--r--share/qtcreator/debugger-with-python2/gdbtracepoint.py (renamed from share/qtcreator/debugger/python2/gdbtracepoint.py)0
-rw-r--r--share/qtcreator/debugger-with-python2/libcpp_stdtypes.py (renamed from share/qtcreator/debugger/python2/libcpp_stdtypes.py)0
-rw-r--r--share/qtcreator/debugger-with-python2/lldbbridge.py (renamed from share/qtcreator/debugger/python2/lldbbridge.py)0
-rw-r--r--share/qtcreator/debugger-with-python2/misctypes.py (renamed from share/qtcreator/debugger/python2/misctypes.py)0
-rw-r--r--share/qtcreator/debugger-with-python2/opencvtypes.py (renamed from share/qtcreator/debugger/python2/opencvtypes.py)0
-rw-r--r--share/qtcreator/debugger-with-python2/pdbbridge.py (renamed from share/qtcreator/debugger/python2/pdbbridge.py)0
-rw-r--r--share/qtcreator/debugger-with-python2/personaltypes.py (renamed from share/qtcreator/debugger/python2/personaltypes.py)0
-rw-r--r--share/qtcreator/debugger-with-python2/qttypes.py (renamed from share/qtcreator/debugger/python2/qttypes.py)0
-rw-r--r--share/qtcreator/debugger-with-python2/stdtypes.py (renamed from share/qtcreator/debugger/python2/stdtypes.py)2
-rw-r--r--share/qtcreator/debugger-with-python2/utils.py (renamed from share/qtcreator/debugger/python2/utils.py)0
-rw-r--r--share/qtcreator/debugger/LICENSE.MIT20
-rw-r--r--share/qtcreator/debugger/cdbbridge.py167
-rw-r--r--share/qtcreator/debugger/creatortypes.py2
-rw-r--r--share/qtcreator/debugger/dumper.py2976
-rw-r--r--share/qtcreator/debugger/gdbbridge.py748
-rw-r--r--share/qtcreator/debugger/libcpp_stdtypes.py326
-rw-r--r--share/qtcreator/debugger/lldbbridge.py707
-rw-r--r--share/qtcreator/debugger/qttypes.py190
-rw-r--r--share/qtcreator/debugger/stdtypes.py2
-rw-r--r--share/qtcreator/debugger/visualize.py86
-rw-r--r--share/qtcreator/jsonschemas/project.json57
-rw-r--r--share/qtcreator/qmldesigner/assetsLibraryQmlSources/Assets.qml6
-rw-r--r--share/qtcreator/qmldesigner/assetsLibraryQmlSources/AssetsContextMenu.qml31
-rw-r--r--share/qtcreator/qmldesigner/assetsLibraryQmlSources/AssetsView.qml8
-rw-r--r--share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsEditDelegate.qml237
-rw-r--r--share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsToolbar.qml276
-rw-r--r--share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsView.qml570
-rw-r--r--share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionItem.qml289
-rw-r--r--share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionListView.qml17
-rw-r--r--share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionView.qml190
-rw-r--r--share/qtcreator/qmldesigner/collectionEditorQmlSource/ColorViewDelegate.qml296
-rw-r--r--share/qtcreator/qmldesigner/collectionEditorQmlSource/EditPropertyDialog.qml158
-rw-r--r--share/qtcreator/qmldesigner/collectionEditorQmlSource/IconTextButton.qml97
-rw-r--r--share/qtcreator/qmldesigner/collectionEditorQmlSource/ImportDialog.qml225
-rw-r--r--share/qtcreator/qmldesigner/collectionEditorQmlSource/Message.qml42
-rw-r--r--share/qtcreator/qmldesigner/collectionEditorQmlSource/NewCollectionDialog.qml111
-rw-r--r--share/qtcreator/qmldesigner/connectionseditor/ConnectionsDialog.qml4
-rw-r--r--share/qtcreator/qmldesigner/connectionseditor/ConnectionsDialogForm.qml17
-rw-r--r--share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibrary.qml54
-rw-r--r--share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryEffectContextMenu.qml2
-rw-r--r--share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryEffectsView.qml2
-rw-r--r--share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryItem.qml (renamed from share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryEffect.qml)8
-rw-r--r--share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryItemContextMenu.qml71
-rw-r--r--share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryMaterial.qml15
-rw-r--r--share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryMaterialContextMenu.qml58
-rw-r--r--share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryMaterialsView.qml22
-rw-r--r--share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTexture.qml6
-rw-r--r--share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTextureContextMenu.qml12
-rw-r--r--share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTexturesView.qml3
-rw-r--r--share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryUserView.qml170
-rw-r--r--share/qtcreator/qmldesigner/contentLibraryQmlSource/DeleteBundleItemDialog.qml65
-rw-r--r--share/qtcreator/qmldesigner/contentLibraryQmlSource/UnimportBundleItemDialog.qml (renamed from share/qtcreator/qmldesigner/contentLibraryQmlSource/UnimportBundleMaterialDialog.qml)23
-rw-r--r--share/qtcreator/qmldesigner/designericons.json2
-rw-r--r--share/qtcreator/qmldesigner/edit3dQmlSource/CameraSpeedConfigurationDialog.qml2
-rw-r--r--share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposer.qml2
-rw-r--r--share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerPreview.qml8
-rw-r--r--share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerTopBar.qml9
-rw-r--r--share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNode.qml2
-rw-r--r--share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNodeUniform.qml33
-rw-r--r--share/qtcreator/qmldesigner/effectComposerQmlSources/SaveAsDialog.qml8
-rw-r--r--share/qtcreator/qmldesigner/effectComposerQmlSources/ValueColor.qml10
-rw-r--r--share/qtcreator/qmldesigner/effectComposerQmlSources/ValueFloat.qml11
-rw-r--r--share/qtcreator/qmldesigner/effectComposerQmlSources/ValueInt.qml6
-rw-r--r--share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec2.qml12
-rw-r--r--share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec3.qml18
-rw-r--r--share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec4.qml24
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-16.pngbin0 -> 315 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-24.pngbin0 -> 514 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-24@2x.pngbin0 -> 1846 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon.pngbin0 -> 298 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon16.pngbin0 -> 211 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon@2x.pngbin0 -> 342 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/animatedsprite-loading.pngbin0 -> 118 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-16.pngbin0 -> 363 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-24.pngbin0 -> 472 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-24@2x.pngbin0 -> 803 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-16.pngbin0 -> 311 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-24.pngbin0 -> 924 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-24@2x.pngbin0 -> 1691 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/audio-output-16px.pngbin0 -> 359 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/audio-output-24px.pngbin0 -> 595 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/audio-output-24px@2x.pngbin0 -> 1129 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/audio-room-16.pngbin0 -> 276 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/audio-room-24.pngbin0 -> 419 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/audio-room-24@2x.pngbin0 -> 878 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/border-image-icon.pngbin0 -> 299 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/border-image-icon16.pngbin0 -> 228 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/border-image-icon@2x.pngbin0 -> 386 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon.pngbin0 -> 320 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon16.pngbin0 -> 229 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon@2x.pngbin0 -> 643 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/button-icon.pngbin0 -> 162 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/button-icon16.pngbin0 -> 145 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/button-icon@2x.pngbin0 -> 259 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/checkbox-icon.pngbin0 -> 258 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/checkbox-icon16.pngbin0 -> 230 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/checkbox-icon@2x.pngbin0 -> 336 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/column-positioner-icon-16px.pngbin0 -> 113 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/column-positioner-icon.pngbin0 -> 118 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/column-positioner-icon@2x.pngbin0 -> 121 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/combobox-icon.pngbin0 -> 156 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/combobox-icon16.pngbin0 -> 155 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/combobox-icon@2x.pngbin0 -> 185 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/component-icon.pngbin0 -> 626 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/component-icon16.pngbin0 -> 438 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/component-icon@2x.pngbin0 -> 1107 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/control-icon.pngbin0 -> 293 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/control-icon16.pngbin0 -> 229 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/control-icon@2x.pngbin0 -> 509 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/default-icon.pngbin0 -> 813 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/default3d.pngbin0 -> 375 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/default3d16.pngbin0 -> 253 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/default3d@2x.pngbin0 -> 499 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon.pngbin0 -> 189 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon16.pngbin0 -> 160 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon@2x.pngbin0 -> 286 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/dial-icon.pngbin0 -> 267 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/dial-icon16.pngbin0 -> 243 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/dial-icon@2x.pngbin0 -> 505 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/drop-area-16px.pngbin0 -> 205 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/drop-area-24px.pngbin0 -> 490 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/drop-area-24px@2x.pngbin0 -> 638 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-16px.pngbin0 -> 311 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-24px.pngbin0 -> 384 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-24px@2x.pngbin0 -> 674 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/flickable-icon.pngbin0 -> 246 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/flickable-icon16.pngbin0 -> 209 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/flickable-icon@2x.pngbin0 -> 322 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/flipable-icon.pngbin0 -> 678 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/flipable-icon16.pngbin0 -> 466 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon-16px.pngbin0 -> 98 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon.pngbin0 -> 101 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon@2x.pngbin0 -> 129 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon.pngbin0 -> 143 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon16.pngbin0 -> 161 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon@2x.pngbin0 -> 182 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/frame-icon.pngbin0 -> 121 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/frame-icon16.pngbin0 -> 117 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/frame-icon@2x.pngbin0 -> 125 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon-16px.pngbin0 -> 93 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon.pngbin0 -> 97 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon@2x.pngbin0 -> 125 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon.pngbin0 -> 127 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon16.pngbin0 -> 102 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon@2x.pngbin0 -> 137 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon.pngbin0 -> 133 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon16.pngbin0 -> 125 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon@2x.pngbin0 -> 136 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/image-icon.pngbin0 -> 434 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/image-icon16.pngbin0 -> 296 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/image-icon@2x.pngbin0 -> 596 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/item-icon.pngbin0 -> 148 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/item-icon16.pngbin0 -> 135 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/item-icon@2x.pngbin0 -> 167 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon.pngbin0 -> 127 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon16.pngbin0 -> 124 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon@2x.pngbin0 -> 133 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/keyframe-16px.pngbin0 -> 190 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/label-icon.pngbin0 -> 206 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/label-icon16.pngbin0 -> 182 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/label-icon@2x.pngbin0 -> 284 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/listview-icon.pngbin0 -> 148 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/listview-icon16.pngbin0 -> 136 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/listview-icon@2x.pngbin0 -> 158 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/loader-icon.pngbin0 -> 321 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/loader-icon16.pngbin0 -> 222 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/loader-icon@2x.pngbin0 -> 483 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/media-player-16px.pngbin0 -> 148 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/media-player-24px.pngbin0 -> 179 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/media-player-24px@2x.pngbin0 -> 260 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon.pngbin0 -> 358 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon16.pngbin0 -> 263 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon@2x.pngbin0 -> 755 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/page-icon.pngbin0 -> 190 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/page-icon16.pngbin0 -> 148 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/page-icon@2x.pngbin0 -> 195 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon.pngbin0 -> 179 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon16.pngbin0 -> 158 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon@2x.pngbin0 -> 207 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/pane-icon.pngbin0 -> 93 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/pane-icon16.pngbin0 -> 92 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/pane-icon@2x.pngbin0 -> 96 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon.pngbin0 -> 457 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon16.pngbin0 -> 320 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon@2x.pngbin0 -> 864 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/progressbar-icon.pngbin0 -> 101 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/progressbar-icon16.pngbin0 -> 92 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/progressbar-icon@2x.pngbin0 -> 127 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon.pngbin0 -> 279 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon16.pngbin0 -> 218 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon@2x.pngbin0 -> 482 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon.pngbin0 -> 269 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon16.pngbin0 -> 231 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon@2x.pngbin0 -> 282 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/rect-icon.pngbin0 -> 169 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/rect-icon16.pngbin0 -> 135 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/rect-icon@2x.pngbin0 -> 237 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon.pngbin0 -> 191 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon16.pngbin0 -> 187 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon@2x.pngbin0 -> 196 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/roundbutton-icon.pngbin0 -> 229 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/roundbutton-icon16.pngbin0 -> 186 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/roundbutton-icon@2x.pngbin0 -> 381 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon-16px.pngbin0 -> 115 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon.pngbin0 -> 120 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon@2x.pngbin0 -> 126 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/scrollview-icon.pngbin0 -> 110 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/scrollview-icon16.pngbin0 -> 116 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/scrollview-icon@2x.pngbin0 -> 145 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/slider-icon.pngbin0 -> 190 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/slider-icon16.pngbin0 -> 156 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/slider-icon@2x.pngbin0 -> 227 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/spatial-audio-16.pngbin0 -> 319 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/spatial-audio-24.pngbin0 -> 664 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/spatial-audio-24@2x.pngbin0 -> 1536 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon.pngbin0 -> 144 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon16.pngbin0 -> 151 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon@2x.pngbin0 -> 178 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon.pngbin0 -> 162 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon16.pngbin0 -> 151 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon@2x.pngbin0 -> 167 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon.pngbin0 -> 163 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon16.pngbin0 -> 152 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon@2x.pngbin0 -> 184 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/switch-icon.pngbin0 -> 205 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/switch-icon16.pngbin0 -> 160 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/switch-icon@2x.pngbin0 -> 314 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon.pngbin0 -> 150 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon16.pngbin0 -> 169 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon@2x.pngbin0 -> 193 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/text-icon.pngbin0 -> 126 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/text-icon16.pngbin0 -> 141 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/text-icon@2x.pngbin0 -> 156 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon.pngbin0 -> 158 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon16.pngbin0 -> 140 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon@2x.pngbin0 -> 170 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon.pngbin0 -> 149 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon16.pngbin0 -> 133 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon@2x.pngbin0 -> 163 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/textfield-icon.pngbin0 -> 154 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/textfield-icon16.pngbin0 -> 147 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/textfield-icon@2x.pngbin0 -> 172 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/timeline-16px.pngbin0 -> 389 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/timeline-animation-16px.pngbin0 -> 296 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/timer-16px.pngbin0 -> 339 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/timer-24px.pngbin0 -> 712 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/timer-24px@2x.pngbin0 -> 1305 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon.pngbin0 -> 131 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon16.pngbin0 -> 114 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon@2x.pngbin0 -> 140 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/toolbutton-icon.pngbin0 -> 141 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/toolbutton-icon16.pngbin0 -> 128 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/toolbutton-icon@2x.pngbin0 -> 158 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/toolseparator-icon.pngbin0 -> 111 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/toolseparator-icon16.pngbin0 -> 123 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/toolseparator-icon@2x.pngbin0 -> 131 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon.pngbin0 -> 132 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon16.pngbin0 -> 127 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon@2x.pngbin0 -> 153 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/video-16px.pngbin0 -> 216 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/video-24px.pngbin0 -> 286 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/video-24px@2x.pngbin0 -> 399 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/video-output-16px.pngbin0 -> 289 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/video-output-24px.pngbin0 -> 387 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/video-output-24px@2x.pngbin0 -> 610 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/webview-icon.pngbin0 -> 804 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/images/webview-icon16.pngbin0 -> 519 bytes
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/multimedia.metainfo84
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/qml.metainfo53
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/qtquickcontrols2.metainfo575
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/quick.metainfo (renamed from share/qtcreator/qmldesigner/propertyEditorQmlSources/quick.metainfo)406
-rw-r--r--share/qtcreator/qmldesigner/itemLibrary/quick3d.metainfo125
-rw-r--r--share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowserContextMenu.qml7
-rw-r--r--share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorPane.qml84
-rw-r--r--share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorTopSection.qml30
-rw-r--r--share/qtcreator/qmldesigner/projectstorage/fake.qmltypes9
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AdvancedSection.qml2
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/BusyIndicatorSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ButtonSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/CheckBoxSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/CheckDelegateSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ComboBoxSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ControlSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/DelayButtonSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/DialSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/DialogSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/DrawerSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/FrameSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/GroupBoxSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ItemDelegateSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/LabelSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/PageIndicatorSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/PageSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/PaneSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/PopupSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ProgressBarSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/RadioButtonSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/RadioDelegateSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/RangeSliderSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/RoundButtonSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ScrollViewSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SliderSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SpinBoxSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/StackViewSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SwipeDelegateSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SwipeViewSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SwitchDelegateSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SwitchSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TabBarSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TabButtonSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TextAreaSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TextFieldSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ToolBarSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ToolButtonSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ToolSeparatorSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TumblerSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/EffectsSection.qml549
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/ItemPane.qml4
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/ColumnLayoutSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/GridLayoutSpecifics.qml21
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/RowLayoutSpecifics.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/StackLayoutSpecifics.qml5
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/CheckBox.qml8
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ColorEditor.qml9
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ColorEditorPopup.qml23
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/DoubleSpinBox.qml1
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/DynamicPropertiesSection.qml95
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ExtendedFunctionLogic.qml2
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FlagsComboBox.qml2
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/IconButton.qml34
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/PropertyEditorPane.qml71
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/Section.qml199
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/SpinBox.qml3
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/UrlChooser.qml5
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/CheckBox.qml1
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/MenuItem.qml14
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/PopupDialog.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/impl/ColorPicker.qml5
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml607
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/Values.qml9
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/icons.ttfbin66460 -> 66776 bytes
-rw-r--r--share/qtcreator/qmldesigner/qt4mcu/metadata.qml8
-rw-r--r--share/qtcreator/qmldesigner/qt4mcu/qul-27.qml227
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/files/javascript/wizard.json50
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/files/qtquickfile/file.qml.tpl1
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/files/qtuiquickfile/file.qml.tpl1
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/application-3d/wizard.json81
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/application-extended-3d/Screen01.ui.qml.tpl2
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/application-extended-3d/wizard.json105
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/application-mcu/app_mcu.qmlproject.tpl8
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/application/wizard.json91
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/common/CMakeLists.content.txt.tpl14
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/common/CMakeLists.imports.txt.tpl4
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/common/CMakeLists.main.txt.tpl56
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/common/app.qmlproject.tpl35
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/common/app_environment.h.tpl19
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/common/contentmodule.main.qml.tpl17
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/common/import_qml_components_plugins.h.tpl19
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/common/import_qml_plugins.h.tpl9
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/common/insight.tpl19
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/common/main.cpp.tpl37
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/common/main.qml8
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/common/qmlcomponents.tpl34
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/common/qmlmodules.tpl18
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/common/qtquickcontrols2.conf23
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/desktop-launcher/wizard.json70
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/mobile-scroll/wizard.json79
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/mobile-stack/wizard.json81
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/mobile-swipe/wizard.json81
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/Colors.json.tpl18
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/Constants.qml.tpl2
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/DataStore.qml.tpl17
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/DirectoryFontLoader.qml.tpl2
-rw-r--r--share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/models.json.tpl56
-rw-r--r--share/qtcreator/qmldesigner/toolbar/Main.qml20
-rw-r--r--share/qtcreator/qmldesigner/welcomepage/MainGridStack.qml12
-rw-r--r--share/qtcreator/templates/wizards/files/form/wizard.json4
-rw-r--r--share/qtcreator/templates/wizards/projects/qtforpythonapplication/widget/wizard.json2
-rw-r--r--share/qtcreator/templates/wizards/projects/qtquick2-extension/wizard.json4
-rw-r--r--share/qtcreator/templates/wizards/projects/qtwidgetsapplication/wizard.json2
-rw-r--r--share/qtcreator/themes/dark.creatortheme1
-rw-r--r--share/qtcreator/themes/dark.figmatokens13
-rw-r--r--share/qtcreator/themes/default.creatortheme5
-rw-r--r--share/qtcreator/themes/design-light.creatortheme1
-rw-r--r--share/qtcreator/themes/design.creatortheme1
-rw-r--r--share/qtcreator/themes/flat-dark.creatortheme1
-rw-r--r--share/qtcreator/themes/flat-light.creatortheme18
-rw-r--r--share/qtcreator/themes/flat.creatortheme16
-rw-r--r--share/qtcreator/themes/light-palette.inc41
-rw-r--r--share/qtcreator/themes/light.figmatokens14
-rw-r--r--share/qtcreator/translations/README.md8
-rw-r--r--share/qtcreator/translations/qtcreator_cs.ts28
-rw-r--r--share/qtcreator/translations/qtcreator_da.ts102
-rw-r--r--share/qtcreator/translations/qtcreator_de.ts929
-rw-r--r--share/qtcreator/translations/qtcreator_es.ts30
-rw-r--r--share/qtcreator/translations/qtcreator_fr.ts175
-rw-r--r--share/qtcreator/translations/qtcreator_hr.ts46
-rw-r--r--share/qtcreator/translations/qtcreator_hu.ts28
-rw-r--r--share/qtcreator/translations/qtcreator_it.ts24
-rw-r--r--share/qtcreator/translations/qtcreator_ja.ts106
-rw-r--r--share/qtcreator/translations/qtcreator_pl.ts136
-rw-r--r--share/qtcreator/translations/qtcreator_ru.ts120
-rw-r--r--share/qtcreator/translations/qtcreator_sl.ts38
-rw-r--r--share/qtcreator/translations/qtcreator_uk.ts92
-rw-r--r--share/qtcreator/translations/qtcreator_zh_CN.ts59
-rw-r--r--share/qtcreator/translations/qtcreator_zh_TW.ts4
-rw-r--r--share/share.qbs1
416 files changed, 7219 insertions, 7980 deletions
diff --git a/share/qtcreator/CMakeLists.txt b/share/qtcreator/CMakeLists.txt
index f8be01a7a7..73a0837ede 100644
--- a/share/qtcreator/CMakeLists.txt
+++ b/share/qtcreator/CMakeLists.txt
@@ -3,6 +3,7 @@ set(resource_directories
cplusplus
glsl
indexer_preincludes
+ jsonschemas
modeleditor
qmldesigner
qmlicons
diff --git a/share/qtcreator/android/sdk_definitions.json b/share/qtcreator/android/sdk_definitions.json
index 22e4a322d8..ed1e42402f 100644
--- a/share/qtcreator/android/sdk_definitions.json
+++ b/share/qtcreator/android/sdk_definitions.json
@@ -1,12 +1,12 @@
{
"common": {
"sdk_tools_url": {
- "linux": "https://dl.google.com/android/repository/commandlinetools-linux-9123335_latest.zip",
- "linux_sha256": "0bebf59339eaa534f4217f8aa0972d14dc49e7207be225511073c661ae01da0a",
- "windows": "https://dl.google.com/android/repository/commandlinetools-win-9123335_latest.zip",
- "windows_sha256": "8a90e6a3deb2fa13229b2e335efd07687dcc8a55a3c544da9f40b41404993e7d",
- "mac": "https://dl.google.com/android/repository/commandlinetools-mac-9123335_latest.zip",
- "mac_sha256": "d0192807f7e1cd4a001d13bb1e5904fc287b691211648877258aa44d1fa88275"
+ "linux": "https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip",
+ "linux_sha256": "2d2d50857e4eb553af5a6dc3ad507a17adf43d115264b1afc116f95c92e5e258",
+ "windows": "https://dl.google.com/android/repository/commandlinetools-win-11076708_latest.zip",
+ "windows_sha256": "4d6931209eebb1bfb7c7e8b240a6a3cb3ab24479ea294f3539429574b1eec862",
+ "mac": "https://dl.google.com/android/repository/commandlinetools-mac-11076708_latest.zip",
+ "mac_sha256": "7bc5c72ba0275c80a8f19684fb92793b83a6b5c94d4d179fc5988930282d7e64"
},
"sdk_essential_packages": {
"default": ["platform-tools", "platforms;android-31", "cmdline-tools;latest"],
diff --git a/share/qtcreator/debugger/python2/README.txt b/share/qtcreator/debugger-with-python2/README.txt
index 70e03d52ca..70e03d52ca 100644
--- a/share/qtcreator/debugger/python2/README.txt
+++ b/share/qtcreator/debugger-with-python2/README.txt
diff --git a/share/qtcreator/debugger/python2/android_stdtypes.py b/share/qtcreator/debugger-with-python2/android_stdtypes.py
index 8b25d7bb35..8b25d7bb35 100644
--- a/share/qtcreator/debugger/python2/android_stdtypes.py
+++ b/share/qtcreator/debugger-with-python2/android_stdtypes.py
diff --git a/share/qtcreator/debugger/python2/boosttypes.py b/share/qtcreator/debugger-with-python2/boosttypes.py
index 5eb0c1a1be..5eb0c1a1be 100644
--- a/share/qtcreator/debugger/python2/boosttypes.py
+++ b/share/qtcreator/debugger-with-python2/boosttypes.py
diff --git a/share/qtcreator/debugger/python2/cdbbridge.py b/share/qtcreator/debugger-with-python2/cdbbridge.py
index a9d86e24ee..a9d86e24ee 100644
--- a/share/qtcreator/debugger/python2/cdbbridge.py
+++ b/share/qtcreator/debugger-with-python2/cdbbridge.py
diff --git a/share/qtcreator/debugger/python2/creatortypes.py b/share/qtcreator/debugger-with-python2/creatortypes.py
index 24c16ce009..24c16ce009 100644
--- a/share/qtcreator/debugger/python2/creatortypes.py
+++ b/share/qtcreator/debugger-with-python2/creatortypes.py
diff --git a/share/qtcreator/debugger/python2/dumper.py b/share/qtcreator/debugger-with-python2/dumper.py
index 1fd42848d4..1fd42848d4 100644
--- a/share/qtcreator/debugger/python2/dumper.py
+++ b/share/qtcreator/debugger-with-python2/dumper.py
diff --git a/share/qtcreator/debugger/python2/gdbbridge.py b/share/qtcreator/debugger-with-python2/gdbbridge.py
index d61160eed3..9699e518fe 100644
--- a/share/qtcreator/debugger/python2/gdbbridge.py
+++ b/share/qtcreator/debugger-with-python2/gdbbridge.py
@@ -772,7 +772,7 @@ class Dumper(DumperBase):
def makeStdString(init):
# Works only for small allocators, but they are usually empty.
- gdb.execute('set $d=(std::string*)calloc(sizeof(std::string), 2)')
+ gdb.execute('set $d=(std::string*)calloc(2, sizeof(std::string))')
gdb.execute('call($d->basic_string("' + init +
'",*(std::allocator<char>*)(1+$d)))')
value = gdb.parse_and_eval('$d').dereference()
@@ -787,7 +787,7 @@ class Dumper(DumperBase):
h = self.hexencode(data)
#DumperBase.warn('DATA: %s' % h)
string = ''.join('\\x' + h[2 * i:2 * i + 2] for i in range(size))
- exp = '(%s*)memcpy(calloc(%d, 1), "%s", %d)' \
+ exp = '(%s*)memcpy(calloc(1, %d), "%s", %d)' \
% (value.type.name, size, string, size)
#DumperBase.warn('EXP: %s' % exp)
res = gdb.parse_and_eval(exp)
diff --git a/share/qtcreator/debugger/python2/gdbtracepoint.py b/share/qtcreator/debugger-with-python2/gdbtracepoint.py
index 871132ac48..871132ac48 100644
--- a/share/qtcreator/debugger/python2/gdbtracepoint.py
+++ b/share/qtcreator/debugger-with-python2/gdbtracepoint.py
diff --git a/share/qtcreator/debugger/python2/libcpp_stdtypes.py b/share/qtcreator/debugger-with-python2/libcpp_stdtypes.py
index 44b3a235ff..44b3a235ff 100644
--- a/share/qtcreator/debugger/python2/libcpp_stdtypes.py
+++ b/share/qtcreator/debugger-with-python2/libcpp_stdtypes.py
diff --git a/share/qtcreator/debugger/python2/lldbbridge.py b/share/qtcreator/debugger-with-python2/lldbbridge.py
index 4d9b74b2ea..4d9b74b2ea 100644
--- a/share/qtcreator/debugger/python2/lldbbridge.py
+++ b/share/qtcreator/debugger-with-python2/lldbbridge.py
diff --git a/share/qtcreator/debugger/python2/misctypes.py b/share/qtcreator/debugger-with-python2/misctypes.py
index 9099f19a2f..9099f19a2f 100644
--- a/share/qtcreator/debugger/python2/misctypes.py
+++ b/share/qtcreator/debugger-with-python2/misctypes.py
diff --git a/share/qtcreator/debugger/python2/opencvtypes.py b/share/qtcreator/debugger-with-python2/opencvtypes.py
index 5cfd60c5d2..5cfd60c5d2 100644
--- a/share/qtcreator/debugger/python2/opencvtypes.py
+++ b/share/qtcreator/debugger-with-python2/opencvtypes.py
diff --git a/share/qtcreator/debugger/python2/pdbbridge.py b/share/qtcreator/debugger-with-python2/pdbbridge.py
index 228f4c8c1f..228f4c8c1f 100644
--- a/share/qtcreator/debugger/python2/pdbbridge.py
+++ b/share/qtcreator/debugger-with-python2/pdbbridge.py
diff --git a/share/qtcreator/debugger/python2/personaltypes.py b/share/qtcreator/debugger-with-python2/personaltypes.py
index 291922b8fa..291922b8fa 100644
--- a/share/qtcreator/debugger/python2/personaltypes.py
+++ b/share/qtcreator/debugger-with-python2/personaltypes.py
diff --git a/share/qtcreator/debugger/python2/qttypes.py b/share/qtcreator/debugger-with-python2/qttypes.py
index b08f60a9bb..b08f60a9bb 100644
--- a/share/qtcreator/debugger/python2/qttypes.py
+++ b/share/qtcreator/debugger-with-python2/qttypes.py
diff --git a/share/qtcreator/debugger/python2/stdtypes.py b/share/qtcreator/debugger-with-python2/stdtypes.py
index c14812dee1..8bc86671c6 100644
--- a/share/qtcreator/debugger/python2/stdtypes.py
+++ b/share/qtcreator/debugger-with-python2/stdtypes.py
@@ -850,7 +850,7 @@ def qedit__std__vector(d, value, data):
values = data.split(',')
n = len(values)
innerType = value.type[0].name
- cmd = "set $d = (%s*)calloc(sizeof(%s)*%s,1)" % (innerType, innerType, n)
+ cmd = "set $d = (%s*)calloc(%s,sizeof(%s))" % (innerType, n, innerType)
gdb.execute(cmd)
cmd = "set {void*[3]}%s = {$d, $d+%s, $d+%s}" % (value.address(), n, n)
gdb.execute(cmd)
diff --git a/share/qtcreator/debugger/python2/utils.py b/share/qtcreator/debugger-with-python2/utils.py
index 8019d1e530..8019d1e530 100644
--- a/share/qtcreator/debugger/python2/utils.py
+++ b/share/qtcreator/debugger-with-python2/utils.py
diff --git a/share/qtcreator/debugger/LICENSE.MIT b/share/qtcreator/debugger/LICENSE.MIT
new file mode 100644
index 0000000000..6dee3d0a7f
--- /dev/null
+++ b/share/qtcreator/debugger/LICENSE.MIT
@@ -0,0 +1,20 @@
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/share/qtcreator/debugger/cdbbridge.py b/share/qtcreator/debugger/cdbbridge.py
index b5fc683cba..ce88c903a7 100644
--- a/share/qtcreator/debugger/cdbbridge.py
+++ b/share/qtcreator/debugger/cdbbridge.py
@@ -7,6 +7,7 @@ import sys
import cdbext
import re
import threading
+import time
from utils import TypeCode
sys.path.insert(1, os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))))
@@ -75,6 +76,15 @@ class Dumper(DumperBase):
self.outputLock = threading.Lock()
self.isCdb = True
+ #FIXME
+ def register_known_qt_types(self):
+ DumperBase.register_known_qt_types(self)
+ typeid = self.typeid_for_string('@QVariantMap')
+ del self.type_code_cache[typeid]
+ del self.type_target_cache[typeid]
+ del self.type_size_cache[typeid]
+ del self.type_alignment_cache[typeid]
+
def enumValue(self, nativeValue):
val = nativeValue.nativeDebuggerValue()
# remove '0n' decimal prefix of the native cdb value output
@@ -117,6 +127,7 @@ class Dumper(DumperBase):
elif not nativeValue.type().resolved and nativeValue.type().code() == TypeCode.Struct and not nativeValue.hasChildren():
val.ldisplay = self.enumValue(nativeValue)
val.isBaseClass = val.name == nativeValue.type().name()
+ val.typeid = self.from_native_type(nativeValue.type())
val.nativeValue = nativeValue
val.laddress = nativeValue.address()
val.lbitsize = nativeValue.bitsize()
@@ -137,14 +148,10 @@ class Dumper(DumperBase):
for f in nativeType.fields()])
return typeId
- def nativeValueType(self, nativeValue):
- return self.fromNativeType(nativeValue.type())
-
- def fromNativeType(self, nativeType):
+ def from_native_type(self, nativeType):
self.check(isinstance(nativeType, cdbext.Type))
- typeId = self.nativeTypeId(nativeType)
- if self.typeData.get(typeId, None) is not None:
- return self.Type(self, typeId)
+ typeid = self.typeid_for_string(self.nativeTypeId(nativeType))
+ self.type_nativetype_cache[typeid] = nativeType
if nativeType.name().startswith('void'):
nativeType = FakeVoidType(nativeType.name(), self)
@@ -154,70 +161,61 @@ class Dumper(DumperBase):
if nativeType.name().startswith('<function>'):
code = TypeCode.Function
elif nativeType.targetName() != nativeType.name():
- return self.createPointerType(nativeType.targetName())
+ return self.create_pointer_typeid(self.typeid_for_string(nativeType.targetName()))
if code == TypeCode.Array:
# cdb reports virtual function tables as arrays those ar handled separetly by
# the DumperBase. Declare those types as structs prevents a lookup to a
# none existing type
if not nativeType.name().startswith('__fptr()') and not nativeType.name().startswith('<gentype '):
- targetName = nativeType.targetName()
- count = nativeType.arrayElements()
- if targetName.endswith(']'):
- (prefix, suffix, inner_count) = self.splitArrayType(targetName)
- type_name = '%s[%d][%d]%s' % (prefix, count, inner_count, suffix)
- else:
- type_name = '%s[%d]' % (targetName, count)
- tdata = self.TypeData(self, typeId)
- tdata.name = type_name
- tdata.code = TypeCode.Array
- tdata.ltarget = targetName
- tdata.lbitsize = lambda: nativeType.bitsize()
- return self.Type(self, typeId)
+ targetName = nativeType.targetName().strip()
+ self.type_name_cache[typeid] = nativeType.name()
+ self.type_code_cache[typeid] = code
+ self.type_target_cache[typeid] = self.typeid_for_string(targetName)
+ self.type_size_cache[typeid] = nativeType.bitsize() // 8
+ return typeid
code = TypeCode.Struct
- tdata = self.TypeData(self, typeId)
- tdata.name = nativeType.name()
- tdata.lbitsize = lambda: nativeType.bitsize()
- tdata.code = code
- tdata.moduleName = lambda: nativeType.module()
- if code == TypeCode.Struct:
- tdata.lfields = lambda value: \
- self.listFields(nativeType, value)
- tdata.lalignment = lambda: \
- self.nativeStructAlignment(nativeType)
- tdata.enumDisplay = lambda intval, addr, form: \
+ self.type_name_cache[typeid] = nativeType.name()
+ self.type_size_cache[typeid] = nativeType.bitsize() // 8
+ self.type_code_cache[typeid] = code
+ self.type_modulename_cache[typeid] = nativeType.module()
+ self.type_enum_display_cache[typeid] = lambda intval, addr, form: \
self.nativeTypeEnumDisplay(nativeType, intval, form)
- tdata.templateArguments = lambda: \
- self.listTemplateParameters(nativeType.name())
- return self.Type(self, typeId)
+ return typeid
- def listNativeValueChildren(self, nativeValue):
+ def listNativeValueChildren(self, nativeValue, include_bases):
+ fields = []
index = 0
nativeMember = nativeValue.childFromIndex(index)
while nativeMember:
+ # Why this restriction to things with address? Can't nativeValue
+ # be e.g. located in registers, without address?
if nativeMember.address() != 0:
- yield self.fromNativeValue(nativeMember)
+ if include_bases or nativeMember.name() != nativeMember.type().name():
+ field = self.fromNativeValue(nativeMember)
+ fields.append(field)
index += 1
nativeMember = nativeValue.childFromIndex(index)
+ return fields
- def listValueChildren(self, value):
+ def listValueChildren(self, value, include_bases=True):
nativeValue = value.nativeValue
if nativeValue is None:
nativeValue = cdbext.createValue(value.address(), self.lookupNativeType(value.type.name, 0))
- return self.listNativeValueChildren(nativeValue)
+ return self.listNativeValueChildren(nativeValue, include_bases)
- def listFields(self, nativeType, value):
+ def nativeListMembers(self, value, native_type, include_bases):
nativeValue = value.nativeValue
if nativeValue is None:
- nativeValue = cdbext.createValue(value.address(), nativeType)
- return self.listNativeValueChildren(nativeValue)
+ nativeValue = cdbext.createValue(value.address(), native_type)
+ return self.listNativeValueChildren(nativeValue, include_bases)
def nativeStructAlignment(self, nativeType):
#DumperBase.warn("NATIVE ALIGN FOR %s" % nativeType.name)
def handleItem(nativeFieldType, align):
- a = self.fromNativeType(nativeFieldType).alignment()
+ a = self.type_alignment(self.from_native_type(nativeFieldType))
return a if a > align else align
align = 1
for f in nativeType.fields():
@@ -398,20 +396,6 @@ class Dumper(DumperBase):
else:
return typeName
- def lookupType(self, typeNameIn, module=0):
- if len(typeNameIn) == 0:
- return None
- typeName = self.stripQintTypedefs(typeNameIn)
- if self.typeData.get(typeName, None) is None:
- nativeType = self.lookupNativeType(typeName, module)
- if nativeType is None:
- return None
- _type = self.fromNativeType(nativeType)
- if _type.typeId != typeName:
- self.registerTypeAlias(_type.typeId, typeName)
- return _type
- return self.Type(self, typeName)
-
def lookupNativeType(self, name, module=0):
if name.startswith('void'):
return FakeVoidType(name, self)
@@ -439,10 +423,8 @@ class Dumper(DumperBase):
ptr = cdbext.getAddressByName(type.name + '::staticMetaObject')
return ptr
- def warn(self, msg):
- self.put('{name="%s",value="",type="",numchild="0"},' % msg)
-
def fetchVariables(self, args):
+ start_time = time.perf_counter()
self.resetStats()
(ok, res) = self.tryFetchInterpreterVariables(args)
if ok:
@@ -458,13 +440,17 @@ class Dumper(DumperBase):
self.anonNumber = 0
variables = []
- for val in cdbext.listOfLocals(self.partialVariable):
- dumperVal = self.fromNativeValue(val)
- dumperVal.lIsInScope = dumperVal.name not in self.uninitialized
- variables.append(dumperVal)
+ try:
+ for val in cdbext.listOfLocals(self.partialVariable):
+ dumperVal = self.fromNativeValue(val)
+ dumperVal.lIsInScope = dumperVal.name not in self.uninitialized
+ variables.append(dumperVal)
- self.handleLocals(variables)
- self.handleWatches(args)
+ self.handleLocals(variables)
+ self.handleWatches(args)
+ except Exception:
+ t,v,tb = sys.exc_info()
+ self.showException("FETCH VARIABLES", t, v, tb)
self.put('],partial="%d"' % (len(self.partialVariable) > 0))
self.put(',timings=%s' % self.timings)
@@ -476,6 +462,8 @@ class Dumper(DumperBase):
self.put(',qtnamespace="%s"' % self.qtNamespaceToReport)
self.qtNamespaceToReport = None
+ runtime = time.perf_counter() - start_time
+ self.put(',runtime="%s"' % runtime)
self.reportResult(''.join(self.output), args)
self.output = []
@@ -485,9 +473,6 @@ class Dumper(DumperBase):
def findValueByExpression(self, exp):
return cdbext.parseAndEvaluate(exp)
- def nativeDynamicTypeName(self, address, baseType):
- return None # Does not work with cdb
-
def nativeValueDereferenceReference(self, value):
return self.nativeValueDereferencePointer(value)
@@ -518,7 +503,7 @@ class Dumper(DumperBase):
else:
val = self.Value(self)
val.laddress = value.pointer()
- val._type = DumperBase.Type(self, value.type.targetName)
+ val.typeid = self.typeid_for_string(value.type.targetName)
val.nativeValue = value.nativeValue
return val
@@ -540,14 +525,11 @@ class Dumper(DumperBase):
res = self.nativeParseAndEvaluate(symbolName)
return None if res is None else res.address()
- def putItemX(self, value):
- #DumperBase.warn('PUT ITEM: %s' % value.stringify())
+ def putItem(self, value: DumperBase.Value):
typeobj = value.type # unqualified()
typeName = typeobj.name
- self.addToCache(typeobj) # Fill type cache
-
if not value.lIsInScope:
self.putSpecialValue('optimizedout')
#self.putType(typeobj)
@@ -571,8 +553,7 @@ class Dumper(DumperBase):
return
self.putAddress(value.address())
- if value.lbitsize is not None:
- self.putField('size', value.lbitsize // 8)
+ self.putField('size', self.type_size(value.typeid))
if typeobj.code == TypeCode.Function:
#DumperBase.warn('FUNCTION VALUE: %s' % value)
@@ -738,7 +719,7 @@ class Dumper(DumperBase):
#DumperBase.warn('INAME: %s' % self.currentIName)
if self.autoDerefPointers:
# Generic pointer type with AutomaticFormat, but never dereference char types:
- if value.type.targetName not in (
+ if value.type.targetName.strip() not in (
'char',
'signed char',
'int8_t',
@@ -769,7 +750,7 @@ class Dumper(DumperBase):
def putCStyleArray(self, value):
arrayType = value.type
- innerType = arrayType.ltarget
+ innerType = arrayType.target()
address = value.address()
if address:
self.putValue('@0x%x' % address, priority=-1)
@@ -783,7 +764,7 @@ class Dumper(DumperBase):
p = value.address()
if displayFormat != DisplayFormat.Raw and p:
- if innerType.name in (
+ if innerType.name.strip() in (
'char',
'int8_t',
'qint8',
@@ -828,7 +809,7 @@ class Dumper(DumperBase):
innerSize = innerType.size()
self.putNumChild(n)
#DumperBase.warn('ADDRESS: 0x%x INNERSIZE: %s INNERTYPE: %s' % (addrBase, innerSize, innerType))
- enc = innerType.simpleEncoding()
+ enc = self.type_encoding_cache.get(innerType.typeid, None)
maxNumChild = self.maxArrayCount()
if enc:
self.put('childtype="%s",' % innerType.name)
@@ -863,12 +844,8 @@ class Dumper(DumperBase):
if innerType in ('wchar_t', 'WCHAR'):
self.putType(typeName)
- charSize = self.lookupType('wchar_t').size()
- (length, data) = self.encodeCArray(ptr, charSize, limit)
- if charSize == 2:
- self.putValue(data, 'utf16', length=length)
- else:
- self.putValue(data, 'ucs4', length=length)
+ (length, data) = self.encodeCArray(ptr, 2, limit)
+ self.putValue(data, 'utf16', length=length)
return True
if displayFormat == DisplayFormat.Latin1String:
@@ -931,19 +908,12 @@ class Dumper(DumperBase):
self.putItem(derefValue)
self.currentChildType = savedCurrentChildType
- def extractPointer(self, value):
- code = 'I' if self.ptrSize() == 4 else 'Q'
- return self.extractSomething(value, code, 8 * self.ptrSize())
-
def createValue(self, datish, typish):
- if self.isInt(datish): # Used as address.
+ if isinstance(datish, int): # Used as address.
return self.createValueFromAddressAndType(datish, typish)
if isinstance(datish, bytes):
val = self.Value(self)
- if isinstance(typish, self.Type):
- val._type = typish
- else:
- val._type = self.Type(self, typish)
+ val.typeid = self.create_typeid(typish)
#DumperBase.warn('CREATING %s WITH DATA %s' % (val.type.name, self.hexencode(datish)))
val.ldata = datish
val.check()
@@ -952,11 +922,8 @@ class Dumper(DumperBase):
def createValueFromAddressAndType(self, address, typish):
val = self.Value(self)
- if isinstance(typish, self.Type):
- val._type = typish
- else:
- val._type = self.Type(self, typish)
+ val.typeid = self.create_typeid(typish)
val.laddress = address
if self.useDynamicType:
- val._type = val.type.dynamicType(address)
+ val.typeid = self.dynamic_typeid_at_address(val.typeid, address)
return val
diff --git a/share/qtcreator/debugger/creatortypes.py b/share/qtcreator/debugger/creatortypes.py
index ba5b53450b..9c2933ba06 100644
--- a/share/qtcreator/debugger/creatortypes.py
+++ b/share/qtcreator/debugger/creatortypes.py
@@ -53,7 +53,7 @@ def readTemplateName(d, value):
def readLiteral(d, value):
if not value.integer():
return "<null>"
- type = typeTarget(value.type.unqualified())
+ type = typeTarget(value.type)
if type and (type.name == "CPlusPlus::TemplateNameId"):
return readTemplateName(d, value)
elif type and (type.name == "CPlusPlus::QualifiedNameId"):
diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py
index 059bf7b23e..eb45d918be 100644
--- a/share/qtcreator/debugger/dumper.py
+++ b/share/qtcreator/debugger/dumper.py
@@ -3,7 +3,7 @@
import os
import codecs
-import collections
+import functools
import glob
import struct
import sys
@@ -31,11 +31,7 @@ except:
def hexencode_(s):
return ''.join(["%x" % c for c in s])
-if sys.version_info[0] >= 3:
- toInteger = int
-else:
- toInteger = long
-
+toInteger = int
class ReportItem():
"""
@@ -55,19 +51,6 @@ class ReportItem():
% (self.value, self.encoding, self.priority, self.length)
-class Timer():
- def __init__(self, d, desc):
- self.d = d
- self.desc = desc + '-' + d.currentIName
-
- def __enter__(self):
- self.starttime = time.time()
-
- def __exit__(self, exType, exValue, exTraceBack):
- elapsed = int(1000 * (time.time() - self.starttime))
- self.d.timings.append([self.desc, elapsed])
-
-
class Children():
def __init__(self, d, numChild=1, childType=None, childNumChild=None,
maxNumChild=None, addrBase=None, addrStep=None):
@@ -147,20 +130,28 @@ class UnnamedSubItem(SubItem):
class DumperBase():
@staticmethod
def warn(message):
- print('bridgemessage={msg="%s"},' % message.replace('"', '$').encode('latin1'))
+ print('bridgemessage={msg="%s"}' % message.replace('"', "'").replace('\\', '\\\\'))
- @staticmethod
- def showException(msg, exType, exValue, exTraceback):
- DumperBase.warn('**** CAUGHT EXCEPTION: %s ****' % msg)
+ #@staticmethod
+ def showException(self, msg, exType, exValue, exTraceback):
+ self.warn('**** CAUGHT EXCEPTION: %s ****' % msg)
try:
import traceback
- for line in traceback.format_exception(exType, exValue, exTraceback):
- DumperBase.warn('%s' % line)
+ for frame_desc in traceback.format_exception(exType, exValue, exTraceback):
+ for line in frame_desc.split('\n'):
+ self.warn(line)
except:
pass
- def timer(self, desc):
- return Timer(self, desc)
+ def dump_location(self):
+ import traceback
+ from io import StringIO
+ io = StringIO()
+ traceback.print_stack(file=io)
+ data = io.getvalue()
+ self.warn('LOCATION:')
+ for line in data.split('\n')[:-3]:
+ self.warn(line)
def __init__(self):
self.isCdb = False
@@ -181,11 +172,10 @@ class DumperBase():
self.qtCustomEventFunc = 0
self.qtCustomEventPltFunc = 0
self.qtPropertyFunc = 0
- self.fallbackQtVersion = 0x60200
self.passExceptions = False
self.isTesting = False
+ self.qtLoaded = False
- self.typeData = {}
self.isBigEndian = False
self.packCode = '<'
@@ -197,6 +187,13 @@ class DumperBase():
self.dumpermodules = []
+ # These are sticky for the session
+ self.qtversion = None
+ self.qtversionAtLeast6 = None
+ self.qtnamespace = None
+
+ self.init_type_cache()
+
try:
# Fails in the piping case
self.dumpermodules = [
@@ -217,9 +214,10 @@ class DumperBase():
self.currentPrintsAddress = True
self.currentChildType = None
self.currentChildNumChild = None
- self.registerKnownTypes()
+ self.register_known_simple_types()
def setVariableFetchingOptions(self, args):
+ self.last_args = args
self.resultVarName = args.get('resultvarname', '')
self.expandedINames = args.get('expanded', {})
self.stringCutOff = int(args.get('stringcutoff', 10000))
@@ -238,15 +236,80 @@ class DumperBase():
self.useTimeStamps = int(args.get('timestamps', '0'))
self.partialVariable = args.get('partialvar', '')
self.uninitialized = args.get('uninitialized', [])
+
self.uninitialized = list(map(lambda x: self.hexdecode(x), self.uninitialized))
- self.partialUpdate = int(args.get('partial', '0'))
- #DumperBase.warn('NAMESPACE: "%s"' % self.qtNamespace())
- #DumperBase.warn('EXPANDED INAMES: %s' % self.expandedINames)
- #DumperBase.warn('WATCHERS: %s' % self.watchers)
- def setFallbackQtVersion(self, args):
- version = int(args.get('version', self.fallbackQtVersion))
- self.fallbackQtVersion = version
+ if self.qtversion is None:
+ self.qtversion = args.get('qtversion', None)
+ if self.qtversion == 0:
+ self.qtversion = None
+ if self.qtnamespace is None:
+ self.qtnamespace = args.get('qtnamespace', None)
+
+ #self.warn('NAMESPACE: "%s"' % self.qtNamespace())
+ #self.warn('EXPANDED INAMES: %s' % self.expandedINames)
+ #self.warn('WATCHERS: %s' % self.watchers)
+
+ # Call this with 'py theDumper.profile1() from Creator
+ def profile(self):
+ '''Internal profiling'''
+ import cProfile
+ import visualize
+ profiler = cProfile.Profile()
+ profiler.enable()
+ self.profiled_command()
+ profiler.disable()
+ visualize.profile_visualize(profiler.getstats())
+
+ def profiled_command(self):
+ args = self.last_args
+ args['partialvar'] = ''
+ self.fetchVariables(args)
+
+ def extractQtVersion(self):
+ # can be overridden in bridges
+ pass
+
+ def qtVersion(self):
+ if self.qtversion:
+ return self.qtversion
+
+ #self.warn("ACCESSING UNKNOWN QT VERSION")
+ self.qtversion = self.extractQtVersion()
+ if self.qtversion:
+ return self.qtversion
+
+ #self.warn("EXTRACTING QT VERSION FAILED. GUESSING NOW.")
+ if self.qtversionAtLeast6 is None or self.qtversionAtLeast6 is True:
+ return 0x060602
+ return 0x050f00
+
+ def qtVersionAtLeast(self, version):
+ # A hack to cover most of the changes from Qt 5 to 6
+ if version == 0x60000 and self.qtversionAtLeast6 is not None:
+ return self.qtversionAtLeast6
+ if version == 0x50000: # FIXME: This drops unknown 4.x for now
+ return True
+ return self.qtVersion() >= version
+
+ def qtVersionPing(self, typeid, size_for_qt5=-1):
+ # To be called from places where the type size is sufficient
+ # to distinguish Qt 5.x and 6.x
+ if size_for_qt5 == -1:
+ size_for_qt5 = self.ptrSize()
+ test_size = self.type_size(typeid)
+ self.setQtVersionAtLeast6(test_size > size_for_qt5)
+
+ def setQtVersionAtLeast6(self, is6):
+ if self.qtversionAtLeast6 is None:
+ #self.warn("SETTING Qt VERSION AT LEAST 6 TO %s" % is6)
+ self.qtversionAtLeast6 = is6
+ self.register_known_qt_types()
+ #else:
+ # self.warn("QT VERSION ALREADY KNOWN")
+
+ def qtNamespace(self):
+ return '' if self.qtnamespace is None else self.qtnamespace
def resetPerStepCaches(self):
self.perStepCache = {}
@@ -279,7 +342,6 @@ class DumperBase():
self.generalCache = {}
self.counts = {}
- self.structPatternCache = {}
self.timings = []
self.expandableINames = set({})
@@ -331,7 +393,7 @@ class DumperBase():
self.currentType = ReportItem()
def exitSubItem(self, item, exType, exValue, exTraceBack):
- #DumperBase.warn('CURRENT VALUE: %s: %s %s' %
+ #self.warn('CURRENT VALUE: %s: %s %s' %
# (self.currentIName, self.currentValue, self.currentType))
if exType is not None:
if self.passExceptions:
@@ -341,9 +403,9 @@ class DumperBase():
if not self.isCli:
try:
if self.currentType.value:
- typeName = self.currentType.value
- if len(typeName) > 0 and typeName != self.currentChildType:
- self.putField('type', typeName)
+ typename = self.currentType.value
+ if len(typename) > 0 and typename != self.currentChildType:
+ self.putField('type', typename)
if self.currentValue.value is None:
self.put('value="",encoding="notaccessible",numchild="0",')
else:
@@ -361,8 +423,8 @@ class DumperBase():
self.indent -= 1
try:
if self.currentType.value:
- typeName = self.currentType.value
- self.put('<%s> = {' % typeName)
+ typename = self.currentType.value
+ self.put('<%s> = {' % typename)
if self.currentValue.value is None:
self.put('<not accessible>')
@@ -388,14 +450,14 @@ class DumperBase():
self.currentType = item.savedType
return True
- def stripForFormat(self, typeName):
- if not isinstance(typeName, str):
- raise RuntimeError('Expected string in stripForFormat(), got %s' % type(typeName))
- if typeName in self.cachedFormats:
- return self.cachedFormats[typeName]
+ def stripForFormat(self, typename):
+ if not isinstance(typename, str):
+ raise RuntimeError('Expected string in stripForFormat(), got %s' % type(typename))
+ if typename in self.cachedFormats:
+ return self.cachedFormats[typename]
stripped = ''
inArray = 0
- for c in typeName:
+ for c in typename:
if c == '<':
break
if c == ' ':
@@ -407,59 +469,200 @@ class DumperBase():
if inArray and ord(c) >= 48 and ord(c) <= 57:
continue
stripped += c
- self.cachedFormats[typeName] = stripped
+ self.cachedFormats[typename] = stripped
return stripped
- def templateArgument(self, typeobj, position):
- return typeobj.templateArgument(position)
+ def templateArgument(self, typeobj, index):
+ return self.type_template_argument(typeobj.typeid, index)
def intType(self):
- result = self.lookupType('int')
- self.intType = lambda: result
- return result
+ return self.type_for_int
def charType(self):
- result = self.lookupType('char')
- self.charType = lambda: result
- return result
+ return self.type_for_char
def ptrSize(self):
result = self.lookupType('void*').size()
self.ptrSize = lambda: result
return result
- def lookupType(self, typeName):
- nativeType = self.lookupNativeType(typeName)
- return None if nativeType is None else self.fromNativeType(nativeType)
-
- def registerKnownTypes(self):
- tdata = self.TypeData(self, 'unsigned short')
- tdata.lbitsize = 16
- tdata.lalignment = 2
- tdata.code = TypeCode.Integral
+ def lookupType(self, typename):
+ if not isinstance(typename, str):
+ raise RuntimeError('ARG ERROR FOR lookupType, got %s' % type(typename))
+
+ typeid = self.typeid_for_string(typename)
+ native_type = self.type_nativetype_cache.get(typeid)
+ if native_type is None:
+ native_type = self.lookupNativeType(typename)
+ if native_type is None:
+ #sCANNOT DETERMINE SIZE FOR TYelf.dump_location()
+ self.dump_location()
+ self.warn("TYPEIDS: %s" % self.typeid_cache)
+ self.warn("COULD NOT FIND TYPE '%s'" % typename)
+ return None
- tdata = self.TypeData(self, 'QChar')
- tdata.lbitsize = 16
- tdata.lalignment = 2
- tdata.code = TypeCode.Struct
- tdata.lfields = [self.Field(dumper=self, name='ucs',
- type='unsigned short', bitsize=16, bitpos=0)]
- tdata.templateArguments = lambda: []
+ self.type_nativetype_cache[typeid] = native_type
+ typeid = self.from_native_type(native_type)
+ if typeid == 0:
+ return None
+ return self.Type(self, typeid)
+
+ def register_type(self, name, code, size, enc=None):
+ typeid = self.typeid_for_string(name)
+ self.type_code_cache[typeid] = code
+ self.type_size_cache[typeid] = size
+ self.type_alignment_cache[typeid] = size
+ if enc is not None:
+ self.type_encoding_cache[typeid] = enc
+ return typeid
+
+ def register_int(self, name, size, enc=None):
+ typeid = self.typeid_for_string(name)
+ self.type_code_cache[typeid] = TypeCode.Integral
+ self.type_size_cache[typeid] = size
+ self.type_alignment_cache[typeid] = size
+ if enc is not None:
+ self.type_encoding_cache[typeid] = enc
+ return typeid
+
+ def register_enum(self, name, size):
+ typeid = self.typeid_for_string(name)
+ self.type_code_cache[typeid] = TypeCode.Enum
+ self.type_size_cache[typeid] = size
+ self.type_alignment_cache[typeid] = size
+ return typeid
+
+ def register_typedef(self, name, target_typeid):
+ typeid = self.typeid_for_string(name)
+ self.type_code_cache[typeid] = TypeCode.Typedef
+ self.type_target_cache[typeid] = target_typeid
+ self.type_size_cache[typeid] = self.type_size_cache[target_typeid]
+ self.type_alignment_cache[typeid] = self.type_alignment_cache[target_typeid]
+ return typeid
+
+ def register_struct(self, name, p5=0, p6=0, s=0, qobject_based=False):
+ # p5 = n -> n * ptrsize for Qt 5
+ # p6 = n -> n * ptrsize for Qt 6
+ if self.qtversionAtLeast6 is None:
+ self.warn("TOO EARLY TO GUESS QT VERSION")
+ size = 8 * p6 + s
+ elif self.qtversionAtLeast6 is True:
+ size = 8 * p6 + s
+ else:
+ size = 8 * p5 + s
+ typeid = self.typeid_for_string(name)
+ self.type_code_cache[typeid] = TypeCode.Struct
+ self.type_size_cache[typeid] = size
+ self.type_qobject_based_cache[typeid] = qobject_based
+ self.type_alignment_cache[typeid] = 8
+ return typeid
+
+ def register_known_simple_types(self):
+ typeid = 0
+ self.typeid_cache[''] = typeid
+ self.type_code_cache[typeid] = TypeCode.Void
+ self.type_name_cache[typeid] = '<Error>'
+ self.type_size_cache[typeid] = 1
+
+ typeid_char = self.register_int('char', 1, 'uint:1')
+ self.type_for_char = self.Type(self, typeid_char)
+ self.register_int('signed char', 1, 'int:1')
+ self.register_int('unsigned char', 1, 'uint:1')
+ self.register_int('bool', 1, 'uint:1')
+ self.register_int('char8_t', 1, 'uint:1')
+ self.register_int('int8_t', 1, 'int:1')
+ self.register_int('uint8_t', 1, 'uint:1')
+ self.register_int('qint8', 1, 'int:1')
+ self.register_int('quint8', 1, 'uint:1')
+
+ self.register_int('short', 2, 'int:2')
+ self.register_int('short int', 2, 'int:2')
+ self.register_int('signed short', 2, 'int:2')
+ self.register_int('signed short int', 2, 'int:2')
+ typeid_unsigned_short = \
+ self.register_int('unsigned short', 2, 'uint:2')
+ self.register_int('unsigned short int', 2, 'uint:2')
+ self.register_int('char16_t', 2, 'uint:2')
+ self.register_int('int16_t', 2, 'int:2')
+ self.register_int('uint16_t', 2, 'uint:2')
+ self.register_int('qint16', 2, 'int:2')
+ self.register_int('quint16', 2, 'uint:2')
+
+ typeid_int = self.register_type('int', 4, 'int:4')
+ self.type_for_int = self.Type(self, typeid_int)
+ self.register_int('int', 4, 'int:4')
+ self.register_int('signed int', 4, 'int:4')
+ self.register_int('unsigned int', 4, 'uint:4')
+ self.register_int('char32_t', 4, 'int:4')
+ self.register_int('int32_t', 4, 'int:4')
+ self.register_int('uint32_t', 4, 'uint:4')
+ self.register_int('qint32', 4, 'int:4')
+ self.register_int('quint32', 4, 'uint:4')
+
+ self.register_int('long long', 8, 'int:8')
+ self.register_int('signed long long', 8, 'int:8')
+ self.register_int('unsigned long long', 8, 'uint:8')
+ self.register_int('int64_t', 8, 'int:8')
+ self.register_int('uint64_t', 8, 'uint:8')
+ self.register_int('qint64', 8, 'int:8')
+ self.register_int('quint64', 8, 'uint:8')
+
+ self.register_type('float', TypeCode.Float, 4, 'float:4')
+ typeid_double = self.register_type('double', TypeCode.Float, 8, 'float:8')
+ self.register_typedef('qreal', typeid_double)
+
+ typeid_qchar = self.register_type('@QChar', TypeCode.Struct, 2, 'uint:2')
+ #self.type_fields_cache[typeid_qchar] = [
+ # self.Field(name='ucs', typeid=typeid_unsigned_short, bitsize=16, bitpos=0)]
+
+ self.register_enum('@Qt::ItemDataRole', 4)
+
+ def register_known_qt_types(self):
+ #self.warn("REGISTERING KNOWN QT TYPES NOW")
+ self.register_struct('@QObject', p5=2, p6=2, qobject_based=True)
+ self.register_struct('@QObjectPrivate', p5=10, p6=10) # FIXME: Not exact
+
+ self.register_struct('@QByteArray', p5=1, p6=3)
+ self.register_struct('@QString', p5=1, p6=3)
+ self.register_struct('@QStandardItemData', p5=3, p6=5)
+ self.register_struct('@QVariant', p5=2, p6=4)
+ self.register_struct('@QXmlAttributes::Attribute', p5=4, p6=12)
+
+ self.register_struct('@QList<@QObject*>', p5=1, p6=3)
+ self.register_struct('@QList<@QStandardItemData>', p5=1, p6=3)
+ self.register_struct('@QList<@QRect>', p5=1, p6=3)
+
+ typeid_var_list = self.register_struct('@QList<@QVariant>', p5=1, p6=3)
+ self.register_typedef('@QVariantList', typeid_var_list)
+
+ typeid_var_map = self.register_struct('@QMap<@QString, @QVariant>', p5=1, p6=1)
+ self.register_typedef('@QVariantMap', typeid_var_map)
+
+ typeid_var_hash = self.register_struct('@QHash<@QString, @QVariant>', p5=1, p6=1)
+ self.register_typedef('@QVariantHash', typeid_var_hash)
+
+ self.register_struct('@QPoint', s=8)
+ self.register_struct('@QPointF', s=16)
+ self.register_struct('@QLine', s=16)
+ self.register_struct('@QLineF', s=32)
+
+ # FIXME: Comment out for production, see [MARK_A]
+ name1 = 'std::__cxx11::basic_string<char,std::char_traits<char>,std::allocator<char>>'
+ self.register_struct(name1, p6=4)
def nativeDynamicType(self, address, baseType):
return baseType # Override in backends.
- def listTemplateParameters(self, typename):
- return self.listTemplateParametersManually(typename)
-
- def listTemplateParametersManually(self, typename):
+ def fill_template_parameters_manually(self, typeid):
+ typename = self.type_name(typeid)
# Undo id mangling for template typedefs. Relevant for QPair.
if typename.endswith('}'):
typename = typename[typename.find('{') + 1 : -1]
- targs = []
if not typename.endswith('>'):
- return targs
+ return
+
+ targs = []
def push(inner):
# Handle local struct definitions like QList<main(int, char**)::SomeStruct>
@@ -471,14 +674,14 @@ class DumperBase():
inner = inner[6:].strip()
if inner.endswith(' const'):
inner = inner[:-6].strip()
- #DumperBase.warn("FOUND: %s" % inner)
+ #self.warn("FOUND: %s" % inner)
targs.append(inner)
- #DumperBase.warn("SPLITTING %s" % typename)
+ #self.warn("SPLITTING %s" % typename)
level = 0
inner = ''
for c in typename[::-1]: # Reversed...
- #DumperBase.warn("C: %s" % c)
+ #self.warn("C: %s" % c)
if c == '>':
if level > 0:
inner += c
@@ -492,7 +695,7 @@ class DumperBase():
inner = ''
break
elif c == ',':
- #DumperBase.warn('c: %s level: %s' % (c, level))
+ #self.warn('c: %s level: %s' % (c, level))
if level == 1:
push(inner)
inner = ''
@@ -501,35 +704,38 @@ class DumperBase():
else:
inner += c
- #DumperBase.warn("TARGS: %s %s" % (typename, targs))
- res = []
+ #self.warn("TARGS: %s %s" % (typename, targs))
+ idx = 0
for item in targs[::-1]:
if len(item) == 0:
continue
- c = ord(item[0])
- if c in (45, 46) or (c >= 48 and c < 58): # '-', '.' or digit.
- if item.find('.') > -1:
- res.append(float(item))
- else:
- if item.endswith('l'):
- item = item[:-1]
- if item.endswith('u'):
- item = item[:-1]
- val = toInteger(item)
- if val > 0x80000000:
- val -= 0x100000000
- res.append(val)
+ if item == "false": # Triggered in StdTuple dumper
+ self.type_template_arguments_cache[(typeid, idx)] = False
+ elif item == "true":
+ self.type_template_arguments_cache[(typeid, idx)] = True
else:
- res.append(self.Type(self, item))
- #DumperBase.warn("RES: %s %s" % (typename, [(None if t is None else t.name) for t in res]))
- return res
+ c = ord(item[0])
+ if c in (45, 46) or (c >= 48 and c < 58): # '-', '.' or digit.
+ if '.' in item:
+ res.append(float(item))
+ else:
+ if item.endswith('l'):
+ item = item[:-1]
+ if item.endswith('u'):
+ item = item[:-1]
+ val = int(item)
+ if val > 0x80000000:
+ val -= 0x100000000
+ self.type_template_arguments_cache[(typeid, idx)] = val
+ else:
+ targ = self.Type(self, self.create_typeid_from_name(item))
+ self.type_template_arguments_cache[(typeid, idx)] = targ
+ idx += 1
+ #self.warn('MANUAL: %s %s' % (type_name, targs))
# Hex decoding operating on str, return str.
@staticmethod
def hexdecode(s, encoding='utf8'):
- if sys.version_info[0] == 2:
- # For python2 we need an extra str() call to return str instead of unicode
- return str(s.decode('hex').decode(encoding))
return bytes.fromhex(s).decode(encoding)
# Hex encoding operating on str or bytes, return str.
@@ -537,10 +743,6 @@ class DumperBase():
def hexencode(s):
if s is None:
s = ''
- if sys.version_info[0] == 2:
- if isinstance(s, buffer):
- return bytes(s).encode('hex')
- return s.encode('hex')
if isinstance(s, str):
s = s.encode('utf8')
return hexencode_(s)
@@ -558,9 +760,9 @@ class DumperBase():
return limit
def vectorData(self, value):
- if self.qtVersion() >= 0x060000:
+ if self.qtVersionAtLeast(0x060000):
data, length, alloc = self.qArrayData(value)
- elif self.qtVersion() >= 0x050000:
+ elif self.qtVersionAtLeast(0x050000):
vector_data_ptr = self.extractPointer(value)
if self.ptrSize() == 4:
(ref, length, alloc, offset) = self.split('IIIp', vector_data_ptr)
@@ -576,7 +778,7 @@ class DumperBase():
return data, length
def qArrayData(self, value):
- if self.qtVersion() >= 0x60000:
+ if self.qtVersionAtLeast(0x60000):
dd, data, length = self.split('ppp', value)
if dd:
_, _, alloc = self.split('iip', dd)
@@ -587,7 +789,7 @@ class DumperBase():
def qArrayDataHelper(self, array_data_ptr):
# array_data_ptr is what is e.g. stored in a QByteArray's d_ptr.
- if self.qtVersion() >= 0x050000:
+ if self.qtVersionAtLeast(0x050000):
# QTypedArray:
# - QtPrivate::RefCount ref
# - int length
@@ -600,7 +802,7 @@ class DumperBase():
data = data & 0xffffffff
else:
data = data & 0xffffffffffffffff
- elif self.qtVersion() >= 0x040000:
+ elif self.qtVersionAtLeast(0x040000):
# Data:
# - QBasicAtomicInt ref;
# - int alloc, length;
@@ -619,7 +821,7 @@ class DumperBase():
(dummy, dummy, dummy, length) = self.split('IIIp', array_data_ptr)
length = self.extractInt(array_data_ptr + 3 * self.ptrSize()) & 0x3ffffff
alloc = length # pretend.
- data = self.extractPointer(array_data_ptr + self.ptrSize())
+ data = self.extract_pointer_at_address(array_data_ptr + self.ptrSize())
return data, length, alloc
def encodeStringHelper(self, value, limit):
@@ -666,14 +868,14 @@ class DumperBase():
displayFormat=DisplayFormat.Automatic,
makeExpandable=True):
charSize = charType.size()
- self.putCharArrayValue(data, size, charSize, displayFormat=displayFormat)
+ self.putCharArrayValue(data, size, charSize, displayFormat)
if makeExpandable:
self.putNumChild(size)
if self.isExpanded():
with Children(self):
for i in range(size):
- self.putSubItem(size, self.createValue(data + i * charSize, charType))
+ self.putSubItem(size, self.createValueFromAddress(data + i * charSize, charType))
def readMemory(self, addr, size):
return self.hexencode(bytes(self.readRawMemory(addr, size)))
@@ -699,39 +901,6 @@ class DumperBase():
def stringData(self, value): # -> (data, size, alloc)
return self.qArrayData(value)
- def extractTemplateArgument(self, typename, position):
- level = 0
- skipSpace = False
- inner = ''
- for c in typename[typename.find('<') + 1: -1]:
- if c == '<':
- inner += c
- level += 1
- elif c == '>':
- level -= 1
- inner += c
- elif c == ',':
- if level == 0:
- if position == 0:
- return inner.strip()
- position -= 1
- inner = ''
- else:
- inner += c
- skipSpace = True
- else:
- if skipSpace and c == ' ':
- pass
- else:
- inner += c
- skipSpace = False
- # Handle local struct definitions like QList<main(int, char**)::SomeStruct>
- inner = inner.strip()
- p = inner.find(')::')
- if p > -1:
- inner = inner[p + 3:]
- return inner
-
def putStringValue(self, value):
length, data = self.encodeStringHelper(value, self.displayStringLimit)
self.putValue(data, 'utf16', length=length)
@@ -750,10 +919,9 @@ class DumperBase():
self.putType('int')
def putEnumItem(self, name, ival, typish):
- buf = bytearray(struct.pack('i', ival))
val = self.Value(self)
- val.ldata = bytes(buf)
- val._type = self.createType(typish)
+ val.ldata = ival
+ val.typeid = self.create_typeid(typish)
with SubItem(self, name):
self.putItem(val)
@@ -826,15 +994,19 @@ class DumperBase():
def putSymbolValue(self, address):
self.putValue(self.prettySymbolByAddress(address))
- def putVTableChildren(self, item, itemCount):
- p = item.pointer()
+ def putVTableChildren(self, value, itemCount):
+ p = self.value_as_address(value)
+ entry_typeid = self.create_pointer_typeid(self.create_typeid('void'))
for i in range(itemCount):
- deref = self.extractPointer(p)
+ deref = self.extract_pointer_at_address(p)
if deref == 0:
itemCount = i
break
with SubItem(self, i):
- self.putItem(self.createPointerValue(deref, 'void'))
+ val = self.Value(self)
+ val.ldata = deref
+ val.typeid = entry_typeid
+ self.putItem(val)
p += self.ptrSize()
return itemCount
@@ -842,7 +1014,9 @@ class DumperBase():
baseIndex = 0
for item in value.members(True):
if item.name is not None:
- if item.name.startswith('_vptr.') or item.name.startswith('__vfptr'):
+ if (item.name.startswith('_vptr.')
+ or item.name.startswith('_vptr$')
+ or item.name.startswith('__vfptr')):
with SubItem(self, '[vptr]'):
# int (**)(void)
self.putType(' ')
@@ -892,15 +1066,22 @@ class DumperBase():
def check(self, exp):
if not exp:
+ self.warn('Check failed: %s' % exp)
+ self.dump_location()
raise RuntimeError('Check failed: %s' % exp)
+ def check_typeid(self, typeid):
+ if not isinstance(typeid, int):
+ size = self.type_size_cache.get(typeid, None)
+ raise RuntimeError('WRONG TYPE FOR TYPEID: %s %s' % (str(typeid), type(typeid)))
+
def checkRef(self, ref):
# Assume there aren't a million references to any object.
self.check(ref >= -1)
self.check(ref < 1000000)
def checkIntType(self, thing):
- if not self.isInt(thing):
+ if not isinstance(thing, int):
raise RuntimeError('Expected an integral value, got %s' % type(thing))
def readToFirstZero(self, base, typesize, maximum):
@@ -919,7 +1100,7 @@ class DumperBase():
maximum = int(maximum / 2)
self.warn('REDUCING READING MAXIMUM TO %s' % maximum)
- #DumperBase.warn('BASE: 0x%x TSIZE: %s MAX: %s' % (base, typesize, maximum))
+ #self.warn('BASE: 0x%x TSIZE: %s MAX: %s' % (base, typesize, maximum))
for i in range(0, maximum, typesize):
t = struct.unpack_from(code, blob, i)[0]
if t == 0:
@@ -1039,11 +1220,14 @@ class DumperBase():
def putType(self, typish, priority=0):
# Higher priority values override lower ones.
if priority >= self.currentType.priority:
- types = (str) if sys.version_info[0] >= 3 else (str, unicode)
- if isinstance(typish, types):
+ if isinstance(typish, str):
self.currentType.value = typish
- else:
+ elif isinstance(typish, int):
+ self.currentType.value = self.type_name(typish)
+ elif isinstance(typish, self.Type):
self.currentType.value = typish.name
+ else:
+ self.currentType.value = str(type(typish))
self.currentType.priority = priority
def putValue(self, value, encoding=None, priority=0, length=None):
@@ -1095,23 +1279,26 @@ class DumperBase():
self.putItem(value)
def isExpanded(self):
- #DumperBase.warn('IS EXPANDED: %s in %s: %s' % (self.currentIName,
+ #self.warn('IS EXPANDED: %s in %s: %s' % (self.currentIName,
# self.expandedINames, self.currentIName in self.expandedINames))
return self.currentIName in self.expandedINames
- def mangleName(self, typeName):
+ def mangleName(self, typename):
return '_ZN%sE' % ''.join(map(lambda x: '%d%s' % (len(x), x),
- typeName.split('::')))
+ typename.split('::')))
- def arrayItemCountFromTypeName(self, typeName, fallbackMax=1):
- itemCount = typeName[typeName.find('[') + 1:typeName.find(']')]
+ def arrayItemCountFromTypeName(self, typename, fallbackMax=1):
+ itemCount = typename[typename.find('[') + 1:typename.find(']')]
return int(itemCount) if itemCount else fallbackMax
def putCStyleArray(self, value):
- arrayType = value.type.unqualified()
- innerType = arrayType.ltarget
+ arrayType = value.type
+ innerType = arrayType.target()
+ #self.warn("ARRAY TYPE: %s" % arrayType)
+ #self.warn("INNER TYPE: %s" % innerType)
if innerType is None:
- innerType = value.type.target().unqualified()
+ innerType = value.type.target()
+
address = value.address()
if address:
self.putValue('@0x%x' % address, priority=-1)
@@ -1161,19 +1348,19 @@ class DumperBase():
def cleanAddress(self, addr):
if addr is None:
return '<no address>'
- return '0x%x' % toInteger(hex(addr), 16)
+ return '0x%x' % int(hex(addr), 16)
- def stripNamespaceFromType(self, typeName):
+ def stripNamespaceFromType(self, typename):
ns = self.qtNamespace()
- if len(ns) > 0 and typeName.startswith(ns):
- typeName = typeName[len(ns):]
- # DumperBase.warn( 'stripping %s' % typeName )
+ if len(ns) > 0 and typename.startswith(ns):
+ typename = typename[len(ns):]
+ # self.warn( 'stripping %s' % typename )
lvl = 0
pos = None
stripChunks = []
- sz = len(typeName)
+ sz = len(typename)
for index in range(0, sz):
- s = typeName[index]
+ s = typename[index]
if s == '<':
lvl += 1
if lvl == 1:
@@ -1188,22 +1375,22 @@ class DumperBase():
if lvl != 0:
raise RuntimeError("unbalanced at end of type name")
for (f, l) in reversed(stripChunks):
- typeName = typeName[:f] + typeName[l:]
- return typeName
+ typename = typename[:f] + typename[l:]
+ return typename
- def tryPutPrettyItem(self, typeName, value):
+ def tryPutPrettyItem(self, typename, value):
value.check()
if self.useFancy and self.currentItemFormat() != DisplayFormat.Raw:
- self.putType(typeName)
+ self.putType(typename)
- nsStrippedType = self.stripNamespaceFromType(typeName)\
+ nsStrippedType = self.stripNamespaceFromType(typename)\
.replace('::', '__')
# Strip leading 'struct' for C structs
if nsStrippedType.startswith('struct '):
nsStrippedType = nsStrippedType[7:]
- #DumperBase.warn('STRIPPED: %s' % nsStrippedType)
+ #self.warn('STRIPPED: %s' % nsStrippedType)
# The following block is only needed for D.
if nsStrippedType.startswith('_A'):
# DMD v2.058 encodes string[] as _Array_uns long long.
@@ -1216,7 +1403,7 @@ class DumperBase():
return True
dumper = self.qqDumpers.get(nsStrippedType)
- #DumperBase.warn('DUMPER: %s' % dumper)
+ #self.warn('DUMPER: %s' % dumper)
if dumper is not None:
dumper(self, value)
return True
@@ -1242,15 +1429,15 @@ class DumperBase():
self.putField('editvalue', value)
# This is shared by pointer and array formatting.
- def tryPutSimpleFormattedPointer(self, ptr, typeName, innerType, displayFormat, limit):
+ def tryPutSimpleFormattedPointer(self, ptr, typename, innerType, displayFormat, limit):
if displayFormat == DisplayFormat.Automatic:
targetType = innerType
if innerType.code == TypeCode.Typedef:
- targetType = innerType.ltarget
+ targetType = innerType.target()
if targetType.name in ('char', 'signed char', 'unsigned char', 'uint8_t', 'CHAR'):
# Use UTF-8 as default for char *.
- self.putType(typeName)
+ self.putType(typename)
(length, shown, data) = self.readToFirstZero(ptr, 1, limit)
self.putValue(data, 'utf8', length=length)
if self.isExpanded():
@@ -1258,7 +1445,7 @@ class DumperBase():
return True
if targetType.name in ('wchar_t', 'WCHAR'):
- self.putType(typeName)
+ self.putType(typename)
charSize = self.lookupType('wchar_t').size()
(length, data) = self.encodeCArray(ptr, charSize, limit)
if charSize == 2:
@@ -1268,58 +1455,54 @@ class DumperBase():
return True
if displayFormat == DisplayFormat.Latin1String:
- self.putType(typeName)
+ self.putType(typename)
(length, data) = self.encodeCArray(ptr, 1, limit)
self.putValue(data, 'latin1', length=length)
return True
if displayFormat == DisplayFormat.SeparateLatin1String:
- self.putType(typeName)
+ self.putType(typename)
(length, data) = self.encodeCArray(ptr, 1, limit)
self.putValue(data, 'latin1', length=length)
self.putDisplay('latin1:separate', data)
return True
if displayFormat == DisplayFormat.Utf8String:
- self.putType(typeName)
+ self.putType(typename)
(length, data) = self.encodeCArray(ptr, 1, limit)
self.putValue(data, 'utf8', length=length)
return True
if displayFormat == DisplayFormat.SeparateUtf8String:
- self.putType(typeName)
+ self.putType(typename)
(length, data) = self.encodeCArray(ptr, 1, limit)
self.putValue(data, 'utf8', length=length)
self.putDisplay('utf8:separate', data)
return True
if displayFormat == DisplayFormat.Local8BitString:
- self.putType(typeName)
+ self.putType(typename)
(length, data) = self.encodeCArray(ptr, 1, limit)
self.putValue(data, 'local8bit', length=length)
return True
if displayFormat == DisplayFormat.Utf16String:
- self.putType(typeName)
+ self.putType(typename)
(length, data) = self.encodeCArray(ptr, 2, limit)
self.putValue(data, 'utf16', length=length)
return True
if displayFormat == DisplayFormat.Ucs4String:
- self.putType(typeName)
+ self.putType(typename)
(length, data) = self.encodeCArray(ptr, 4, limit)
self.putValue(data, 'ucs4', length=length)
return True
return False
- def putFormattedPointer(self, value):
- #with self.timer('formattedPointer'):
- self.putFormattedPointerX(value)
-
def putDerefedPointer(self, value):
- derefValue = value.dereference()
- innerType = value.type.target() # .unqualified()
+ derefValue = self.value_dereference(value)
+ innerType = value.type.target()
self.putType(innerType)
savedCurrentChildType = self.currentChildType
self.currentChildType = innerType.name
@@ -1332,47 +1515,47 @@ class DumperBase():
self.putItem(derefValue)
self.currentChildType = savedCurrentChildType
- def putFormattedPointerX(self, value):
+ def putFormattedPointer(self, value):
self.putOriginalAddress(value.address())
- #DumperBase.warn("PUT FORMATTED: %s" % value)
- pointer = value.pointer()
+ #self.warn("PUT FORMATTED: %s" % value)
+ pointer = self.value_as_address(value)
self.putAddress(pointer)
- #DumperBase.warn('POINTER: 0x%x' % pointer)
+ #self.warn('POINTER: 0x%x' % pointer)
if pointer == 0:
- #DumperBase.warn('NULL POINTER')
- self.putType(value.type)
+ #self.warn('NULL POINTER')
+ self.putType(value.typeid)
self.putValue('0x0')
return
- typeName = value.type.name
+ typename = self.type_name(value.typeid)
try:
self.readRawMemory(pointer, 1)
except:
# Failure to dereference a pointer should at least
# show the value of a pointer.
- #DumperBase.warn('BAD POINTER: %s' % value)
+ #self.warn('BAD POINTER: %s' % value)
self.putValue('0x%x' % pointer)
- self.putType(typeName)
+ self.putType(typename)
return
if self.currentIName.endswith('.this'):
self.putDerefedPointer(value)
return
- displayFormat = self.currentItemFormat(value.type.name)
- innerType = value.type.target() # .unqualified()
+ displayFormat = self.currentItemFormat(typename)
+ innerType = value.type.target()
if innerType.name == 'void':
- #DumperBase.warn('VOID POINTER: %s' % displayFormat)
- self.putType(typeName)
+ #self.warn('VOID POINTER: %s' % displayFormat)
+ self.putType(typename)
self.putSymbolValue(pointer)
return
if displayFormat == DisplayFormat.Raw:
# Explicitly requested bald pointer.
- #DumperBase.warn('RAW')
- self.putType(typeName)
+ #self.warn('RAW')
+ self.putType(typename)
self.putValue('0x%x' % pointer)
self.putExpandable()
if self.currentIName in self.expandedINames:
@@ -1384,27 +1567,27 @@ class DumperBase():
limit = self.displayStringLimit
if displayFormat in (DisplayFormat.SeparateLatin1String, DisplayFormat.SeparateUtf8String):
limit = 1000000
- if self.tryPutSimpleFormattedPointer(pointer, typeName,
+ if self.tryPutSimpleFormattedPointer(pointer, typename,
innerType, displayFormat, limit):
self.putExpandable()
return
if DisplayFormat.Array10 <= displayFormat and displayFormat <= DisplayFormat.Array10000:
n = (10, 100, 1000, 10000)[displayFormat - DisplayFormat.Array10]
- self.putType(typeName)
+ self.putType(typename)
self.putItemCount(n)
- self.putArrayData(value.pointer(), n, innerType)
+ self.putArrayData(self.value_as_address(value), n, innerType)
return
if innerType.code == TypeCode.Function:
# A function pointer.
self.putSymbolValue(pointer)
- self.putType(typeName)
+ self.putType(typename)
return
- #DumperBase.warn('AUTODEREF: %s' % self.autoDerefPointers)
- #DumperBase.warn('INAME: %s' % self.currentIName)
- #DumperBase.warn('INNER: %s' % innerType.name)
+ #self.warn('AUTODEREF: %s' % self.autoDerefPointers)
+ #self.warn('INAME: %s' % self.currentIName)
+ #self.warn('INNER: %s' % innerType.name)
if self.autoDerefPointers:
# Generic pointer type with AutomaticFormat, but never dereference char types:
if innerType.name not in (
@@ -1425,9 +1608,9 @@ class DumperBase():
self.putDerefedPointer(value)
return
- #DumperBase.warn('GENERIC PLAIN POINTER: %s' % value.type)
- #DumperBase.warn('ADDR PLAIN POINTER: 0x%x' % value.laddress)
- self.putType(typeName)
+ #self.warn('GENERIC PLAIN POINTER: %s' % value.type)
+ #self.warn('ADDR PLAIN POINTER: 0x%x' % value.laddress)
+ self.putType(typename)
self.putSymbolValue(pointer)
self.putExpandable()
if self.currentIName in self.expandedINames:
@@ -1439,7 +1622,22 @@ class DumperBase():
if address is not None:
self.put('origaddr="0x%x",' % address)
+ def wantQObjectNames(self):
+ return self.showQObjectNames and self.qtLoaded
+
+ def fetchInternalFunctions(self):
+ # Overrridden
+ pass
+
def putQObjectNameValue(self, value):
+ is_qobject_based = self.type_qobject_based_cache.get(value.typeid, None)
+ if is_qobject_based == False:
+ #self.warn("SKIP TEST OBJNAME: %s" % self.type_name(value.typeid))
+ return
+
+ #self.warn("TEST OBJNAME: %s" % self.type_name(value.typeid))
+ self.fetchInternalFunctions()
+
try:
# dd = value['d_ptr']['d'] is just behind the vtable.
(vtable, dd) = self.split('pp', value)
@@ -1448,7 +1646,7 @@ class DumperBase():
intSize = 4
ptrSize = self.ptrSize()
- if self.qtVersion() >= 0x060000:
+ if self.qtVersionAtLeast(0x060000):
# Size of QObjectData: 9 pointer + 2 int
# - vtable
# - QObject *q_ptr;
@@ -1458,7 +1656,7 @@ class DumperBase():
# - int postedEvents;
# - QDynamicMetaObjectData *metaObject;
# - QBindingStorage bindingStorage;
- extra = self.extractPointer(dd + 9 * ptrSize + 2 * intSize)
+ extra = self.extract_pointer_at_address(dd + 9 * ptrSize + 2 * intSize)
if extra == 0:
return False
@@ -1469,7 +1667,7 @@ class DumperBase():
# - QList<QPointer<QObject> > eventFilters;
# - QString objectName
objectNameAddress = extra + 12 * ptrSize
- elif self.qtVersion() >= 0x050000:
+ elif self.qtVersionAtLeast(0x050000):
# Size of QObjectData: 5 pointer + 2 int
# - vtable
# - QObject *q_ptr;
@@ -1478,7 +1676,7 @@ class DumperBase():
# - uint isWidget : 1; etc...
# - int postedEvents;
# - QDynamicMetaObjectData *metaObject;
- extra = self.extractPointer(dd + 5 * ptrSize + 2 * intSize)
+ extra = self.extract_pointer_at_address(dd + 5 * ptrSize + 2 * intSize)
if extra == 0:
return False
@@ -1582,7 +1780,7 @@ class DumperBase():
try:
customEventOffset = 8 if self.isMsvcTarget() else 9
- customEventFunc = self.extractPointer(vtablePtr + customEventOffset * self.ptrSize())
+ customEventFunc = self.extract_pointer_at_address(vtablePtr + customEventOffset * self.ptrSize())
except:
self.bump('nostruct-3')
return False
@@ -1594,7 +1792,7 @@ class DumperBase():
customEventFunc = getJumpAddress_x86(self, customEventFunc)
if customEventFunc in (self.qtCustomEventFunc, self.qtCustomEventPltFunc):
return True
- customEventFunc = self.extractPointer(customEventFunc)
+ customEventFunc = self.extract_pointer_at_address(customEventFunc)
if customEventFunc in (self.qtCustomEventFunc, self.qtCustomEventPltFunc):
return True
# If the object is defined in another module there may be another level of indirection
@@ -1603,18 +1801,18 @@ class DumperBase():
return customEventFunc in (self.qtCustomEventFunc, self.qtCustomEventPltFunc)
# def extractQObjectProperty(objectPtr):
-# vtablePtr = self.extractPointer(objectPtr)
-# metaObjectFunc = self.extractPointer(vtablePtr)
+# vtablePtr = self.extract_pointer_at_address(objectPtr)
+# metaObjectFunc = self.extract_pointer_at_address(vtablePtr)
# cmd = '((void*(*)(void*))0x%x)((void*)0x%x)' % (metaObjectFunc, objectPtr)
# try:
-# #DumperBase.warn('MO CMD: %s' % cmd)
+# #self.warn('MO CMD: %s' % cmd)
# res = self.parseAndEvaluate(cmd)
-# #DumperBase.warn('MO RES: %s' % res)
+# #self.warn('MO RES: %s' % res)
# self.bump('successfulMetaObjectCall')
-# return res.pointer()
+# return self.value_as_address(res)
# except:
# self.bump('failedMetaObjectCall')
-# #DumperBase.warn('COULD NOT EXECUTE: %s' % cmd)
+# #self.warn('COULD NOT EXECUTE: %s' % cmd)
# return 0
def extractMetaObjectPtr(self, objectPtr, typeobj):
@@ -1631,29 +1829,29 @@ class DumperBase():
# contents 'vanishes' as the reported size of the string
# gets zeroed out(?).
# Try vtable, metaObject() is the first entry.
- vtablePtr = self.extractPointer(objectPtr)
- metaObjectFunc = self.extractPointer(vtablePtr)
+ vtablePtr = self.extract_pointer_at_address(objectPtr)
+ metaObjectFunc = self.extract_pointer_at_address(vtablePtr)
cmd = '((void*(*)(void*))0x%x)((void*)0x%x)' % (metaObjectFunc, objectPtr)
try:
- #DumperBase.warn('MO CMD: %s' % cmd)
+ #self.warn('MO CMD: %s' % cmd)
res = self.parseAndEvaluate(cmd)
- #DumperBase.warn('MO RES: %s' % res)
+ #self.warn('MO RES: %s' % res)
self.bump('successfulMetaObjectCall')
- return res.pointer()
+ return self.value_as_address(res)
except:
self.bump('failedMetaObjectCall')
- #DumperBase.warn('COULD NOT EXECUTE: %s' % cmd)
+ #self.warn('COULD NOT EXECUTE: %s' % cmd)
return 0
def extractStaticMetaObjectFromTypeHelper(someTypeObj):
if someTypeObj.isSimpleType():
return 0
- typeName = someTypeObj.name
- isQObjectProper = typeName == self.qtNamespace() + 'QObject'
+ typename = someTypeObj.name
+ isQObjectProper = typename == self.qtNamespace() + 'QObject'
# No templates for now.
- if typeName.find('<') >= 0:
+ if typename.find('<') >= 0:
return 0
result = self.findStaticMetaObject(someTypeObj)
@@ -1662,7 +1860,7 @@ class DumperBase():
# a Q_OBJECT SMO has a non-null superdata (unless it's QObject itself),
# a Q_GADGET SMO has a null superdata (hopefully)
if result and not isQObjectProper:
- if self.qtVersion() >= 0x60000 and self.isWindowsTarget():
+ if self.qtVersionAtLeast(0x60000) and self.isWindowsTarget():
(direct, indirect) = self.split('pp', result)
# since Qt 6 there is an additional indirect super data getter on windows
if direct == 0 and indirect == 0:
@@ -1706,16 +1904,16 @@ class DumperBase():
ptrSize = self.ptrSize()
- typeName = typeobj.name
- result = self.knownStaticMetaObjects.get(typeName, None)
+ typename = typeobj.name
+ result = self.knownStaticMetaObjects.get(typename, None)
if result is not None: # Is 0 or the static metaobject.
self.bump('typecached')
- #DumperBase.warn('CACHED RESULT: %s %s 0x%x' % (self.currentIName, typeName, result))
+ #self.warn('CACHED RESULT: %s %s 0x%x' % (self.currentIName, typename, result))
return result
if not self.couldBeQObjectPointer(objectPtr):
self.bump('cannotBeQObject')
- #DumperBase.warn('DOES NOT LOOK LIKE A QOBJECT: %s' % self.currentIName)
+ #self.warn('DOES NOT LOOK LIKE A QOBJECT: %s' % self.currentIName)
return 0
metaObjectPtr = 0
@@ -1731,38 +1929,29 @@ class DumperBase():
#if metaObjectPtr:
# self.bump('foundMetaObject')
- # self.knownStaticMetaObjects[typeName] = metaObjectPtr
+ # self.8;
return metaObjectPtr
- def split(self, pattern, value):
- if isinstance(value, self.Value):
- return value.split(pattern)
- if self.isInt(value):
- val = self.Value(self)
- val.laddress = value
- return val.split(pattern)
- raise RuntimeError('CANNOT EXTRACT STRUCT FROM %s' % type(value))
-
def extractCString(self, addr):
result = bytearray()
while True:
- d = self.extractByte(addr)
- if d == 0:
+ d = bytes(self.readRawMemory(addr, 1))
+ if d[0] == 0:
break
- result.append(d)
+ result += d
addr += 1
return result
def listData(self, value, check=True):
- if self.qtVersion() >= 0x60000:
+ if self.qtVersionAtLeast(0x60000):
dd, data, size = self.split('ppi', value)
return data, size
base = self.extractPointer(value)
(ref, alloc, begin, end) = self.split('IIII', base)
array = base + 16
- if self.qtVersion() < 0x50000:
+ if not self.qtVersionAtLeast(0x50000):
array += self.ptrSize()
size = end - begin
@@ -1775,21 +1964,21 @@ class DumperBase():
data = array + begin * stepSize
return data, size
- def putTypedPointer(self, name, addr, typeName):
+ def putTypedPointer(self, name, addr, typename):
""" Prints a typed pointer, expandable if the type can be resolved,
and without children otherwise """
with SubItem(self, name):
self.putAddress(addr)
self.putValue('@0x%x' % addr)
- typeObj = self.lookupType(typeName)
+ typeObj = self.lookupType(typename)
if typeObj:
self.putType(typeObj)
self.putExpandable()
if self.isExpanded():
with Children(self):
- self.putFields(self.createValue(addr, typeObj))
+ self.putFields(self.createValueFromAddress(addr, typeObj))
else:
- self.putType(typeName)
+ self.putType(typename)
# This is called is when a QObject derived class is expanded
def tryPutQObjectGuts(self, value):
@@ -1801,26 +1990,26 @@ class DumperBase():
def metaString(self, metaObjectPtr, index, revision):
ptrSize = self.ptrSize()
stringdataOffset = ptrSize
- if self.isWindowsTarget() and self.qtVersion() >= 0x060000:
+ if self.isWindowsTarget() and self.qtVersionAtLeast(0x060000):
stringdataOffset += ptrSize # indirect super data member
- stringdata = self.extractPointer(toInteger(metaObjectPtr) + stringdataOffset)
+ stringdata = self.extract_pointer_at_address(int(metaObjectPtr) + stringdataOffset)
- def unpackString(base, size):
+ def unpack_string(base, size):
try:
s = struct.unpack_from('%ds' % size, self.readRawMemory(base, size))[0]
- return s if sys.version_info[0] == 2 else s.decode('utf8')
+ return s.decode('utf8')
except:
return '<not available>'
if revision >= 9: # Qt 6.
pos, size = self.split('II', stringdata + 8 * index)
- return unpackString(stringdata + pos, size)
+ return unpack_string(stringdata + pos, size)
if revision >= 7: # Qt 5.
byteArrayDataSize = 24 if ptrSize == 8 else 16
- literal = stringdata + toInteger(index) * byteArrayDataSize
+ literal = stringdata + int(index) * byteArrayDataSize
base, size, _ = self.qArrayDataHelper(literal)
- return unpackString(base, size)
+ return unpack_string(base, size)
ldata = stringdata + index
return self.extractCString(ldata).decode('utf8')
@@ -1830,25 +2019,25 @@ class DumperBase():
self.putField('sortgroup', sortorder)
def putQMetaStuff(self, value, origType):
- if self.qtVersion() >= 0x060000:
+ if self.qtVersionAtLeast(0x060000):
metaObjectPtr, handle = value.split('pp')
else:
metaObjectPtr, handle = value.split('pI')
if metaObjectPtr != 0:
- if self.qtVersion() >= 0x060000:
+ if self.qtVersionAtLeast(0x060000):
if handle == 0:
self.putEmptyValue()
return
revision = 9
name, alias, flags, keyCount, data = self.split('IIIII', handle)
index = name
- elif self.qtVersion() >= 0x050000:
+ elif self.qtVersionAtLeast(0x050000):
revision = 7
- dataPtr = self.extractPointer(metaObjectPtr + 2 * self.ptrSize())
+ dataPtr = self.extract_pointer_at_address(metaObjectPtr + 2 * self.ptrSize())
index = self.extractInt(dataPtr + 4 * handle)
else:
revision = 6
- dataPtr = self.extractPointer(metaObjectPtr + 2 * self.ptrSize())
+ dataPtr = self.extract_pointer_at_address(metaObjectPtr + 2 * self.ptrSize())
index = self.extractInt(dataPtr + 4 * handle)
#self.putValue("index: %s rev: %s" % (index, revision))
name = self.metaString(metaObjectPtr, index, revision)
@@ -1873,29 +2062,29 @@ class DumperBase():
def putQObjectGutsHelper(self, qobject, qobjectPtr, handle, metaObjectPtr, origType):
ptrSize = self.ptrSize()
- def putt(name, value, typeName=' '):
+ def putt(name, value, typename=' '):
with SubItem(self, name):
self.putValue(value)
- self.putType(typeName)
+ self.putType(typename)
def extractSuperDataPtr(someMetaObjectPtr):
#return someMetaObjectPtr['d']['superdata']
- return self.extractPointer(someMetaObjectPtr)
+ return self.extract_pointer_at_address(someMetaObjectPtr)
def extractDataPtr(someMetaObjectPtr):
# dataPtr = metaObjectPtr['d']['data']
- if self.qtVersion() >= 0x60000 and self.isWindowsTarget():
+ if self.qtVersionAtLeast(0x60000) and self.isWindowsTarget():
offset = 3
else:
offset = 2
- return self.extractPointer(someMetaObjectPtr + offset * ptrSize)
+ return self.extract_pointer_at_address(someMetaObjectPtr + offset * ptrSize)
isQMetaObject = origType == 'QMetaObject'
isQObject = origType == 'QObject'
- #DumperBase.warn('OBJECT GUTS: %s 0x%x ' % (self.currentIName, metaObjectPtr))
+ #self.warn('OBJECT GUTS: %s 0x%x ' % (self.currentIName, metaObjectPtr))
dataPtr = extractDataPtr(metaObjectPtr)
- #DumperBase.warn('DATA PTRS: %s 0x%x ' % (self.currentIName, dataPtr))
+ #self.warn('DATA PTRS: %s 0x%x ' % (self.currentIName, dataPtr))
(revision, classname,
classinfo, classinfo2,
methodCount, methods,
@@ -1913,14 +2102,14 @@ class DumperBase():
ns = self.qtNamespace()
extraData = 0
if qobjectPtr:
- dd = self.extractPointer(qobjectPtr + ptrSize)
- if self.qtVersion() >= 0x60000:
+ dd = self.extract_pointer_at_address(qobjectPtr + ptrSize)
+ if self.qtVersionAtLeast(0x60000):
(dvtablePtr, qptr, parent, children, bindingStorageData, bindingStatus,
flags, postedEvents, dynMetaObjectPtr, # Up to here QObjectData.
extraData, threadDataPtr, connectionListsPtr,
sendersPtr, currentSenderPtr) \
= self.split('pp{@QObject*}{@QList<@QObject *>}ppIIp' + 'ppppp', dd)
- elif self.qtVersion() >= 0x50000:
+ elif self.qtVersionAtLeast(0x50000):
(dvtablePtr, qptr, parent, children, flags, postedEvents,
dynMetaObjectPtr, # Up to here QObjectData.
extraData, threadDataPtr, connectionListsPtr,
@@ -1942,7 +2131,7 @@ class DumperBase():
if not self.isCli:
self.putSortGroup(8)
- dvtablePtr, qptr, parentPtr, children = self.split('ppp{QList<QObject *>}', dd)
+ dvtablePtr, qptr, parentPtr, children = self.split('ppp{@QList<@QObject *>}', dd)
self.putItem(children)
if isQMetaObject:
@@ -2003,8 +2192,9 @@ class DumperBase():
if False:
with SubItem(self, '[connections]'):
if connectionListsPtr:
- typeName = '@QObjectConnectionListVector'
- self.putItem(self.createValue(connectionListsPtr, typeName))
+ typename = '@QObjectConnectionListVector'
+ self.putItem(self.createValueFromAddress(connectionListsPtr,
+typename))
else:
self.putItemCount(0)
@@ -2045,7 +2235,7 @@ class DumperBase():
with Children(self):
# Static properties.
for i in range(propertyCount):
- if self.qtVersion() >= 0x60000:
+ if self.qtVersionAtLeast(0x60000):
t = self.split('IIIII', dataPtr + properties * 4 + 20 * i)
else:
t = self.split('III', dataPtr + properties * 4 + 12 * i)
@@ -2053,19 +2243,19 @@ class DumperBase():
if qobject and self.qtPropertyFunc:
# LLDB doesn't like calling it on a derived class, possibly
# due to type information living in a different shared object.
- #base = self.createValue(qobjectPtr, '@QObject')
- #DumperBase.warn("CALL FUNC: 0x%x" % self.qtPropertyFunc)
+ #base = self.createValueFromAddress(qobjectPtr, '@QObject')
+ #self.warn("CALL FUNC: 0x%x" % self.qtPropertyFunc)
cmd = '((QVariant(*)(void*,char*))0x%x)((void*)0x%x,"%s")' \
% (self.qtPropertyFunc, qobjectPtr, name)
try:
- #DumperBase.warn('PROP CMD: %s' % cmd)
+ #self.warn('PROP CMD: %s' % cmd)
res = self.parseAndEvaluate(cmd)
- #DumperBase.warn('PROP RES: %s' % res)
+ #self.warn('PROP RES: %s' % res)
except:
self.bump('failedMetaObjectCall')
putt(name, ' ')
continue
- #DumperBase.warn('COULD NOT EXECUTE: %s' % cmd)
+ #self.warn('COULD NOT EXECUTE: %s' % cmd)
#self.putCallItem(name, '@QVariant', base, 'property', '"' + name + '"')
if res is None:
self.bump('failedMetaObjectCall2')
@@ -2077,37 +2267,42 @@ class DumperBase():
# Dynamic properties.
if extraData:
- def list6Generator(addr, innerType):
+ def list6Generator(addr, inner_typeid):
data, size = self.listData(addr)
+ inner_size = self.type_size(inner_typeid)
for i in range(size):
- yield self.createValue(data + i * innerType.size(), innerType)
+ yield self.createValueFromAddress(data, inner_typeid)
+ data += inner_size
- def list5Generator(addr, innerType):
+ def list5Generator(addr, inner_typeid):
data, size = self.listData(addr)
for i in range(size):
- yield self.createValue(data + i * ptrSize, innerType)
+ yield self.createValueFromAddress(data, inner_typeid)
+ data += ptrSize
- def vectorGenerator(addr, innerType):
+ def vectorGenerator(addr, inner_typeid):
data, size = self.vectorData(addr)
+ inner_size = self.type_size(inner_typeid)
for i in range(size):
- yield self.createValue(data + i * innerType.size(), innerType)
-
- byteArrayType = self.createType('@QByteArray')
- variantType = self.createType('@QVariant')
- if self.qtVersion() >= 0x60000:
- values = vectorGenerator(extraData + 3 * ptrSize, variantType)
- elif self.qtVersion() >= 0x50600:
- values = vectorGenerator(extraData + 2 * ptrSize, variantType)
- elif self.qtVersion() >= 0x50000:
- values = list5Generator(extraData + 2 * ptrSize, variantType)
+ yield self.createValueFromAddress(data, inner_typeid)
+ data += inner_size
+
+ variant_typeid = self.cheap_typeid_from_name('@QVariant')
+ if self.qtVersionAtLeast(0x60000):
+ values = vectorGenerator(extraData + 3 * ptrSize, variant_typeid)
+ elif self.qtVersionAtLeast(0x50600):
+ values = vectorGenerator(extraData + 2 * ptrSize, variant_typeid)
+ elif self.qtVersionAtLeast(0x50000):
+ values = list5Generator(extraData + 2 * ptrSize, variant_typeid)
else:
- values = list5Generator(extraData + 2 * ptrSize,
- variantType.pointer())
+ variantptr_typeid = self.cheap_typeid_from_name('@QVariant')
+ values = list5Generator(extraData + 2 * ptrSize, variantptr_typeid)
- if self.qtVersion() >= 0x60000:
- names = list6Generator(extraData, byteArrayType)
+ bytearray_typeid = self.cheap_typeid_from_name('@QByteArray')
+ if self.qtVersionAtLeast(0x60000):
+ names = list6Generator(extraData, bytearray_typeid)
else:
- names = list5Generator(extraData + ptrSize, byteArrayType)
+ names = list5Generator(extraData + ptrSize, bytearray_typeid)
for (k, v) in zip(names, values):
with SubItem(self, propertyCount + dynamicPropertyCount):
@@ -2169,7 +2364,7 @@ class DumperBase():
if isQObject:
with SubItem(self, '[d]'):
- self.putItem(self.createValue(dd, '@QObjectPrivate'))
+ self.putItem(self.createValueFromAddress(dd, '@QObjectPrivate'))
self.putSortGroup(15)
if isQMetaObject:
@@ -2199,10 +2394,10 @@ class DumperBase():
with SubItem(self, '[connections]'):
ptrSize = self.ptrSize()
self.putNoType()
- privateType = self.createType('@QObjectPrivate')
+ privateType = self.create_typeid_from_name('@QObjectPrivate')
d_ptr = dd.cast(privateType.pointer()).dereference()
connections = d_ptr['connectionLists']
- if self.connections.integer() == 0:
+ if self.value_as_integer(connections) == 0:
self.putItemCount(0)
else:
connections = connections.dereference()
@@ -2215,72 +2410,74 @@ class DumperBase():
innerType = connections.type[0]
# Should check: innerType == ns::QObjectPrivate::ConnectionList
data, size = self.vectorData(connections)
- connectionType = self.createType('@QObjectPrivate::Connection')
+ connection_typeid = self.create_typeid_from_name('@QObjectPrivate::Connection')
+ connection_ptr_typeid = self.create_pointer_typeid(connection_typeid)
for i in range(size):
- first = self.extractPointer(data + i * 2 * ptrSize)
+ first = self.extract_pointer_at_address(data + i * 2 * ptrSize)
while first:
- self.putSubItem('%s' % pp,
- self.createPointerValue(first, connectionType))
- first = self.extractPointer(first + 3 * ptrSize)
+ val = self.Value(self)
+ val.ldata = first
+ val.typeid = connection_typeid
+ self.putSubItem('%s' % pp, val)
+ first = self.extract_pointer_at_address(first + 3 * ptrSize)
# We need to enforce some upper limit.
pp += 1
if pp > 1000:
break
- def currentItemFormat(self, typeName=None):
+ def currentItemFormat(self, typename=None):
displayFormat = self.formats.get(self.currentIName, DisplayFormat.Automatic)
if displayFormat == DisplayFormat.Automatic:
- if typeName is None:
- typeName = self.currentType.value
- needle = None if typeName is None else self.stripForFormat(typeName)
+ if typename is None:
+ typename = self.currentType.value
+ needle = None if typename is None else self.stripForFormat(typename)
displayFormat = self.typeformats.get(needle, DisplayFormat.Automatic)
return displayFormat
def putSubItem(self, component, value): # -> ReportItem
if not isinstance(value, self.Value):
raise RuntimeError('WRONG VALUE TYPE IN putSubItem: %s' % type(value))
- if not isinstance(value.type, self.Type):
- raise RuntimeError('WRONG TYPE TYPE IN putSubItem: %s' % type(value.type))
res = None
with SubItem(self, component):
self.putItem(value)
res = self.currentValue
return res # The 'short' display.
- def putArrayData(self, base, n, innerType, childNumChild=None):
+ def putArrayData(self, base, n, inner_typish, childNumChild=None):
self.checkIntType(base)
self.checkIntType(n)
- addrBase = base
- innerSize = innerType.size()
+ inner_typeid = self.typeid_for_typish(inner_typish)
+ inner_size = self.type_size_cache.get(inner_typeid, None)
self.putNumChild(n)
- #DumperBase.warn('ADDRESS: 0x%x INNERSIZE: %s INNERTYPE: %s' % (addrBase, innerSize, innerType))
- enc = innerType.simpleEncoding()
+ #self.warn('ADDRESS: 0x%x INNERSIZE: %s INNERTYPE: %s' % (base, inner_size, inner_typeid))
+ enc = self.type_encoding_cache.get(inner_typeid, None)
maxNumChild = self.maxArrayCount()
if enc:
- self.put('childtype="%s",' % innerType.name)
- self.put('addrbase="0x%x",' % addrBase)
- self.put('addrstep="0x%x",' % innerSize)
+ self.put('childtype="%s",' % self.type_name(inner_typeid))
+ self.put('addrbase="0x%x",' % base)
+ self.put('addrstep="0x%x",' % inner_size)
self.put('arrayencoding="%s",' % enc)
self.put('endian="%s",' % self.packCode)
if n > maxNumChild:
self.put('childrenelided="%s",' % n)
n = maxNumChild
self.put('arraydata="')
- self.put(self.readMemory(addrBase, n * innerSize))
+ self.put(self.readMemory(base, n * inner_size))
self.put('",')
else:
+ innerType = self.Type(self, inner_typeid)
with Children(self, n, innerType, childNumChild, maxNumChild,
- addrBase=addrBase, addrStep=innerSize):
+ addrBase=base, addrStep=inner_size):
for i in self.childRange():
- self.putSubItem(i, self.createValue(addrBase + i * innerSize, innerType))
+ self.putSubItem(i, self.createValueFromAddress(base + i * inner_size, innerType))
- def putArrayItem(self, name, addr, n, typeName):
+ def putArrayItem(self, name, addr, n, typename):
self.checkIntType(addr)
self.checkIntType(n)
with SubItem(self, name):
self.putEmptyValue()
- self.putType('%s [%d]' % (typeName, n))
- self.putArrayData(addr, n, self.lookupType(typeName))
+ self.putType('%s [%d]' % (typename, n))
+ self.putArrayData(addr, n, self.lookupType(typename))
self.putAddress(addr)
def putPlotDataHelper(self, base, n, innerType, maxNumChild=1000 * 1000):
@@ -2303,13 +2500,15 @@ class DumperBase():
"""
Special handling for char** argv.
"""
+ ptr_size = self.ptrSize()
n = 0
- p = value
- # p is 0 for "optimized out" cases. Or contains rubbish.
+ argv = self.value_as_address(value)
+ # argv is 0 for "optimized out" cases. Or contains rubbish.
try:
- if value.integer():
- while p.dereference().integer() and n <= 100:
- p += 1
+ if argv:
+ p = argv
+ while self.extract_pointer_at_address(p) and n <= 100:
+ p += ptr_size
n += 1
except:
pass
@@ -2325,44 +2524,54 @@ class DumperBase():
self.putSubItem(i, p.dereference())
p += 1
+ def extract_pointer_at_address(self, address):
+ blob = self.value_data_from_address(address, self.ptrSize())
+ return int.from_bytes(blob, byteorder='little')
+
+ def value_extract_integer(self, value, size, signed):
+ if isinstance(value.lvalue, int):
+ return value.lvalue
+ if isinstance(value.ldata, int):
+ return value.ldata
+ #with self.dumper.timer('extractInt'):
+ value.check()
+ blob = self.value_data(value, size)
+ return int.from_bytes(blob, byteorder='little', signed=signed)
+
+ def value_extract_something(self, valuish, size, signed=False):
+ if isinstance(valuish, int):
+ blob = self.value_data_from_address(valuish, size)
+ elif isinstance(valuish, self.Value):
+ blob = self.value_data(valuish, size)
+ else:
+ raise RuntimeError('CANT EXTRACT FROM %s' % type(valuish))
+ res = int.from_bytes(blob, byteorder='little', signed=signed)
+ #self.warn("EXTRACTED %s SIZE %s FROM %s" % (res, size, blob))
+ return res
+
def extractPointer(self, value):
- try:
- if value.type.code == TypeCode.Array:
- return value.address()
- except:
- pass
- code = 'I' if self.ptrSize() == 4 else 'Q'
- return self.extractSomething(value, code, 8 * self.ptrSize())
+ return self.value_extract_something(value, self.ptrSize())
def extractInt64(self, value):
- return self.extractSomething(value, 'q', 64)
+ return self.value_extract_something(value, 8, True)
def extractUInt64(self, value):
- return self.extractSomething(value, 'Q', 64)
+ return self.value_extract_something(value, 8)
def extractInt(self, value):
- return self.extractSomething(value, 'i', 32)
+ return self.value_extract_something(value, 4, True)
def extractUInt(self, value):
- return self.extractSomething(value, 'I', 32)
+ return self.value_extract_something(value, 4)
def extractShort(self, value):
- return self.extractSomething(value, 'h', 16)
+ return self.value_extract_something(value, 2, True)
def extractUShort(self, value):
- return self.extractSomething(value, 'H', 16)
+ return self.value_extract_something(value, 2)
def extractByte(self, value):
- return self.extractSomething(value, 'b', 8)
-
- def extractSomething(self, value, pattern, bitsize):
- if self.isInt(value):
- val = self.Value(self)
- val.laddress = value
- return val.extractSomething(pattern, bitsize)
- if isinstance(value, self.Value):
- return value.extractSomething(pattern, bitsize)
- raise RuntimeError('CANT EXTRACT FROM %s' % type(value))
+ return self.value_extract_something(value, 1)
# Parses a..b and a.(s).b
def parseRange(self, exp):
@@ -2405,9 +2614,9 @@ class DumperBase():
try:
# Allow integral expressions.
- ss = self.parseAndEvaluate(s[1:len(s) - 1]).integer() if s else 1
- aa = self.parseAndEvaluate(a).integer()
- bb = self.parseAndEvaluate(b).integer()
+ ss = self.value_as_integer(self.parseAndEvaluate(s[1:len(s) - 1])) if s else 1
+ aa = self.value_as_integer(self.parseAndEvaluate(a))
+ bb = self.value_as_integer(self.parseAndEvaluate(b))
if aa < bb and ss > 0:
return True, aa, ss, bb + 1, template
except:
@@ -2419,14 +2628,14 @@ class DumperBase():
self.putField('numchild', numchild)
def handleLocals(self, variables):
- #DumperBase.warn('VARIABLES: %s' % variables)
- #with self.timer('locals'):
+ #self.warn('VARIABLES: %s' % variables)
shadowed = {}
for value in variables:
if value.name == 'argv':
if value.type.code == TypeCode.Pointer:
- if value.type.ltarget.code == TypeCode.Pointer:
- if value.type.ltarget.ltarget.name == 'char':
+ target = value.type.target()
+ if target.code == TypeCode.Pointer:
+ if target.target().name == 'char':
self.putSpecialArgv(value)
continue
@@ -2455,7 +2664,7 @@ class DumperBase():
def handleWatch(self, origexp, exp, iname):
exp = str(exp).strip()
escapedExp = self.hexencode(exp)
- #DumperBase.warn('HANDLING WATCH %s -> %s, INAME: "%s"' % (origexp, exp, iname))
+ #self.warn('HANDLING WATCH %s -> %s, INAME: "%s"' % (origexp, exp, iname))
# Grouped items separated by semicolon.
if exp.find(';') >= 0:
@@ -2475,7 +2684,7 @@ class DumperBase():
# Special array index: e.g a[1..199] or a[1.(3).199] for stride 3.
isRange, begin, step, end, template = self.parseRange(exp)
if isRange:
- #DumperBase.warn('RANGE: %s %s %s in %s' % (begin, step, end, template))
+ #self.warn('RANGE: %s %s %s in %s' % (begin, step, end, template))
r = range(begin, end, step)
n = len(r)
with TopLevelItem(self, iname):
@@ -2511,10 +2720,7 @@ class DumperBase():
try:
if funcname.startswith('qdump__'):
typename = funcname[7:]
- if sys.version_info > (3,):
- spec = inspect.getfullargspec(function)
- else:
- spec = inspect.getargspec(function)
+ spec = inspect.getfullargspec(function)
if len(spec.args) == 2:
self.qqDumpers[typename] = function
elif len(spec.args) == 3 and len(spec.defaults) == 1:
@@ -2561,11 +2767,8 @@ class DumperBase():
def reloadDumpers(self, args):
for mod in self.dumpermodules:
m = sys.modules[mod]
- if sys.version_info[0] >= 3:
- import importlib
- importlib.reload(m)
- else:
- reload(m)
+ import importlib
+ importlib.reload(m)
self.setupDumpers(args)
def loadDumpers(self, args):
@@ -2714,7 +2917,7 @@ class DumperBase():
self.doContinue()
def doInsertInterpreterBreakpoint(self, args, wasPending):
- #DumperBase.warn('DO INSERT INTERPRETER BREAKPOINT, WAS PENDING: %s' % wasPending)
+ #self.warn('DO INSERT INTERPRETER BREAKPOINT, WAS PENDING: %s' % wasPending)
# Will fail if the service is not yet up and running.
response = self.sendInterpreterRequest('setbreakpoint', args)
bp = None if response is None else response.get('breakpoint', None)
@@ -2749,14 +2952,6 @@ class DumperBase():
def extractInterpreterStack(self):
return self.sendInterpreterRequest('backtrace', {'limit': 10})
- def isInt(self, thing):
- if isinstance(thing, int):
- return True
- if sys.version_info[0] == 2:
- if isinstance(thing, long):
- return True
- return False
-
def putItems(self, count, generator, maxNumChild=10000):
self.putItemCount(count)
if self.isExpanded():
@@ -2765,131 +2960,124 @@ class DumperBase():
self.putSubItem(i, val)
def putItem(self, value):
- #with self.timer('putItem'):
- self.putItemX(value)
-
- def putItemX(self, value):
- #DumperBase.warn('PUT ITEM: %s' % value.stringify())
-
- typeobj = value.type # unqualified()
- typeName = typeobj.name
-
- self.addToCache(typeobj) # Fill type cache
+ #self.warn('PUT ITEM: %s' % value.stringify())
+ #self.dump_location()
+ #self.addToCache(typeobj) # Fill type cache
if not value.lIsInScope:
self.putSpecialValue('optimizedout')
- #self.putType(typeobj)
- #self.putSpecialValue('outofscope')
self.putNumChild(0)
return
if not isinstance(value, self.Value):
raise RuntimeError('WRONG TYPE IN putItem: %s' % type(self.Value))
+ typeid = value.typeid
+ typecode = self.type_code(typeid)
+ typename = self.type_name(typeid)
+
# Try on possibly typedefed type first.
- if self.tryPutPrettyItem(typeName, value):
- if typeobj.code == TypeCode.Pointer:
+ if self.tryPutPrettyItem(typename, value):
+ if typecode == TypeCode.Pointer:
self.putOriginalAddress(value.address())
else:
self.putAddress(value.address())
return
- if typeobj.code == TypeCode.Typedef:
- #DumperBase.warn('TYPEDEF VALUE: %s' % value.stringify())
+ if typecode == TypeCode.Typedef:
+ #self.warn('TYPEDEF VALUE: %s' % value.stringify())
self.putItem(value.detypedef())
- self.putBetterType(typeName)
+ self.putBetterType(typename)
return
- if typeobj.code == TypeCode.Pointer:
+ if typecode == TypeCode.Pointer:
self.putFormattedPointer(value)
if value.summary and self.useFancy:
self.putValue(self.hexencode(value.summary), 'utf8:1:0')
return
self.putAddress(value.address())
- if value.lbitsize is not None:
- self.putField('size', value.lbitsize // 8)
- if typeobj.code == TypeCode.Function:
- #DumperBase.warn('FUNCTION VALUE: %s' % value)
- self.putType(typeobj)
- self.putSymbolValue(value.pointer())
+ if typecode == TypeCode.Function:
+ #self.warn('FUNCTION VALUE: %s' % value)
+ self.putType(typeid)
+ self.putSymbolValue(self.value_as_address(value))
self.putNumChild(0)
return
- if typeobj.code == TypeCode.Enum:
- #DumperBase.warn('ENUM VALUE: %s' % value.stringify())
- self.putType(typeobj.name)
+ if typecode == TypeCode.Enum:
+ #self.warn('ENUM VALUE: %s' % value.stringify())
+ self.putType(typename)
self.putValue(value.display())
self.putNumChild(0)
return
- if typeobj.code == TypeCode.Array:
- #DumperBase.warn('ARRAY VALUE: %s' % value)
+ if typecode == TypeCode.Array:
+ #self.warn('ARRAY VALUE: %s' % value)
self.putCStyleArray(value)
return
- if typeobj.code == TypeCode.Bitfield:
- #DumperBase.warn('BITFIELD VALUE: %s %d %s' % (value.name, value.lvalue, typeName))
+ if typecode == TypeCode.Bitfield:
+ #self.warn('BITFIELD VALUE: %s %d %s' % (value.name, value.lvalue, typename))
self.putNumChild(0)
- dd = typeobj.ltarget.tdata.enumDisplay
- self.putValue(str(value.lvalue) if dd is None else dd(
- value.lvalue, value.laddress, '%d'))
- self.putType(typeName)
+ #dd = typeobj.target().enumDisplay
+ #self.putValue(str(value.lvalue) if dd is None else dd(
+ # value.lvalue, value.laddress, '%d'))
+ self.putValue(self.value_as_integer(value))
+ self.putType(typename)
return
- if typeobj.code == TypeCode.Integral:
- #DumperBase.warn('INTEGER: %s %s' % (value.name, value))
- val = value.value()
+ if typecode == TypeCode.Integral:
+ #self.warn('INTEGER: %s %s' % (value.name, value))
self.putNumChild(0)
- self.putValue(val)
- self.putType(typeName)
+ self.putValue(self.value_as_integer(value))
+ self.putType(typename)
return
- if typeobj.code == TypeCode.Float:
- #DumperBase.warn('FLOAT VALUE: %s' % value)
+ if typecode == TypeCode.Float:
+ #self.warn('FLOAT VALUE: %s' % value)
self.putValue(value.value())
self.putNumChild(0)
- self.putType(typeobj.name)
+ self.putType(typename)
return
- if typeobj.code in (TypeCode.Reference, TypeCode.RValueReference):
- #DumperBase.warn('REFERENCE VALUE: %s' % value)
+ if typecode in (TypeCode.Reference, TypeCode.RValueReference):
+ #self.warn('REFERENCE VALUE: %s' % value)
val = value.dereference()
if val.laddress != 0:
self.putItem(val)
else:
self.putSpecialValue('nullreference')
- self.putBetterType(typeName)
+ self.putBetterType(typename)
return
- if typeobj.code == TypeCode.Complex:
- self.putType(typeobj)
+ if typecode == TypeCode.Complex:
+ self.putType(typeid)
self.putValue(value.display())
self.putNumChild(0)
return
- if typeobj.code == TypeCode.FortranString:
+ if typecode == TypeCode.FortranString:
self.putValue(self.hexencode(value.data()), 'latin1')
self.putNumChild(0)
- self.putType(typeobj)
+ self.putType(typeid)
- if typeName.endswith('[]'):
+ if typename.endswith('[]'):
# D arrays, gdc compiled.
n = value['length']
base = value['ptr']
- self.putType(typeName)
+ self.putType(typename)
self.putItemCount(n)
if self.isExpanded():
- self.putArrayData(base.pointer(), n, base.type.target())
+ self.putArrayData(self.value_as_address(base), n, base.type.target())
return
- #DumperBase.warn('SOME VALUE: %s' % value)
- #DumperBase.warn('GENERIC STRUCT: %s' % typeobj)
- #DumperBase.warn('INAME: %s ' % self.currentIName)
- #DumperBase.warn('INAMES: %s ' % self.expandedINames)
- #DumperBase.warn('EXPANDED: %s ' % (self.currentIName in self.expandedINames))
- self.putType(typeName)
+ #self.warn('SOME VALUE: %s' % value)
+ #self.warn('GENERIC STRUCT: %s' % typeid)
+ #self.warn('INAME: %s ' % self.currentIName)
+ #self.warn('INAMES: %s ' % self.expandedINames)
+ #self.warn('EXPANDED: %s ' % (self.currentIName in self.expandedINames))
+ self.putType(typename)
if value.summary is not None and self.useFancy:
self.putValue(self.hexencode(value.summary), 'utf8:1:0')
@@ -2898,8 +3086,8 @@ class DumperBase():
self.putExpandable()
self.putEmptyValue()
- #DumperBase.warn('STRUCT GUTS: %s ADDRESS: 0x%x ' % (value.name, value.address()))
- if self.showQObjectNames:
+ #self.warn('STRUCT GUTS: %s ADDRESS: 0x%x ' % (value.name, value.address()))
+ if self.wantQObjectNames():
#with self.timer(self.currentIName):
self.putQObjectNameValue(value)
if self.isExpanded():
@@ -2907,12 +3095,12 @@ class DumperBase():
self.putField('sortable', 1)
with Children(self, 1, childType=None):
self.putFields(value)
- if self.showQObjectNames:
+ if self.wantQObjectNames():
self.tryPutQObjectGuts(value)
def symbolAddress(self, symbolName):
- res = self.parseAndEvaluate('(size_t)&' + symbolName)
- return None if res is None else res.pointer()
+ res = self.parseAndEvaluate('(void *)&' + symbolName)
+ return None if res is None else self.value_as_address(res)
def qtHookDataSymbolName(self):
return 'qtHookData'
@@ -2922,7 +3110,7 @@ class DumperBase():
if addr:
# Only available with Qt 5.3+
(hookVersion, x, x, x, x, x, tiVersion) = self.split('ppppppp', addr)
- #DumperBase.warn('HOOK: %s TI: %s' % (hookVersion, tiVersion))
+ #self.warn('HOOK: %s TI: %s' % (hookVersion, tiVersion))
if hookVersion >= 3:
self.qtTypeInfoVersion = lambda: tiVersion
return tiVersion
@@ -2954,16 +3142,15 @@ class DumperBase():
#self._stack = inspect.stack()
self.dumper = dumper
self.name = None
- self._type = None
+ self.typeid = None
+ self.code = None
+ self.size = None
self.ldata = None # Target address in case of references and pointers.
self.laddress = None # Own address.
self.lvalue = None
self.lIsInScope = True
self.ldisplay = None
self.summary = None # Always hexencoded UTF-8.
- self.lbitpos = None
- self.lbitsize = None
- self.targetValue = None # For references.
self.isBaseClass = None
self.nativeValue = None
self.autoDerefCount = 0
@@ -2972,49 +3159,47 @@ class DumperBase():
val = self.dumper.Value(self.dumper)
val.dumper = self.dumper
val.name = self.name
- val._type = self._type
+ val.typeid = self.typeid
+ val.code = self.code = None
+ val.size = self.size
val.ldata = self.ldata
val.laddress = self.laddress
+ val.lvalue = self.lvalue
val.lIsInScope = self.lIsInScope
val.ldisplay = self.ldisplay
val.summary = self.summary
- val.lbitpos = self.lbitpos
- val.lbitsize = self.lbitsize
- val.targetValue = self.targetValue
val.nativeValue = self.nativeValue
return val
@property
def type(self):
- if self._type is None and self.nativeValue is not None:
- self._type = self.dumper.nativeValueType(self.nativeValue)
- return self._type
+ return self.dumper.Type(self.dumper, self.typeid)
def check(self):
- if self.laddress is not None and not self.dumper.isInt(self.laddress):
- raise RuntimeError('INCONSISTENT ADDRESS: %s' % type(self.laddress))
- if self.type is not None and not isinstance(self.type, self.dumper.Type):
- raise RuntimeError('INCONSISTENT TYPE: %s' % type(self.type))
+ #if self.typeid is not None and not isinstance(self.typeid, int):
+ # raise RuntimeError('INCONSISTENT TYPE: %s' % type(self.typeid))
+ #if self.laddress is not None and not isinstance(self.laddress, int):
+ # raise RuntimeError('INCONSISTENT ADDRESS: %s' % type(self.laddress))
+ pass
def __str__(self):
#raise RuntimeError('Not implemented')
return self.stringify()
def __int__(self):
- return self.integer()
+ return self.dumper.value_as_integer(self)
def stringify(self):
addr = 'None' if self.laddress is None else ('0x%x' % self.laddress)
- return "Value(name='%s',type=%s,bsize=%s,bpos=%s,data=%s,address=%s)" \
- % (self.name, self.type.name, self.lbitsize, self.lbitpos,
- self.dumper.hexencode(self.ldata), addr)
+ if isinstance(self.ldata, int):
+ data = str(self.ldata)
+ else:
+ data = self.dumper.hexencode(self.ldata)
+ return "Value(name='%s',typeid=%s, type=%s,data=%s,address=%s)" \
+ % (self.name, self.typeid, self.type.name, data, addr)
def displayEnum(self, form='%d', bitsize=None):
- intval = self.integer(bitsize)
- dd = self.type.tdata.enumDisplay
- if dd is None:
- return str(intval)
- return dd(intval, self.laddress, form)
+ return self.dumper.value_display_enum(self, form, bitsize)
def display(self):
if self.ldisplay is not None:
@@ -3023,451 +3208,70 @@ class DumperBase():
if simple is not None:
return str(simple)
#if self.ldata is not None:
- # if sys.version_info[0] == 2 and isinstance(self.ldata, buffer):
- # return bytes(self.ldata).encode('hex')
# return self.ldata.encode('hex')
if self.laddress is not None:
return 'value of type %s at address 0x%x' % (self.type.name, self.laddress)
return '<unknown data>'
def pointer(self):
- if self.type.code == TypeCode.Typedef:
- return self.detypedef().pointer()
- return self.extractInteger(self.dumper.ptrSize() * 8, True)
-
- def integer(self, bitsize=None):
- if self.type.code == TypeCode.Typedef:
- return self.detypedef().integer()
- elif isinstance(self.lvalue, int):
- return self.lvalue
- # Could be something like 'short unsigned int'
- unsigned = self.type.name == 'unsigned' \
- or self.type.name.startswith('unsigned ') \
- or self.type.name.find(' unsigned ') != -1
- if bitsize is None:
- bitsize = self.type.lbitsize
- return self.extractInteger(bitsize, unsigned)
+ return self.dumper.value_as_address(self)
+
+ def as_address(self):
+ return self.dumper.value_as_address(self)
+
+ def integer(self):
+ return self.dumper.value_as_integer(self)
def floatingPoint(self):
- if self.nativeValue is not None and not self.dumper.isCdb:
- return str(self.nativeValue)
- if self.type.code == TypeCode.Typedef:
- return self.detypedef().floatingPoint()
- if self.type.size() == 8:
- return self.extractSomething('d', 64)
- if self.type.size() == 4:
- return self.extractSomething('f', 32)
- # Fall back in case we don't have a nativeValue at hand.
- # FIXME: This assumes Intel's 80bit extended floats. Which might
- # be wrong.
- l, h = self.split('QQ')
- if True: # 80 bit floats
- sign = (h >> 15) & 1
- exp = (h & 0x7fff)
- fraction = l
- bit63 = (l >> 63) & 1
- #DumperBase.warn("SIGN: %s EXP: %s H: 0x%x L: 0x%x" % (sign, exp, h, l))
- if exp == 0:
- if bit63 == 0:
- if l == 0:
- res = '-0' if sign else '0'
- else:
- res = (-1)**sign * l * 2**(-16382) # subnormal
- else:
- res = 'pseudodenormal'
- elif exp == 0x7fff:
- res = 'special'
- else:
- res = (-1)**sign * l * 2**(exp - 16383 - 63)
- else: # 128 bits
- sign = h >> 63
- exp = (h >> 48) & 0x7fff
- fraction = h & (2**48 - 1)
- #DumperBase.warn("SIGN: %s EXP: %s FRAC: %s H: 0x%x L: 0x%x" % (sign, exp, fraction, h, l))
- if exp == 0:
- if fraction == 0:
- res = -0.0 if sign else 0.0
- else:
- res = (-1)**sign * fraction / 2**48 * 2**(-62) # subnormal
- elif exp == 0x7fff:
- res = ('-inf' if sign else 'inf') if fraction == 0 else 'nan'
- else:
- res = (-1)**sign * (1 + fraction / 2**48) * 2**(exp - 63)
- return res
+ return self.dumper.value_as_floating_point(self)
def value(self):
- if self.type is not None:
- if self.type.code == TypeCode.Enum:
- return self.displayEnum()
- if self.type.code == TypeCode.Typedef:
- return self.detypedef().value()
- if self.type.code == TypeCode.Integral:
- return self.integer()
- if self.type.code == TypeCode.Bitfield:
- return self.integer()
- if self.type.code == TypeCode.Float:
- return self.floatingPoint()
- if self.type.code == TypeCode.Pointer:
- return self.pointer()
- return None
+ return self.dumper.value_display(self)
def extractPointer(self):
- return self.split('p')[0]
+ return self.dumper.value_extract_something(self, self.dumper.ptrSize())
def hasMember(self, name):
- return self.findMemberByName(name) is not None
-
- def findMemberByName(self, name):
- self.check()
- if self.type.code == TypeCode.Typedef:
- return self.findMemberByName(self.detypedef())
- if self.type.code in (
- TypeCode.Pointer,
- TypeCode.Reference,
- TypeCode.RValueReference):
- res = self.dereference().findMemberByName(name)
- if res is not None:
- return res
- if self.type.code == TypeCode.Struct:
- #DumperBase.warn('SEARCHING FOR MEMBER: %s IN %s' % (name, self.type.name))
- members = self.members(True)
- #DumperBase.warn('MEMBERS: %s' % members)
- for member in members:
- #DumperBase.warn('CHECKING FIELD %s' % member.name)
- if member.type.code == TypeCode.Typedef:
- member = member.detypedef()
- if member.name == name:
- return member
- for member in members:
- if member.type.code == TypeCode.Typedef:
- member = member.detypedef()
- if member.name == name: # Could be base class.
- return member
- if member.type.code == TypeCode.Struct:
- res = member.findMemberByName(name)
- if res is not None:
- return res
- return None
-
- def __getitem__(self, index):
- #DumperBase.warn('GET ITEM %s %s' % (self, index))
- self.check()
- if self.type.code == TypeCode.Typedef:
- #DumperBase.warn('GET ITEM STRIP TYPEDEFS TO %s' % self.type.ltarget)
- return self.cast(self.type.ltarget).__getitem__(index)
- if isinstance(index, str):
- if self.type.code == TypeCode.Pointer:
- #DumperBase.warn('GET ITEM %s DEREFERENCE TO %s' % (self, self.dereference()))
- return self.dereference().__getitem__(index)
- res = self.findMemberByName(index)
- if res is None:
- raise RuntimeError('No member named %s in type %s'
- % (index, self.type.name))
- return res
- elif isinstance(index, self.dumper.Field):
- field = index
- elif self.dumper.isInt(index):
- if self.type.code == TypeCode.Array:
- addr = self.laddress + int(index) * self.type.ltarget.size()
- return self.dumper.createValue(addr, self.type.ltarget)
- if self.type.code == TypeCode.Pointer:
- addr = self.pointer() + int(index) * self.type.ltarget.size()
- return self.dumper.createValue(addr, self.type.ltarget)
- return self.members(False)[index]
- else:
- raise RuntimeError('BAD INDEX TYPE %s' % type(index))
- field.check()
-
- #DumperBase.warn('EXTRACT FIELD: %s, BASE 0x%x' % (field, self.address()))
- if self.type.code == TypeCode.Pointer:
- #DumperBase.warn('IS TYPEDEFED POINTER!')
- res = self.dereference()
- #DumperBase.warn('WAS POINTER: %s' % res)
-
- return field.extract(self)
-
- def extractField(self, field):
- if not isinstance(field, self.dumper.Field):
- raise RuntimeError('BAD INDEX TYPE %s' % type(field))
-
- if field.extractor is not None:
- val = field.extractor(self)
- if val is not None:
- #DumperBase.warn('EXTRACTOR SUCCEEDED: %s ' % val)
- return val
-
- if self.type.code == TypeCode.Typedef:
- return self.cast(self.type.ltarget).extractField(field)
- if self.type.code in (TypeCode.Reference, TypeCode.RValueReference):
- return self.dereference().extractField(field)
- #DumperBase.warn('FIELD: %s ' % (field,))
- val = self.dumper.Value(self.dumper)
- val.name = field.name
- val.isBaseClass = field.isBase
- val._type = field.fieldType()
-
- if field.isArtificial:
- if self.laddress is not None:
- val.laddress = self.laddress
- if self.ldata is not None:
- val.ldata = self.ldata
- return val
-
- fieldBitsize = field.bitsize
- fieldSize = (fieldBitsize + 7) // 8
- fieldBitpos = field.bitpos
- fieldOffset = fieldBitpos // 8
- fieldType = field.fieldType()
-
- if fieldType.code == TypeCode.Bitfield:
- fieldBitpos -= fieldOffset * 8
- ldata = self.data()
- data = 0
- for i in range(fieldSize):
- data = data << 8
- if self.dumper.isBigEndian:
- lbyte = ldata[i]
- else:
- lbyte = ldata[fieldOffset + fieldSize - 1 - i]
- if isinstance(lbyte, (str, bytes)):
- data += ord(lbyte)
- else:
- data += lbyte
- data = data >> fieldBitpos
- data = data & ((1 << fieldBitsize) - 1)
- val.lvalue = data
- val.laddress = None
- return val
-
- if self.laddress is not None:
- val.laddress = self.laddress + fieldOffset
- elif self.ldata is not None:
- val.ldata = self.ldata[fieldOffset:fieldOffset + fieldSize]
- else:
- self.dumper.check(False)
-
- if fieldType.code in (TypeCode.Reference, TypeCode.RValueReference):
- if val.laddress is not None:
- val = self.dumper.createReferenceValue(val.laddress, fieldType.ltarget)
- val.name = field.name
+ return self.dumper.value_member_by_name(self, name) is not None
- #DumperBase.warn('GOT VAL %s FOR FIELD %s' % (val, field))
- val.lbitsize = fieldBitsize
- val.check()
- return val
+ def __getitem__(self, indexish):
+ return self.dumper.value_member_by_indexish(self, indexish)
- # This is the generic version for synthetic values.
- # The native backends replace it in their fromNativeValue()
- # implementations.
- def members(self, includeBases):
- #DumperBase.warn("LISTING MEMBERS OF %s" % self)
- if self.type.code == TypeCode.Typedef:
- return self.detypedef().members(includeBases)
-
- tdata = self.type.tdata
- #if isinstance(tdata.lfields, list):
- # return tdata.lfields
-
- fields = []
- if tdata.lfields is not None:
- if isinstance(tdata.lfields, list):
- fields = tdata.lfields
- else:
- fields = list(tdata.lfields(self))
-
- #DumperBase.warn("FIELDS: %s" % fields)
- res = []
- for field in fields:
- if isinstance(field, self.dumper.Value):
- #DumperBase.warn("USING VALUE DIRECTLY %s" % field.name)
- res.append(field)
- continue
- if field.isBase and not includeBases:
- #DumperBase.warn("DROPPING BASE %s" % field.name)
- continue
- res.append(self.extractField(field))
- #DumperBase.warn("GOT MEMBERS: %s" % res)
- return res
+ def members(self, include_bases):
+ return self.dumper.value_members(self, include_bases)
def __add__(self, other):
- self.check()
- if self.dumper.isInt(other):
- stripped = self.type.stripTypedefs()
- if stripped.code == TypeCode.Pointer:
- address = self.pointer() + stripped.dereference().size() * other
- val = self.dumper.Value(self.dumper)
- val.laddress = None
- val.ldata = bytes(struct.pack(self.dumper.packCode + 'Q', address))
- val._type = self._type
- return val
- raise RuntimeError('BAD DATA TO ADD TO: %s %s' % (self.type, other))
+ return self.dumper.value_plus_something(self, other)
def __sub__(self, other):
- self.check()
- if self.type.name == other.type.name:
- stripped = self.type.stripTypedefs()
- if stripped.code == TypeCode.Pointer:
- return (self.pointer() - other.pointer()) // stripped.dereference().size()
- raise RuntimeError('BAD DATA TO SUB TO: %s %s' % (self.type, other))
+ return self.dumper.value_minus_something(self, other)
def dereference(self):
- self.check()
- if self.type.code == TypeCode.Typedef:
- return self.detypedef().dereference()
- val = self.dumper.Value(self.dumper)
- if self.type.code in (TypeCode.Reference, TypeCode.RValueReference):
- val.summary = self.summary
- if self.nativeValue is None:
- val.laddress = self.pointer()
- if val.laddress is None and self.laddress is not None:
- val.laddress = self.laddress
- val._type = self.type.dereference()
- if self.dumper.useDynamicType:
- val._type = self.dumper.nativeDynamicType(val.laddress, val.type)
- else:
- val = self.dumper.nativeValueDereferenceReference(self)
- elif self.type.code == TypeCode.Pointer:
- try:
- val = self.dumper.nativeValueDereferencePointer(self)
- except:
- val.laddress = self.pointer()
- val._type = self.type.dereference()
- if self.dumper.useDynamicType:
- val._type = self.dumper.nativeDynamicType(val.laddress, val.type)
- else:
- raise RuntimeError("WRONG: %s" % self.type.code)
- #DumperBase.warn("DEREFERENCING FROM: %s" % self)
- #DumperBase.warn("DEREFERENCING TO: %s" % val)
- #dynTypeName = val.type.dynamicTypeName(val.laddress)
- #if dynTypeName is not None:
- # val._type = self.dumper.createType(dynTypeName)
- return val
+ return self.dumper.value_dereference(self)
def detypedef(self):
- self.check()
- if self.type.code != TypeCode.Typedef:
- raise RuntimeError("WRONG")
- val = self.copy()
- val._type = self.type.ltarget
- #DumperBase.warn("DETYPEDEF FROM: %s" % self)
- #DumperBase.warn("DETYPEDEF TO: %s" % val)
- return val
-
- def extend(self, size):
- if self.type.size() < size:
- val = self.dumper.Value(self.dumper)
- val.laddress = None
- val.ldata = self.zeroExtend(self.ldata)
- return val
- if self.type.size() == size:
- return self
- raise RuntimeError('NOT IMPLEMENTED')
-
- def zeroExtend(self, data, size):
- ext = '\0' * (size - len(data))
- if sys.version_info[0] == 3:
- pad = bytes(ext, encoding='latin1')
- else:
- pad = bytes(ext)
- return pad + data if self.dumper.isBigEndian else data + pad
+ return self.dumper.value_detypedef(self)
def cast(self, typish):
- self.check()
- val = self.dumper.Value(self.dumper)
- val.laddress = self.laddress
- val.lbitsize = self.lbitsize
- val.ldata = self.ldata
- val._type = self.dumper.createType(typish)
- return val
+ return self.dumper.value_cast(self, typish)
def address(self):
self.check()
return self.laddress
- def data(self, size=None):
- self.check()
- if self.ldata is not None:
- if len(self.ldata) > 0:
- if size is None:
- return self.ldata
- if size == len(self.ldata):
- return self.ldata
- if size < len(self.ldata):
- return self.ldata[:size]
- #raise RuntimeError('ZERO-EXTENDING DATA TO %s BYTES: %s' % (size, self))
- return self.zeroExtend(self.ldata, size)
- if self.laddress is not None:
- if size is None:
- size = self.type.size()
- res = self.dumper.readRawMemory(self.laddress, size)
- if len(res) > 0:
- return res
- raise RuntimeError('CANNOT CONVERT ADDRESS TO BYTES: %s' % self)
- raise RuntimeError('CANNOT CONVERT TO BYTES: %s' % self)
-
- def extractInteger(self, bitsize, unsigned):
- #with self.dumper.timer('extractInt'):
- self.check()
- if bitsize > 32:
- size = 8
- code = 'Q' if unsigned else 'q'
- elif bitsize > 16:
- size = 4
- code = 'I' if unsigned else 'i'
- elif bitsize > 8:
- size = 2
- code = 'H' if unsigned else 'h'
- else:
- size = 1
- code = 'B' if unsigned else 'b'
- rawBytes = self.data(size)
- res = struct.unpack_from(self.dumper.packCode + code, rawBytes, 0)[0]
- #DumperBase.warn('Extract: Code: %s Bytes: %s Bitsize: %s Size: %s'
- # % (self.dumper.packCode + code, self.dumper.hexencode(rawBytes), bitsize, size))
- return res
-
- def extractSomething(self, code, bitsize):
- #with self.dumper.timer('extractSomething'):
- self.check()
- size = (bitsize + 7) >> 3
- rawBytes = self.data(size)
- res = struct.unpack_from(self.dumper.packCode + code, rawBytes, 0)[0]
- return res
+ def data(self):
+ return self.dumper.value_data(self, self.dumper.type_size(self.typeid))
def to(self, pattern):
return self.split(pattern)[0]
def split(self, pattern):
- #with self.dumper.timer('split'):
- #DumperBase.warn('EXTRACT STRUCT FROM: %s' % self.type)
- (pp, size, fields) = self.dumper.describeStruct(pattern)
- #DumperBase.warn('SIZE: %s ' % size)
- result = struct.unpack_from(self.dumper.packCode + pp, self.data(size))
-
- def structFixer(field, thing):
- #DumperBase.warn('STRUCT MEMBER: %s' % type(thing))
- if field.isStruct:
- #if field.type != field.fieldType():
- # raise RuntimeError('DO NOT SIMPLIFY')
- #DumperBase.warn('FIELD POS: %s' % field.type.stringify())
- #DumperBase.warn('FIELD TYE: %s' % field.fieldType().stringify())
- res = self.dumper.createValue(thing, field.fieldType())
- #DumperBase.warn('RES TYPE: %s' % res.type)
- if self.laddress is not None:
- res.laddress = self.laddress + field.offset()
- return res
- return thing
- if len(fields) != len(result):
- raise RuntimeError('STRUCT ERROR: %s %s' % (fields, result))
- return tuple(map(structFixer, fields, result))
+ return self.dumper.value_split(self, pattern)
def checkPointer(self, p, align=1):
- ptr = p if self.isInt(p) else p.pointer()
+ ptr = p if isinstance(p, int) else p.pointer()
self.readRawMemory(ptr, 1)
- def type(self, typeId):
- return self.typeData.get(typeId)
-
def splitArrayType(self, type_name):
# "foo[2][3][4]" -> ("foo", "[3][4]", 2)
pos1 = len(type_name)
@@ -3481,249 +3285,172 @@ class DumperBase():
item_count = type_name[pos1 + 1:pos2]
return (type_name[0:pos1].strip(), type_name[pos2 + 1:].strip(), int(item_count))
- def registerTypeAlias(self, existingTypeId, aliasId):
- #DumperBase.warn('REGISTER ALIAS %s FOR %s' % (aliasId, existingTypeId))
- self.typeData[aliasId] = self.typeData[existingTypeId]
-
- class TypeData():
- def __init__(self, dumper, type_id):
- self.dumper = dumper
- self.lfields = None # None or Value -> list of member Values
- self.lalignment = None # Function returning alignment of this struct
- self.lbitsize = None
- self.ltarget = None # Inner type for arrays
- self.templateArguments = None
- self.code = None
- self.name = type_id
- self.typeId = type_id
- self.enumDisplay = None
- self.moduleName = None
- #DumperBase.warn('REGISTER TYPE: %s' % type_id)
- dumper.typeData[type_id] = self
-
- def copy(self):
- tdata = self.dumper.TypeData(self.dumper, self.typeId)
- tdata.dumper = self.dumper
- tdata.lfields = self.lfields
- tdata.lalignment = self.lalignment
- tdata.lbitsize = self.lbitsize
- tdata.ltarget = self.ltarget
- tdata.templateArguments = self.templateArguments
- tdata.code = self.code
- tdata.name = self.name
- tdata.typeId = self.typeId
- tdata.enumDisplay = self.enumDisplay
- tdata.moduleName = self.moduleName
- return tdata
-
- @property
- def bitsize(self):
- if callable(self.lbitsize):
- self.lbitsize = self.lbitsize()
- return self.lbitsize
+ def registerTypeAlias(self, existing_type_id, alias_id):
+ #self.warn('REGISTER ALIAS %s FOR %s' % (aliasId, existingTypeId))
+ self.type_alias[alias_id] = existing_type_id
+
+ def init_type_cache(self):
+ self.type_name_cache = {}
+ self.type_fields_cache = {}
+ self.type_alignment_cache = {}
+ self.type_bitsize_cache = {}
+ self.type_size_cache = {}
+ self.type_target_cache = {}
+ self.type_template_arguments_cache = {}
+ self.type_code_cache = {}
+ self.type_enum_display_cache = {}
+ self.type_module_name_cache = {}
+ self.type_nativetype_cache = {}
+ self.type_modulename_cache = {}
+ self.type_encoding_cache = {}
+ self.type_qobject_based_cache = {}
+ self.typeid_cache = {} # internal typename -> id
+ self.typeid_current = 100
+ self.typeid_from_typekey = {} # typename -> id
+
+ def dump_type_cache(self):
+ self.warn('NAME: %s' % self.type_name_cache)
+ self.warn('CODE: %s' % self.type_code_cache)
+ #self.warn('FIELDS: %s' % self.type_fields_cache)
+ self.warn('SIZE: %s' % self.type_size_cache)
+ self.warn('TARGS: %s' % self.type_template_arguments_cache)
+ self.warn('BITSIZE: %s' % self.type_bitsize_cache)
+ self.warn('TARGET: %s' % self.type_target_cache)
+ #self.warn('NATIVETYPE: %s' % self.type_nativetype_cache)
+
+ def dump_typeid(self, typeid):
+ self.warn(' NAME: %s' % self.type_name_cache.get(typeid, None))
+ self.warn(' CODE: %s' % self.type_code_cache.get(typeid, None))
+ #self.warn(' FIELDS: %s' % self.type_fields_cache.get(typeid, None))
+ self.warn(' SIZE: %s' % self.type_size_cache.get(typeid, None))
+ self.warn(' TARGS: %s' % self.type_template_arguments_cache.get(typeid, None))
+ self.warn(' BITSIZE: %s' % self.type_bitsize_cache.get(typeid, None))
+ self.warn(' TARGET: %s' % self.type_target_cache.get(typeid, None))
+ #self.warn(' NATIVETYPE: %s' % self.type_nativetype_cache.get(typeid, None))
+
+ def typeid_for_typish(self, typish):
+ if isinstance(typish, int):
+ return typish
+ if isinstance(typish, str):
+ return self.typeid_for_string(typish)
+ if isinstance(typish, self.Type):
+ return typish.typeid
+ self.warn('NO TYPE FOR TYPISH: %s' % str(typish))
+ return 0
+
+ def sanitize_type_name(self, typeid_str):
+ if not ' ' in typeid_str:
+ # FIXME: This uses self.qtNamespace() too early.
+ #typeid_arr.append(self.qtNamespace())
+ return typeid_str.replace('@', '')
+ typeid_arr = []
+ last_char_was_space = False
+ for c in typeid_str:
+ if c == '@' in typeid_str:
+ # FIXME: This uses self.qtNamespace() too early.
+ #typeid_arr.append(self.qtNamespace())
+ pass
+ elif c == ' ':
+ last_char_was_space = True
+ elif c in '&*<>,':
+ last_char_was_space = False
+ typeid_arr.append(c)
+ else:
+ if last_char_was_space:
+ typeid_arr.append(' ')
+ last_char_was_space = False
+ typeid_arr.append(c)
+ #self.warn("SANITIZE: '%s' TO '%s'" % (typeid_str, ''.join(typeid_arr)))
+ return ''.join(typeid_arr)
+
+ def typeid_for_string(self, typeid_str, type_name=None):
+ #typeid = self.typeid_cache.get(typeid_str, None)
+ #if typeid is not None:
+ # return typeid
+ sane_typeid_str = self.sanitize_type_name(typeid_str)
+ typeid = self.typeid_cache.get(sane_typeid_str, None)
+ if typeid is not None:
+ return typeid
+
+ self.typeid_current += 1
+ if type_name is None:
+ type_name = sane_typeid_str
+ typeid = self.typeid_current
+ self.typeid_cache[typeid_str] = typeid
+ self.typeid_cache[sane_typeid_str] = typeid
+ self.type_name_cache[typeid] = type_name
+ #if typeid == 103:
+ #self.warn("CREATED TYPE: %d %s" % (typeid, sane_typeid_str))
+ #if typeid == 135: self.dump_location()
+ return typeid
class Type():
- def __init__(self, dumper, typeId):
- self.typeId = typeId.replace('@', dumper.qtNamespace())
+ __slots__ = ['dumper', 'typeid']
+ def __init__(self, dumper, typeid):
self.dumper = dumper
- self.initialized = False
+ self.typeid = typeid
def __str__(self):
- #return self.typeId
- return self.stringify()
-
- @property
- def tdata(self):
- if not self.initialized:
- self.initialized = True
- self.data = self.dumper.typeData.get(self.typeId, None)
- if self.data is None:
- #DumperBase.warn('USING : %s' % self.typeId)
- self.dumper.lookupType(self.typeId)
- self.data = self.dumper.typeData.get(self.typeId)
- return self.data
-
- def setTdata(self, tdata):
- self.initialized = True
- self.data = tdata
+ return self.dumper.type_stringify(self.typeid)
@property
def name(self):
- return self.typeId if self.tdata is None else self.tdata.name
+ return self.dumper.type_name(self.typeid)
@property
def code(self):
- return self.tdata.code
+ return self.dumper.type_code(self.typeid)
- @property
- def lbitsize(self):
- return self.tdata.bitsize
+ def bitsize(self):
+ return self.dumper.type_bitsize(self.typeid)
- @property
- def lbitpos(self):
- return self.tdata.lbitpos
+ def size(self):
+ return self.dumper.type_size(self.typeid)
- @property
- def ltarget(self):
- if isinstance(self.tdata.ltarget, str):
- self.tdata.ltarget = self.dumper.createType(self.tdata.ltarget)
- return self.tdata.ltarget
+ def target(self):
+ return self.dumper.Type(self.dumper, self.dumper.type_target(self.typeid))
@property
def targetName(self):
- if self.tdata.ltarget is None:
+ target = self.target()
+ if target is None:
return ''
- return self.tdata.ltarget if isinstance(self.tdata.ltarget, str) else self.tdata.ltarget.name
+ return target if isinstance(target, str) else target.name
@property
def moduleName(self):
- if callable(self.tdata.moduleName):
- self.tdata.moduleName = self.tdata.moduleName()
- return self.tdata.moduleName
-
- def stringify(self):
- return 'Type(name="%s",bsize=%s,code=%s)' \
- % (self.tdata.name, self.lbitsize, self.tdata.code)
+ return self.dumper.type_modulename_cache.get(self.typeid, None)
def __getitem__(self, index):
- if self.dumper.isInt(index):
- return self.templateArgument(index)
+ if isinstance(index, int):
+ return self.dumper.type_template_argument(self.typeid, index)
raise RuntimeError('CANNOT INDEX TYPE')
- def dynamicTypeName(self, address):
- if self.tdata.code != TypeCode.Struct:
- return None
- try:
- vtbl = self.dumper.extractPointer(address)
- except:
- return None
- #DumperBase.warn('VTBL: 0x%x' % vtbl)
- if not self.dumper.couldBePointer(vtbl):
- return None
- return self.dumper.nativeDynamicTypeName(address, self)
-
- def dynamicType(self, address):
- # FIXME: That buys some performance at the cost of a fail
- # of Gdb13393 dumper test.
- #return self
- #with self.dumper.timer('dynamicType %s 0x%s' % (self.name, address)):
- dynTypeName = self.dynamicTypeName(address)
- if dynTypeName is not None:
- return self.dumper.createType(dynTypeName)
- return self
-
def check(self):
- if self.tdata.name is None:
- raise RuntimeError('TYPE WITHOUT NAME: %s' % self.typeId)
+ #if self.tdata.name is None:
+ # raise RuntimeError('TYPE WITHOUT NAME: %s' % self.typeid)
+ pass
def dereference(self):
- if self.code == TypeCode.Typedef:
- return self.ltarget.dereference()
- self.check()
- return self.ltarget
-
- def unqualified(self):
- return self
+ return self.dumper.Type(self.dumper, self.dumper.type_dereference(self.typeid))
def templateArguments(self):
- if self.tdata is None:
- return self.dumper.listTemplateParameters(self.typeId)
- return self.tdata.templateArguments()
-
- def templateArgument(self, position):
- #DumperBase.warn('TDATA: %s' % self.tdata)
- #DumperBase.warn('ID: %s' % self.typeId)
- if self.tdata is None or self.tdata.templateArguments is None:
- # Native lookups didn't help. Happens for 'wrong' placement of 'const'
- # etc. with LLDB. But not all is lost:
- ta = self.dumper.listTemplateParameters(self.typeId)
- #DumperBase.warn('MANUAL: %s' % ta)
- res = ta[position]
- #DumperBase.warn('RES: %s' % res.typeId)
- return res
- #DumperBase.warn('TA: %s %s' % (position, self.typeId))
- #DumperBase.warn('ARGS: %s' % self.tdata.templateArguments())
- return self.tdata.templateArguments()[position]
-
- def simpleEncoding(self):
- res = {
- 'bool': 'int:1',
- 'char': 'int:1',
- 'int8_t': 'int:1',
- 'qint8': 'int:1',
- 'signed char': 'int:1',
- 'char8_t': 'uint:1',
- 'unsigned char': 'uint:1',
- 'uint8_t': 'uint:1',
- 'quint8': 'uint:1',
- 'short': 'int:2',
- 'int16_t': 'int:2',
- 'qint16': 'int:2',
- 'unsigned short': 'uint:2',
- 'char16_t': 'uint:2',
- 'uint16_t': 'uint:2',
- 'quint16': 'uint:2',
- 'int': 'int:4',
- 'int32_t': 'int:4',
- 'qint32': 'int:4',
- 'unsigned int': 'uint:4',
- 'char32_t': 'uint:4',
- 'uint32_t': 'uint:4',
- 'quint32': 'uint:4',
- 'long long': 'int:8',
- 'int64_t': 'int:8',
- 'qint64': 'int:8',
- 'unsigned long long': 'uint:8',
- 'uint64_t': 'uint:8',
- 'quint64': 'uint:8',
- 'float': 'float:4',
- 'double': 'float:8',
- 'QChar': 'uint:2'
- }.get(self.name, None)
- return res
+ return self.dumper.type_template_arguments(self.typeid)
+
+ def templateArgument(self, index):
+ return self.dumper.type_template_argument(self.typeid, index)
def isSimpleType(self):
return self.code in (TypeCode.Integral, TypeCode.Float, TypeCode.Enum)
def alignment(self):
- if self.tdata.code == TypeCode.Typedef:
- return self.ltarget.alignment()
- if self.tdata.code in (TypeCode.Integral, TypeCode.Float, TypeCode.Enum):
- if self.tdata.name in ('double', 'long long', 'unsigned long long'):
- # Crude approximation.
- return 8 if self.dumper.isWindowsTarget() else self.dumper.ptrSize()
- return self.size()
- if self.tdata.code in (TypeCode.Pointer, TypeCode.Reference, TypeCode.RValueReference):
- return self.dumper.ptrSize()
- if self.tdata.lalignment is not None:
- #if isinstance(self.tdata.lalignment, function): # Does not work that way.
- if hasattr(self.tdata.lalignment, '__call__'):
- return self.tdata.lalignment()
- return self.tdata.lalignment
- return 1
+ return self.dumper.type_alignment(self.typeid)
def pointer(self):
- return self.dumper.createPointerType(self)
-
- def target(self):
- return self.ltarget
+ return self.dumper.Type(self.dumper, self.dumper.create_pointer_typeid(self.typeid))
def stripTypedefs(self):
- if isinstance(self, self.dumper.Type) and self.code != TypeCode.Typedef:
- #DumperBase.warn('NO TYPEDEF: %s' % self)
- return self
- return self.ltarget
-
- def size(self):
- bs = self.lbitsize
- if bs % 8 != 0:
- DumperBase.warn('ODD SIZE: %s' % self)
- return (7 + bs) >> 3
-
- def bitsize(self):
- if self.lbitsize is not None:
- return self.lbitsize
- raise RuntimeError('DONT KNOW SIZE: %s' % self)
+ return self.dumper.Type(self.dumper, self.dumper.type_target(self.typeid))
def isMovableType(self):
if self.code in (TypeCode.Pointer, TypeCode.Integral, TypeCode.Float):
@@ -3743,269 +3470,200 @@ class DumperBase():
):
return True
if strippedName == 'QStringList':
- return self.dumper.qtVersion() >= 0x050000
+ return self.dumper.qtVersionAtLeast(0x050000)
if strippedName == 'QList':
- return self.dumper.qtVersion() >= 0x050600
+ return self.dumper.qtVersionAtLeast(0x050600)
return False
- class Field(collections.namedtuple('Field',
- ['dumper', 'name', 'type', 'bitsize', 'bitpos',
- 'extractor', 'isBase', 'isStruct', 'isArtificial'])):
+ class Field:
+ __slots__ = ['name', 'typeid', 'bitsize', 'bitpos', 'is_struct', 'is_artificial', 'is_base_class']
- def __new__(cls, dumper, name=None, type=None, bitsize=None, bitpos=None,
- extractor=None, isBase=False, isStruct=False, isArtificial=False):
- return super(DumperBase.Field, cls).__new__(
- cls, dumper, name, type, bitsize, bitpos,
- extractor, isBase, isStruct, isArtificial)
+ def __init__(self, name=None, typeid=None, bitsize=None, bitpos=None,
+ extractor=None, is_struct=False, is_artificial=False, is_base_class=False):
+ self.name = name
+ self.typeid = typeid
+ self.bitsize = bitsize
+ self.bitpos = bitpos
+ self.is_struct = is_struct
+ self.is_base_class = is_base_class
- __slots__ = ()
-
- def __str__(self):
- return self.stringify()
-
- def stringify(self):
- #return 'Field(name="%s")' % self.name
- typename = None if self.type is None else self.type.stringify()
- return 'Field(name="%s",type=%s,bitpos=%s,bitsize=%s)' \
- % (self.name, typename, self.bitpos, self.bitsize)
-
- def check(self):
- pass
-
- def size(self):
- return self.bitsize() // 8
-
- def offset(self):
- return self.bitpos // 8
-
- def fieldType(self):
- if self.type is not None:
- return self.type
- raise RuntimeError('CANT GET FIELD TYPE FOR %s' % self)
- return None
def ptrCode(self):
return 'I' if self.ptrSize() == 4 else 'Q'
- def toPointerData(self, address):
- if not self.isInt(address):
- raise RuntimeError('wrong')
- return bytes(struct.pack(self.packCode + self.ptrCode(), address))
-
def fromPointerData(self, bytes_value):
return struct.unpack(self.packCode + self.ptrCode(), bytes_value)
- def createPointerValue(self, targetAddress, targetTypish):
- if not isinstance(targetTypish, self.Type) and not isinstance(targetTypish, str):
- raise RuntimeError('Expected type in createPointerValue(), got %s'
- % type(targetTypish))
- if not self.isInt(targetAddress):
+ def createPointerValue(self, target_address, target_typish):
+ if not isinstance(target_address, int):
raise RuntimeError('Expected integral address value in createPointerValue(), got %s'
- % type(targetTypish))
- val = self.Value(self)
- val.ldata = self.toPointerData(targetAddress)
- targetType = self.createType(targetTypish)
- if self.useDynamicType:
- targetType = targetType.dynamicType(targetAddress)
- val._type = self.createPointerType(targetType)
- return val
-
- def createReferenceValue(self, targetAddress, targetType):
- if not isinstance(targetType, self.Type):
- raise RuntimeError('Expected type in createReferenceValue(), got %s'
- % type(targetType))
- if not self.isInt(targetAddress):
- raise RuntimeError('Expected integral address value in createReferenceValue(), got %s'
- % type(targetType))
+ % type(target_typish))
val = self.Value(self)
- val.ldata = self.toPointerData(targetAddress)
- if self.useDynamicType:
- targetType = targetType.dynamicType(targetAddress)
- val._type = self.createReferenceType(targetType)
+ val.ldata = target_address
+ val.typeid = self.create_pointer_typeid(self.create_typeid(target_typish))
return val
-
- def createPointerType(self, targetType):
- if not isinstance(targetType, (str, self.Type)):
- raise RuntimeError('Expected type or str in createPointerType(), got %s'
- % type(targetType))
- typeId = (targetType if isinstance(targetType, str) else targetType.typeId) + ' *'
- tdata = self.TypeData(self, typeId)
- tdata.name = (targetType if isinstance(targetType, str) else targetType.name) + '*'
- tdata.lbitsize = 8 * self.ptrSize()
- tdata.code = TypeCode.Pointer
- tdata.ltarget = targetType
- return self.Type(self, typeId)
-
- def createReferenceType(self, targetType):
- if not isinstance(targetType, self.Type):
- raise RuntimeError('Expected type in createReferenceType(), got %s'
- % type(targetType))
- typeId = targetType.typeId + ' &'
- tdata = self.TypeData(self, typeId)
- tdata.name = targetType.name + ' &'
- tdata.code = TypeCode.Reference
- tdata.ltarget = targetType
- tdata.lbitsize = 8 * self.ptrSize() # Needed for Gdb13393 test.
- #tdata.lbitsize = None
- return self.Type(self, typeId)
-
- def createRValueReferenceType(self, targetType):
- if not isinstance(targetType, self.Type):
- raise RuntimeError('Expected type in createRValueReferenceType(), got %s'
- % type(targetType))
- typeId = targetType.typeId + ' &&'
- tdata = self.TypeData(self, typeId)
- tdata.name = targetType.name + ' &&'
- tdata.code = TypeCode.RValueReference
- tdata.ltarget = targetType
- tdata.lbitsize = None
- return self.Type(self, typeId)
-
- def createArrayType(self, targetType, count):
- if not isinstance(targetType, self.Type):
- raise RuntimeError('Expected type in createArrayType(), got %s'
- % type(targetType))
- targetTypeId = targetType.typeId
-
- if targetTypeId.endswith(']'):
- (prefix, suffix, inner_count) = self.splitArrayType(targetTypeId)
- type_id = '%s[%d][%d]%s' % (prefix, count, inner_count, suffix)
- type_name = type_id
+ #target_typeid = self.create_typeid(target_typish)
+ #if self.useDynamicType:
+ # target_typeid = self.dynamic_typeid_at_address(target_typeid, target_address)
+ #val.typeid = self.create_pointer_typeid(target_typeid)
+ #return val
+
+ def createPointerType(self, target_typish):
+ typeid = self.create_pointer_typeid(self.typeid_for_typish(target_typish))
+ return self.Type(self, typeid)
+
+ def create_pointer_typeid(self, target_typeid):
+ name = self.type_name(target_typeid) + ' *'
+ typeid = self.typeid_for_string(name)
+ self.type_size_cache[typeid] = self.ptrSize()
+ self.type_alignment_cache[typeid] = self.ptrSize()
+ self.type_code_cache[typeid] = TypeCode.Pointer
+ self.type_target_cache[typeid] = target_typeid
+ return typeid
+
+ def create_reference_typeid(self, target_typeid):
+ type_name = self.type_name_cache[target_typeid] + ' &'
+ typeid = self.typeid_for_string(type_name)
+ self.type_code_cache[typeid] = TypeCode.Reference
+ self.type_target_cache[typeid] = target_typeid
+ #self.type_size_cache[typeid] = self.ptrSize() # Needed for Gdb13393 test.
+ return typeid
+
+ def create_rvalue_reference_typeid(self, target_typeid):
+ type_name = self.type_name_cache[target_typeid] + ' &&'
+ typeid = self.typeid_for_string(type_name)
+ self.type_code_cache[typeid] = TypeCode.RValueReference
+ self.type_target_cache[typeid] = target_typeid
+ return typeid
+
+ def create_array_typeid(self, target_typeid, count):
+ target_type_name = self.type_name(target_typeid)
+ if target_type_name.endswith(']'):
+ (prefix, suffix, inner_count) = self.splitArrayType(target_type_name)
+ type_name = '%s[%d][%d]%s' % (prefix, count, inner_count, suffix)
else:
- type_id = '%s[%d]' % (targetTypeId, count)
- type_name = '%s[%d]' % (targetType.name, count)
-
- tdata = self.TypeData(self, type_id)
- tdata.name = type_name
- tdata.code = TypeCode.Array
- tdata.ltarget = targetType
- tdata.lbitsize = targetType.lbitsize * count
- return self.Type(self, type_id)
-
- def createBitfieldType(self, targetType, bitsize):
- if not isinstance(targetType, self.Type):
- raise RuntimeError('Expected type in createBitfieldType(), got %s'
- % type(targetType))
- typeId = '%s:%d' % (targetType.typeId, bitsize)
- tdata = self.TypeData(self, typeId)
- tdata.name = '%s : %d' % (targetType.typeId, bitsize)
- tdata.code = TypeCode.Bitfield
- tdata.ltarget = targetType
- tdata.lbitsize = bitsize
- return self.Type(self, typeId)
-
- def createTypedefedType(self, targetType, typeName, typeId=None):
- if typeId is None:
- typeId = typeName
- if not isinstance(targetType, self.Type):
- raise RuntimeError('Expected type in createTypedefType(), got %s'
- % type(targetType))
+ type_name = '%s[%d]' % (target_type_name, count)
+ typeid = self.typeid_for_string(type_name)
+ self.type_code_cache[typeid] = TypeCode.Array
+ self.type_target_cache[typeid] = target_typeid
+ self.type_size_cache[typeid] = self.type_size(target_typeid) * count
+ self.type_alignment_cache[typeid] = self.type_alignment_cache.get(target_typeid, None)
+ return typeid
+
+ def create_bitfield_typeid(self, target_typeid, bitsize):
+ target_typename = self.type_name(target_typeid)
+ typeid = self.typeid_for_string('%s:%d' % (target_typename, bitsize))
+ self.type_name_cache[typeid] = '%s : %d' % (target_typename, bitsize)
+ self.type_code_cache[typeid] = TypeCode.Bitfield
+ self.type_target_cache[typeid] = target_typeid
+ self.type_bitsize_cache[typeid] = bitsize
+ return typeid
+
+ def create_typedefed_typeid(self, target_typeid, type_name, type_key):
+ typeid = self.typeid_for_string(type_key, type_name)
# Happens for C-style struct in GDB: typedef { int x; } struct S1;
- if targetType.typeId == typeId:
- return targetType
- tdata = self.TypeData(self, typeId)
- tdata.name = typeName
- tdata.code = TypeCode.Typedef
- tdata.ltarget = targetType
- tdata.lbitsize = targetType.lbitsize
- #tdata.lfields = targetType.lfields
- tdata.lbitsize = targetType.lbitsize
- return self.Type(self, typeId)
-
- def knownArrayTypeSize(self):
- return 3 * self.ptrSize() if self.qtVersion() >= 0x060000 else self.ptrSize()
-
- def knownTypeSize(self, typish):
- if typish[0] == 'Q':
- if typish.startswith('QList<') or typish.startswith('QVector<'):
- return self.knownArrayTypeSize()
- if typish == 'QObject':
- return 2 * self.ptrSize()
- if typish == 'QStandardItemData':
- return 4 * self.ptrSize() if self.qtVersion() >= 0x060000 else 2 * self.ptrSize()
- if typish == 'Qt::ItemDataRole':
- return 4
- if typish == 'QChar':
- return 2
- if typish in ('quint32', 'qint32'):
- return 4
- return None
+ if target_typeid == typeid:
+ return target_typeid
+ self.type_code_cache[typeid] = TypeCode.Typedef
+ self.type_target_cache[typeid] = target_typeid
+ self.type_size_cache[typeid] = self.type_size_cache.get(target_typeid, None)
+ return typeid
def createType(self, typish, size=None):
- if isinstance(typish, self.Type):
- #typish.check()
- if hasattr(typish, 'lbitsize') and typish.lbitsize is not None and typish.lbitsize > 0:
- return typish
- # Size 0 is sometimes reported by GDB but doesn't help at all.
- # Force using the fallback:
- typish = typish.name
+ return self.Type(self, self.create_typeid(typish, size))
+ def create_typeid(self, typish, size=None):
+ if isinstance(typish, int):
+ return typish
+ if isinstance(typish, self.Type):
+ return typish.typeid
if isinstance(typish, str):
- ns = self.qtNamespace()
- typish = typish.replace('@', ns)
- if typish.startswith(ns):
- if size is None:
- size = self.knownTypeSize(typish[len(ns):])
- else:
- if size is None:
- size = self.knownTypeSize(typish)
- if size is not None:
- typish = ns + typish
-
- tdata = self.typeData.get(typish, None)
- if tdata is not None:
- if tdata.lbitsize is not None:
- if callable(tdata.lbitsize) or tdata.lbitsize > 0:
- return self.Type(self, typish)
-
- knownType = self.lookupType(typish)
- #DumperBase.warn('KNOWN: %s' % knownType)
- if knownType is not None:
- #DumperBase.warn('USE FROM NATIVE')
- return knownType
-
- #DumperBase.warn('FAKING: %s SIZE: %s' % (typish, size))
- tdata = self.TypeData(self, typish)
- tdata.templateArguments = lambda: self.listTemplateParameters(typish)
- if size is not None:
- tdata.lbitsize = 8 * size
- if typish.endswith('*'):
- tdata.code = TypeCode.Pointer
- tdata.lbitsize = 8 * self.ptrSize()
- tdata.ltarget = typish[:-1].strip()
-
- typeobj = self.Type(self, tdata.typeId)
- #DumperBase.warn('CREATE TYPE: %s' % typeobj.stringify())
- typeobj.check()
- return typeobj
+ return self.create_typeid_from_name(typish)
raise RuntimeError('NEED TYPE, NOT %s' % type(typish))
- def createValueFromAddressAndType(self, address, typish):
+ def cheap_typeid_from_name(self, typename_):
+ ns = self.qtNamespace()
+ typename = typename_.replace('@', ns)
+ return self.cheap_typeid_from_name_nons(typename)
+
+ def cheap_typeid_from_name_nons(self, typename):
+ if typename in self.typeid_cache:
+ return self.typeid_for_string(typename)
+
+ if typename.startswith('QList<') or typename.startswith('QVector<'):
+ typeid = self.typeid_for_string(typename)
+ if typeid:
+ size = 3 * self.ptrSize() if self.qtVersionAtLeast(0x060000) else self.ptrSize()
+ self.type_code_cache[typeid] = TypeCode.Struct
+ self.type_size_cache[typeid] = size
+ return typeid
+
+ if typename.endswith('*'):
+ inner_typeid = self.cheap_typeid_from_name_nons(typename[0:-1])
+ if inner_typeid != 0:
+ return self.create_pointer_typeid(inner_typeid)
+
+ return 0
+
+ def create_typeid_from_name(self, typename_, size=None):
+ ns = self.qtNamespace()
+ typename = typename_.replace('@', ns)
+
+ if typename in self.typeid_cache:
+ return self.typeid_for_string(typename)
+
+ # This triggers for boost::variant<int, std::string> due to the mis-encoding
+ # of the second template parameter. [MARK_A]
+ knownType = self.lookupType(typename)
+ #self.warn('KNOWN: %s FOR %s' % (knownType, typename))
+ if knownType is not None:
+ #self.warn('USE FROM NATIVE')
+ #self.dump_location()
+ return knownType.typeid
+
+ #self.warn('FAKING: %s SIZE: %s' % (typename, size))
+ typeid = self.typeid_for_string(typename)
+ if size is not None:
+ self.type_size_cache[typeid] = size
+ self.type_code_cache[typeid] = TypeCode.Struct
+ if typename.endswith('*'):
+ self.type_code_cache[typeid] = TypeCode.Pointer
+ self.type_size_cache[typeid] = self.ptrSize()
+ self.type_target_cache[typeid] = self.typeid_for_string(typename[:-1].strip())
+
+ #self.dump_location()
+ #self.warn('CREATED TYPE: %s' % typeid)
+ return typeid
+
+ def createValueFromAddress(self, address, typish):
val = self.Value(self)
- val._type = self.createType(typish)
- #DumperBase.warn('CREATING %s AT 0x%x' % (val.type.name, datish))
+ val.typeid = self.create_typeid(typish)
+ #self.warn('CREATING %s AT 0x%x' % (val.type.name, address))
val.laddress = address
if self.useDynamicType:
- val._type = val.type.dynamicType(address)
+ val.typeid = self.dynamic_typeid_at_address(val.typeid, address)
+ return val
+
+ def createValueFromData(self, data, typish):
+ val = self.Value(self)
+ val.typeid = self.create_typeid(typish)
+ #self.warn('CREATING %s WITH DATA %s' % (val.type.name, self.hexencode(data)))
+ val.ldata = data
+ val.check()
return val
def createValue(self, datish, typish):
- if self.isInt(datish): # Used as address.
- return self.createValueFromAddressAndType(datish, typish)
+ if isinstance(datish, int): # Used as address.
+ return self.createValueFromAddress(datish, typish)
if isinstance(datish, bytes):
- val = self.Value(self)
- val._type = self.createType(typish)
- #DumperBase.warn('CREATING %s WITH DATA %s' % (val.type.name, self.hexencode(datish)))
- val.ldata = datish
- val.check()
- return val
+ return self.createValueFromData(datish, typish)
raise RuntimeError('EXPECTING ADDRESS OR BYTES, GOT %s' % type(datish))
def createProxyValue(self, proxy_data, type_name):
- tdata = self.TypeData(self, type_name)
- tdata.code = TypeCode.Struct
+ typeid = self.typeid_for_string(type_name)
+ self.type_code_cache[typeid] = TypeCode.Struct
val = self.Value(self)
- val._type = self.Type(self, type_name)
+ val.typeid = typeid
val.ldata = proxy_data
return val
@@ -4013,109 +3671,667 @@ class DumperBase():
def __init__(self, dumper):
self.dumper = dumper
self.pattern = ''
- self.currentBitsize = 0
+ self.current_size = 0
self.fields = []
self.autoPadNext = False
self.maxAlign = 1
- def addField(self, fieldSize, fieldCode=None, fieldIsStruct=False,
- fieldName=None, fieldType=None, fieldAlign=1):
+ def add_field(self, field_size, field_code=None, field_is_struct=False,
+ field_name=None, field_typeid=0, field_align=1):
+
+ if field_code is None:
+ field_code = '%ss' % field_size
- if fieldType is not None:
- fieldType = self.dumper.createType(fieldType)
- if fieldSize is None and fieldType is not None:
- fieldSize = fieldType.size()
- if fieldCode is None:
- fieldCode = '%ss' % fieldSize
+ #self.dumper.warn("FIELD SIZE: %s %s %s " % (field_name, field_size, str(field_align)))
if self.autoPadNext:
- self.currentBitsize = 8 * ((self.currentBitsize + 7) >> 3) # Fill up byte.
- padding = (fieldAlign - (self.currentBitsize >> 3)) % fieldAlign
- #DumperBase.warn('AUTO PADDING AT %s BITS BY %s BYTES' % (self.currentBitsize, padding))
- field = self.dumper.Field(self.dumper, bitpos=self.currentBitsize,
+ padding = (field_align - self.current_size) % field_align
+ #self.warn('AUTO PADDING AT %s BITS BY %s BYTES' % (self.current_size, padding))
+ field = self.dumper.Field(self.dumper, bitpos=self.current_size * 8,
bitsize=padding * 8)
self.pattern += '%ds' % padding
- self.currentBitsize += padding * 8
+ self.current_size += padding
self.fields.append(field)
self.autoPadNext = False
- if fieldAlign > self.maxAlign:
- self.maxAlign = fieldAlign
- #DumperBase.warn("MAX ALIGN: %s" % self.maxAlign)
+ if field_align > self.maxAlign:
+ self.maxAlign = field_align
- field = self.dumper.Field(dumper=self.dumper, name=fieldName, type=fieldType,
- isStruct=fieldIsStruct, bitpos=self.currentBitsize,
- bitsize=fieldSize * 8)
+ #self.warn("MAX ALIGN: %s" % self.maxAlign)
- self.pattern += fieldCode
- self.currentBitsize += fieldSize * 8
+ field = self.dumper.Field(name=field_name, typeid=field_typeid,
+ is_struct=field_is_struct, bitpos=self.current_size *8,
+ bitsize=field_size * 8)
+
+ self.pattern += field_code
+ self.current_size += field_size
self.fields.append(field)
+ def describe_struct_member(self, typename):
+ typename = typename.replace('@', self.qtNamespace())
+
+ typeid = self.cheap_typeid_from_name_nons(typename)
+ if typeid:
+ size = self.type_size_cache.get(typeid, None)
+ if size is not None:
+ return size, typeid
+
+ typeobj = self.lookupType(typename)
+ self.warn("LOOKUP FIELD TYPE: %s TYPEOBJ: %s" % (typename, typeobj))
+ if typeobj is not None:
+ typeid = typeobj.typeid
+ size = self.type_size_cache.get(typeid, None)
+ if size is not None:
+ return size, typeid
+
+ self.warn("UNKNOWN EMBEDDED TYPE: %s" % typename)
+ return 0, 0
+
+ @functools.lru_cache(maxsize = None)
def describeStruct(self, pattern):
- if pattern in self.structPatternCache:
- return self.structPatternCache[pattern]
ptrSize = self.ptrSize()
builder = self.StructBuilder(self)
n = None
- typeName = ''
+ typename = ''
readingTypeName = False
+ #self.warn("PATTERN: %s" % pattern)
for c in pattern:
+ #self.warn("PAT CODE: %s %s" % (c, str(n)))
if readingTypeName:
if c == '}':
readingTypeName = False
- fieldType = self.createType(typeName)
- fieldAlign = fieldType.alignment()
- builder.addField(n, fieldIsStruct=True,
- fieldType=fieldType, fieldAlign=fieldAlign)
- typeName = None
+ n, field_typeid = self.describe_struct_member(typename)
+
+ field_align = self.type_alignment(field_typeid)
+ builder.add_field(n,
+ field_is_struct=True,
+ field_typeid=field_typeid,
+ field_align=field_align)
+ typename = None
n = None
else:
- typeName += c
+ typename += c
elif c == 't': # size_t
- builder.addField(ptrSize, self.ptrCode(), fieldAlign=ptrSize)
+ builder.add_field(ptrSize, self.ptrCode(), field_align=ptrSize)
elif c == 'p': # Pointer as int
- builder.addField(ptrSize, self.ptrCode(), fieldAlign=ptrSize)
+ builder.add_field(ptrSize, self.ptrCode(), field_align=ptrSize)
elif c == 'P': # Pointer as Value
- builder.addField(ptrSize, '%ss' % ptrSize, fieldAlign=ptrSize)
+ builder.add_field(ptrSize, '%ss' % ptrSize, field_align=ptrSize)
elif c in ('d'):
- builder.addField(8, c, fieldAlign=ptrSize) # fieldType = 'double' ?
+ builder.add_field(8, c, field_align=ptrSize) # field_type = 'double' ?
elif c in ('q', 'Q'):
- builder.addField(8, c, fieldAlign=ptrSize)
+ builder.add_field(8, c, field_align=ptrSize)
elif c in ('i', 'I', 'f'):
- builder.addField(4, c, fieldAlign=4)
+ builder.add_field(4, c, field_align=4)
elif c in ('h', 'H'):
- builder.addField(2, c, fieldAlign=2)
+ builder.add_field(2, c, field_align=2)
elif c in ('b', 'B', 'c'):
- builder.addField(1, c, fieldAlign=1)
+ builder.add_field(1, c, field_align=1)
elif c >= '0' and c <= '9':
if n is None:
n = ''
n += c
elif c == 's':
- builder.addField(int(n), fieldAlign=1)
+ builder.add_field(int(n), field_align=1)
n = None
elif c == '{':
readingTypeName = True
- typeName = ''
+ typename = ''
elif c == '@':
if n is None:
# Automatic padding depending on next item
builder.autoPadNext = True
else:
# Explicit padding.
- builder.currentBitsize = 8 * ((builder.currentBitsize + 7) >> 3)
- padding = (int(n) - (builder.currentBitsize >> 3)) % int(n)
+ padding = (int(n) - builder.current_size) % int(n)
field = self.Field(self)
builder.pattern += '%ds' % padding
- builder.currentBitsize += padding * 8
+ builder.current_size += padding
builder.fields.append(field)
n = None
else:
raise RuntimeError('UNKNOWN STRUCT CODE: %s' % c)
pp = builder.pattern
- size = (builder.currentBitsize + 7) >> 3
+ size = builder.current_size
fields = builder.fields
tailPad = (builder.maxAlign - size) % builder.maxAlign
size += tailPad
- self.structPatternCache[pattern] = (pp, size, fields)
+ #self.warn("FIELDS: %s" % ((pp, size, fields),))
return (pp, size, fields)
+
+ def type_stringify(self, typeid):
+ return 'Type(id="%s",name="%s",bsize=%s,code=%s)'% (
+ str(typeid),
+ self.type_name_cache.get(typeid, '?'),
+ self.type_bitsize_cache.get(typeid, '?'),
+ self.type_code_cache.get(typeid, '?'))
+
+ def type_name(self, typeid):
+ name = self.type_name_cache.get(typeid, None)
+ if name is None:
+ self.dump_type_cache()
+ self.check_typeid(typeid)
+ raise RuntimeError('UNNAMED TYPE: %d' % typeid)
+ return name
+
+ def type_code(self, typeid):
+ # This does not seem to be needed for GDB and LLDB
+ if not typeid in self.type_code_cache:
+ typename = self.type_name_cache.get(typeid, None)
+ if typename is None:
+ raise RuntimeError('NAME/ID ERROR FOR %s' % typeid)
+ #self.warn("EMERGENCY LOOKUP: %s " % typename)
+ typeobj = self.lookupType(typename)
+ if typeobj is None:
+ #self.warn("EMERGENCY LOOKUP FAILED: %s " % typeid)
+ #self.dump_type_cache()
+ return TypeCode.Struct
+ #self.warn("EMERGENCY LOOKUP SUCCEEDED: %s " % typeid)
+ typeid = typeobj.typeid
+ return self.type_code_cache[typeid]
+
+ def type_bitpos(self, typeid):
+ return self.type_bitpos_cache[typeid]
+
+ def type_target(self, typeid):
+ return self.type_target_cache.get(typeid, None)
+ targetid = self.type_target_cache.get(typeid, None)
+ if not targetid in self.type_code_cache:
+ typename = self.type_name_cache.get(targetid, None)
+ if typename is None:
+ raise RuntimeError('NAME/ID ERROR FOR TARGET %s' % targetid)
+ typeobj = self.lookupType(typename)
+ if typeobj is None:
+ #self.warn("EMERGENCY LOOKUP FAILED FOR %s %s " % (typename, typeid))
+ #self.dump_type_cache()
+ return 0 # Void type id
+ return targetid
+
+ def type_template_arguments(self, typeid):
+ targs = []
+ #self.dump_type_cache()
+ #self.warn('TRY TEMPLATE ARGS FOR %s' % typeid)
+ for index in range(0, 100):
+ targ = self.type_template_argument(typeid, index)
+ #self.warn('INDEX %s %s' % (index, targ))
+ if targ is None:
+ break
+ targs.append(targ)
+ #self.warn('TARGS %s' % targs)
+ return targs
+
+ def nativeTemplateParameter(self, typeid, index, nativeType):
+ return None
+
+ def type_template_argument(self, typeid, index):
+ targ = self.type_template_arguments_cache.get((typeid, index), None)
+ if targ is not None:
+ return targ
+
+ native_type = self.type_nativetype_cache.get(typeid, None)
+ if native_type is not None:
+ targ = self.nativeTemplateParameter(typeid, index, native_type)
+ if targ is not None:
+ self.type_template_arguments_cache[(typeid, index)] = targ
+ return targ
+
+ # FIXME: The block below is apparently not needed anymore in the GDB
+ # and LLDB cases, so removing also doesn't bring performance. But it
+ # is at least potentially one source of type lookups.
+ #typename = self.type_name(typeid)
+ #self.dump_type_cache()
+ #self.warn('TEMPLATE ARGS FOR %s %s' % (typeid, typename))
+ #typeobj = self.lookupType(typename)
+ #if typeobj is not None:
+ # #self.warn(' FOUNT NATIVE %s %s, %s' % (typeid, typeobj, native_type))
+ # native_type = self.type_nativetype_cache.get(typeobj.typeid, None)
+ # #targ = self.type_template_argument(typeobj.typeid, index)
+ # targ = self.nativeTemplateParameter(typeobj.typeid, index, native_type)
+ # if targ is not None:
+ # self.type_template_arguments_cache[(typeid, index)] = targ
+ # return targ
+
+ # Native lookups didn't help. Happens for 'wrong' placement of 'const'
+ # etc. with LLDB or template parameter packs with gcc in boost::variant
+ # 13.2.0. But not all is lost:
+ self.fill_template_parameters_manually(typeid)
+ targ = self.type_template_arguments_cache.get((typeid, index), None)
+ return targ
+
+ def type_alignment(self, typeid):
+ alignment = self.type_alignment_cache.get(typeid, None)
+ if alignment is not None:
+ return alignment
+
+ code = self.type_code_cache.get(typeid, None)
+ if code in (TypeCode.Typedef, TypeCode.Array):
+ alignment = self.type_alignment(self.type_target_cache[typeid])
+ elif code in (TypeCode.Integral, TypeCode.Float, TypeCode.Enum):
+ name = self.type_name(typeid)
+ if name in ('double', 'long long', 'unsigned long long'):
+ # Crude approximation.
+ alignment = 8 if self.isWindowsTarget() else self.ptrSize()
+ else:
+ alignment = self.type_size(typeid)
+ elif code in (TypeCode.Pointer, TypeCode.Reference, TypeCode.RValueReference):
+ alignment = self.ptrSize()
+ elif self.isCdb:
+ alignment = self.nativeStructAlignment(self.type_nativetype(typeid))
+ else:
+ size = self.type_size(typeid)
+ if size is None:
+ self.dump_type_cache()
+ self.warn("NO ALIGNMENT FOUND FOR SIZE OF TYPE %s" % str(typeid))
+ return 1
+ if size >= self.ptrSize():
+ alignment = self.ptrSize()
+ else:
+ alignment = size
+ #self.warn("GUESSING ALIGNMENT %s FOR TYPEID %s" % (alignment, typeid))
+ self.type_alignment_cache[typeid] = alignment
+ return alignment
+
+
+ def type_nativetype(self, typeid):
+ native_type = self.type_nativetype_cache.get(typeid, None)
+ if native_type is not None:
+ return native_type
+
+ typename = self.type_name(typeid)
+ native_type = self.lookupNativeType(typename)
+ # Also cache unsuccessful attempts
+ self.type_nativetype_cache[typeid] = native_type
+
+ return native_type
+
+
+ def type_size(self, typeid):
+ self.check_typeid(typeid)
+ size = self.type_size_cache.get(typeid, None)
+ if size is not None:
+ return size
+
+ if size is None:
+ nativeType = self.type_nativetype(typeid)
+ if not self.type_size_cache.get(typeid):
+ self.from_native_type(nativeType)
+ size = self.type_size_cache.get(typeid, None)
+
+ if size is not None:
+ self.type_size_cache[typeid] = size
+ else:
+ self.dump_type_cache()
+ self.warn("CANNOT DETERMINE SIZE FOR TYPE %s" % str(typeid))
+
+ return size
+
+ def type_bitsize(self, typeid):
+ bitsize = self.type_bitsize_cache.get(typeid, None)
+ if bitsize is None:
+ bitsize = 8 * self.type_size(typeid)
+ self.type_bitsize_cache[typeid] = bitsize
+ return bitsize
+
+ def dynamic_typeid_at_address(self, base_typeid, address):
+ #with self.dumper.timer('dynamic_typeid_at_address %s 0x%s' % (self.name, address)):
+ type_code = self.type_code_cache.get(base_typeid, None)
+ if type_code != TypeCode.Struct:
+ #self.dump_type_cache()
+ #self.warn('SHORT CUT FOR BASE ID: %d TC: %s' % (base_typeid, type_code))
+ return base_typeid
+
+ # This turned out to be expensive.
+ #try:
+ # vtbl = self.extract_pointer_at_address(address)
+ #except:
+ # return base_typeid
+ ##self.warn('VTBL: 0x%x' % vtbl)
+ #if not self.couldBePointer(vtbl):
+ # return base_typeid
+ #self.warn("DYN TYPE FOR %s %s" % (base_typeid, self.type_name(base_typeid)))
+
+ return self.nativeDynamicType(address, base_typeid)
+
+ # This is the generic version for synthetic values.
+ # The native backends replace it in their fromNativeValue()
+ # implementations.
+ def value_members(self, value, include_bases):
+ #self.warn("LISTING MEMBERS OF %s" % value)
+ #self.warn("LISTING MEMBERS OF TYPE %s %s" % (value.typeid, self.type_name(value.typeid)))
+ typeid = value.typeid
+
+ members = self.type_fields_cache.get(typeid, None)
+ if members is not None:
+ return members
+
+ members = []
+ native_type = self.type_nativetype_cache.get(typeid, None)
+ if native_type is None:
+ native_type = self.lookupNativeType(self.type_name(typeid))
+ if not native_type is None:
+ members = self.nativeListMembers(value, native_type, include_bases)
+ #self.warn("FIELDS 2: %s" % ', '.join(str(f) for f in members))
+ else:
+ self.warn("NO NATIVE TYPE FIELDS FOR: %s" % typeid)
+
+ #self.warn("GOT MEMBERS: %s" % ', '.join(str(f.name) for f in members))
+ return members
+
+ def value_member_by_field(self, value, field):
+ #self.warn("EXTRACTING MEMBER '%s' OF %s AT OFFSET %s" % (field.name, field.typeid, field.bitpos))
+ val = self.Value(self)
+ val.typeid = field.typeid
+ val.name = field.name
+ val.isBaseClass = field.is_base_class
+ #self.warn('CREATING %s WITH DATA %s' % (val.type.name, self.hexencode(data)))
+ field_offset = field.bitpos // 8
+ if value.laddress is not None:
+ val.laddress = value.laddress + field_offset
+ field_size = (field.bitsize + 7) // 8
+ blob = self.value_data(value, field_offset + field_size)
+ val.ldata = blob[field_offset:field_offset + field_size]
+ #self.dump_location()
+ return val
+
+ def value_member_by_name(self, value, name):
+ #field = self.type_fields_cache.get((value.typeid, name), None)
+ #if field is not None:
+ # return self.value_member_by_field(value, field)
+
+ #self.dump_location()
+ #self.warn("WANT MEMBER '%s' OF '%s'" % (name, value))
+ #value.check()
+ value_typecode = self.type_code(value.typeid)
+ if value_typecode == TypeCode.Typedef:
+ return self.value_member_by_name(self.value_detypedef(value), name)
+ if value_typecode in (TypeCode.Pointer, TypeCode.Reference, TypeCode.RValueReference):
+ res = self.value_member_by_name(self.value_dereference(value), name)
+ if res is not None:
+ return res
+ if value_typecode == TypeCode.Struct:
+ #self.warn('SEARCHING FOR MEMBER: %s IN %s' % (name, value.type.name))
+ members = self.value_members(value, True)
+ #self.warn('MEMBERS: %s' % ', '.join(str(m.name) for m in members))
+ base = None
+ for member in members:
+ #self.warn('CHECKING FIELD %s' % member.name)
+ if member.type.code == TypeCode.Typedef:
+ member = member.detypedef()
+ if member.name == name:
+ #self.warn('FOUND MEMBER 1: %s IN %s' % (name, value.type.name))
+ return member
+ if member.isBaseClass:
+ base = member
+ if self.isCdb:
+ if base is not None:
+ # self.warn("CHECKING BASE CLASS '%s' for '%s'" % (base.type.name, name))
+ res = self.value_member_by_name(base, name)
+ if res is not None:
+ # self.warn('FOUND MEMBER 2: %s IN %s' % (name, value.type.name))
+ return res
+ else:
+ for member in members:
+ if member.type.code == TypeCode.Typedef:
+ member = member.detypedef()
+ if member.name == name: # Could be base class.
+ return member
+ if member.type.code == TypeCode.Struct:
+ res = self.value_member_by_name(member, name)
+ if res is not None:
+ #self.warn('FOUND MEMBER 2: %s IN %s' % (name, value.type.name))
+ return res
+
+ #self.warn('DID NOT FIND MEMBER: %s IN %s' % (name, value.type.name))
+ #self.dump_location()
+ return None
+
+ def value_member_by_indexish(self, value, indexish):
+ #self.warn('GET ITEM %s %s' % (self, indexish))
+ #value.check()
+ value_typecode = self.type_code(value.typeid)
+ if isinstance(indexish, str):
+ if value_typecode == TypeCode.Pointer:
+ #self.warn('GET ITEM %s DEREFERENCE TO %s' % (value, value.dereference()))
+ return value.dereference().__getitem__(indexish)
+ res = self.value_member_by_name(value, indexish)
+ if res is None:
+ raise RuntimeError('No member named %s in type %s'
+ % (indexish, value.type.name))
+ return res
+ if isinstance(indexish, int):
+ if value_typecode == TypeCode.Array:
+ addr = value.laddress + int(indexish) * value.type.target().size()
+ return self.createValueFromAddress(addr, value.type.target())
+ if value_typecode == TypeCode.Pointer:
+ addr = value.pointer() + int(indexish) * value.type.target().size()
+ return self.createValueFromAddress(addr, value.type.target())
+ return self.value_members(value, False)[indexish]
+ raise RuntimeError('BAD INDEX TYPE %s' % type(indexish))
+
+ def value_extract_bits(self, value, bitpos, bitsize):
+ value_size = self.type_size(value.typeid)
+ ldata = bytes(self.value_data(value, value_size))
+ bdata = ''.join([format(x, '0>8b')[::-1] for x in ldata])
+ fdata = bdata[bitpos : bitpos + bitsize]
+ fdata = fdata[::-1]
+ return int(fdata, 2)
+
+ def value_display_enum(self, value, form='%d', bitsize=None):
+ size = value.type.size()
+ intval = self.value_extract_integer(value, size, False)
+ dd = self.type_enum_display_cache.get(value.typeid, None)
+ if dd is None:
+ return str(intval)
+ return dd(intval, value.laddress, form)
+
+ def value_as_address(self, value):
+ return self.value_extract_integer(value, self.ptrSize(), False)
+
+ def value_as_integer(self, value):
+ if isinstance(value.ldata, int):
+ return value.ldata
+ type_name = self.type_name(value.typeid)
+ signed = type_name != 'unsigned' \
+ and not type_name.startswith('unsigned ') \
+ and type_name.find(' unsigned ') == -1
+ size = value.type.size()
+ return self.value_extract_integer(value, size, signed)
+
+ def value_as_floating_point(self, value):
+ if value.nativeValue is not None and not self.isCdb:
+ return str(value.nativeValue)
+ if self.type_code(value.typeid) == TypeCode.Typedef:
+ return self.value_as_floating_point(self.value_detypedef(value))
+ if value.type.size() == 8:
+ blob = self.value_data(value, 8)
+ return struct.unpack_from(self.packCode + 'd', blob, 0)[0]
+ if value.type.size() == 4:
+ blob = self.value_data(value, 4)
+ return struct.unpack_from(self.packCode + 'f', blob, 0)[0]
+ # Fall back in case we don't have a nativeValue at hand.
+ # FIXME: This assumes Intel's 80bit extended floats. Which might
+ # be wrong.
+ l, h = value.split('QQ')
+ if True: # 80 bit floats
+ sign = (h >> 15) & 1
+ exp = (h & 0x7fff)
+ fraction = l
+ bit63 = (l >> 63) & 1
+ #self.warn("SIGN: %s EXP: %s H: 0x%x L: 0x%x" % (sign, exp, h, l))
+ if exp == 0:
+ if bit63 == 0:
+ if l == 0:
+ res = '-0' if sign else '0'
+ else:
+ res = (-1)**sign * l * 2**(-16382) # subnormal
+ else:
+ res = 'pseudodenormal'
+ elif exp == 0x7fff:
+ res = 'special'
+ else:
+ res = (-1)**sign * l * 2**(exp - 16383 - 63)
+ else: # 128 bits
+ sign = h >> 63
+ exp = (h >> 48) & 0x7fff
+ fraction = h & (2**48 - 1)
+ #self.warn("SIGN: %s EXP: %s FRAC: %s H: 0x%x L: 0x%x" % (sign, exp, fraction, h, l))
+ if exp == 0:
+ if fraction == 0:
+ res = -0.0 if sign else 0.0
+ else:
+ res = (-1)**sign * fraction / 2**48 * 2**(-62) # subnormal
+ elif exp == 0x7fff:
+ res = ('-inf' if sign else 'inf') if fraction == 0 else 'nan'
+ else:
+ res = (-1)**sign * (1 + fraction / 2**48) * 2**(exp - 63)
+ return res
+
+ def value_data(self, value, size):
+ if value.ldata is not None:
+ return value.ldata[:size]
+ if value.laddress is not None:
+ return self.value_data_from_address(value.laddress, size)
+ raise RuntimeError('CANNOT CONVERT TO BYTES: %s' % value)
+
+ def value_data_from_address(self, address, size):
+ if not isinstance(address, int):
+ raise RuntimeError('ADDRESS WRONG TYPE: %s' % type(address))
+ if not isinstance(size, int):
+ raise RuntimeError('SIZE WRONG TYPE: %s' % type(size))
+ if size <= 0:
+ raise RuntimeError('SIZE WRONG VALUE: %s' % size)
+ res = self.readRawMemory(address, size)
+ if len(res) > 0:
+ return res
+ raise RuntimeError('CANNOT READ %d BYTES FROM ADDRESS: %s %s' % (size, address))
+
+ def value_display(self, value):
+ type_code = self.type_code(value.typeid)
+ if type_code == TypeCode.Enum:
+ return self.value_display_enum(value)
+ if type_code == TypeCode.Typedef:
+ return self.value_display(self.value_detypedef(value))
+ if type_code == TypeCode.Integral:
+ return self.value_as_integer(value)
+ if type_code == TypeCode.Bitfield:
+ return self.value_as_integer(value)
+ if type_code == TypeCode.Float:
+ return self.value_as_floating_point(value)
+ if type_code == TypeCode.Pointer:
+ return self.value_as_address(value)
+ return None
+
+ def value_detypedef(self, value):
+ #value.check()
+ #if value.type.code != TypeCode.Typedef:
+ # raise RuntimeError("WRONG")
+ val = value.copy()
+ val.typeid = self.type_target(value.typeid)
+ #self.warn("DETYPEDEF FROM: %s" % self)
+ #self.warn("DETYPEDEF TO: %s" % val)
+ return val
+
+ def split(self, pattern, value_or_address):
+ if isinstance(value_or_address, self.Value):
+ return self.value_split(value_or_address, pattern)
+ if isinstance(value_or_address, int):
+ val = self.Value(self)
+ val.laddress = value_or_address
+ return self.value_split(val, pattern)
+ raise RuntimeError('CANNOT EXTRACT STRUCT FROM %s' % type(value_or_address))
+
+ def value_split(self, value, pattern):
+ #self.warn('EXTRACT STRUCT FROM: %s' % self.type)
+ (pp, size, fields) = self.describeStruct(pattern)
+ #self.warn('SIZE: %s ' % size)
+
+ blob = self.value_data(value, size)
+ address = value.laddress
+
+ parts = struct.unpack_from(self.packCode + pp, blob)
+
+ def fix_struct(field, part):
+ #self.warn('STRUCT MEMBER: %s' % type(part))
+ if field.is_struct:
+ res = self.Value(self)
+ res.typeid = field.typeid
+ res.ldata = part
+ if address is not None:
+ res.laddress = address + field.bitpos // 8
+ return res
+ return part
+
+ if len(fields) != len(parts):
+ raise RuntimeError('STRUCT ERROR: %s %s' % (fields, parts))
+ return tuple(map(fix_struct, fields, parts))
+
+ def type_dereference(self, typeid):
+ if self.type_code(typeid) == TypeCode.Typedef:
+ return self.type_dereference(self.type_target(typeid))
+ return self.type_target(typeid)
+
+ def type_strip_typedefs(self, typeid):
+ if self.type_code(typeid) == TypeCode.Typedef:
+ return self.type_strip_typedefs(self.type_target(typeid))
+ return typeid
+
+ def value_dereference(self, value):
+ value.check()
+ #if value.type.code == TypeCode.Typedef:
+ # return self.value_dereference(self.value_detypedef(value))
+ val = self.Value(self)
+ if value.type.code in (TypeCode.Reference, TypeCode.RValueReference):
+ val.summary = value.summary
+ if value.nativeValue is None:
+ val.laddress = value.pointer()
+ if val.laddress is None and value.laddress is not None:
+ val.laddress = value.laddress
+ val.typeid = self.type_dereference(value.typeid)
+ if self.useDynamicType:
+ val.typeid = self.nativeDynamicType(val.laddress, val.typeid)
+ else:
+ val = self.nativeValueDereferenceReference(value)
+ elif value.type.code == TypeCode.Pointer:
+ try:
+ val = self.nativeValueDereferencePointer(value)
+ except:
+ val.laddress = value.pointer()
+ val.typeid = self.type_dereference(value.typeid)
+ if self.useDynamicType:
+ val.typeid = self.nativeDynamicType(val.laddress, val.typeid)
+ else:
+ raise RuntimeError("WRONG: %s" % value.type.code)
+
+ return val
+
+ def value_cast(self, value, typish):
+ value.check()
+ val = self.Value(self)
+ val.laddress = value.laddress
+ val.ldata = value.ldata
+ val.typeid = self.create_typeid(typish)
+ return val
+
+ def value_plus_something(self, value, other):
+ value.check()
+ if isinstance(other, int):
+ stripped = self.type_strip_typedefs(value.typeid)
+ if self.type_code(stripped) == TypeCode.Pointer:
+ item_size = self.type_size(self.type_dereference(stripped))
+ address = self.value_as_address(value) + item_size * other
+ val = self.Value(self)
+ val.laddress = None
+ val.ldata = address
+ val.typeid = value.typeid
+ return val
+ raise RuntimeError('BAD DATA TO ADD TO: %s %s' % (value.type, other))
+
+ def value_minus_something(self, value, other):
+ value.check()
+ if other.type.name == value.type.name:
+ stripped = self.type_strip_typedefs(value.typeid)
+ if self.type_code(stripped.code) == TypeCode.Pointer:
+ item_size = self.type_size(self.type_dereference(stripped))
+ return (value.pointer() - other.pointer()) // item_size
+ raise RuntimeError('BAD DATA TO SUB TO: %s %s' % (value.type, other))
+
diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py
index d61160eed3..ee25520bce 100644
--- a/share/qtcreator/debugger/gdbbridge.py
+++ b/share/qtcreator/debugger/gdbbridge.py
@@ -10,11 +10,10 @@ import gdb
import os
import os.path
import re
-import sys
import struct
import tempfile
-from dumper import DumperBase, Children, toInteger, TopLevelItem
+from dumper import DumperBase, Children, TopLevelItem
from utils import TypeCode
from gdbtracepoint import *
@@ -119,7 +118,6 @@ ScanStackCommand()
class PlainDumper():
def __init__(self, printer):
self.printer = printer
- self.typeCache = {}
def __call__(self, d, value):
if value.nativeValue is None:
@@ -137,8 +135,6 @@ class PlainDumper():
if isinstance(val, str):
# encode and avoid extra quotes ('"') at beginning and end
d.putValue(d.hexencode(val), 'utf8:1:0')
- elif sys.version_info[0] <= 2 and isinstance(val, unicode):
- d.putValue(val)
elif val is not None: # Assuming LazyString
d.putCharArrayValue(val.address, val.length,
val.type.target().sizeof)
@@ -166,7 +162,7 @@ def importPlainDumpers(args):
gdb.execute('disable pretty-printer .* .*')
except:
# Might occur in non-ASCII directories
- DumperBase.warn('COULD NOT DISABLE PRETTY PRINTERS')
+ theDumper.warn('COULD NOT DISABLE PRETTY PRINTERS')
else:
theDumper.usePlainDumpers = True
theDumper.importPlainDumpers()
@@ -192,15 +188,17 @@ class Dumper(DumperBase):
# These values will be kept between calls to 'fetchVariables'.
self.isGdb = True
- self.typeCache = {}
self.interpreterBreakpointResolvers = []
+ def warn(self, message):
+ print('bridgemessage={msg="%s"},' % message.replace('"', '$').encode('latin1'))
+
def prepare(self, args):
self.output = []
self.setVariableFetchingOptions(args)
def fromFrameValue(self, nativeValue):
- #DumperBase.warn('FROM FRAME VALUE: %s' % nativeValue.address)
+ #self.warn('FROM FRAME VALUE: %s' % nativeValue.address)
val = nativeValue
if self.useDynamicType:
try:
@@ -209,71 +207,43 @@ class Dumper(DumperBase):
pass
return self.fromNativeValue(val)
- def nativeValueType(self, nativeValue):
- return self.fromNativeType(nativeValue.type)
-
def fromNativeValue(self, nativeValue):
- #DumperBase.warn('FROM NATIVE VALUE: %s' % nativeValue)
+ #self.warn('FROM NATIVE VALUE: %s' % nativeValue)
self.check(isinstance(nativeValue, gdb.Value))
nativeType = nativeValue.type
code = nativeType.code
+
+ val = self.Value(self)
+ val.nativeValue = nativeValue
+
if code == gdb.TYPE_CODE_REF:
- targetType = self.fromNativeType(nativeType.target().unqualified())
- val = self.createReferenceValue(toInteger(nativeValue.address), targetType)
- val.nativeValue = nativeValue
- #DumperBase.warn('CREATED REF: %s' % val)
+ target_typeid = self.from_native_type(nativeType.target().unqualified())
+ val.ldata = int(nativeValue.address)
+ if self.useDynamicType: # needed for Gdb13393
+ target_typeid = self.dynamic_typeid_at_address(target_typeid, val.ldata)
+ val.typeid = self.create_reference_typeid(target_typeid)
+ #self.warn('CREATED REF: %s' % val)
return val
+
if code == gdb.TYPE_CODE_PTR:
- try:
- nativeTargetValue = nativeValue.dereference()
- except:
- nativeTargetValue = None
- targetType = self.fromNativeType(nativeType.target().unqualified())
- val = self.createPointerValue(toInteger(nativeValue), targetType)
- # The nativeValue is needed in case of multiple inheritance, see
- # QTCREATORBUG-17823. Using it triggers nativeValueDereferencePointer()
- # later which
- # is surprisingly expensive.
- val.nativeValue = nativeValue
- #DumperBase.warn('CREATED PTR 1: %s' % val)
+ target_typeid = self.from_native_type(nativeType.target().unqualified())
+ val.ldata = int(nativeValue)
+ val.typeid = self.create_pointer_typeid(target_typeid)
+ #self.warn('CREATED PTR 1: %s' % val)
if nativeValue.address is not None:
- val.laddress = toInteger(nativeValue.address)
- #DumperBase.warn('CREATED PTR 2: %s' % val)
+ val.laddress = int(nativeValue.address)
+ #self.warn('CREATED PTR 2: %s' % val)
return val
- if code == gdb.TYPE_CODE_TYPEDEF:
- targetType = nativeType.strip_typedefs().unqualified()
- #DumperBase.warn('TARGET TYPE: %s' % targetType)
- if targetType.code == gdb.TYPE_CODE_ARRAY:
- val = self.Value(self)
- else:
- try:
- # Cast may fail for arrays, for typedefs to __uint128_t with
- # gdb.error: That operation is not available on integers
- # of more than 8 bytes.
- # See test for Bug5799, QTCREATORBUG-18450.
- val = self.fromNativeValue(nativeValue.cast(targetType))
- except:
- val = self.Value(self)
- #DumperBase.warn('CREATED TYPEDEF: %s' % val)
- else:
- val = self.Value(self)
- val.nativeValue = nativeValue
if nativeValue.address is not None:
- val.laddress = toInteger(nativeValue.address)
- else:
- size = nativeType.sizeof
- chars = self.lookupNativeType('unsigned char')
- y = nativeValue.cast(chars.array(0, int(nativeType.sizeof - 1)))
- buf = bytearray(struct.pack('x' * size))
- for i in range(size):
- try:
- buf[i] = int(y[i])
- except:
- pass
- val.ldata = bytes(buf)
+ val.laddress = int(nativeValue.address)
+ elif code == gdb.TYPE_CODE_STRUCT:
+ try:
+ val.ldata = nativeValue.bytes # GDB 15 only
+ except:
+ val.ldata = self.nativeDataFromValueFallback(nativeValue, nativeValue.type.sizeof)
- val._type = self.fromNativeType(nativeType)
+ val.typeid = self.from_native_type(nativeType)
val.lIsInScope = not nativeValue.is_optimized_out
code = nativeType.code
if code == gdb.TYPE_CODE_ENUM:
@@ -283,76 +253,103 @@ class Dumper(DumperBase):
val.ldisplay += ' (%s)' % intval
elif code == gdb.TYPE_CODE_COMPLEX:
val.ldisplay = str(nativeValue)
- elif code in [gdb.TYPE_CODE_BOOL, gdb.TYPE_CODE_INT]:
+ elif code == gdb.TYPE_CODE_BOOL:
+ # FIXME: why?
+ # Using ldata breaks StdVariant test, not setting lvalue breaks the Bitfield[s2] test.
+ val.lvalue = int(nativeValue)
+ val.ldata = None
+ elif code == gdb.TYPE_CODE_INT:
try:
# extract int presentation from native value and remember it
- val.lvalue = int(nativeValue)
+ val.ldata = int(nativeValue)
except:
# GDB only support converting integers of max. 64 bits to Python int as of now
pass
+ elif code == gdb.TYPE_CODE_TYPEDEF:
+ targetType = nativeType.strip_typedefs().unqualified()
+ if targetType.code in [gdb.TYPE_CODE_BOOL, gdb.TYPE_CODE_INT]:
+ typeid = val.typeid
+ val = self.fromNativeValue(nativeValue.cast(targetType))
+ val.typeid = typeid
#elif code == gdb.TYPE_CODE_ARRAY:
# val.type.ltarget = nativeValue[0].type.unqualified()
return val
+ def nativeDataFromValueFallback(self, nativeValue, size):
+ chars = self.lookupNativeType('unsigned char')
+ try:
+ y = nativeValue.cast(chars.array(0, int(size - 1)))
+ buf = bytearray(struct.pack('x' * size))
+ for i in range(size):
+ try:
+ buf[i] = int(y[i])
+ except:
+ pass
+ return bytes(buf)
+ except:
+ self.warn('VALUE EXTRACTION FAILED: VALUE: %s SIZE: %s' % (nativeValue, size))
+ return None
+
def ptrSize(self):
result = gdb.lookup_type('void').pointer().sizeof
self.ptrSize = lambda: result
return result
- def fromNativeType(self, nativeType):
+ def from_native_type(self, nativeType):
self.check(isinstance(nativeType, gdb.Type))
- code = nativeType.code
- #DumperBase.warn('FROM NATIVE TYPE: %s' % nativeType)
+
+ #self.warn('FROM NATIVE TYPE: %s' % nativeType)
nativeType = nativeType.unqualified()
- if code == gdb.TYPE_CODE_PTR:
- #DumperBase.warn('PTR')
- targetType = self.fromNativeType(nativeType.target().unqualified())
- return self.createPointerType(targetType)
+ typeid_str = self.native_type_key(nativeType)
+ known_typeid = self.typeid_from_typekey.get(typeid_str, None)
+ if known_typeid is not None:
+ return known_typeid
- if code == gdb.TYPE_CODE_REF:
- #DumperBase.warn('REF')
- targetType = self.fromNativeType(nativeType.target().unqualified())
- return self.createReferenceType(targetType)
-
- if hasattr(gdb, "TYPE_CODE_RVALUE_REF"):
- if code == gdb.TYPE_CODE_RVALUE_REF:
- #DumperBase.warn('RVALUEREF')
- targetType = self.fromNativeType(nativeType.target())
- return self.createRValueReferenceType(targetType)
-
- if code == gdb.TYPE_CODE_ARRAY:
- #DumperBase.warn('ARRAY')
+ code = nativeType.code
+
+ if code == gdb.TYPE_CODE_PTR:
+ #self.warn('PTR')
+ target_typeid = self.from_native_type(nativeType.target().unqualified())
+ typeid = self.create_pointer_typeid(target_typeid)
+
+ elif code == gdb.TYPE_CODE_REF:
+ #self.warn('REF')
+ target_typeid = self.from_native_type(nativeType.target().unqualified())
+ typeid = self.create_reference_typeid(target_typeid)
+
+ elif code == gdb.TYPE_CODE_RVALUE_REF and hasattr(gdb, "TYPE_CODE_RVALUE_REF"):
+ #self.warn('RVALUEREF')
+ target_typeid = self.from_native_type(nativeType.target())
+ typeid = self.create_rvalue_reference_typeid(target_typeid)
+
+ elif code == gdb.TYPE_CODE_ARRAY:
+ #self.warn('ARRAY')
nativeTargetType = nativeType.target().unqualified()
- targetType = self.fromNativeType(nativeTargetType)
+ target_typeid = self.from_native_type(nativeTargetType)
if nativeType.sizeof == 0:
# QTCREATORBUG-23998, note that nativeType.name == None here,
# whereas str(nativeType) returns sth like 'QObject [5]'
count = self.arrayItemCountFromTypeName(str(nativeType), 1)
else:
count = nativeType.sizeof // nativeTargetType.sizeof
- return self.createArrayType(targetType, count)
+ typeid = self.create_array_typeid(target_typeid, count)
- if code == gdb.TYPE_CODE_TYPEDEF:
- #DumperBase.warn('TYPEDEF')
+ elif code == gdb.TYPE_CODE_TYPEDEF:
+ #self.warn('TYPEDEF')
nativeTargetType = nativeType.unqualified()
while nativeTargetType.code == gdb.TYPE_CODE_TYPEDEF:
nativeTargetType = nativeTargetType.strip_typedefs().unqualified()
- targetType = self.fromNativeType(nativeTargetType)
- return self.createTypedefedType(targetType, str(nativeType),
- self.nativeTypeId(nativeType))
+ target_typeid = self.from_native_type(nativeTargetType)
+ typeid = self.create_typedefed_typeid(target_typeid, str(nativeType), typeid_str)
- if code == gdb.TYPE_CODE_ERROR:
+ elif code == gdb.TYPE_CODE_ERROR:
self.warn('Type error: %s' % nativeType)
- return self.Type(self, '')
-
- typeId = self.nativeTypeId(nativeType)
- res = self.typeData.get(typeId, None)
- if res is None:
- tdata = self.TypeData(self, typeId)
- tdata.name = str(nativeType)
- tdata.lbitsize = nativeType.sizeof * 8
- tdata.code = {
+ typeid = 0 # the invalid id
+
+ else:
+ typeid = self.typeid_for_string(typeid_str)
+ type_code = {
#gdb.TYPE_CODE_TYPEDEF : TypeCode.Typedef, # Handled above.
gdb.TYPE_CODE_METHOD: TypeCode.Function,
gdb.TYPE_CODE_VOID: TypeCode.Void,
@@ -372,38 +369,82 @@ class Dumper(DumperBase):
gdb.TYPE_CODE_COMPLEX: TypeCode.Complex,
gdb.TYPE_CODE_STRING: TypeCode.FortranString,
}[code]
- if tdata.code == TypeCode.Enum:
- tdata.enumDisplay = lambda intval, addr, form: \
+ self.type_name_cache[typeid] = str(nativeType)
+ self.type_size_cache[typeid] = nativeType.sizeof
+ self.type_code_cache[typeid] = type_code
+ self.type_nativetype_cache[typeid] = nativeType
+
+ if type_code == TypeCode.Enum:
+ self.type_enum_display_cache[typeid] = lambda intval, addr, form: \
self.nativeTypeEnumDisplay(nativeType, intval, form)
- if tdata.code == TypeCode.Struct:
- tdata.lalignment = lambda: \
- self.nativeStructAlignment(nativeType)
- tdata.lfields = lambda value: \
- self.listMembers(value, nativeType)
- tdata.templateArguments = lambda: \
- self.listTemplateParameters(nativeType)
- # warn('CREATE TYPE: %s' % typeId)
- #else:
- # warn('REUSE TYPE: %s' % typeId)
- return self.Type(self, typeId)
-
- def listTemplateParameters(self, nativeType):
- targs = []
- pos = 0
- while True:
- try:
- targ = nativeType.template_argument(pos)
- except:
- break
- if isinstance(targ, gdb.Type):
- targs.append(self.fromNativeType(targ.unqualified()))
- elif isinstance(targ, gdb.Value):
- targs.append(self.fromNativeValue(targ).value())
- else:
- raise RuntimeError('UNKNOWN TEMPLATE PARAMETER')
- pos += 1
- targs2 = self.listTemplateParametersManually(str(nativeType))
- return targs if len(targs) >= len(targs2) else targs2
+
+ self.type_nativetype_cache[typeid] = nativeType
+
+ if code == gdb.TYPE_CODE_STRUCT:
+ self.type_qobject_based_cache[typeid] = self.is_qobject_based(nativeType)
+ #res = self.is_qobject_based(nativeType)
+ #if res == False:
+ # self.warn("RECOGNIZED AS NON-QOBJECT: %s" % nativeType)
+ #elif res == True:
+ # self.warn("RECOGNIZED AS QOBJECT: %s" % nativeType)
+ #else:
+ # self.warn("UNRECOGNIZED: %s" % nativeType)
+ elif code != gdb.TYPE_CODE_TYPEDEF:
+ self.type_qobject_based_cache[typeid] = False
+
+# FIXME: Field offset caching (or later extraction?) broken
+# if code == gdb.TYPE_CODE_STRUCT:
+# field_type_name = self.type_name_cache.get(typeid, '')
+# #self.warn("CACHING FIELDS OF %s '%s'" % (typeid, field_type_name))
+# try:
+# fields = nativeType.fields()
+# #self.warn("FOUND FIELDS %s" % fields)
+# except:
+# #self.warn("NO FIELDS IN %s '%s'" % (typeid, field_type_name))
+# fields = []
+# for nativeField in fields:
+# field_name = nativeField.name
+# if field_name.startswith('std::allocator'):
+# continue
+# field_bitpos = nativeField.bitpos
+# field_typeid = self.typeid_for_string(str(nativeType))
+# field_size = nativeField.type.sizeof
+# #self.warn("CACHING '%s' OF %s AT BITPOS %s SIZE %s" %
+# # (field_name, typeid, field_bitpos, field_size))
+# self.type_fields_cache[(typeid, field_name)] = self.Field(
+# name=field_name,
+# typeid=field_typeid,
+# bitpos=field_bitpos,
+# bitsize=field_size * 8
+# )
+# pass
+
+
+ #self.warn("FROM NATIVE TYPE: %s %s %s" % (typeid, id(nativeType), nativeType))
+ self.typeid_from_typekey[str(nativeType)] = typeid
+
+ return typeid
+
+ def is_qobject_based(self, nativeType):
+ if str(nativeType) == self.qtNamespace() + 'QObject':
+ return True
+ fields = nativeType.fields()
+ if len(fields) == 0:
+ return None # No info, can't drill deeper
+ if not fields[0].is_base_class:
+ return False
+ return self.is_qobject_based(fields[0].type)
+
+ def nativeTemplateParameter(self, typeid, index, nativeType):
+ try:
+ targ = nativeType.template_argument(index)
+ except:
+ return None
+ if isinstance(targ, gdb.Type):
+ return self.Type(self, self.from_native_type(targ.unqualified()))
+ if isinstance(targ, gdb.Value):
+ return self.fromNativeValue(targ).value()
+ raise RuntimeError('UNKNOWN TEMPLATE PARAMETER')
def nativeTypeEnumDisplay(self, nativeType, intval, form):
try:
@@ -432,7 +473,7 @@ class Dumper(DumperBase):
pass
return form % intval
- def nativeTypeId(self, nativeType):
+ def native_type_key(self, nativeType):
if nativeType and (nativeType.code == gdb.TYPE_CODE_TYPEDEF):
return '%s{%s}' % (nativeType, nativeType.strip_typedefs())
name = str(nativeType)
@@ -444,133 +485,106 @@ class Dumper(DumperBase):
c = 's'
else:
return name
- typeId = c + ''.join(['{%s:%s}' % (f.name, self.nativeTypeId(f.type))
- for f in nativeType.fields()])
- return typeId
-
- def nativeStructAlignment(self, nativeType):
- #DumperBase.warn('NATIVE ALIGN FOR %s' % nativeType.name)
- def handleItem(nativeFieldType, align):
- a = self.fromNativeType(nativeFieldType).alignment()
- return a if a > align else align
- align = 1
- for f in nativeType.fields():
- align = handleItem(f.type, align)
- return align
-
- #except:
- # # Happens in the BoostList dumper for a 'const bool'
- # # item named 'constant_time_size'. There isn't anything we can do
- # # in this case.
- # pass
-
- #yield value.extractField(field)
-
- def memberFromNativeFieldAndValue(self, nativeField, nativeValue, fieldName, value):
- nativeMember = self.nativeMemberFromField(nativeValue, nativeField)
- if nativeMember is None:
- val = self.Value(self)
- val.name = fieldName
- val._type = self.fromNativeType(nativeField.type)
- val.lIsInScope = False
- return val
- val = self.fromNativeValue(nativeMember)
- nativeFieldType = nativeField.type.unqualified()
- if nativeField.bitsize:
- val.lvalue = int(nativeMember)
- val.laddress = None
- fieldType = self.fromNativeType(nativeFieldType)
- val._type = self.createBitfieldType(fieldType, nativeField.bitsize)
- val.isBaseClass = nativeField.is_base_class
- val.name = fieldName
- return val
+ id_str = c + ''.join(['{%s:%s}' %
+ (f.name, self.typeid_for_string(self.native_type_key(f.type)))
+ for f in nativeType.fields()])
+ #self.warn("NATIVE TYPE KEY: %s" % id_str)
+ return id_str
- def nativeMemberFromField(self, nativeValue, nativeField):
- if nativeField.is_base_class:
- return nativeValue.cast(nativeField.type)
- try:
- return nativeValue[nativeField]
- except:
- pass
- try:
- return nativeValue[nativeField.name]
- except:
- pass
- return None
-
- def listMembers(self, value, nativeType):
+ def nativeListMembers(self, value, nativeType, include_base):
nativeValue = value.nativeValue
+ value_size = self.type_size(value.typeid)
+ ldata = bytes(self.value_data(value, value_size))
+ laddress = value.laddress
anonNumber = 0
- #DumperBase.warn('LISTING FIELDS FOR %s' % nativeType)
+ fields = []
+ #self.warn('LISTING FIELDS FOR %s' % nativeType)
for nativeField in nativeType.fields():
- fieldName = nativeField.name
+ if not include_base and nativeField.is_base_class:
+ continue
+
+ field_name = nativeField.name
# Something without a name.
# Anonymous union? We need a dummy name to distinguish
# multiple anonymous unions in the struct.
# Since GDB commit b5b08fb4 anonymous structs get also reported
# with a 'None' name.
- if fieldName is None or len(fieldName) == 0:
- # Something without a name.
- # Anonymous union? We need a dummy name to distinguish
- # multiple anonymous unions in the struct.
+ if field_name is None or len(field_name) == 0:
anonNumber += 1
- fieldName = '#%s' % anonNumber
- #DumperBase.warn('FIELD: %s' % fieldName)
+ field_name = '#%s' % anonNumber
+ #self.warn('FIELD: %s' % field_name)
+
+ nativeFieldType = nativeField.type.unqualified()
+ field_typeid = self.from_native_type(nativeFieldType)
+ #self.warn(' TYPE: %s' % nativeFieldType)
+ #self.warn(' TYPE KEY: %s' % self.native_type_key(nativeFieldType))
+
+ if nativeValue is not None:
+ try:
+ native_member = nativeValue[nativeField]
+ except:
+ self.warn(' COULD NOT ACCESS FIELD: %s' % nativeFieldType)
+ continue
+
+ val = self.fromNativeValue(native_member)
+ if nativeField.bitsize:
+ val.lvalue = None
+ val.ldata = int(native_member)
+ val.laddress = None
+ val.typeid = self.create_bitfield_typeid(field_typeid, nativeField.bitsize)
+ val.isBaseClass = nativeField.is_base_class
+ val.name = field_name
+ fields.append(val)
+ continue
+
# hasattr(nativeField, 'bitpos') == False indicates a static field,
- # but if we have access to a nativeValue .fromNativeField will
+ # but if we have access to a nativeValue, so fromNativeField will
# also succeed. We essentially skip only static members from
# artificial values, like array members constructed from address.
- if hasattr(nativeField, 'bitpos') or nativeValue is not None:
- yield self.fromNativeField(nativeField, nativeValue, fieldName)
-
- def fromNativeField(self, nativeField, nativeValue, fieldName):
- nativeFieldType = nativeField.type.unqualified()
- #DumperBase.warn(' TYPE: %s' % nativeFieldType)
- #DumperBase.warn(' TYPEID: %s' % self.nativeTypeId(nativeFieldType))
+ if not hasattr(nativeField, 'bitpos'):
+ continue
- if hasattr(nativeField, 'bitpos'):
bitpos = nativeField.bitpos
- else:
- bitpos = 0
- if hasattr(nativeField, 'bitsize') and nativeField.bitsize != 0:
- bitsize = nativeField.bitsize
- else:
- bitsize = 8 * nativeFieldType.sizeof
+ if hasattr(nativeField, 'bitsize') and nativeField.bitsize != 0:
+ bitsize = nativeField.bitsize
+ else:
+ bitsize = 8 * nativeFieldType.sizeof
- fieldType = self.fromNativeType(nativeFieldType)
- if bitsize != nativeFieldType.sizeof * 8:
- fieldType = self.createBitfieldType(fieldType, bitsize)
- else:
- fieldType = fieldType
+ field_typeid = self.from_native_type(nativeFieldType)
+ is_bitfield = bitsize != nativeFieldType.sizeof * 8
+
+ val = self.Value(self)
+ val.name = field_name
+ val.isBaseClass = nativeField.is_base_class
+
+ if is_bitfield:
+ val.typeid = self.create_bitfield_typeid(field_typeid, bitsize)
+ val.ldata = self.value_extract_bits(value, bitpos, bitsize)
+ else:
+ val.typeid = field_typeid
+ field_offset = bitpos // 8
+ if laddress is not None:
+ val.laddress = laddress + field_offset
+ field_size = (bitsize + 7) // 8
+ val.ldata = ldata[field_offset:field_offset + field_size]
+
+ #self.warn('GOT VAL %s FOR FIELD %s' % (val, nativeField))
+ fields.append(val)
+
+ return fields
- if nativeValue is None:
- extractor = None
- else:
- extractor = lambda value, \
- capturedNativeField = nativeField, \
- capturedNativeValue = nativeValue, \
- capturedFieldName = fieldName: \
- self.memberFromNativeFieldAndValue(capturedNativeField,
- capturedNativeValue,
- capturedFieldName,
- value)
-
- #DumperBase.warn("FOUND NATIVE FIELD: %s bitpos: %s" % (fieldName, bitpos))
- return self.Field(dumper=self, name=fieldName, isBase=nativeField.is_base_class,
- bitsize=bitsize, bitpos=bitpos, type=fieldType,
- extractor=extractor)
def listLocals(self, partialVar):
frame = gdb.selected_frame()
try:
block = frame.block()
- #DumperBase.warn('BLOCK: %s ' % block)
+ #self.warn('BLOCK: %s ' % block)
except RuntimeError as error:
- #DumperBase.warn('BLOCK IN FRAME NOT ACCESSIBLE: %s' % error)
+ #self.warn('BLOCK IN FRAME NOT ACCESSIBLE: %s' % error)
return []
except:
self.warn('BLOCK NOT ACCESSIBLE FOR UNKNOWN REASONS')
@@ -594,14 +608,12 @@ class Dumper(DumperBase):
if partialVar is not None and partialVar != name:
continue
- # 'NotImplementedError: Symbol type not yet supported in
- # Python scripts.'
- #DumperBase.warn('SYMBOL %s (%s, %s)): ' % (symbol, name, symbol.name))
+ #self.warn('SYMBOL %s (%s, %s)): ' % (symbol, name, symbol.name))
if self.passExceptions and not self.isTesting:
nativeValue = frame.read_var(name, block)
value = self.fromFrameValue(nativeValue)
value.name = name
- #DumperBase.warn('READ 0: %s' % value.stringify())
+ #self.warn('READ 0: %s' % value.stringify())
items.append(value)
continue
@@ -610,14 +622,14 @@ class Dumper(DumperBase):
nativeValue = frame.read_var(name, block)
value = self.fromFrameValue(nativeValue)
value.name = name
- #DumperBase.warn('READ 1: %s' % value.stringify())
+ #self.warn('READ 1: %s' % value.stringify())
items.append(value)
continue
except:
pass
try:
- #DumperBase.warn('READ 2: %s' % item.value)
+ #self.warn('READ 2: %s' % item.value)
value = self.fromFrameValue(frame.read_var(name))
value.name = name
items.append(value)
@@ -631,8 +643,8 @@ class Dumper(DumperBase):
pass
try:
- #DumperBase.warn('READ 3: %s %s' % (name, item.value))
- #DumperBase.warn('ITEM 3: %s' % item.value)
+ #self.warn('READ 3: %s %s' % (name, item.value))
+ #self.warn('ITEM 3: %s' % item.value)
value = self.fromFrameValue(gdb.parse_and_eval(name))
value.name = name
items.append(value)
@@ -661,16 +673,17 @@ class Dumper(DumperBase):
return self.ptrSize() == 8
def fetchVariables(self, args):
+ start_time = time.perf_counter()
self.resetStats()
self.prepare(args)
self.isBigEndian = gdb.execute('show endian', to_string=True).find('big endian') > 0
self.packCode = '>' if self.isBigEndian else '<'
- (ok, res) = self.tryFetchInterpreterVariables(args)
- if ok:
- safePrint(res)
- return
+ #(ok, res) = self.tryFetchInterpreterVariables(args)
+ #if ok:
+ # safePrint(res)
+ # return
self.put('data=[')
@@ -679,7 +692,7 @@ class Dumper(DumperBase):
partialName = partialVar.split('.')[1].split('@')[0] if isPartial else None
variables = self.listLocals(partialName)
- #DumperBase.warn('VARIABLES: %s' % variables)
+ #self.warn('VARIABLES: %s' % variables)
# Take care of the return value of the last function call.
if len(self.resultVarName) > 0:
@@ -711,9 +724,12 @@ class Dumper(DumperBase):
self.put(',qtnamespace="%s"' % self.qtNamespaceToReport)
self.qtNamespaceToReport = None
+ run_time = time.perf_counter() - start_time
+ #self.warn("PTIME: %s" % run_time)
self.put(',partial="%d"' % isPartial)
+ self.put(',runtime="%s"' % run_time)
self.put(',counts=%s' % self.counts)
- self.put(',timings=%s' % self.timings)
+ #self.put(',timings=%s' % self.timings)
self.reportResult(''.join(self.output), args)
def parseAndEvaluate(self, exp):
@@ -721,7 +737,7 @@ class Dumper(DumperBase):
return None if val is None else self.fromNativeValue(val)
def nativeParseAndEvaluate(self, exp):
- #DumperBase.warn('EVALUATE "%s"' % exp)
+ #self.warn('EVALUATE "%s"' % exp)
try:
val = gdb.parse_and_eval(exp)
return val
@@ -744,20 +760,20 @@ class Dumper(DumperBase):
else:
arg += a
- #DumperBase.warn('CALL: %s -> %s(%s)' % (value, function, arg))
- typeName = value.type.name
- if typeName.find(':') >= 0:
- typeName = "'" + typeName + "'"
+ #self.warn('CALL: %s -> %s(%s)' % (value, function, arg))
+ type_name = value.type.name
+ if type_name.find(':') >= 0:
+ type_name = "'" + type_name + "'"
# 'class' is needed, see http://sourceware.org/bugzilla/show_bug.cgi?id=11912
- #exp = '((class %s*)%s)->%s(%s)' % (typeName, value.laddress, function, arg)
+ #exp = '((class %s*)%s)->%s(%s)' % (type_name, value.laddress, function, arg)
addr = value.address()
if addr is None:
addr = self.pokeValue(value)
- #DumperBase.warn('PTR: %s -> %s(%s)' % (value, function, addr))
- exp = '((%s*)0x%x)->%s(%s)' % (typeName, addr, function, arg)
- #DumperBase.warn('CALL: %s' % exp)
+ #self.warn('PTR: %s -> %s(%s)' % (value, function, addr))
+ exp = '((%s*)0x%x)->%s(%s)' % (type_name, addr, function, arg)
+ #self.warn('CALL: %s' % exp)
result = gdb.parse_and_eval(exp)
- #DumperBase.warn(' -> %s' % result)
+ #self.warn(' -> %s' % result)
res = self.fromNativeValue(result)
if value.address() is None:
self.releaseValue(addr)
@@ -765,14 +781,14 @@ class Dumper(DumperBase):
def makeExpression(self, value):
typename = '::' + value.type.name
- #DumperBase.warn(' TYPE: %s' % typename)
+ #self.warn(' TYPE: %s' % typename)
exp = '(*(%s*)(0x%x))' % (typename, value.address())
- #DumperBase.warn(' EXP: %s' % exp)
+ #self.warn(' EXP: %s' % exp)
return exp
def makeStdString(init):
# Works only for small allocators, but they are usually empty.
- gdb.execute('set $d=(std::string*)calloc(sizeof(std::string), 2)')
+ gdb.execute('set $d=(std::string*)calloc(2, sizeof(std::string))')
gdb.execute('call($d->basic_string("' + init +
'",*(std::allocator<char>*)(1+$d)))')
value = gdb.parse_and_eval('$d').dereference()
@@ -785,14 +801,14 @@ class Dumper(DumperBase):
size = value.type.size()
data = value.data()
h = self.hexencode(data)
- #DumperBase.warn('DATA: %s' % h)
+ #self.warn('DATA: %s' % h)
string = ''.join('\\x' + h[2 * i:2 * i + 2] for i in range(size))
- exp = '(%s*)memcpy(calloc(%d, 1), "%s", %d)' \
+ exp = '(%s*)memcpy(calloc(1, %d), "%s", %d)' \
% (value.type.name, size, string, size)
- #DumperBase.warn('EXP: %s' % exp)
+ #self.warn('EXP: %s' % exp)
res = gdb.parse_and_eval(exp)
- #DumperBase.warn('RES: %s' % res)
- return toInteger(res)
+ #self.warn('RES: %s' % res)
+ return int(res)
def releaseValue(self, address):
gdb.parse_and_eval('free(0x%x)' % address)
@@ -819,7 +835,7 @@ class Dumper(DumperBase):
return self.cachedInferior
def readRawMemory(self, address, size):
- #DumperBase.warn('READ: %s FROM 0x%x' % (size, address))
+ #self.warn('READ: %s FROM 0x%x' % (size, address))
if address == 0 or size == 0:
return bytes()
res = self.selectedInferior().read_memory(address, size)
@@ -832,7 +848,7 @@ class Dumper(DumperBase):
return 0
try:
# Older GDB ~7.4 don't have gdb.Symbol.value()
- return toInteger(symbol.value().address)
+ return int(symbol.value().address)
except:
pass
@@ -870,12 +886,10 @@ class Dumper(DumperBase):
pass
return None
- def qtVersion(self):
+ def extractQtVersion(self):
try:
# Only available with Qt 5.3+
- qtversion = int(str(gdb.parse_and_eval('((void**)&qtHookData)[2]')), 16)
- self.qtVersion = lambda: qtversion
- return qtversion
+ return int(str(gdb.parse_and_eval('((void**)&qtHookData)[2]')), 16)
except:
pass
@@ -887,7 +901,8 @@ class Dumper(DumperBase):
return qtversion
except:
# Use fallback until we have a better answer.
- return self.fallbackQtVersion
+ return None
+
def createSpecialBreakpoints(self, args):
self.specialBreakpoints = []
@@ -1014,13 +1029,9 @@ class Dumper(DumperBase):
for obj in gdb.objfiles():
self.importPlainDumpersForObj(obj)
- def qtNamespace(self):
- # This function is replaced by handleQtCoreLoaded()
- return ''
-
def findSymbol(self, symbolName):
try:
- return toInteger(gdb.parse_and_eval("(size_t)&'%s'" % symbolName))
+ return int(gdb.parse_and_eval("(size_t)&'%s'" % symbolName))
except:
return 0
@@ -1050,47 +1061,38 @@ class Dumper(DumperBase):
pass
def handleQtCoreLoaded(self, objfile):
- fd, tmppath = tempfile.mkstemp()
- os.close(fd)
- try:
- cmd = 'maint print msymbols -objfile "%s" -- %s' % (objfile.filename, tmppath)
- symbols = gdb.execute(cmd, to_string=True)
- except:
- try:
- # command syntax depends on gdb version - below is gdb < 8
- cmd = 'maint print msymbols %s "%s"' % (tmppath, objfile.filename)
- symbols = gdb.execute(cmd, to_string=True)
- except:
- pass
- ns = ''
- with open(tmppath) as f:
- for line in f:
- if line.find('msgHandlerGrabbed ') >= 0:
- # [11] b 0x7ffff683c000 _ZN4MynsL17msgHandlerGrabbedE
- # section .tbss Myns::msgHandlerGrabbed qlogging.cpp
- ns = re.split(r'_ZN?(\d*)(\w*)L17msgHandlerGrabbedE? ', line)[2]
- if len(ns):
- ns += '::'
- break
- if line.find('currentThreadData ') >= 0:
- # [ 0] b 0x7ffff67d3000 _ZN2UUL17currentThreadDataE
- # section .tbss UU::currentThreadData qthread_unix.cpp\\n
- ns = re.split(r'_ZN?(\d*)(\w*)L17currentThreadDataE? ', line)[2]
- if len(ns):
- ns += '::'
- break
- os.remove(tmppath)
-
+ self.qtLoaded = True
+ # FIXME: Namespace auto-detection. Is it worth the price?
+ # fd, tmppath = tempfile.mkstemp()
+ # os.close(fd)
+ # cmd = 'maint print msymbols -objfile "%s" -- %s' % (objfile.filename, tmppath)
+ # symbols = gdb.execute(cmd, to_string=True)
+ # ns = ''
+ # with open(tmppath) as f:
+ # ns1re = re.compile(r'_ZN?(\d*)(\w*)L17msgHandlerGrabbedE? ')
+ # ns2re = re.compile(r'_ZN?(\d*)(\w*)L17currentThreadDataE? ')
+ # for line in f:
+ # if 'msgHandlerGrabbed ' in line:
+ # # [11] b 0x7ffff683c000 _ZN4MynsL17msgHandlerGrabbedE
+ # # section .tbss Myns::msgHandlerGrabbed qlogging.cpp
+ # ns = ns1re.split(line)[2]
+ # if len(ns):
+ # ns += '::'
+ # break
+ # if 'currentThreadData ' in line:
+ # # [ 0] b 0x7ffff67d3000 _ZN2UUL17currentThreadDataE
+ # # section .tbss UU::currentThreadData qthread_unix.cpp\\n
+ # ns = ns2re.split(line)[2]
+ # if len(ns):
+ # ns += '::'
+ # break
+ # os.remove(tmppath)
+
+ def fetchInternalFunctions(self):
+ ns = self.qtNamespace()
lenns = len(ns)
strns = ('%d%s' % (lenns - 2, ns[:lenns - 2])) if lenns else ''
-
if lenns:
- # This might be wrong, but we can't do better: We found
- # a libQt5Core and could not extract a namespace.
- # The best guess is that there isn't any.
- self.qtNamespaceToReport = ns
- self.qtNamespace = lambda: ns
-
sym = '_ZN%s7QObject11customEventEPNS_6QEventE' % strns
else:
sym = '_ZN7QObject11customEventEP6QEvent'
@@ -1103,22 +1105,24 @@ class Dumper(DumperBase):
if not self.isWindowsTarget(): # prevent calling the property function on windows
self.qtPropertyFunc = self.findSymbol(sym)
+ self.fetchInternalFunctions = lambda: None
+
def assignValue(self, args):
- typeName = self.hexdecode(args['type'])
+ type_name = self.hexdecode(args['type'])
expr = self.hexdecode(args['expr'])
value = self.hexdecode(args['value'])
simpleType = int(args['simpleType'])
ns = self.qtNamespace()
- if typeName.startswith(ns):
- typeName = typeName[len(ns):]
- typeName = typeName.replace('::', '__')
- pos = typeName.find('<')
+ if type_name.startswith(ns):
+ type_name = type_name[len(ns):]
+ type_name = type_name.replace('::', '__')
+ pos = type_name.find('<')
if pos != -1:
- typeName = typeName[0:pos]
- if typeName in self.qqEditable and not simpleType:
- #self.qqEditable[typeName](self, expr, value)
+ type_name = type_name[0:pos]
+ if type_name in self.qqEditable and not simpleType:
+ #self.qqEditable[type_name](self, expr, value)
expr = self.parseAndEvaluate(expr)
- self.qqEditable[typeName](self, expr, value)
+ self.qqEditable[type_name](self, expr, value)
else:
cmd = 'set variable (%s)=%s' % (expr, value)
gdb.execute(cmd)
@@ -1152,63 +1156,28 @@ class Dumper(DumperBase):
nativeValue = value.nativeValue
return self.fromNativeValue(nativeValue.cast(nativeValue.type.target()))
- def nativeDynamicTypeName(self, address, baseType):
+ def nativeDynamicType(self, address, base_typeid):
# Needed for Gdb13393 test.
- nativeType = self.lookupNativeType(baseType.name)
+ nativeType = self.type_nativetype_cache.get(base_typeid, None)
if nativeType is None:
- return None
- nativeTypePointer = nativeType.pointer()
- nativeValue = gdb.Value(address).cast(nativeTypePointer).dereference()
- val = nativeValue.cast(nativeValue.dynamic_type)
- return str(val.type)
- #try:
- # vtbl = gdb.execute('info symbol {%s*}0x%x' % (baseType.name, address), to_string = True)
- #except:
- # return None
- #pos1 = vtbl.find('vtable ')
- #if pos1 == -1:
- # return None
- #pos1 += 11
- #pos2 = vtbl.find(' +', pos1)
- #if pos2 == -1:
- # return None
- #return vtbl[pos1 : pos2]
-
- def nativeDynamicType(self, address, baseType):
- # Needed for Gdb13393 test.
- nativeType = self.lookupNativeType(baseType.name)
- if nativeType is None:
- return baseType
+ return base_typeid
nativeTypePointer = nativeType.pointer()
nativeValue = gdb.Value(address).cast(nativeTypePointer).dereference()
- return self.fromNativeType(nativeValue.dynamic_type)
+ return self.from_native_type(nativeValue.dynamic_type)
def enumExpression(self, enumType, enumValue):
return self.qtNamespace() + 'Qt::' + enumValue
- def lookupNativeType(self, typeName):
- nativeType = self.lookupNativeTypeHelper(typeName)
- if nativeType is not None:
- self.check(isinstance(nativeType, gdb.Type))
- return nativeType
-
- def lookupNativeTypeHelper(self, typeName):
- typeobj = self.typeCache.get(typeName)
- #DumperBase.warn('LOOKUP 1: %s -> %s' % (typeName, typeobj))
- if typeobj is not None:
- return typeobj
-
- if typeName == 'void':
- typeobj = gdb.lookup_type(typeName)
- self.typeCache[typeName] = typeobj
- self.typesToReport[typeName] = typeobj
+ def lookupNativeType(self, type_name):
+ if type_name == 'void':
+ typeobj = gdb.lookup_type(type_name)
+ self.typesToReport[type_name] = typeobj
return typeobj
#try:
- # typeobj = gdb.parse_and_eval('{%s}&main' % typeName).typeobj
+ # typeobj = gdb.parse_and_eval('{%s}&main' % type_name).typeobj
# if not typeobj is None:
- # self.typeCache[typeName] = typeobj
- # self.typesToReport[typeName] = typeobj
+ # self.typesToReport[type_name] = typeobj
# return typeobj
#except:
# pass
@@ -1217,22 +1186,21 @@ class Dumper(DumperBase):
# gcc produces '{anonymous}', gdb '(anonymous namespace)'
# '<unnamed>' has been seen too. The only thing gdb
# understands when reading things back is '(anonymous namespace)'
- if typeName.find('{anonymous}') != -1:
- ts = typeName
+ if type_name.find('{anonymous}') != -1:
+ ts = type_name
ts = ts.replace('{anonymous}', '(anonymous namespace)')
typeobj = self.lookupNativeType(ts)
if typeobj is not None:
- self.typeCache[typeName] = typeobj
- self.typesToReport[typeName] = typeobj
+ self.typesToReport[type_name] = typeobj
return typeobj
- #DumperBase.warn(" RESULT FOR 7.2: '%s': %s" % (typeName, typeobj))
+ #self.warn(" RESULT FOR 7.2: '%s': %s" % (type_name, typeobj))
# This part should only trigger for
# gdb 7.1 for types with namespace separators.
# And anonymous namespaces.
- ts = typeName
+ ts = type_name
while True:
if ts.startswith('class '):
ts = ts[6:]
@@ -1259,36 +1227,32 @@ class Dumper(DumperBase):
typeobj = self.lookupNativeType(ts[0:-1])
if typeobj is not None:
typeobj = typeobj.pointer()
- self.typeCache[typeName] = typeobj
- self.typesToReport[typeName] = typeobj
+ self.typesToReport[type_name] = typeobj
return typeobj
try:
- #DumperBase.warn("LOOKING UP 1 '%s'" % ts)
+ #self.warn("LOOKING UP 1 '%s'" % ts)
typeobj = gdb.lookup_type(ts)
except RuntimeError as error:
- #DumperBase.warn("LOOKING UP 2 '%s' ERROR %s" % (ts, error))
+ #self.warn("LOOKING UP '%s' FAILED" % ts)
+ pass
+ #self.warn("LOOKING UP 2 '%s' ERROR %s" % (ts, error))
# See http://sourceware.org/bugzilla/show_bug.cgi?id=11912
exp = "(class '%s'*)0" % ts
try:
typeobj = self.parse_and_eval(exp).type.target()
- #DumperBase.warn("LOOKING UP 3 '%s'" % typeobj)
+ #self.warn("LOOKING UP 3 '%s'" % typeobj)
except:
# Can throw 'RuntimeError: No type named class Foo.'
pass
- except:
- #DumperBase.warn("LOOKING UP '%s' FAILED" % ts)
- pass
if typeobj is not None:
- #DumperBase.warn('CACHING: %s' % typeobj)
- self.typeCache[typeName] = typeobj
- self.typesToReport[typeName] = typeobj
+ #self.warn('CACHING: %s' % typeobj)
+ self.typesToReport[type_name] = typeobj
# This could still be None as gdb.lookup_type('char[3]') generates
# 'RuntimeError: No type named char[3]'
- #self.typeCache[typeName] = typeobj
- #self.typesToReport[typeName] = typeobj
+ #self.typesToReport[type_name] = typeobj
return typeobj
def doContinue(self):
@@ -1332,7 +1296,7 @@ class Dumper(DumperBase):
if typeobj.code == gdb.TYPE_CODE_PTR:
dereftype = typeobj.target().unqualified()
if dereftype.name == needle:
- addr = toInteger(value)
+ addr = int(value)
res = None
for pat in pats:
try:
@@ -1442,14 +1406,6 @@ class Dumper(DumperBase):
def reportResult(self, result, args):
print('result={token="%s",%s}' % (args.get("token", 0), result))
- def profile1(self, args):
- '''Internal profiling'''
- import cProfile
- tempDir = tempfile.gettempdir() + '/bbprof'
- cProfile.run('theDumper.fetchVariables(%s)' % args, tempDir)
- import pstats
- pstats.Stats(tempDir).sort_stats('time').print_stats()
-
def profile2(self, args):
import timeit
print(timeit.repeat('theDumper.fetchVariables(%s)' % args,
diff --git a/share/qtcreator/debugger/libcpp_stdtypes.py b/share/qtcreator/debugger/libcpp_stdtypes.py
index 44b3a235ff..2db8352101 100644
--- a/share/qtcreator/debugger/libcpp_stdtypes.py
+++ b/share/qtcreator/debugger/libcpp_stdtypes.py
@@ -5,6 +5,7 @@ from stdtypes import qdump__std__array, qdump__std__complex, qdump__std__once_fl
from utils import DisplayFormat
from dumper import Children, DumperBase
+import struct
def qform__std____1__array():
return [DisplayFormat.ArrayPlot]
@@ -163,231 +164,114 @@ def qdump__std____1__stack(d, value):
d.putBetterType(value.type)
-def GetChildMemberWithName(value, name):
- members = value.members(True)
- for member in members:
- if member.name == name:
- return member
- return None
-
-
-def GetIndexOfChildWithName(value, name):
- members = value.members(True)
-
- for i, member in enumerate(members):
- if member.name == name:
- return i
- return None
-
-
-class StringLayout:
- CSD = 0
- DSC = 1
-
-
-def std_1_string_dumper_v2(d, value):
- charType = value['__l']['__data_'].dereference().type
-
- R = GetChildMemberWithName(value, "__r_")
- if not R:
- raise Exception("Could not find __r_")
-
- # __r_ is a compressed_pair of the actual data and the allocator. The data we
- # want is in the first base class.
- R_Base_SP = R[0]
-
- if not R_Base_SP:
- raise Exception("Could not find R_Base_SP")
-
- Rep_Sp = GetChildMemberWithName(R_Base_SP, "__value_")
-
- if not Rep_Sp:
- raise Exception("Could not find __value_")
-
- # Our layout seems a little different
- Rep_Sp = Rep_Sp[0]
-
- if not Rep_Sp:
- raise Exception("Could not find Rep_Sp")
-
- L = GetChildMemberWithName(Rep_Sp, "__l")
-
- if not L:
- raise Exception("Could not find __l")
-
- layout = StringLayout.CSD
- if GetIndexOfChildWithName(L, "__data_") == 0:
- layout = StringLayout.DSC
-
- short_mode = False
- using_bitmasks = True
- size = 0
- size_mode_value = 0
-
- Short_Sp = GetChildMemberWithName(Rep_Sp, "__s")
- if not Short_Sp:
- raise Exception("Could not find __s")
-
- Is_Long = GetChildMemberWithName(Short_Sp, "__is_long_")
- Size_Sp = GetChildMemberWithName(Short_Sp, "__size_")
- if not Size_Sp:
- raise Exception("Could not find __size_")
-
- if Is_Long:
- using_bitmasks = False
- short_mode = Is_Long.integer() == 0
- size = Size_Sp.integer()
- else:
- size_mode_value = Size_Sp.integer()
- mode_mask = 1
- if layout == StringLayout.DSC:
- mode_mask = 0x80
- short_mode = (size_mode_value & mode_mask) == 0
-
- if short_mode:
- Location_Sp = GetChildMemberWithName(Short_Sp, "__data_")
-
- if using_bitmasks:
- size = ((size_mode_value >> 1) % 256)
- if layout == StringLayout.DSC:
- size = size_mode_value
-
- # The string is most likely not initialized yet
- if size > 100 or not Location_Sp:
- raise Exception("Probably not initialized yet")
-
- d.putCharArrayHelper(d.extractPointer(Location_Sp), size,
- charType, d.currentItemFormat())
- return
-
- Location_Sp = GetChildMemberWithName(L, "__data_")
- Size_Vo = GetChildMemberWithName(L, "__size_")
- Capacity_Vo = GetChildMemberWithName(L, "__cap_")
-
- if not Location_Sp or not Size_Vo or not Capacity_Vo:
- raise Exception("Could not find Location_Sp, Size_Vo or Capacity_Vo")
-
- size = Size_Vo.integer()
- capacity = Capacity_Vo.integer()
- if not using_bitmasks and layout == StringLayout.CSD:
- capacity *= 2
- if capacity < size:
- raise Exception("Capacity is less than size")
-
- d.putCharArrayHelper(d.extractPointer(Location_Sp), size,
- charType, d.currentItemFormat())
-
-
-def std_1_string_dumper_v1(d, value):
- charType = value['__l']['__data_'].dereference().type
- D = None
-
- if d.isLldb:
- D = value[0][0][0][0]
- elif d.isGdb:
- D = value["__r_"].members(True)[0][0][0]
- else:
- raise Exception("Unknown debugger (neither gdb nor lldb)")
-
- layoutDecider = D[0][0]
- if not layoutDecider:
- raise Exception("Could not find layoutDecider")
-
- size = 0
- size_mode_value = 0
- short_mode = False
- libcxx_version = 14
-
- layoutModeIsDSC = layoutDecider.name == '__data_'
- if (layoutModeIsDSC):
- size_mode = D[1][1][0]
- if not size_mode:
- raise Exception("Could not find size_mode")
- if not size_mode.name == '__size_':
- size_mode = D[1][1][1]
- if not size_mode:
- raise Exception("Could not find size_mode")
-
- size_mode_value = size_mode.integer()
- short_mode = ((size_mode_value & 0x80) == 0)
- else:
- size_mode = D[1][0][0]
- if not size_mode:
- raise Exception("Could not find size_mode")
-
- if size_mode.name == '__is_long_':
- libcxx_version = 15
- short_mode = (size_mode.integer() == 0)
-
- size_mode = D[1][0][1]
- size_mode_value = size_mode.integer()
- else:
- size_mode_value = size_mode.integer()
- short_mode = ((size_mode_value & 1) == 0)
-
- if short_mode:
- s = D[1]
-
- if not s:
- raise Exception("Could not find s")
-
- if libcxx_version == 14:
- location_sp = s[0] if layoutModeIsDSC else s[1]
- size = size_mode_value if layoutModeIsDSC else ((size_mode_value >> 1) % 256)
- elif libcxx_version == 15:
- location_sp = s[0] if layoutModeIsDSC else s[2]
- size = size_mode_value
-
- else:
- l = D[0]
- if not l:
- raise Exception("Could not find l")
-
- # we can use the layout_decider object as the data pointer
- location_sp = layoutDecider if layoutModeIsDSC else l[2]
- size_vo = l[1]
- if not size_vo or not location_sp:
- raise Exception("Could not find size_vo or location_sp")
- size = size_vo.integer()
-
- if short_mode and location_sp:
- d.putCharArrayHelper(d.extractPointer(location_sp), size,
- charType, d.currentItemFormat())
- else:
- d.putCharArrayHelper(location_sp.integer(),
- size, charType, d.currentItemFormat())
-
- return
+# Examples for std::__1::string layouts for libcxx version 16
+#
+# std::string b = "asd"
+#
+# b = {
+# static __endian_factor = 2,
+# __r_ = {
+# <std::__1::__compressed_pair_elem<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__rep, 0, false>> = {
+# __value_ = {{
+# __l = {
+# {__is_long_ = 0, __cap_ = 842641539},
+# __size_ = 140737353746888,
+# __data_ = 0x7ffff7fa0a20 <std::__1::codecvt<wchar_t, char, __mbstate_t>::id> \"\\377\\377\\377\\377\\377\\377\\377\\377\\006\"
+# },
+# __s = {
+# {__is_long_ = 0 '\\000', __size_ = 3 '\\003'},
+# __padding_ = 0x7fffffffd859 \"asd\",
+# __data_ = \"asd\\000\\000\\000\\000\\310\\t\\372\\367\\377\\177\\000\\000 \\n\\372\\367\\377\\177\\000\"
+# },
+# __r = {
+# __words = {1685283078, 140737353746888, 140737353746976}
+# }
+# }}
+# },
+# <std::__1::__compressed_pair_elem<std::__1::allocator<char>, 1, true>> = {
+# <std::__1::allocator<char>> = {
+# <std::__1::__non_trivial_if<true, std::__1::allocator<char> >> = {
+# <No data fields>
+# },
+# <No data fields>
+# },
+# <No data fields>
+# },
+# <No data fields>
+# },
+# static npos = 18446744073709551615
+# }
+#
+#
+# std::string c = "asdlonasdlongstringasdlongstringasdlongstringasdlongstringgstring"
+#
+# c = {
+# static __endian_factor = 2,
+# __r_ = {
+# <std::__1::__compressed_pair_elem<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__rep, 0, false>> = {
+# __value_ = {{
+# __l = {
+# {__is_long_ = 1, __cap_ = 40}, # size_type: __cap_
+# __size_ = 65,
+# __data_ = 0x5555555592a0 \"asdlonasdlongstringasdlongstringasdlongstringasdlongstringgstring\"
+# },
+# __s = {
+# {__is_long_ = 1 '\\001', __size_ = 40 '('},
+# __padding_ = 0x7fffffffd831 \"\", __data_ = \"\\000\\000\\000\\000\\000\\000\\000A\\000\\000\\000\\000\\000\\000\\000\\240\\222UUUU\\000\"
+# },
+# __r = {
+# __words = {81, 65, 93824992252576}
+# }
+# }}
+# },
+# <std::__1::__compressed_pair_elem<std::__1::allocator<char>, 1, true>> = {
+# <std::__1::allocator<char>> = {
+# <std::__1::__non_trivial_if<true, std::__1::allocator<char> >> = {
+# <No data fields>
+# },
+# <No data fields>
+# },
+# <No data fields
+# >},
+# <No data fields>
+# },
+# static npos = 18446744073709551615
+# }"
def qdump__std____1__string(d, value):
- try:
- std_1_string_dumper_v2(d, value)
- except Exception as eV2:
- try:
- std_1_string_dumper_v1(d, value)
- except Exception as eV1:
- d.putValue("Could not parse: %s, %s" % (eV1, eV2))
-
-
-def qdump__std____1__wstring(d, value):
- try:
- std_1_string_dumper_v2(d, value)
- except Exception as eV2:
- try:
- std_1_string_dumper_v1(d, value)
- except Exception as eV1:
- d.putValue("Could not parse: %s, %s" % (eV1, eV2))
-
-
-def qdump__std____1__basic_string(d, value):
- innerType = value.type[0].name
- if innerType in ("char", "char8_t", "char16_t"):
- qdump__std____1__string(d, value)
- elif innerType in ("wchar_t", "char32_t"):
- qdump__std____1__wstring(d, value)
+ charType = value.type[0]
+ blob = bytes(value.data())
+ r0, r1, r2 = struct.unpack(d.packCode + 'QQQ', blob)
+ if d.isLldb and d.isArmMac:
+ is_long = r2 >> 63
+ if is_long:
+ # [---------------- data ptr ---------------] 63:0
+ # [------------------ size ----------------]
+ # [?---------------- alloc ----------------]
+ data = r0
+ size = r1
+ else:
+ # [------------------- data ----------------] 63:0
+ # [------------------- data ----------------]
+ # [?ssss-------------- data ----------------]
+ data = value.laddress
+ size = (r2 >> 56) & 255
else:
- d.warn("UNKNOWN INNER TYPE %s" % innerType)
+ is_long = r0 & 1
+ if is_long:
+ # [------------------ alloc ---------------?] 63:0
+ # [------------------- size ----------------]
+ # [----------------- data ptr --------------]
+ data = r2
+ size = r1
+ else:
+ # [------------------- data ----------sssss?] 63:0
+ # [------------------- data ----------------]
+ # [------------------- data ----------------]
+ data = value.laddress + charType.size()
+ size = (r0 & 255) // 2
+ d.putCharArrayHelper(data, size, charType)
def qdump__std____1__shared_ptr(d, value):
diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py
index 7809a6a3dc..3f7ec792a6 100644
--- a/share/qtcreator/debugger/lldbbridge.py
+++ b/share/qtcreator/debugger/lldbbridge.py
@@ -18,11 +18,7 @@ sys.path.insert(1, os.path.dirname(os.path.abspath(inspect.getfile(inspect.curre
# Simplify development of this module by reloading deps
if 'dumper' in sys.modules:
- if sys.version_info[0] >= 3:
- if sys.version_info[1] > 3:
- from importlib import reload
- else:
- def reload(m): print('Unsupported Python version - not reloading %s' % str(m))
+ from importlib import reload
reload(sys.modules['dumper'])
from dumper import DumperBase, SubItem, Children, TopLevelItem
@@ -34,16 +30,10 @@ from dumper import DumperBase, SubItem, Children, TopLevelItem
#######################################################################
qqWatchpointOffset = 10000
-_c_str_trans = None
-
-if sys.version_info[0] >= 3:
- _c_str_trans = str.maketrans({"\n": "\\n", '"':'\\"', "\\":"\\\\"})
+_c_str_trans = str.maketrans({"\n": "\\n", '"':'\\"', "\\":"\\\\"})
def toCString(s):
- if _c_str_trans is not None:
- return str(s).translate(_c_str_trans)
- else:
- return str(s).replace('\\', '\\\\').replace('\n', '\\n').replace('"', '\\"')
+ return str(s).translate(_c_str_trans)
def fileNameAsString(file):
return toCString(file) if file.IsValid() else ''
@@ -116,33 +106,29 @@ class Dumper(DumperBase):
self.isInterrupting_ = False
self.interpreterBreakpointResolvers = []
- DumperBase.warn = Dumper.warn_impl
self.report('lldbversion=\"%s\"' % lldb.SBDebugger.GetVersionString())
- @staticmethod
- def warn_impl(message):
- if message[-1:] == '\n':
- message += '\n'
+ def warn(self, msg):
+ #self.put('{name="%s",value="",type="",numchild="0"},' % toCString(msg))
+ if msg[-1:] == '\n':
+ msg += '\n'
print('@\nbridgemessage={msg="%s",channel="%s"}\n@'
- % (message.replace('"', '$'), LogChannel.AppError))
-
- def fromNativeFrameValue(self, nativeValue):
- return self.fromNativeValue(nativeValue)
+ % (msg.replace('"', '$'), LogChannel.AppError))
def fromNativeValue(self, nativeValue):
self.check(isinstance(nativeValue, lldb.SBValue))
nativeType = nativeValue.GetType()
- typeName = nativeType.GetName()
+ type_name = nativeType.GetName()
code = nativeType.GetTypeClass()
# Display the result of GetSummary() for Core Foundation string
# and string-like types.
summary = None
if self.useFancy:
- if (typeName.startswith('CF')
- or typeName.startswith('__CF')
- or typeName.startswith('NS')
- or typeName.startswith('__NSCF')):
+ if (type_name.startswith('CF')
+ or type_name.startswith('__CF')
+ or type_name.startswith('NS')
+ or type_name.startswith('__NSCF')):
if code == lldb.eTypeClassPointer:
summary = nativeValue.Dereference().GetSummary()
elif code == lldb.eTypeClassReference:
@@ -156,26 +142,26 @@ class Dumper(DumperBase):
nativeTargetType = nativeType.GetDereferencedType()
if not nativeTargetType.IsPointerType():
nativeTargetType = nativeTargetType.GetUnqualifiedType()
- targetType = self.fromNativeType(nativeTargetType)
- val = self.createReferenceValue(nativeValue.GetValueAsUnsigned(), targetType)
+ target_typeid = self.from_native_type(nativeTargetType)
+ target_address = nativeValue.GetValueAsUnsigned()
+ val = self.Value(self)
+ val.ldata = target_address.to_bytes(self.ptrSize(), 'little')
+ if self.useDynamicType:
+ target_typeid = self.dynamic_typeid_at_address(target_typeid, target_address)
+ val.typeid = self.create_reference_typeid(target_typeid)
val.laddress = nativeValue.AddressOf().GetValueAsUnsigned()
- #DumperBase.warn('CREATED REF: %s' % val)
+ #self.warn('CREATED REF: %s' % val)
+
elif code == lldb.eTypeClassPointer:
nativeTargetType = nativeType.GetPointeeType()
if not nativeTargetType.IsPointerType():
nativeTargetType = nativeTargetType.GetUnqualifiedType()
- targetType = self.fromNativeType(nativeTargetType)
- val = self.createPointerValue(nativeValue.GetValueAsUnsigned(), targetType)
- #DumperBase.warn('CREATED PTR 1: %s' % val)
+ target_typeid = self.from_native_type(nativeTargetType)
+ val = self.Value(self)
+ val.ldata = nativeValue.GetValueAsUnsigned()
+ val.typeid = self.create_pointer_typeid(target_typeid)
val.laddress = nativeValue.AddressOf().GetValueAsUnsigned()
- #DumperBase.warn('CREATED PTR 2: %s' % val)
- elif code == lldb.eTypeClassTypedef:
- nativeTargetType = nativeType.GetUnqualifiedType()
- if hasattr(nativeTargetType, 'GetCanonicalType'):
- nativeTargetType = nativeTargetType.GetCanonicalType()
- val = self.fromNativeValue(nativeValue.Cast(nativeTargetType))
- val._type = self.fromNativeType(nativeType)
- #DumperBase.warn('CREATED TYPEDEF: %s' % val)
+
else:
val = self.Value(self)
address = nativeValue.GetLoadAddress()
@@ -193,7 +179,7 @@ class Dumper(DumperBase):
except:
pass
- val._type = self.fromNativeType(nativeType)
+ val.typeid = self.from_native_type(nativeType)
if code == lldb.eTypeClassEnumeration:
intval = nativeValue.GetValueAsSigned()
@@ -209,43 +195,32 @@ class Dumper(DumperBase):
val.ldisplay = str(nativeValue.GetValue())
#elif code == lldb.eTypeClassArray:
# if hasattr(nativeType, 'GetArrayElementType'): # New in 3.8(?) / 350.x
- # val.type.ltarget = self.fromNativeType(nativeType.GetArrayElementType())
+ # val.type.ltarget = self.from_native_type(nativeType.GetArrayElementType())
# else:
# fields = nativeType.get_fields_array()
# if len(fields):
- # val.type.ltarget = self.fromNativeType(fields[0])
+ # val.type.ltarget = self.from_native_type(fields[0])
#elif code == lldb.eTypeClassVector:
- # val.type.ltarget = self.fromNativeType(nativeType.GetVectorElementType())
+ # val.type.ltarget = self.from_native_type(nativeType.GetVectorElementType())
val.summary = summary
val.lIsInScope = nativeValue.IsInScope()
val.name = nativeValue.GetName()
return val
- def nativeStructAlignment(self, nativeType):
- def handleItem(nativeFieldType, align):
- a = self.fromNativeType(nativeFieldType).alignment()
- return a if a > align else align
- align = 1
- for i in range(nativeType.GetNumberOfDirectBaseClasses()):
- base = nativeType.GetDirectBaseClassAtIndex(i)
- align = handleItem(base.GetType(), align)
- for i in range(nativeType.GetNumberOfFields()):
- child = nativeType.GetFieldAtIndex(i)
- align = handleItem(child.GetType(), align)
- return align
-
- def listMembers(self, value, nativeType):
- #DumperBase.warn("ADDR: 0x%x" % self.fakeAddress_)
- if value.laddress:
- fakeAddress = lldb.SBAddress(value.laddress, self.target)
- fakeLAddress = value.laddress
- else:
- fakeAddress = self.fakeAddress_
- fakeLAddress = self.fakeLAddress_
+ def nativeListMembers(self, value, nativeType, include_base):
+ #self.warn("ADDR: 0x%x" % self.fakeAddress_)
+ nativeValue = value.nativeValue
+ if nativeValue is None:
+ if value.laddress:
+ fakeAddress = lldb.SBAddress(value.laddress, self.target)
+ fakeLAddress = value.laddress
+ else:
+ fakeAddress = self.fakeAddress_
+ fakeLAddress = self.fakeLAddress_
+ nativeValue = self.target.CreateValueFromAddress('x', fakeAddress, nativeType)
- fakeValue = self.target.CreateValueFromAddress('x', fakeAddress, nativeType)
- fakeValue.SetPreferSyntheticValue(False)
+ nativeValue.SetPreferSyntheticValue(False)
baseNames = {}
for i in range(nativeType.GetNumberOfDirectBaseClasses()):
@@ -262,86 +237,108 @@ class Dumper(DumperBase):
# Normal members and non-empty base classes.
anonNumber = 0
- for i in range(fakeValue.GetNumChildren()):
- nativeField = fakeValue.GetChildAtIndex(i)
+
+ fields = []
+ for i in range(nativeValue.GetNumChildren()):
+ nativeField = nativeValue.GetChildAtIndex(i)
nativeField.SetPreferSyntheticValue(False)
fieldName = nativeField.GetName()
nativeFieldType = nativeField.GetType()
if fieldName in fieldBits:
- (fieldBitsize, fieldBitpos, isBitfield) = fieldBits[fieldName]
+ (bitsize, bitpos, isBitfield) = fieldBits[fieldName]
else:
- fieldBitsize = nativeFieldType.GetByteSize() * 8
- fieldBitpos = None
+ bitsize = nativeFieldType.GetByteSize() * 8
+ bitpos = None
isBitfield = False
if isBitfield: # Bit fields
- fieldType = self.createBitfieldType(
- self.createType(self.typeName(nativeFieldType)), fieldBitsize)
- yield self.Field(self, name=fieldName, type=fieldType,
- bitsize=fieldBitsize, bitpos=fieldBitpos)
+ field_typeid = self.create_bitfield_typeid(
+ self.create_typeid(nativeFieldType.GetName()), bitsize)
+ val = self.Value(self)
+ val.name = fieldName
+ val.isBaseClass = False
+ val.typeid = field_typeid
+ val.ldata = self.value_extract_bits(value, bitpos, bitsize)
+ val.laddress = None
+ fields.append(val)
elif fieldName is None: # Anon members
anonNumber += 1
fieldName = '#%s' % anonNumber
- fakeMember = fakeValue.GetChildAtIndex(i)
+ fakeMember = nativeValue.GetChildAtIndex(i)
fakeMemberAddress = fakeMember.GetLoadAddress()
- offset = fakeMemberAddress - fakeLAddress
- yield self.Field(self, name=fieldName, type=self.fromNativeType(nativeFieldType),
- bitsize=fieldBitsize, bitpos=8 * offset)
+ val = self.Value(self)
+ val.name = fieldName
+ val.isBaseClass = False
+ val.typeid = typeid=self.from_native_type(nativeFieldType)
+ field_offset = fakeMemberAddress - fakeLAddress
+ if value.laddress is not None:
+ val.laddress = value.laddress + field_offset
+ if value.ldata is not None:
+ field_size = (bitsize + 7) // 8
+ val.ldata = value.ldata[field_offset:field_offset + field_size]
+ fields.append(val)
elif fieldName in baseNames: # Simple bases
- member = self.fromNativeValue(fakeValue.GetChildAtIndex(i))
+ member = self.fromNativeValue(nativeValue.GetChildAtIndex(i))
member.isBaseClass = True
- yield member
+ fields.append(member)
else: # Normal named members
- member = self.fromNativeValue(fakeValue.GetChildAtIndex(i))
+ member = self.fromNativeValue(nativeValue.GetChildAtIndex(i))
member.name = nativeField.GetName()
- yield member
-
- # Empty bases are not covered above.
- for i in range(nativeType.GetNumberOfDirectBaseClasses()):
- fieldObj = nativeType.GetDirectBaseClassAtIndex(i)
- fieldType = fieldObj.GetType()
- if fieldType.GetNumberOfFields() == 0:
- if fieldType.GetNumberOfDirectBaseClasses() == 0:
- member = self.Value(self)
- fieldName = fieldObj.GetName()
- member._type = self.fromNativeType(fieldType)
- member.name = fieldName
- member.fields = []
- if False:
- # This would be correct if we came here only for
- # truly empty base classes. Alas, we don't, see below.
- member.ldata = bytes()
- member.lbitsize = fieldType.GetByteSize() * 8
- else:
- # This is a hack. LLDB 3.8 reports declared but not defined
- # types as having no fields and(!) size == 1. At least
- # for the common case of a single base class we can
- # fake the contents by using the whole derived object's
- # data as base class data.
- data = fakeValue.GetData()
- size = nativeType.GetByteSize()
- member.lbitsize = size * 8
- error = lldb.SBError()
- member.laddress = value.laddress
- member.ldata = data.ReadRawData(error, 0, size)
- member.isBaseClass = True
- member.ltype = self.fromNativeType(fieldType)
- member.name = fieldName
- yield member
+ fields.append(member)
+
+
+ if include_base:
+ # Empty bases are not covered above.
+ for i in range(nativeType.GetNumberOfDirectBaseClasses()):
+ fieldObj = nativeType.GetDirectBaseClassAtIndex(i)
+ fieldType = fieldObj.GetType()
+ if fieldType.GetNumberOfFields() == 0:
+ if fieldType.GetNumberOfDirectBaseClasses() == 0:
+ member = self.Value(self)
+ fieldName = fieldObj.GetName()
+ member.typeid = self.from_native_type(fieldType)
+ member.name = fieldName
+ member.fields = []
+ if False:
+ # This would be correct if we came here only for
+ # truly empty base classes. Alas, we don't, see below.
+ member.ldata = bytes()
+ else:
+ # This is a hack. LLDB 3.8 reports declared but not defined
+ # types as having no fields and(!) size == 1. At least
+ # for the common case of a single base class we can
+ # fake the contents by using the whole derived object's
+ # data as base class data.
+ data = nativeValue.GetData()
+ size = nativeType.GetByteSize()
+ error = lldb.SBError()
+ member.laddress = value.laddress
+ member.ldata = data.ReadRawData(error, 0, size)
+ member.isBaseClass = True
+ fields.append(member)
+ return fields
def ptrSize(self):
result = self.target.GetAddressByteSize()
self.ptrSize = lambda: result
return result
- def fromNativeType(self, nativeType):
+ def is_qobject_based(self, nativeType):
+ if nativeType.GetName() == self.qtNamespace() + 'QObject':
+ return True
+ if nativeType.GetNumberOfDirectBaseClasses() > 0:
+ return self.is_qobject_based(nativeType.GetDirectBaseClassAtIndex(0).GetType())
+ if nativeType.GetNumberOfFields() > 0:
+ return False
+ return None # No info, can't drill deeper
+
+ def from_native_type(self, nativeType):
self.check(isinstance(nativeType, lldb.SBType))
- code = nativeType.GetTypeClass()
# eTypeClassInvalid = (0u),
# eTypeClassArray = (1u << 0),
@@ -367,43 +364,41 @@ class Dumper(DumperBase):
# // Define a mask that can be used for any type when finding types
# eTypeClassAny = (0xffffffffu)
- #DumperBase.warn('CURRENT: %s' % self.typeData.keys())
- #DumperBase.warn('FROM NATIVE TYPE: %s' % nativeType.GetName())
- if code == lldb.eTypeClassInvalid:
- return None
+ #self.warn('CURRENT: %s' % self.typeData.keys())
+ #self.warn('FROM NATIVE TYPE: %s' % nativeType.GetName())
- if code == lldb.eTypeClassBuiltin:
- nativeType = nativeType.GetUnqualifiedType()
+ typeid_str = self.native_type_key(nativeType)
+ known_typeid = self.typeid_from_typekey.get(typeid_str, None)
+ if known_typeid is not None:
+ return known_typeid
- if code == lldb.eTypeClassPointer:
- #DumperBase.warn('PTR')
- nativeTargetType = nativeType.GetPointeeType()
- if not nativeTargetType.IsPointerType():
- nativeTargetType = nativeTargetType.GetUnqualifiedType()
- #DumperBase.warn('PTR: %s' % nativeTargetType.name)
- return self.createPointerType(self.fromNativeType(nativeTargetType))
+ code = nativeType.GetTypeClass()
- if code == lldb.eTypeClassReference:
+ if code == lldb.eTypeClassInvalid:
+ typeid = 0
+
+ elif code == lldb.eTypeClassPointer:
+ #self.warn('PTR: %s' % nativeTargetType.name)
+ target_typeid = self.from_native_type(nativeType.GetPointeeType())
+ typeid = self.create_pointer_typeid(target_typeid)
+
+ elif code == lldb.eTypeClassReference:
#DumperBase.warn('REF')
- nativeTargetType = nativeType.GetDereferencedType()
- if not nativeTargetType.IsPointerType():
- nativeTargetType = nativeTargetType.GetUnqualifiedType()
- #DumperBase.warn('REF: %s' % nativeTargetType.name)
- return self.createReferenceType(self.fromNativeType(nativeTargetType))
+ target_typeid = self.from_native_type(nativeType.GetDereferencedType())
+ typeid = self.create_reference_typeid(target_typeid)
- if code == lldb.eTypeClassTypedef:
+ elif code == lldb.eTypeClassTypedef:
#DumperBase.warn('TYPEDEF')
nativeTargetType = nativeType.GetUnqualifiedType()
if hasattr(nativeTargetType, 'GetCanonicalType'):
nativeTargetType = nativeTargetType.GetCanonicalType()
- targetType = self.fromNativeType(nativeTargetType)
- return self.createTypedefedType(targetType, nativeType.GetName(),
- self.nativeTypeId(nativeType))
-
- nativeType = nativeType.GetUnqualifiedType()
- typeName = self.typeName(nativeType)
+ target_typeid = self.from_native_type(nativeTargetType)
+ typeid = self.create_typedefed_typeid(target_typeid, nativeType.GetName(),
+ typeid_str)
- if code in (lldb.eTypeClassArray, lldb.eTypeClassVector):
+ elif code in (lldb.eTypeClassArray, lldb.eTypeClassVector):
+ nativeType = nativeType.GetUnqualifiedType()
+ type_name = nativeType.GetName()
#DumperBase.warn('ARRAY: %s' % nativeType.GetName())
if hasattr(nativeType, 'GetArrayElementType'): # New in 3.8(?) / 350.x
nativeTargetType = nativeType.GetArrayElementType()
@@ -412,141 +407,143 @@ class Dumper(DumperBase):
#DumperBase.warn('BAD: %s ' % nativeTargetType.get_fields_array())
nativeTargetType = nativeType.GetVectorElementType()
count = nativeType.GetByteSize() // nativeTargetType.GetByteSize()
- targetTypeName = nativeTargetType.GetName()
- if targetTypeName.startswith('(anon'):
- typeName = nativeType.GetName()
- pos1 = typeName.rfind('[')
- targetTypeName = typeName[0:pos1].strip()
- #DumperBase.warn("TARGET TYPENAME: %s" % targetTypeName)
- targetType = self.fromNativeType(nativeTargetType)
- targetType.setTdata(targetType.tdata.copy())
- targetType.tdata.name = targetTypeName
- return self.createArrayType(targetType, count)
- if hasattr(nativeType, 'GetVectorElementType'): # New in 3.8(?) / 350.x
+ target_typename = nativeTargetType.GetName()
+ if target_typename.startswith('(anon'):
+ type_name = nativeType.GetName()
+ pos1 = type_name.rfind('[')
+ target_typename = type_name[0:pos1].strip()
+ #DumperBase.warn("TARGET TYPENAME: %s" % target_typename)
+ target_typeid = self.from_native_type(nativeTargetType)
+ #target_typeid.setTdata(target_typeid.tdata.copy())
+ #target_typeid.tdata.name = target_typename
+ typeid = self.create_array_typeid(target_typeid, count)
+ elif hasattr(nativeType, 'GetVectorElementType'): # New in 3.8(?) / 350.x
nativeTargetType = nativeType.GetVectorElementType()
count = nativeType.GetByteSize() // nativeTargetType.GetByteSize()
- targetType = self.fromNativeType(nativeTargetType)
- return self.createArrayType(targetType, count)
- return self.createType(nativeType.GetName())
+ target_typeid = self.from_native_type(nativeTargetType)
+ typeid = self.create_array_typeid(target_typeid, count)
+ else:
+ typeid = self.create_type(nativeType.GetName())
+
+ else:
+ nativeType = nativeType.GetUnqualifiedType()
+ type_name = nativeType.GetName()
- typeId = self.nativeTypeId(nativeType)
- res = self.typeData.get(typeId, None)
- if res is None:
+ typeid = self.typeid_for_string(typeid_str)
+ #if not typeid in self.typeid_cache:
# # This strips typedefs for pointers. We don't want that.
# typeobj.nativeType = nativeType.GetUnqualifiedType()
- tdata = self.TypeData(self, typeId)
- tdata.name = typeName
- tdata.lbitsize = nativeType.GetByteSize() * 8
+ self.type_name_cache[typeid] = type_name
+ self.type_size_cache[typeid] = nativeType.GetByteSize()
+ type_code = None
if code == lldb.eTypeClassBuiltin:
- if utils.isFloatingPointTypeName(typeName):
- tdata.code = TypeCode.Float
- elif utils.isIntegralTypeName(typeName):
- tdata.code = TypeCode.Integral
- elif typeName in ('__int128', 'unsigned __int128'):
- tdata.code = TypeCode.Integral
- elif typeName == 'void':
- tdata.code = TypeCode.Void
- elif typeName == 'wchar_t':
- tdata.code = TypeCode.Integral
- elif typeName in ("char16_t", "char32_t", "char8_t"):
- tdata.code = TypeCode.Integral
+ if utils.isFloatingPointTypeName(type_name):
+ type_code = TypeCode.Float
+ elif utils.isIntegralTypeName(type_name):
+ type_code = TypeCode.Integral
+ elif type_name in ('__int128', 'unsigned __int128'):
+ type_code = TypeCode.Integral
+ elif type_name == 'void':
+ type_code = TypeCode.Void
+ elif type_name == 'wchar_t':
+ type_code = TypeCode.Integral
+ elif type_name in ("char16_t", "char32_t", "char8_t"):
+ type_code = TypeCode.Integral
else:
- self.warn('UNKNOWN TYPE KEY: %s: %s' % (typeName, code))
+ self.warn('UNKNOWN TYPE KEY: %s: %s' % (type_name, code))
elif code == lldb.eTypeClassEnumeration:
- tdata.code = TypeCode.Enum
- tdata.enumDisplay = lambda intval, addr, form: \
+ type_code = TypeCode.Enum
+ self.type_enum_display_cache[typeid] = lambda intval, addr, form: \
self.nativeTypeEnumDisplay(nativeType, intval, form)
elif code in (lldb.eTypeClassComplexInteger, lldb.eTypeClassComplexFloat):
- tdata.code = TypeCode.Complex
- elif code in (lldb.eTypeClassClass, lldb.eTypeClassStruct, lldb.eTypeClassUnion):
- tdata.code = TypeCode.Struct
- tdata.lalignment = lambda: \
- self.nativeStructAlignment(nativeType)
- tdata.lfields = lambda value: \
- self.listMembers(value, nativeType)
- tdata.templateArguments = lambda: \
- self.listTemplateParametersHelper(nativeType)
+ type_code = TypeCode.Complex
+ elif code in (lldb.eTypeClassClass, lldb.eTypeClassStruct):
+ type_code = TypeCode.Struct
+ self.type_qobject_based_cache[typeid] = self.is_qobject_based(nativeType)
+ elif code == lldb.eTypeClassUnion:
+ type_code = TypeCode.Struct
+ self.type_qobject_based_cache[typeid] = False
elif code == lldb.eTypeClassFunction:
- tdata.code = TypeCode.Function
+ type_code = TypeCode.Function
elif code == lldb.eTypeClassMemberPointer:
- tdata.code = TypeCode.MemberPointer
- # warn('CREATE TYPE: %s' % typeId)
+ type_code = TypeCode.MemberPointer
+
+ if code is not None:
+ self.type_code_cache[typeid] = type_code
+
+ self.type_nativetype_cache[typeid] = nativeType
+ self.typeid_from_typekey[typeid_str] = typeid
+
+ # self.warn('REUSE TYPE: %s' % typeid)
+ return typeid
+
+ def nativeTemplateParameter(self, typeid, index, nativeType):
+ #n = nativeType.GetNumberOfTemplateArguments()
+ #if n != len(stringArgs):
+ # # Something wrong in the debug info.
+ # # Should work in theory, doesn't work in practice.
+ # # Items like std::allocator<std::pair<unsigned int const, float> report 0
+ # # for nativeType.GetNumberOfTemplateArguments() with LLDB 3.8
+ # return stringArgs
+
+ kind = nativeType.GetTemplateArgumentKind(index)
+ # eTemplateArgumentKindNull = 0,
+ # eTemplateArgumentKindType,
+ # eTemplateArgumentKindDeclaration,
+ # eTemplateArgumentKindIntegral,
+ # eTemplateArgumentKindTemplate,
+ # eTemplateArgumentKindTemplateExpansion,
+ # eTemplateArgumentKindExpression,
+ # eTemplateArgumentKindPack
+ if kind == lldb.eTemplateArgumentKindType:
+ innerType = nativeType.GetTemplateArgumentType(index) \
+ .GetUnqualifiedType().GetCanonicalType()
+ return self.Type(self, self.from_native_type(innerType))
+ #elif kind == lldb.eTemplateArgumentKindIntegral:
+ # innerType = nativeType.GetTemplateArgumentType(i).GetUnqualifiedType().GetCanonicalType()
+ # #DumperBase.warn('INNER TYP: %s' % innerType)
+ # basicType = innerType.GetBasicType()
+ # #DumperBase.warn('IBASIC TYP: %s' % basicType)
+ # inner = self.extractTemplateArgument(nativeType.GetName(), i)
+ # exp = '(%s)%s' % (innerType.GetName(), inner)
+ # #DumperBase.warn('EXP : %s' % exp)
+ # val = self.nativeParseAndEvaluate('(%s)%s' % (innerType.GetName(), inner))
+ # # Clang writes 'int' and '0xfffffff' into the debug info
+ # # LLDB manages to read a value of 0xfffffff...
+ # #if basicType == lldb.eBasicTypeInt:
+ # value = val.GetValueAsUnsigned()
+ # if value >= 0x8000000:
+ # value -= 0x100000000
+ # #DumperBase.warn('KIND: %s' % kind)
+ # targs.append(value)
#else:
- # warn('REUSE TYPE: %s' % typeId)
- return self.Type(self, typeId)
-
- def listTemplateParametersHelper(self, nativeType):
- stringArgs = self.listTemplateParameters(nativeType.GetName())
- n = nativeType.GetNumberOfTemplateArguments()
- if n != len(stringArgs):
- # Something wrong in the debug info.
- # Should work in theory, doesn't work in practice.
- # Items like std::allocator<std::pair<unsigned int const, float> report 0
- # for nativeType.GetNumberOfTemplateArguments() with LLDB 3.8
- return stringArgs
-
- targs = []
- for i in range(nativeType.GetNumberOfTemplateArguments()):
- kind = nativeType.GetTemplateArgumentKind(i)
- # eTemplateArgumentKindNull = 0,
- # eTemplateArgumentKindType,
- # eTemplateArgumentKindDeclaration,
- # eTemplateArgumentKindIntegral,
- # eTemplateArgumentKindTemplate,
- # eTemplateArgumentKindTemplateExpansion,
- # eTemplateArgumentKindExpression,
- # eTemplateArgumentKindPack
- if kind == lldb.eTemplateArgumentKindType:
- innerType = nativeType.GetTemplateArgumentType(
- i).GetUnqualifiedType().GetCanonicalType()
- targs.append(self.fromNativeType(innerType))
- #elif kind == lldb.eTemplateArgumentKindIntegral:
- # innerType = nativeType.GetTemplateArgumentType(i).GetUnqualifiedType().GetCanonicalType()
- # #DumperBase.warn('INNER TYP: %s' % innerType)
- # basicType = innerType.GetBasicType()
- # #DumperBase.warn('IBASIC TYP: %s' % basicType)
- # inner = self.extractTemplateArgument(nativeType.GetName(), i)
- # exp = '(%s)%s' % (innerType.GetName(), inner)
- # #DumperBase.warn('EXP : %s' % exp)
- # val = self.nativeParseAndEvaluate('(%s)%s' % (innerType.GetName(), inner))
- # # Clang writes 'int' and '0xfffffff' into the debug info
- # # LLDB manages to read a value of 0xfffffff...
- # #if basicType == lldb.eBasicTypeInt:
- # value = val.GetValueAsUnsigned()
- # if value >= 0x8000000:
- # value -= 0x100000000
- # #DumperBase.warn('KIND: %s' % kind)
- # targs.append(value)
- else:
- #DumperBase.warn('UNHANDLED TEMPLATE TYPE : %s' % kind)
- targs.append(stringArgs[i]) # Best we can do.
+ # #DumperBase.warn('UNHANDLED TEMPLATE TYPE : %s' % kind)
+ # targs.append(stringArgs[i]) # Best we can do.
#DumperBase.warn('TARGS: %s %s' % (nativeType.GetName(), [str(x) for x in targs]))
- return targs
-
- def typeName(self, nativeType):
- # Don't use GetDisplayTypeName since LLDB removed the inline namespace __1
- # https://reviews.llvm.org/D74478
- return nativeType.GetName()
+ #return targs
+ return None
- def nativeTypeId(self, nativeType):
- if nativeType and (nativeType.GetTypeClass() == lldb.eTypeClassTypedef):
+ def native_type_key(self, nativeType):
+ code = nativeType.GetTypeClass()
+ if nativeType and code == lldb.eTypeClassTypedef:
nativeTargetType = nativeType.GetUnqualifiedType()
if hasattr(nativeTargetType, 'GetCanonicalType'):
nativeTargetType = nativeTargetType.GetCanonicalType()
return '%s{%s}' % (nativeType.name, nativeTargetType.name)
- name = self.typeName(nativeType)
+ # Don't use GetDisplayTypeName since LLDB removed the inline namespace __1
+ # https://reviews.llvm.org/D74478
+ name = nativeType.GetName()
if name is None or len(name) == 0:
c = '0'
- elif name == '(anonymous struct)' and nativeType.GetTypeClass() == lldb.eTypeClassStruct:
- c = 's'
- elif name == '(anonymous struct)' and nativeType.GetTypeClass() == lldb.eTypeClassUnion:
- c = 'u'
+ elif name == '(anonymous struct)':
+ c = 's' if code == lldb.eTypeClassStruct else 'u'
else:
return name
fields = nativeType.get_fields_array()
- typeId = c + ''.join(['{%s:%s}' % (f.name, self.nativeTypeId(f.GetType())) for f in fields])
- #DumperBase.warn('NATIVE TYPE ID FOR %s IS %s' % (name, typeId))
- return typeId
+ id_str = c + ''.join(['{%s:%s}' %
+ (f.name, self.typeid_for_string(self.native_type_key(f.GetType())))
+ for f in fields])
+ return id_str
def nativeTypeEnumDisplay(self, nativeType, intval, form):
if hasattr(nativeType, 'get_enum_members_array'):
@@ -575,12 +572,82 @@ class Dumper(DumperBase):
return '(' + ' | '.join(flags) + ') (' + (form % intval) + ')'
return form % intval
- def nativeDynamicTypeName(self, address, baseType):
- return None # FIXME: Seems sufficient, no idea why.
- addr = self.target.ResolveLoadAddress(address)
- ctx = self.target.ResolveSymbolContextForAddress(addr, 0)
- sym = ctx.GetSymbol()
- return sym.GetName()
+ def nativeDynamicType(self, address, base_typeid):
+ return self.nativeDynamicType_2(address, base_typeid)
+
+ def nativeDynamicType_1(self, address, base_typeid):
+ # Solutions 1: Breaks StdUniquePtr and QVariant1 test
+ return base_typeid
+
+ def nativeDynamicType_2(self, address, base_typeid):
+ # Solution 2: ~10% slower in total than Solution 1
+ typename = self.type_name(base_typeid)
+ #self.warn("LOOKING FOR DYN TYPE: 0x%x %s" % (address, typename))
+ #self.warn(" PRETTY: 0x%x %s" % (address, self.prettySymbolByAddress(address)))
+
+ expr = '(void*)%s' % address
+ value = self.target.EvaluateExpression(expr)
+
+ #self.warn("VALUE: %s" % value)
+ if value.GetType().GetName() == "void *":
+ #self.warn("NO DYN TYPE: %s" % value)
+ return base_typeid
+
+ dvalue = value.Dereference()
+ #self.warn("DVALUE: %s" % value)
+ sbtype = dvalue.GetType()
+ #self.warn("TYPE: %s" % sbtype)
+
+ #self.warn("OUTPUT: %s" % output)
+ #self.warn("DYNTYPE: %s" % dyn_typename)
+ return self.from_native_type(sbtype)
+
+ def nativeDynamicType_3(self, address, base_typeid):
+ # Solution 3: Doesn't improve over 1
+ typename = self.type_name(base_typeid)
+ self.warn("LOOKING FOR DYN TYPE: 0x%x %s" % (address, typename))
+ #self.warn(" PRETTY: 0x%x %s" % (address, self.prettySymbolByAddress(address)))
+ nativeType = self.type_nativetype_cache.get(base_typeid, None)
+ #self.warn(" NATIVE BASE %s" % nativeType)
+ if nativeType is None:
+ return base_typeid
+ #versionValue = self.target.EvaluateExpression('qtHookData[2]').GetNonSyntheticValue()
+ addr = lldb.SBAddress(address, self.target)
+ value = self.target.CreateValueFromAddress('x', addr, nativeType)
+ self.warn(" VALUE %s" % value)
+ return base_typeid
+
+ def nativeDynamicType_4(self, address, base_typeid):
+ #self.warn("RESULT: %s" % result)
+ #self.warn("ADDRESS: 0x%x" % address)
+
+ #thread = self.currentThread()
+ #frame = thread.GetFrameAtIndex(0)
+ #expr = '(void*)%s' % address
+ #value = self.target.EvaluateExpression(expr)
+ #sbtype = self.lookupNativeType(typename)
+ #addr = self.target.ResolveLoadAddress(address)
+ #addr = lldb.SBAddress(address, self.target)
+ #value = self.target.CreateValueFromAddress('x', addr, sbtype)
+ #x = lldb::DynamicValueType()
+ #lldb.eNoDynamicValues
+ #lldb.eDynamicCanRunTarget
+ #lldb.eDynamicDontRunTarget
+ #dyn_value = value.GetDynamicValue(lldb.eDynamicDontRunTarget)
+ #typ = dyn_value.GetType()
+ self.warn("GOT DYN VALUE: %s" % dyn_value)
+ #self.warn("GOT TYPE: %s FOR OBJECT AT 0x%x" % (typ, address))
+ return self.from_native_type(typ)
+
+ #result = lldb.SBCommandReturnObject()
+ #cmd = 'p (void*)%s' % address
+ #self.debugger.GetCommandInterpreter().HandleCommand(cmd, result)
+ #if not result.Succeeded():
+ # return self.Type(self, typeid)
+ #output = result.GetOutput().strip()
+ #dyn_typename = output[1:output.find('$') - 4]
+ #sbtype = self.lookupNativeType(dyn_typename)
+
def stateName(self, s):
try:
@@ -638,11 +705,11 @@ class Dumper(DumperBase):
#DumperBase.warn(' -> %s' % result)
return self.fromNativeValue(result)
- def pokeValue(self, typeName, *args):
+ def pokeValue(self, type_name, *args):
thread = self.currentThread()
frame = thread.GetFrameAtIndex(0)
inner = ','.join(args)
- value = frame.EvaluateExpression(typeName + '{' + inner + '}')
+ value = frame.EvaluateExpression(type_name + '{' + inner + '}')
#DumperBase.warn(' TYPE: %s' % value.type)
#DumperBase.warn(' ADDR: 0x%x' % value.address)
#DumperBase.warn(' VALUE: %s' % value)
@@ -704,7 +771,9 @@ class Dumper(DumperBase):
symbol = funcs[0].GetSymbol()
self.qtPropertyFunc = symbol.GetStartAddress().GetLoadAddress(self.target)
- def fetchQtVersionAndNamespace(self):
+ self.fetchInternalFunctions = lambda: None
+
+ def extractQtVersion(self):
for func in self.target.FindFunctions('qVersion'):
name = func.GetSymbol().GetName()
if name == None:
@@ -714,8 +783,8 @@ class Dumper(DumperBase):
if name.count(':') > 2:
continue
- qtNamespace = name[:name.find('qVersion')]
- self.qtNamespace = lambda: qtNamespace
+ #qtNamespace = name[:name.find('qVersion')]
+ #self.qtNamespace = lambda: qtNamespace
options = lldb.SBExpressionOptions()
res = self.target.EvaluateExpression(name + '()', options)
@@ -740,44 +809,17 @@ class Dumper(DumperBase):
(major, minor, patch) = version.split('.')
qtVersion = 0x10000 * int(major) + 0x100 * int(minor) + int(patch)
- self.qtVersion = lambda: qtVersion
-
- return (qtNamespace, qtVersion)
+ return qtVersion
try:
versionValue = self.target.EvaluateExpression('qtHookData[2]').GetNonSyntheticValue()
if versionValue.IsValid():
- return ('', versionValue.unsigned)
+ return versionValue.unsigned
except:
pass
- return ('', self.fallbackQtVersion)
-
- def qtVersionAndNamespace(self):
- qtVersionAndNamespace = None
- try:
- qtVersionAndNamespace = self.fetchQtVersionAndNamespace()
- self.report("Detected Qt Version: 0x%0x (namespace='%s')" %
- (qtVersionAndNamespace[1], qtVersionAndNamespace[0] or "no namespace"))
- except Exception as e:
- DumperBase.warn('[lldb] Error detecting Qt version: %s' % e)
-
- try:
- self.fetchInternalFunctions()
- self.report('Found function QObject::property: 0x%0x' % self.qtPropertyFunc)
- self.report('Found function QObject::customEvent: 0x%0x' % self.qtCustomEventFunc)
- except Exception as e:
- DumperBase.warn('[lldb] Error fetching internal Qt functions: %s' % e)
-
- # Cache version information by overriding this function.
- self.qtVersionAndNamespace = lambda: qtVersionAndNamespace
- return qtVersionAndNamespace
-
- def qtNamespace(self):
- return self.qtVersionAndNamespace()[0]
+ return None
- def qtVersion(self):
- return self.qtVersionAndNamespace()[1]
def handleCommand(self, command):
result = lldb.SBCommandReturnObject()
@@ -830,8 +872,6 @@ class Dumper(DumperBase):
#DumperBase.warn('RECURSE PTR')
typeobj = self.lookupNativeType(name[:-1].strip())
if typeobj is not None:
- #DumperBase.warn('RECURSE RESULT X: %s' % typeobj)
- self.fromNativeType(typeobj.GetPointerType())
#DumperBase.warn('RECURSE RESULT: %s' % typeobj.GetPointerType())
return typeobj.GetPointerType()
@@ -1289,17 +1329,18 @@ class Dumper(DumperBase):
def findSymbol(self, symbolName):
return self.target.FindFirstGlobalVariable(symbolName)
- def warn(self, msg):
- self.put('{name="%s",value="",type="",numchild="0"},' % toCString(msg))
-
def fetchVariables(self, args):
- (ok, res) = self.tryFetchInterpreterVariables(args)
- if ok:
- self.reportResult(res, args)
- return
+ start_time = time.perf_counter()
+ #(ok, res) = self.tryFetchInterpreterVariables(args)
+ #if ok:
+ # self.reportResult(res, args)
+ # return
self.setVariableFetchingOptions(args)
+ self.qtLoaded = True # FIXME: Do that elsewhere
+
+
# Reset certain caches whenever a step over / into / continue
# happens.
# FIXME: Caches are currently also cleared if currently
@@ -1312,6 +1353,8 @@ class Dumper(DumperBase):
self.reportResult('error="No frame"', args)
return
+ self.isArmMac = frame.module.triple.startswith('arm64-apple')
+
self.output = []
isPartial = len(self.partialVariable) > 0
@@ -1358,13 +1401,15 @@ class Dumper(DumperBase):
# This can happen for unnamed function parameters with
# default values: void foo(int = 0)
continue
- value = self.fromNativeFrameValue(val)
+ value = self.fromNativeValue(val)
variables.append(value)
self.handleLocals(variables)
self.handleWatches(args)
- self.put('],partial="%d"' % isPartial)
+ run_time = time.perf_counter() - start_time
+
+ self.put('],partial="%d",runtime="%s"' % (isPartial, run_time))
self.reportResult(self.takeOutput(), args)
@@ -1456,6 +1501,21 @@ class Dumper(DumperBase):
if bp is not None:
self.reportBreakpointUpdate(bp)
+ def wantAutoContinue(self, frame):
+ if self.platform_ != 'remote-android':
+ return False
+ funcname = frame.GetFunctionName()
+ if funcname and funcname.startswith('java.'):
+ return True
+ module = frame.GetModule()
+ filespec = module.GetPlatformFileSpec() # Not GetFileSpec
+ filename = filespec.GetFilename()
+ if filename == 'libart.so':
+ return True
+ if funcname == None and not frame.line_entry.file.IsValid() and filename == None:
+ return True
+ return False
+
def handleEvent(self, event):
if lldb.SBBreakpoint.EventIsBreakpointEvent(event):
self.handleBreakpointEvent(event)
@@ -1490,8 +1550,12 @@ class Dumper(DumperBase):
if state == lldb.eStateStopped:
stoppedThread = self.firstStoppedThread()
if stoppedThread:
- #self.report("STOPPED THREAD: %s" % stoppedThread)
frame = stoppedThread.GetFrameAtIndex(0)
+ if self.wantAutoContinue(frame):
+ #self.warn("AUTO CONTINUE")
+ error = self.process.Continue()
+ return
+
#self.report("FRAME: %s" % frame)
function = frame.GetFunction()
functionName = function.GetName()
@@ -1966,14 +2030,14 @@ class Dumper(DumperBase):
value = self.hexdecode(args['value'])
simpleType = int(args['simpleType'])
lhs = self.findValueByExpression(expr)
- typeName = lhs.GetType().GetName()
- typeName = typeName.replace('::', '__')
- pos = typeName.find('<')
+ type_name = lhs.GetType().GetName()
+ type_name = type_name.replace('::', '__')
+ pos = type_name.find('<')
if pos != -1:
- typeName = typeName[0:pos]
- if typeName in self.qqEditable and not simpleType:
+ type_name = type_name[0:pos]
+ if type_name in self.qqEditable and not simpleType:
expr = self.parseAndEvaluate(expr)
- self.qqEditable[typeName](self, expr, value)
+ self.qqEditable[type_name](self, expr, value)
else:
self.parseAndEvaluate(expr + '=' + value)
self.reportResult(self.describeError(error), args)
@@ -2077,10 +2141,10 @@ class Tester(Dumper):
if 'QT_CREATOR_LLDB_PROCESS' in os.environ:
# Initialize Qt Creator dumper
- try:
+ #try:
theDumper = Dumper()
- except Exception as error:
- print('@\nstate="enginesetupfailed",error="{}"@\n'.format(error))
+ #except Exception as error:
+ # print('@\nstate="enginesetupfailed",error="{}"@\n'.format(error))
# ------------------------------ For use in LLDB ------------------------------
@@ -2286,9 +2350,6 @@ class SummaryProvider(LogMixin):
if encoding in text_encodings:
try:
decodedValue = Dumper.hexdecode(summaryValue, encoding)
- # LLDB expects UTF-8 for python 2
- if sys.version_info[0] < 3:
- return "\"%s\"" % (decodedValue.encode('utf8'))
return '"' + decodedValue + '"'
except:
return "<failed to decode '%s' as '%s': %s>" % (summaryValue, encoding, sys.exc_info()[1])
diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py
index 06e7d47325..1b38223c2e 100644
--- a/share/qtcreator/debugger/qttypes.py
+++ b/share/qtcreator/debugger/qttypes.py
@@ -33,7 +33,8 @@ def qedit__QByteArray(d, value, data):
def qdump__QByteArray(d, value):
- if d.qtVersion() >= 0x60000:
+ d.qtVersionPing(value.typeid)
+ if d.qtVersionAtLeast(0x060000):
dd, data, length = value.split('ppi')
if dd:
_, _, alloc = d.split('iii', dd)
@@ -76,7 +77,8 @@ def qdump__QByteArray(d, value):
def qdump__QBitArray(d, value):
- if d.qtVersion() >= 0x60000:
+ d.qtVersionPing(value.typeid)
+ if d.qtVersionAtLeast(0x060000):
_, data, basize = value.split('ppi')
else:
data, basize, _ = d.qArrayData(value['d'])
@@ -221,24 +223,24 @@ def qdump__Qt__ItemDataRole(d, value):
def qdump__QStandardItemData(d, value):
- d.createType('@Qt::ItemDataRole') # warm up cache
+ #d.createType('@Qt::ItemDataRole') # warm up cache
role, pad, val = value.split('{@Qt::ItemDataRole}@{@QVariant}')
d.putPairContents(role.value(), (role, val), 'role', 'value')
def qdump__QStandardItem(d, value):
- d.createType('@QStandardItemData') # warm up cache
- d.createType('@QStandardItem')
- d.createType('@QStandardItem*')
+ #d.createType('@QStandardItemData') # warm up cache
+ #d.createType('@QStandardItem')
+ #d.createType('@QStandardItem*')
vtable, dptr = value.split('pp')
- if d.qtVersion() >= 0x060000:
+ if d.qtVersionAtLeast(0x060000):
model, parent, values, children, rows, cols, item = \
d.split('pp{@QList<@QStandardItemData>}{@QList<@QStandardItem *>}IIp', dptr)
else:
# There used to be a virtual destructor that got removed in
# 88b6abcebf29b455438 on Apr 18 17:01:22 2017
- if d.qtVersion() < 0x050900 and not d.isMsvcTarget():
+ if not d.qtVersionAtLeast(0x050900) and not d.isMsvcTarget():
dptr += d.ptrSize();
model, parent, values, children, rows, cols, item = \
d.split('pp{@QVector<@QStandardItemData>}{@QVector<@QStandardItem *>}IIp', dptr)
@@ -266,7 +268,7 @@ def qdump__QDate(d, value):
d.enumExpression('DateFormat', 'TextDate'))
d.putCallItem('(ISO)', '@QString', value, 'toString',
d.enumExpression('DateFormat', 'ISODate'))
- if d.qtVersion() < 0x060000:
+ if not d.qtVersionAtLeast(0x060000):
d.putCallItem('(SystemLocale)', '@QString', value, 'toString',
d.enumExpression('DateFormat', 'SystemLocaleDate'))
d.putCallItem('(Locale)', '@QString', value, 'toString',
@@ -286,7 +288,7 @@ def qdump__QTime(d, value):
d.enumExpression('DateFormat', 'TextDate'))
d.putCallItem('(ISO)', '@QString', value, 'toString',
d.enumExpression('DateFormat', 'ISODate'))
- if d.canCallLocale() and d.qtVersion() < 0x060000:
+ if d.canCallLocale() and not d.qtVersionAtLeast(0x060000):
d.putCallItem('(SystemLocale)', '@QString', value, 'toString',
d.enumExpression('DateFormat', 'SystemLocaleDate'))
d.putCallItem('(Locale)', '@QString', value, 'toString',
@@ -305,13 +307,12 @@ def qdump__QTimeZone(d, value):
def qdump__QDateTime(d, value):
- qtVersion = d.qtVersion()
isValid = False
# This relies on the Qt4/Qt5 internal structure layout:
# {sharedref(4), ...
base = d.extractPointer(value)
is32bit = d.ptrSize() == 4
- if qtVersion >= 0x050200:
+ if d.qtVersionAtLeast(0x050200):
tiVersion = d.qtTypeInfoVersion()
#DumperBase.warn('TI VERSION: %s' % tiVersion)
if tiVersion is None:
@@ -384,9 +385,9 @@ def qdump__QDateTime(d, value):
# - [QTime time;]
# - - uint mds;
# - Spec spec;
- dateSize = 8 if qtVersion >= 0x050000 else 4 # Qt5: qint64, Qt4 uint
+ dateSize = 8 if qtVersionAtLeast(0x050000) else 4 # Qt5: qint64, Qt4 uint
# 4 byte padding after 4 byte QAtomicInt if we are on 64 bit and QDate is 64 bit
- refPlusPadding = 8 if qtVersion >= 0x050000 and d.ptrSize() == 8 else 4
+ refPlusPadding = 8 if qtVersionAtLeast(0x050000) and d.ptrSize() == 8 else 4
dateBase = base + refPlusPadding
timeBase = dateBase + dateSize
mds = d.extractInt(timeBase)
@@ -410,7 +411,7 @@ def qdump__QDateTime(d, value):
d.enumExpression('DateFormat', 'ISODate'))
d.putCallItem('toUTC', '@QDateTime', value, 'toTimeSpec',
d.enumExpression('TimeSpec', 'UTC'))
- if d.qtVersion() < 0x060000:
+ if not d.qtVersionAtLeast(0x060000):
d.putCallItem('(SystemLocale)', '@QString', value, 'toString',
d.enumExpression('DateFormat', 'SystemLocaleDate'))
d.putCallItem('(Locale)', '@QString', value, 'toString',
@@ -549,14 +550,11 @@ def qdump__QDir(d, value):
#d.putCallItem('absolutePath', '@QString', value, 'absolutePath')
#d.putCallItem('canonicalPath', '@QString', value, 'canonicalPath')
with SubItem(d, 'absolutePath'):
- typ = d.lookupType(ns + 'QString')
- d.putItem(d.createValue(privAddress + absoluteDirEntryOffset, typ))
+ d.putItem(d.createValue(privAddress + absoluteDirEntryOffset, '@QString'))
with SubItem(d, 'entryInfoList'):
- typ = d.lookupType(ns + 'QFileInfo')
- qdumpHelper_QList(d, privAddress + fileInfosOffset, typ)
+ qdumpHelper_QList(d, privAddress + fileInfosOffset, '@QFileInfo')
with SubItem(d, 'entryList'):
- typ = d.lookupType(ns + 'QStringList')
- d.putItem(d.createValue(privAddress + filesOffset, typ))
+ d.putItem(d.createValue(privAddress + filesOffset, '@QStringList'))
d.putFields(value)
@@ -759,7 +757,6 @@ def qdump__QFile(d, value):
def qdump__QFileInfo(d, value):
privAddress = d.extractPointer(value)
#bit32 = d.ptrSize() == 4
- #qt5 = d.qtVersion() >= 0x050000
#try:
# d.putStringValue(value['d_ptr']['d'].dereference()['fileNames'][3])
#except:
@@ -879,7 +876,7 @@ def qdump__QVariantHash(d, value):
def qdumpHelper_QHash(d, value, keyType, valueType):
- if d.qtVersion() >= 0x60000:
+ if d.qtVersionAtLeast(0x060000):
qdumpHelper_QHash_6(d, value, keyType, valueType)
else:
qdumpHelper_QHash_5(d, value, keyType, valueType)
@@ -921,7 +918,7 @@ def qdumpHelper_QHash_5(d, value, keyType, valueType):
d.putItemCount(size)
if d.isExpanded():
- isShort = d.qtVersion() < 0x050000 and keyType.name == 'int'
+ isShort = not d.qtVersionAtLeast(0x050000) and keyType.name == 'int'
with Children(d, size):
node = hashDataFirstNode()
for i in d.childRange():
@@ -997,7 +994,7 @@ def qHashIteratorHelper(d, value):
if d.isExpanded():
with Children(d):
node = d.extractPointer(value)
- isShort = d.qtVersion() < 0x050000 and keyType.name == 'int'
+ isShort = not d.qtVersionAtLeast(0x050000) and keyType.name == 'int'
if isShort:
typeCode = 'P{%s}@{%s}' % (keyType.name, valueType.name)
(pnext, key, padding2, val) = d.split(typeCode, node)
@@ -1018,9 +1015,8 @@ def qdump__QHash__iterator(d, value):
def qdump__QHostAddress(d, value):
dd = d.extractPointer(value)
- qtVersion = d.qtVersion()
tiVersion = d.qtTypeInfoVersion()
- #DumperBase.warn('QT: %x, TI: %s' % (qtVersion, tiVersion))
+ #DumperBase.warn('QT: %x, TI: %s' % (d.qtVersion(), tiVersion))
mayNeedParse = True
if tiVersion is not None:
if tiVersion >= 16:
@@ -1035,14 +1031,14 @@ def qdump__QHostAddress(d, value):
else:
(ipString, scopeId, a4, pad, a6, protocol, isParsed) \
= d.split('{@QString}{@QString}{@quint32}I16sI{bool}', dd)
- elif qtVersion >= 0x050600: # 5.6.0 at f3aabb42
+ elif qtVersionAtLeast(0x050600): # 5.6.0 at f3aabb42
if d.ptrSize() == 8 or d.isWindowsTarget():
(ipString, scopeId, a4, pad, a6, protocol, isParsed) \
= d.split('{@QString}{@QString}{@quint32}I16sI{bool}', dd)
else:
(ipString, scopeId, a4, a6, protocol, isParsed) \
= d.split('{@QString}{@QString}{@quint32}16sI{bool}', dd)
- elif qtVersion >= 0x050000: # 5.2.0 at 62feb088
+ elif qtVersionAtLeast(0x050000): # 5.2.0 at 62feb088
(ipString, scopeId, a4, a6, protocol, isParsed) \
= d.split('{@QString}{@QString}{@quint32}16sI{bool}', dd)
else: # 4.8.7 at b05d05f
@@ -1095,18 +1091,20 @@ def qform__QList():
def qdump__QList(d, value):
- return qdumpHelper_QList(d, value, d.createType(value.type[0]))
+ return qdumpHelper_QList(d, value, value.type[0])
def qdump__QVariantList(d, value):
- qdumpHelper_QList(d, value, d.createType('@QVariant'))
+ qdumpHelper_QList(d, value, '@QVariant')
-def qdumpHelper_QList(d, value, innerType):
+def qdumpHelper_QList(d, value, inner_typish):
+ innerType = d.createType(inner_typish)
data, size = d.listData(value, check=True)
d.putItemCount(size)
- if d.qtVersion() >= 0x60000:
+ d.qtVersionPing(value.typeid)
+ if d.qtVersionAtLeast(0x060000):
d.putPlotData(data, size, innerType)
return
@@ -1147,9 +1145,9 @@ def qform__QImage():
def qdump__QImage(d, value):
- if d.qtVersion() >= 0x060000:
+ if d.qtVersionAtLeast(0x060000):
vtbl, painters, image_data = value.split('ppp')
- elif d.qtVersion() >= 0x050000:
+ elif d.qtVersionAtLeast(0x050000):
vtbl, painters, reserved, image_data = value.split('pppp')
else:
vtbl, painters, image_data = value.split('ppp')
@@ -1163,12 +1161,12 @@ def qdump__QImage(d, value):
d.putExpandable()
if d.isExpanded():
- if d.qtVersion() < 0x060000:
- (ref, width, height, depth, nbytes, pad, devicePixelRatio, colorTable,
- bits, iformat) = d.split('iiiii@dppi', image_data)
- else:
+ if d.qtVersionAtLeast(0x060000):
(ref, width, height, depth, nbytes, pad, devicePixelRatio, _, _, _,
bits, iformat) = d.split('iiiii@dppppi', image_data)
+ else:
+ (ref, width, height, depth, nbytes, pad, devicePixelRatio, colorTable,
+ bits, iformat) = d.split('iiiii@dppi', image_data)
with Children(d):
d.putIntItem('width', width)
d.putIntItem('height', height)
@@ -1224,7 +1222,7 @@ def qdump__QLocale(d, value):
# index = int(value['d']['d']['m_data']...)
#d.check(index >= 0)
#d.check(index <= qqLocalesCount)
- if d.qtVersion() < 0x50000:
+ if not d.qtVersionAtLeast(0x50000):
d.putStringValue(d.call('const char *', value, 'name'))
d.putPlainChildren(value)
return
@@ -1238,14 +1236,20 @@ def qdump__QLocale(d, value):
= d.split('2s{short}2s'
+ '{@QChar}{@QChar}{short}{@QChar}{@QChar}'
+ '{@QChar}{@QChar}{@QChar}', data)
+
+ prefix = ns + 'QLocale::'
try:
- d.putStringValue(d.call('const char *', value, 'name'))
+ if qtVersionAtLeast(0x060700):
+ res = d.call('const char *', value, 'name', prefix + 'TagSeparator::Underscore')
+ else:
+ res = d.call('const char *', value, 'name')
+ d.putStringValue(res)
except:
pass
+
d.putExpandable()
if d.isExpanded():
with Children(d):
- prefix = ns + 'QLocale::'
d.putSubItem('country', d.createValue(countryId, prefix + 'Country'))
d.putSubItem('language', d.createValue(languageId, prefix + 'Language'))
d.putSubItem('numberOptions', d.createValue(numberOptions, prefix + 'NumberOptions'))
@@ -1342,9 +1346,9 @@ def qdump__QMap(d, value):
def qdumpHelper_QMap(d, value, keyType, valueType):
- if d.qtVersion() >= 0x60000:
+ if d.qtVersionAtLeast(0x060000):
qdumpHelper_Qt6_QMap(d, value, keyType, valueType)
- elif d.qtVersion() >= 0x50000:
+ elif d.qtVersionAtLeast(0x50000):
qdumpHelper_Qt5_QMap(d, value, keyType, valueType)
else:
qdumpHelper_Qt4_QMap(d, value, keyType, valueType)
@@ -1364,7 +1368,7 @@ def qdumpHelper_Qt6_QMultiMap(d, value, keyType, valueType):
d.putBetterType('@QMultiMap<%s, %s>' % (keyType.name, valueType.name))
def qdump__QMultiMap(d, value):
- if d.qtVersion() >= 0x60000:
+ if d.qtVersionAtLeast(0x060000):
qdumpHelper_Qt6_QMultiMap(d, value, value.type[0], value.type[1])
else:
qdump__QMap(d, value)
@@ -1425,7 +1429,9 @@ if False:
d.putSpecialValue('minimumitemcount', 0)
-def qdump__QPair(d, value):
+# FIXME: Qt 5
+# remvign the _xxxx makes GDB work with Qt 5 but breaks LLDB
+def qdump__QPair_xxxx(d, value):
typeCode = '{%s}@{%s}' % (value.type[0].name, value.type[1].name)
first, pad, second = value.split(typeCode)
with Children(d):
@@ -1442,9 +1448,9 @@ def qdump__QProcEnvKey(d, value):
def qdump__QPixmap(d, value):
- if d.qtVersion() >= 0x060000:
+ if d.qtVersionAtLeast(0x060000):
vtbl, painters, data = value.split('ppp')
- elif d.qtVersion() >= 0x050000:
+ elif d.qtVersionAtLeast(0x050000):
vtbl, painters, reserved, data = s = d.split('pppp', value)
else:
vtbl, painters, data = value.split('ppp')
@@ -1511,15 +1517,15 @@ def qdump__QRegion(d, value):
if d_ptr == 0:
d.putSpecialValue('empty')
else:
- if d.qtVersion() >= 0x060000:
+ if d.qtVersionAtLeast(0x060000):
ref, _, rgn = d.split('i@p', d_ptr)
numRects, innerArea, rects, extents, innerRect = \
d.split('ii{@QList<@QRect>}{@QRect}{@QRect}', rgn)
- elif d.qtVersion() >= 0x050400: # Padding removed in ee324e4ed
+ elif d.qtVersionAtLeast(0x050400): # Padding removed in ee324e4ed
ref, _, rgn = d.split('i@p', d_ptr)
numRects, innerArea, rects, extents, innerRect = \
d.split('ii{@QVector<@QRect>}{@QRect}{@QRect}', rgn)
- elif d.qtVersion() >= 0x050000:
+ elif d.qtVersionAtLeast(0x050000):
ref, _, rgn = d.split('i@p', d_ptr)
numRects, _, rects, extents, innerRect, innerArea = \
d.split('i@{@QVector<@QRect>}{@QRect}{@QRect}i', rgn)
@@ -1557,7 +1563,7 @@ def qdump__QScopedPointer(d, value):
def qdump__QSet(d, value):
- if d.qtVersion() >= 0x060000:
+ if d.qtVersionAtLeast(0x060000):
qdumpHelper_QSet6(d, value)
else:
qdumpHelper_QSet45(d, value)
@@ -1630,7 +1636,7 @@ def qdumpHelper_QSet45(d, value):
d.putItemCount(length)
if d.isExpanded():
keyType = value.type[0]
- isShort = d.qtVersion() < 0x050000 and keyType.name == 'int'
+ isShort = not d.qtVersionAtLeast(0x050000) and keyType.name == 'int'
with Children(d, length, childType=keyType):
node = hashDataFirstNode()
for i in d.childRange():
@@ -1707,7 +1713,7 @@ def qform__QStack():
def qdump__QStack(d, value):
- if d.qtVersion() >= 0x60000:
+ if d.qtVersionAtLeast(0x060000):
qdump__QList(d, value)
else:
qdump__QVector(d, value)
@@ -1727,7 +1733,7 @@ def qdump__QPolygon(d, value):
def qdump__QGraphicsPolygonItem(d, value):
(vtbl, dptr) = value.split('pp')
- if d.qtVersion() >= 0x060000:
+ if d.qtVersionAtLeast(0x060000):
if d.ptrSize() == 8:
offset = 424 # sizeof(QGraphicsPolygonItemPrivate), the base
else:
@@ -1757,6 +1763,7 @@ def qform__QString():
def qdump__QString(d, value):
+ d.qtVersionPing(value.typeid)
d.putStringValue(value)
data, length, _ = d.stringData(value)
displayFormat = d.currentItemFormat()
@@ -1857,7 +1864,7 @@ def qdump__QStringRef(d, value):
def qdump__QStringList(d, value):
- qdumpHelper_QList(d, value, d.createType('@QString'))
+ qdumpHelper_QList(d, value, '@QString')
d.putBetterType(value.type)
@@ -1917,7 +1924,7 @@ def qdump__QUrl(d, value):
d.putValue('<invalid>')
return
- if d.qtVersion() < 0x050000:
+ if not d.qtVersionAtLeast(0x050000):
d.call('void', value, 'port') # Warm up internal cache.
d.call('void', value, 'path')
st = '{@QString}'
@@ -2147,7 +2154,8 @@ qdumpHelper_QVariants_F = [
def qdump__QVariant(d, value):
- if d.qtVersion() >= 0x060000:
+ d.qtVersionPing(value.typeid, 2 * d.ptrSize())
+ if d.qtVersionAtLeast(0x060000):
qdumpHelper__QVariant6(d, value)
else:
qdumpHelper__QVariant45(d, value)
@@ -2201,12 +2209,12 @@ def qdumpHelper__QVariant45(d, value):
return None
# Extended Core type (Qt 5)
- if variantType >= 31 and variantType <= 38 and d.qtVersion() >= 0x050000:
+ if variantType >= 31 and variantType <= 38 and d.qtVersionAtLeast(0x050000):
qdumpHelper_QVariants_D[variantType - 31](d, value)
return None
# Extended Core type (Qt 4)
- if variantType >= 128 and variantType <= 135 and d.qtVersion() < 0x050000:
+ if variantType >= 128 and variantType <= 135 and not d.qtVersionAtLeast(0x050000):
if variantType == 128:
d.putBetterType('@QVariant (void *)')
d.putValue('0x%x' % value.extractPointer())
@@ -2227,7 +2235,7 @@ def qdumpHelper__QVariant45(d, value):
innert = qdumpHelper_QVariants_B[variantType - 7]
elif variantType <= 74:
innert = qdumpHelper_QVariants_E[variantType - 64]
- elif d.qtVersion() < 0x050000:
+ elif not d.qtVersionAtLeast(0x050000):
innert = qdumpHelper_QVariants_F[variantType - 76]
else:
innert = qdumpHelper_QVariants_F[variantType - 75]
@@ -2301,29 +2309,30 @@ def qform__QVector():
def qdump__QVector(d, value):
- if d.qtVersion() >= 0x060000:
+ d.qtVersionPing(value.typeid)
+ if d.qtVersionAtLeast(0x060000):
data, length = d.listData(value)
d.putItemCount(length)
- d.putPlotData(data, length, d.createType(value.type.ltarget[0]))
+ d.putPlotData(data, length, value.type.target()[0])
# g++ 9.3 does not add the template parameter list to the debug info.
# Fake it for the common case:
if value.type.name == d.qtNamespace() + "QVector":
- d.putBetterType(value.type.name + '<' + value.type.ltarget[0].name + '>')
+ d.putBetterType(value.type.name + '<' + value.type.target()[0].name + '>')
else:
data, length = d.vectorData(value)
d.putItemCount(length)
- d.putPlotData(data, length, d.createType(value.type[0]))
+ d.putPlotData(data, length, value.type[0])
if False:
def qdump__QObjectConnectionList(d, value):
data, length = d.vectorData(value)
d.putItemCount(length)
- d.putPlotData(data, length, d.createType('@QObjectPrivate::ConnectionList'))
+ d.putPlotData(data, length, '@QObjectPrivate::ConnectionList')
def qdump__QVarLengthArray(d, value):
- if d.qtVersion() >= 0x060000:
+ if d.qtVersionAtLeast(0x060000):
cap, length, data = value.split('QQp')
else:
cap, length, data = value.split('iip')
@@ -2359,7 +2368,7 @@ def qdump_QWeakPointerHelper(d, value, isWeak, innerType=None):
d.putValue('<invalid>')
return
- if d.qtVersion() >= 0x050000:
+ if d.qtVersionAtLeast(0x050000):
(weakref, strongref) = d.split('ii', d_ptr)
else:
(vptr, weakref, strongref) = d.split('pii', d_ptr)
@@ -2865,7 +2874,7 @@ def qdump__QJSValue(d, value):
if d.ptrSize() == 4:
qdump_32__QJSValue(d, value)
else:
- if d.qtVersion() >= 0x60000:
+ if d.qtVersionAtLeast(0x060000):
qdump_64__QJSValue_6(d, value)
else:
qdump_64__QJSValue_5(d, value)
@@ -2899,7 +2908,7 @@ def qdump_64__QJSValue_6(d, value):
if dd == 0:
d.putValue('(undefined)')
d.putType(value.type.name + ' (undefined)')
- if d.qtVersion() < 0x60500:
+ if not d.qtVersionAtLeast(0x60500):
typ = dd >> 47
if typ == 5:
d.putValue('(null)')
@@ -2913,15 +2922,13 @@ def qdump_64__QJSValue_6(d, value):
elif typ > 7:
val = d.Value(d)
val.ldata = struct.pack('q', dd ^ 0xfffc000000000000)
- val._type = d.createType('double')
- d.putItem(val)
+ d.putItem(val.cast('double'))
d.putType(value.type.name + ' (double)')
elif typ <= 3: # Heap
if dd & 1: # String
val = d.Value(d)
val.ldata = struct.pack('q', dd & ~1)
- val._type = d.createType('@QString*')
- d.putItem(val)
+ d.putItem(val.cast('@QString*'))
d.putType(value.type.name + ' (QString)')
else:
# FIXME: Arrays, Objects missing.
@@ -2955,16 +2962,13 @@ def qdump_64__QJSValue_6(d, value):
val = d.Value(d)
val.ldata = struct.pack('q', pointer)
if typ == 1:
- val._type = d.createType('double*')
- d.putItem(val)
+ d.putItem(val.cast('double*'))
d.putType(value.type.name + ' (double)')
elif typ == 3:
- val._type = d.createType('@QV4::Value*')
- d.putItem(val)
+ d.putItem(val.cast('@QV4::Value*'))
d.putType(value.type.name + ' (QV4::Value)')
elif typ == 5:
- val._type = d.createType('@QString*')
- d.putItem(val)
+ d.putItem(val.cast('@QString*'))
d.putType(value.type.name + ' (QString)')
else:
@@ -3324,7 +3328,7 @@ def qdumpHelper_QJsonObject(d, data, obj):
def qdump__QJsonValue(d, value):
(data, dd, t) = value.split('QpI')
- if d.qtVersion() >= 0x050f00:
+ if d.qtVersionAtLeast(0x050f00):
value = d.createProxyValue((data, dd, t, False), 'QCborValue_proxy')
d.putItem(value)
return
@@ -3359,13 +3363,13 @@ def qdump__QJsonValue(d, value):
def qdump__QJsonArray(d, value):
- if d.qtVersion() >= 0x060000:
+ if d.qtVersionAtLeast(0x060000):
dptr = d.extractPointer(value)
if not dptr:
d.putItemCount(0)
else:
qdumpHelper_QCbor_array(d, dptr, False)
- elif d.qtVersion() >= 0x050f00:
+ elif d.qtVersionAtLeast(0x050f00):
_, container_ptr = value.split('pp')
qdumpHelper_QCbor_array(d, container_ptr, False)
else:
@@ -3373,13 +3377,13 @@ def qdump__QJsonArray(d, value):
def qdump__QJsonObject(d, value):
- if d.qtVersion() >= 0x060000:
+ if d.qtVersionAtLeast(0x060000):
dptr = d.extractPointer(value)
if not dptr:
d.putItemCount(0)
else:
qdumpHelper_QCbor_map(d, dptr, False)
- elif d.qtVersion() >= 0x050f00:
+ elif d.qtVersionAtLeast(0x050f00):
_, container_ptr = value.split('pp')
qdumpHelper_QCbor_map(d, container_ptr, False)
else:
@@ -3454,15 +3458,15 @@ def qdump__qfloat16(d, value):
def qdumpHelper_QCbor_string(d, container_ptr, element_index, is_bytes):
# d.split('i@{@QByteArray::size_type}pp', container_ptr) doesn't work with CDB,
# so be explicit:
- data_pos = container_ptr + (2 * d.ptrSize() if d.qtVersion() >= 0x060000 else 8)
- elements_pos = data_pos + (3 * d.ptrSize() if d.qtVersion() >= 0x060000 else d.ptrSize())
+ data_pos = container_ptr + (2 * d.ptrSize() if d.qtVersionAtLeast(0x060000) else 8)
+ elements_pos = data_pos + (3 * d.ptrSize() if d.qtVersionAtLeast(0x060000) else d.ptrSize())
elements_data_ptr, elements_size = d.vectorData(elements_pos)
element_at_n_addr = elements_data_ptr + element_index * 16 # sizeof(QtCbor::Element) == 16
element_value, _, element_flags = d.split('qII', element_at_n_addr)
enc = 'latin1' if is_bytes or (element_flags & 8) else 'utf16'
bytedata, _, _ = d.qArrayData(data_pos)
bytedata += element_value
- if d.qtVersion() >= 0x060000:
+ if d.qtVersionAtLeast(0x060000):
bytedata_len = d.extractInt64(bytedata)
bytedata_data = bytedata + 8
else:
@@ -3491,8 +3495,8 @@ def qdumpHelper_QCbor_array(d, container_ptr, is_cbor):
return
# d.split('i@{@QByteArray::size_type}pp', container_ptr) doesn't work with CDB,
# so be explicit:
- data_pos = container_ptr + (2 * d.ptrSize() if d.qtVersion() >= 0x060000 else 8)
- elements_pos = data_pos + (3 * d.ptrSize() if d.qtVersion() >= 0x060000 else d.ptrSize())
+ data_pos = container_ptr + (2 * d.ptrSize() if d.qtVersionAtLeast(0x060000) else 8)
+ elements_pos = data_pos + (3 * d.ptrSize() if d.qtVersionAtLeast(0x060000) else d.ptrSize())
elements_data_ptr, elements_size = d.vectorData(elements_pos)
d.putItemCount(elements_size)
if d.isExpanded():
@@ -3513,8 +3517,8 @@ def qdumpHelper_QCbor_map(d, container_ptr, is_cbor):
return
# d.split('i@{@QByteArray::size_type}pp', container_ptr) doesn't work with CDB,
# so be explicit:
- data_pos = container_ptr + (2 * d.ptrSize() if d.qtVersion() >= 0x060000 else 8)
- elements_pos = data_pos + (3 * d.ptrSize() if d.qtVersion() >= 0x060000 else d.ptrSize())
+ data_pos = container_ptr + (2 * d.ptrSize() if d.qtVersionAtLeast(0x060000) else 8)
+ elements_pos = data_pos + (3 * d.ptrSize() if d.qtVersionAtLeast(0x060000) else d.ptrSize())
elements_data_ptr, elements_size = d.vectorData(elements_pos)
elements_size = int(elements_size / 2)
d.putItemCount(elements_size)
@@ -3538,7 +3542,7 @@ def qdump__QCborValue(d, value):
d.putPlainChildren(value)
def qdump__QCborValue_proxy(d, value):
- item_data, container_ptr, item_type, is_cbor = value.data()
+ item_data, container_ptr, item_type, is_cbor = value.ldata
def typename(key, is_cbor):
if is_cbor:
diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py
index bc4bb84dcb..dbe663ef63 100644
--- a/share/qtcreator/debugger/stdtypes.py
+++ b/share/qtcreator/debugger/stdtypes.py
@@ -909,7 +909,7 @@ def qedit__std__vector(d, value, data):
values = data.split(',')
n = len(values)
innerType = value.type[0].name
- cmd = "set $d = (%s*)calloc(sizeof(%s)*%s,1)" % (innerType, innerType, n)
+ cmd = "set $d = (%s*)calloc(%s,sizeof(%s))" % (innerType, n, innerType)
gdb.execute(cmd)
cmd = "set {void*[3]}%s = {$d, $d+%s, $d+%s}" % (value.address(), n, n)
gdb.execute(cmd)
diff --git a/share/qtcreator/debugger/visualize.py b/share/qtcreator/debugger/visualize.py
new file mode 100644
index 0000000000..578d3bb705
--- /dev/null
+++ b/share/qtcreator/debugger/visualize.py
@@ -0,0 +1,86 @@
+# Copyright(C) 2006-2008, David Allouche, Jp Calderone, Itamar Shtull-Trauring
+# Copyright(C) 2006-2017, Johan Dahlin
+# Copyright(C) 2008, Olivier Grisel <olivier.grisel@ensta.org>
+# Copyright(C) 2008, David Glick
+# Copyright(C) 2013, Steven Maude
+# Copyright(C) 2013-2018, Peter Waller <p@pwaller.net>
+# Copyright(C) 2013, Lukas Graf <lukas.graf@4teamwork.ch>
+# Copyright(C) 2013, Jamie Wong <http://jamie-wong.com>
+# Copyright(C) 2013, Yury V. Zaytsev <yury@shurup.com>
+# Copyright(C) 2014, Michael Droettboom <mdroe@stsci.edu>
+# Copyright(C) 2015, Zev Benjamin <zev@mit.edu>
+# Copyright(C) 2018, Jon Dufresne <jon.dufresne@gmail.com>
+#
+# All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+""" This is a stripped down and modified version of pyprof2calltree """
+
+def profile_visualize(entries):
+ import cProfile
+ import io
+ import subprocess
+ import tempfile
+ from collections import defaultdict
+
+ def add_code_by_position(code):
+ filename, _, name = cProfile.label(code)
+ code_by_position[(filename, name)].add(code)
+
+ def munged_function_name(code):
+ filename, firstlineno, name = cProfile.label(code)
+ if len(code_by_position[(filename, name)]) == 1:
+ return name
+ return "%s:%d" % (name, firstlineno)
+
+ code_by_position = defaultdict(set)
+ for entry in entries:
+ add_code_by_position(entry.code)
+ if entry.calls:
+ for subentry in entry.calls:
+ add_code_by_position(subentry.code)
+
+ fd, outfile = tempfile.mkstemp("-qtc-debugger-profile.txt")
+ with io.open(fd, "w") as out:
+ scale = 1e9
+
+ out.write('event: ns : Nanoseconds\n')
+ out.write('events: ns\n')
+
+ for entry in entries:
+ code = entry.code
+
+ filename, firstlineno, name = cProfile.label(code)
+ munged_name = munged_function_name(code)
+
+ out.write('fl=%s\nfn=%s\n' % (filename, munged_name))
+ out.write('%d %d\n' % (firstlineno, int(entry.inlinetime * scale)))
+
+ if entry.calls:
+ for subentry in entry.calls:
+ filename, firstlineno, name = cProfile.label(subentry.code)
+ munged_name = munged_function_name(subentry.code)
+ out.write('cfl=%s\ncfn=%s\n' % (filename, munged_name))
+ out.write('calls=%d %d\n' % (subentry.callcount, firstlineno))
+ out.write('%d %d\n' % (firstlineno, int(subentry.totaltime * scale)))
+ out.write('\n')
+
+ subprocess.Popen(["kcachegrind", outfile])
+
diff --git a/share/qtcreator/jsonschemas/project.json b/share/qtcreator/jsonschemas/project.json
new file mode 100644
index 0000000000..df55dbd693
--- /dev/null
+++ b/share/qtcreator/jsonschemas/project.json
@@ -0,0 +1,57 @@
+{
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "title": "Qt Creator workspace project definition",
+ "description": "A Qt Creator workspace project definition",
+ "type": "object",
+ "properties": {
+ "project.name": {
+ "type": "string",
+ "description": "The name of the project"
+ },
+ "files.exclude": {
+ "type": "array",
+ "items": [
+ {
+ "type": "string"
+ }
+ ],
+ "description": "Files to exclude from the project"
+ },
+ "targets": {
+ "type": "array",
+ "description": "A list of targets",
+ "items": [
+ {
+ "type": "object",
+ "properties": {
+ "arguments": {
+ "type": "array",
+ "items": [
+ {
+ "type": "string"
+ }
+ ],
+ "description": "Arguments to pass to the executable"
+ },
+ "executable": {
+ "type": "string",
+ "description": "The executable to run"
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the target"
+ },
+ "workingDirectory": {
+ "type": "string",
+ "description": "The working directory to run the executable in"
+ }
+ },
+ "required": [
+ "executable",
+ "name"
+ ]
+ }
+ ]
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/assetsLibraryQmlSources/Assets.qml b/share/qtcreator/qmldesigner/assetsLibraryQmlSources/Assets.qml
index cfa4020995..26bef6f8e9 100644
--- a/share/qtcreator/qmldesigner/assetsLibraryQmlSources/Assets.qml
+++ b/share/qtcreator/qmldesigner/assetsLibraryQmlSources/Assets.qml
@@ -94,7 +94,7 @@ Item {
anchors.fill: parent
acceptedButtons: Qt.RightButton
onClicked: {
- if (assetsModel.haveFiles) {
+ if (assetsModel.hasFiles) {
function onFolderCreated(path) {
assetsView.addCreatedFolder(path)
}
@@ -182,13 +182,13 @@ Item {
leftPadding: 10
color: StudioTheme.Values.themeTextColor
font.pixelSize: StudioTheme.Values.baseFont
- visible: !assetsModel.haveFiles && !root.__searchBoxEmpty
+ visible: !assetsModel.hasFiles && !root.__searchBoxEmpty
}
Item { // placeholder when the assets library is empty
width: parent.width
height: parent.height - toolbar.height - column.spacing
- visible: !assetsModel.haveFiles && root.__searchBoxEmpty
+ visible: !assetsModel.hasFiles && root.__searchBoxEmpty
clip: true
MouseArea { // right clicking the empty area of the view
diff --git a/share/qtcreator/qmldesigner/assetsLibraryQmlSources/AssetsContextMenu.qml b/share/qtcreator/qmldesigner/assetsLibraryQmlSources/AssetsContextMenu.qml
index 391c622048..fe22d7ce51 100644
--- a/share/qtcreator/qmldesigner/assetsLibraryQmlSources/AssetsContextMenu.qml
+++ b/share/qtcreator/qmldesigner/assetsLibraryQmlSources/AssetsContextMenu.qml
@@ -83,7 +83,7 @@ StudioControls.Menu {
root.__selectedAssetPathsList = selectedAssetPathsList
root.__fileIndex = fileIndex
root.__dirIndex = dirModelIndex
- root.__dirPath = AssetsLibraryBackend.assetsModel.filePath(dirModelIndex)
+ root.__dirPath = root.assetsModel.filePath(dirModelIndex)
root.__isDirectory = false
root.popup()
}
@@ -124,9 +124,9 @@ StudioControls.Menu {
id: addTexturesItem
text: qsTr("Add Texture")
enabled: rootView.hasMaterialLibrary
- visible: root.__fileIndex && AssetsLibraryBackend.assetsModel.allFilePathsAreTextures(root.__selectedAssetPathsList)
+ visible: root.__fileIndex && root.assetsModel.allFilePathsAreTextures(root.__selectedAssetPathsList)
height: addTexturesItem.visible ? addTexturesItem.implicitHeight : 0
- onTriggered: AssetsLibraryBackend.rootView.addTextures(root.__selectedAssetPathsList)
+ onTriggered: root.rootView.addTextures(root.__selectedAssetPathsList)
}
StudioControls.MenuItem {
@@ -134,7 +134,7 @@ StudioControls.Menu {
text: qsTr("Add Light Probe")
enabled: rootView.hasMaterialLibrary && rootView.hasSceneEnv
visible: root.__fileIndex && root.__selectedAssetPathsList.length === 1
- && AssetsLibraryBackend.assetsModel.allFilePathsAreTextures(root.__selectedAssetPathsList)
+ && root.assetsModel.allFilePathsAreTextures(root.__selectedAssetPathsList)
height: addLightProbes.visible ? addLightProbes.implicitHeight : 0
onTriggered: rootView.addLightProbe(root.__selectedAssetPathsList[0])
}
@@ -145,7 +145,7 @@ StudioControls.Menu {
visible: root.__fileIndex
height: deleteFileItem.visible ? deleteFileItem.implicitHeight : 0
onTriggered: {
- let deleted = AssetsLibraryBackend.assetsModel.requestDeleteFiles(root.__selectedAssetPathsList)
+ let deleted = root.assetsModel.requestDeleteFiles(root.__selectedAssetPathsList)
if (!deleted)
confirmDeleteFiles.open()
}
@@ -182,7 +182,7 @@ StudioControls.Menu {
StudioControls.MenuItem {
text: qsTr("New Folder")
- visible: AssetsLibraryBackend.assetsModel.haveFiles
+ visible: root.assetsModel.hasFiles
height: visible ? implicitHeight : 0
NewFolderDialog {
@@ -209,11 +209,11 @@ StudioControls.Menu {
}
onTriggered: {
- if (!AssetsLibraryBackend.assetsModel.hasChildren(root.__dirIndex)) {
+ if (!root.assetsModel.hasChildren(root.__dirIndex)) {
// NOTE: the folder may still not be empty -- it doesn't have files visible to the
// user, but that doesn't mean that there are no other files (e.g. files of unknown
// types) on disk in this directory.
- AssetsLibraryBackend.assetsModel.deleteFolderRecursively(root.__dirIndex)
+ root.assetsModel.deleteFolderRecursively(root.__dirIndex)
} else {
confirmDeleteFolderDialog.open()
}
@@ -222,7 +222,7 @@ StudioControls.Menu {
StudioControls.MenuItem {
text: qsTr("New Effect")
- visible: rootView.canCreateEffects()
+ visible: root.rootView.canCreateEffects()
height: visible ? implicitHeight : 0
NewEffectDialog {
@@ -235,15 +235,22 @@ StudioControls.Menu {
}
StudioControls.MenuItem {
- text: rootView.showInGraphicalShellMsg()
+ text: root.rootView.showInGraphicalShellMsg()
enabled: root.__showInGraphicalShellEnabled
onTriggered: {
if (!root.__fileIndex || root.__selectedAssetPathsList.length > 1)
- rootView.showInGraphicalShell(root.__dirPath)
+ root.rootView.showInGraphicalShell(root.__dirPath)
else
- rootView.showInGraphicalShell(root.__selectedAssetPathsList[0])
+ root.rootView.showInGraphicalShell(root.__selectedAssetPathsList[0])
}
}
+
+ StudioControls.MenuItem {
+ text: qsTr("Add to Content Library")
+ visible: root.__fileIndex && root.assetsModel.allFilePathsAreTextures(root.__selectedAssetPathsList)
+ height: visible ? implicitHeight : 0
+ onTriggered: root.rootView.addAssetsToContentLibrary(root.__selectedAssetPathsList)
+ }
}
diff --git a/share/qtcreator/qmldesigner/assetsLibraryQmlSources/AssetsView.qml b/share/qtcreator/qmldesigner/assetsLibraryQmlSources/AssetsView.qml
index 9326e6a5e3..aeabc92c6d 100644
--- a/share/qtcreator/qmldesigner/assetsLibraryQmlSources/AssetsView.qml
+++ b/share/qtcreator/qmldesigner/assetsLibraryQmlSources/AssetsView.qml
@@ -70,9 +70,9 @@ TreeView {
model: assetsModel
onRowsChanged: {
- if (root.rows > root.rootPathRow + 1 && !assetsModel.haveFiles ||
- root.rows <= root.rootPathRow + 1 && assetsModel.haveFiles) {
- assetsModel.syncHaveFiles()
+ if (root.rows > root.rootPathRow + 1 && !assetsModel.hasFiles ||
+ root.rows <= root.rootPathRow + 1 && assetsModel.hasFiles) {
+ assetsModel.syncHasFiles()
}
root.updateRows()
@@ -366,7 +366,7 @@ TreeView {
function moveSelection(amount)
{
- if (!assetsModel.haveFiles || !amount)
+ if (!assetsModel.hasFiles || !amount)
return
let index = root.currentFilePath ? assetsModel.indexForPath(root.currentFilePath)
diff --git a/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsEditDelegate.qml b/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsEditDelegate.qml
deleted file mode 100644
index 90b3021c96..0000000000
--- a/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsEditDelegate.qml
+++ /dev/null
@@ -1,237 +0,0 @@
-// Copyright (C) 2023 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-import QtQuick
-import CollectionDetails 1.0 as CollectionDetails
-import StudioControls 1.0 as StudioControls
-import StudioHelpers as StudioHelpers
-import StudioTheme 1.0 as StudioTheme
-import QtQuick.Templates as T
-
-Item {
- id: root
-
- required property var columnType
-
- TableView.onCommit: {
- if (editorLoader.changesAccepted && edit !== editorLoader.acceptedValue)
- edit = editorLoader.acceptedValue
- }
-
- onActiveFocusChanged: {
- if (root.activeFocus && !editorLoader.triggered && editorLoader.item) {
- editorLoader.triggered = true
- editorLoader.item.open()
- }
-
- // active focus should be checked again, because it might be affected by editorLoader.item
- if (root.activeFocus && editorLoader.editor)
- editorLoader.editor.forceActiveFocus()
- }
-
- Loader {
- id: editorLoader
-
- active: true
-
- property var editor: editorLoader.item ? editorLoader.item.editor : null
- property var editValue: editorLoader.editor ? editorLoader.editor.editValue : null
- property var acceptedValue: null
- property bool changesAccepted: true
- property bool triggered: false
-
- Connections {
- id: modifierFocusConnection
-
- target: editorLoader.editor
- enabled: editorLoader.item !== undefined
-
- function onActiveFocusChanged() {
- if (!modifierFocusConnection.target.activeFocus) {
- editorLoader.acceptedValue = editorLoader.editValue
- root.TableView.commit()
- }
- }
- }
-
- Component {
- id: textEditor
-
- EditorPopup {
- editor: textField
-
- StudioControls.TextField {
- id: textField
-
- property alias editValue: textField.text
-
- actionIndicator.visible: false
- translationIndicatorVisible: false
-
- onRejected: editorLoader.changesAccepted = false
- }
- }
- }
-
- Component {
- id: realEditor
-
- EditorPopup {
-
- editor: realField
-
- StudioControls.RealSpinBox {
- id: realField
-
- property alias editValue: realField.realValue
-
- actionIndicator.visible: false
- realFrom: -9e9
- realTo: 9e9
- realStepSize: 1.0
- decimals: 6
- trailingZeroes: false
-
- onActiveFocusChanged: {
- if (realField.activeFocus)
- realField.contentItem.focus = true
- }
- }
- }
- }
-
- Component {
- id: integerEditor
-
- EditorPopup {
-
- editor: integerField
-
- StudioControls.SpinBox {
- id: integerField
-
- property alias editValue: integerField.value
-
- actionIndicatorVisible: false
- spinBoxIndicatorVisible: true
- from: -2147483647
- to: 2147483647
- decimals: 0
-
- onActiveFocusChanged: {
- if (integerField.activeFocus)
- integerField.contentItem.focus = true
- }
- }
- }
- }
-
- Component {
- id: boolEditor
-
- EditorPopup {
-
- editor: boolField
-
- StudioControls.CheckBox {
- id: boolField
-
- property alias editValue: boolField.checked
-
- actionIndicatorVisible: false
- }
- }
- }
- }
-
- component EditorPopup: T.Popup {
- id: editorPopup
-
- required property Item editor
-
- implicitHeight: contentHeight
- implicitWidth: contentWidth
-
- focus: true
- visible: false
-
- Connections {
- target: editorPopup.editor
-
- function onActiveFocusChanged() {
- if (!editorPopup.editor.activeFocus)
- editorPopup.close()
- else if (edit)
- editorPopup.editor.editValue = edit
- }
- }
-
- Connections {
- target: editorPopup.editor.Keys
-
- function onEscapePressed() {
- editorLoader.changesAccepted = false
- editorPopup.close()
- }
-
- function onReturnPressed() {
- editorPopup.close()
- }
-
- function onEnterPressed() {
- editorPopup.close()
- }
- }
- }
-
- states: [
- State {
- name: "default"
- when: columnType !== CollectionDetails.DataType.Boolean
- && columnType !== CollectionDetails.DataType.Color
- && columnType !== CollectionDetails.DataType.Integer
- && columnType !== CollectionDetails.DataType.Real
-
- PropertyChanges {
- target: editorLoader
- sourceComponent: textEditor
- }
- },
- State {
- name: "integer"
- when: columnType === CollectionDetails.DataType.Integer
-
- PropertyChanges {
- target: editorLoader
- sourceComponent: integerEditor
- }
- },
- State {
- name: "real"
- when: columnType === CollectionDetails.DataType.Real
-
- PropertyChanges {
- target: editorLoader
- sourceComponent: realEditor
- }
- },
- State {
- name: "bool"
- when: columnType === CollectionDetails.DataType.Boolean
-
- PropertyChanges {
- target: editorLoader
- sourceComponent: boolEditor
- }
- },
- State {
- name: "color"
- when: columnType === CollectionDetails.DataType.Color
-
- PropertyChanges {
- target: editorLoader
- sourceComponent: null
- }
- }
- ]
-}
diff --git a/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsToolbar.qml b/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsToolbar.qml
deleted file mode 100644
index 8b4c08f845..0000000000
--- a/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsToolbar.qml
+++ /dev/null
@@ -1,276 +0,0 @@
-// Copyright (C) 2023 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-import QtQuick
-import QtQuick.Controls
-import QtQuick.Layouts
-import Qt.labs.platform as PlatformWidgets
-import HelperWidgets 2.0 as HelperWidgets
-import StudioControls 1.0 as StudioControls
-import StudioTheme 1.0 as StudioTheme
-import CollectionDetails
-import CollectionEditorBackend
-
-Rectangle {
- id: root
-
- required property var model
- required property var backend
- property int selectedRow: -1
-
- implicitHeight: StudioTheme.Values.toolbarHeight
- color: StudioTheme.Values.themeToolbarBackground
-
- function addNewColumn() {
- addColumnDialog.popUp(root.model.columnCount())
- }
-
- function addNewRow() {
- root.model.insertRow(root.model.rowCount())
- }
-
- RowLayout {
- id: container
-
- anchors.fill: parent
- anchors.topMargin: StudioTheme.Values.toolbarVerticalMargin
- anchors.bottomMargin: StudioTheme.Values.toolbarVerticalMargin
-
- spacing: StudioTheme.Values.sectionRowSpacing
-
- RowLayout {
- id: leftSideToolbar
-
- Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
- Layout.leftMargin: StudioTheme.Values.toolbarHorizontalMargin
- spacing: StudioTheme.Values.sectionRowSpacing
-
- IconButton {
- id: addColumnLeftButton
-
- buttonIcon: StudioTheme.Constants.addcolumnleft_medium
- tooltip: qsTr("Add property left")
- enabled: root.model.selectedColumn > -1
- onClicked: addColumnDialog.popUp(root.model.selectedColumn)
- }
-
- IconButton {
- id: addColumnRightButton
-
- buttonIcon: StudioTheme.Constants.addcolumnright_medium
- tooltip: qsTr("Add property right")
- enabled: root.model.selectedColumn > -1
- onClicked: addColumnDialog.popUp(root.model.selectedColumn + 1)
- }
-
- IconButton {
- id: deleteColumnButton
-
- buttonIcon: StudioTheme.Constants.deletecolumn_medium
- tooltip: qsTr("Delete selected property")
- enabled: root.model.selectedColumn > -1
- onClicked: root.model.removeColumn(root.model.selectedColumn)
- }
-
- Item { // spacer
- implicitWidth: StudioTheme.Values.toolbarSpacing
- implicitHeight: 1
- }
-
- IconButton {
- id: addRowBelowButton
-
- buttonIcon: StudioTheme.Constants.addrowbelow_medium
- tooltip: qsTr("Insert row below")
- enabled: root.model.selectedRow > -1
- onClicked: root.model.insertRow(root.model.selectedRow + 1)
- }
-
- IconButton {
- id: addRowAboveButton
-
- buttonIcon: StudioTheme.Constants.addrowabove_medium
- tooltip: qsTr("Insert row above")
- enabled: root.model.selectedRow > -1
- onClicked: root.model.insertRow(root.model.selectedRow)
- }
-
- IconButton {
- id: deleteSelectedRowButton
-
- buttonIcon: StudioTheme.Constants.deleterow_medium
- tooltip: qsTr("Delete selected row")
- enabled: root.model.selectedRow > -1
- onClicked: root.model.removeRow(root.model.selectedRow)
- }
- }
-
- RowLayout {
- id: rightSideToolbar
-
- spacing: StudioTheme.Values.sectionRowSpacing
- Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
- Layout.rightMargin: StudioTheme.Values.toolbarHorizontalMargin
-
- IconButton {
- id: saveCollectionButton
-
- buttonIcon: StudioTheme.Constants.save_medium
- tooltip: qsTr("Save changes")
- enabled: root.model.collectionName !== ""
- onClicked: root.model.saveDataStoreCollections()
- }
-
- IconButton {
- id: exportCollectionButton
-
- buttonIcon: StudioTheme.Constants.export_medium
- tooltip: qsTr("Export model")
- enabled: root.model.collectionName !== ""
- onClicked: fileDialog.open()
- }
- }
- }
-
- PlatformWidgets.FileDialog {
- id: fileDialog
-
- fileMode: PlatformWidgets.FileDialog.SaveFile
-
- nameFilters: ["JSON Files (*.json)",
- "Comma-Separated Values (*.csv)"
- ]
-
- selectedNameFilter.index: 0
-
- onAccepted: {
- let filePath = fileDialog.file.toString()
- root.model.exportCollection(filePath)
- }
- }
-
- component IconButton: HelperWidgets.AbstractButton {
- style: StudioTheme.Values.viewBarButtonStyle
- }
-
- component Spacer: Item {
- implicitWidth: 1
- implicitHeight: StudioTheme.Values.columnGap
- }
-
- RegularExpressionValidator {
- id: nameValidator
- regularExpression: /^\w+$/
- }
-
- StudioControls.Dialog {
- id: addColumnDialog
-
- property int clickedIndex: -1
- property bool nameIsValid
-
- title: qsTr("Add Column")
-
- function popUp(index)
- {
- addColumnDialog.clickedIndex = index
- columnName.text = ""
- columnName.forceActiveFocus()
- addedPropertyType.currentIndex = addedPropertyType.find("String")
-
- addColumnDialog.open()
- }
-
- function addColumnName() {
- if (addColumnDialog.nameIsValid) {
- root.model.addColumn(addColumnDialog.clickedIndex, columnName.text, addedPropertyType.currentText)
- addColumnDialog.accept()
- } else {
- addColumnDialog.reject()
- }
- }
-
- contentItem: ColumnLayout {
- spacing: 2
-
- Text {
- text: qsTr("Column name:")
- color: StudioTheme.Values.themeTextColor
- }
-
- StudioControls.TextField {
- id: columnName
-
- Layout.fillWidth: true
-
- actionIndicator.visible: false
- translationIndicator.visible: false
- validator: nameValidator
-
- Keys.onEnterPressed: addColumnDialog.addColumnName()
- Keys.onReturnPressed: addColumnDialog.addColumnName()
- Keys.onEscapePressed: addColumnDialog.reject()
-
- onTextChanged: {
- addColumnDialog.nameIsValid = (columnName.text !== ""
- && !root.model.isPropertyAvailable(columnName.text))
- }
- }
-
- Spacer { implicitHeight: StudioTheme.Values.controlLabelGap }
-
- Label {
- Layout.fillWidth: true
-
- text: qsTr("The model already contains \"%1\"!").arg(columnName.text)
- visible: columnName.text !== "" && !addColumnDialog.nameIsValid
-
- color: StudioTheme.Values.themeTextColor
- wrapMode: Label.WordWrap
- padding: 5
-
- background: Rectangle {
- color: "transparent"
- border.width: StudioTheme.Values.border
- border.color: StudioTheme.Values.themeWarning
- }
- }
-
- Spacer {}
-
- Text {
- text: qsTr("Type:")
- color: StudioTheme.Values.themeTextColor
- }
-
- StudioControls.ComboBox {
- id: addedPropertyType
-
- Layout.fillWidth: true
-
- model: CollectionDataTypeModel{}
- textRole: "display"
- tooltipRole: "toolTip"
- actionIndicatorVisible: false
- }
-
- Spacer {}
-
- RowLayout {
- Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
- spacing: StudioTheme.Values.sectionRowSpacing
-
- HelperWidgets.Button {
- enabled: addColumnDialog.nameIsValid
- text: qsTr("Add")
- onClicked: addColumnDialog.addColumnName()
- }
-
- HelperWidgets.Button {
- text: qsTr("Cancel")
- onClicked: addColumnDialog.reject()
- }
- }
- }
- }
-}
diff --git a/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsView.qml b/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsView.qml
deleted file mode 100644
index c9a6d2dbcb..0000000000
--- a/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsView.qml
+++ /dev/null
@@ -1,570 +0,0 @@
-// Copyright (C) 2023 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-import QtQuick
-import QtQuick.Controls
-import QtQuick.Layouts
-import CollectionDetails 1.0 as CollectionDetails
-import HelperWidgets 2.0 as HelperWidgets
-import StudioControls 1.0 as StudioControls
-import StudioTheme 1.0 as StudioTheme
-
-Rectangle {
- id: root
-
- required property var model
- required property var backend
- required property var sortedModel
-
- implicitWidth: 300
- implicitHeight: 400
- color: StudioTheme.Values.themeControlBackground
-
- function closeDialogs() {
- editPropertyDialog.close()
- }
-
- Column {
- id: topRow
-
- visible: root.model.collectionName !== ""
- width: parent.width
- spacing: 10
-
- CollectionDetailsToolbar {
- id: toolbar
- model: root.model
- backend: root.backend
- width: parent.width
- }
-
- GridLayout {
- columns: 3
- rowSpacing: 1
- columnSpacing: 1
- width: parent.width
-
- anchors {
- left: parent.left
- leftMargin: StudioTheme.Values.collectionTableHorizontalMargin
- }
-
- Rectangle {
- id: tableTopLeftCorner
-
- clip: true
- visible: !tableView.model.isEmpty
- color: StudioTheme.Values.themeControlBackgroundInteraction
- border.color: StudioTheme.Values.themeControlBackgroundInteraction
- border.width: 2
-
- Layout.preferredWidth: rowIdView.width
- Layout.preferredHeight: headerView.height
- Layout.minimumWidth: rowIdView.width
- Layout.minimumHeight: headerView.height
-
- Text {
- anchors.fill: parent
- font: headerTextMetrics.font
- text: "#"
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- color: StudioTheme.Values.themeTextColor
- }
- }
-
- HorizontalHeaderView {
- id: headerView
-
- property real topPadding: 5
- property real bottomPadding: 5
-
- Layout.preferredHeight: headerTextMetrics.height + topPadding + bottomPadding
- Layout.columnSpan: 2
- syncView: tableView
- clip: true
-
- delegate: HeaderDelegate {
- selectedItem: tableView.model.selectedColumn
- color: StudioTheme.Values.themeControlBackgroundInteraction
-
- MouseArea {
- id: topHeaderMouseArea
-
- anchors.fill: parent
- anchors.margins: 5
- acceptedButtons: Qt.LeftButton | Qt.RightButton
- hoverEnabled: true
- onClicked: (mouse) => {
- tableView.model.selectColumn(index)
-
- if (mouse.button === Qt.RightButton) {
- let posX = index === root.model.columnCount() - 1 ? parent.width - editPropertyDialog.width : 0
-
- headerMenu.clickedHeaderIndex = index
- headerMenu.dialogPos = parent.mapToGlobal(posX, parent.height)
- headerMenu.popup()
- } else {
- headerMenu.close()
- }
- }
- }
-
- ToolTip {
- id: topHeaderToolTip
-
- property bool expectedToBeShown: topHeaderMouseArea.containsMouse
- visible: expectedToBeShown && text !== ""
- delay: 1000
-
- onExpectedToBeShownChanged: {
- if (expectedToBeShown)
- text = root.model.propertyType(index)
- }
- }
- }
-
- StudioControls.Menu {
- id: headerMenu
-
- property int clickedHeaderIndex: -1
- property point dialogPos
-
- onClosed: {
- headerMenu.clickedHeaderIndex = -1
- }
-
- StudioControls.MenuItem {
- text: qsTr("Edit")
- onTriggered: editPropertyDialog.openDialog(headerMenu.clickedHeaderIndex,
- headerMenu.dialogPos)
- }
-
- StudioControls.MenuItem {
- text: qsTr("Delete")
- onTriggered: deleteColumnDialog.popUp(headerMenu.clickedHeaderIndex)
- }
-
- StudioControls.MenuItem {
- text: qsTr("Sort Ascending")
- onTriggered: sortedModel.sort(headerMenu.clickedHeaderIndex, Qt.AscendingOrder)
- }
-
- StudioControls.MenuItem {
- text: qsTr("Sort Descending")
- onTriggered: sortedModel.sort(headerMenu.clickedHeaderIndex, Qt.DescendingOrder)
- }
- }
- }
-
- VerticalHeaderView {
- id: rowIdView
-
- syncView: tableView
- clip: true
-
- Layout.preferredHeight: tableView.height
- Layout.rowSpan: 2
- Layout.alignment: Qt.AlignTop + Qt.AlignLeft
- width: implicitWidth // suppresses GridLayout warnings when resizing
-
- delegate: HeaderDelegate {
- selectedItem: tableView.model.selectedRow
- color: StudioTheme.Values.themeControlBackgroundHover
-
- MouseArea {
- anchors.fill: parent
- anchors.margins: 5
- acceptedButtons: Qt.LeftButton
- onClicked: tableView.model.selectRow(index)
- }
- }
- }
-
- TableView {
- id: tableView
-
- model: root.sortedModel
- clip: true
-
- property point tableStart: tableTopLeftCorner.mapToItem(root, Qt.point(x, y));
-
- Layout.alignment: Qt.AlignTop + Qt.AlignLeft
- Layout.preferredWidth: tableView.contentWidth
- Layout.preferredHeight: tableView.contentHeight
- Layout.minimumWidth: 100
- Layout.minimumHeight: 20
- Layout.maximumWidth: root.width - (tableStart.x + addColumnContainer.width)
- Layout.maximumHeight: root.height - (tableStart.y + addRowContainer.height)
-
- columnWidthProvider: function(column) {
- if (!isColumnLoaded(column))
- return -1
- let w = explicitColumnWidth(column)
- if (w < 0)
- w = implicitColumnWidth(column)
- return Math.max(w, StudioTheme.Values.collectionCellMinimumWidth)
- }
-
- rowHeightProvider: function(row) {
- if (!isRowLoaded(row))
- return -1
- let h = explicitRowHeight(row)
- if (h < 0)
- h = implicitRowHeight(row)
- return Math.max(h, StudioTheme.Values.collectionCellMinimumHeight)
- }
-
- delegate: Rectangle {
- id: itemCell
-
- clip: true
- implicitWidth: 100
- implicitHeight: StudioTheme.Values.baseHeight
- color: itemSelected ? StudioTheme.Values.themeControlBackgroundInteraction
- : StudioTheme.Values.themeControlBackground
- border.width: 1
- border.color: {
- if (dataTypeWarning !== CollectionDetails.Warning.None)
- return StudioTheme.Values.themeWarning
-
- if (itemSelected)
- return StudioTheme.Values.themeControlOutlineInteraction
-
- return StudioTheme.Values.themeControlBackgroundInteraction
- }
-
- HelperWidgets.ToolTipArea {
- anchors.fill: parent
- text: root.model.warningToString(dataTypeWarning)
- enabled: dataTypeWarning !== CollectionDetails.Warning.None && text !== ""
- hoverEnabled: true
- acceptedButtons: Qt.NoButton
- }
-
- MouseArea {
- anchors.fill: parent
- acceptedButtons: Qt.RightButton
- onClicked: (mouse) => {
- let row = index % tableView.model.rowCount()
-
- tableView.model.selectRow(row)
- cellContextMenu.showMenu(row)
- }
- }
-
- Loader {
- id: cellContentLoader
-
- property int cellColumnType: columnType ? columnType : 0
-
- Component {
- id: cellText
-
- Text {
- text: display ?? ""
- color: itemSelected ? StudioTheme.Values.themeInteraction
- : StudioTheme.Values.themePlaceholderTextColorInteraction
- leftPadding: 5
- topPadding: 3
- bottomPadding: 3
- font.pixelSize: StudioTheme.Values.baseFontSize
- horizontalAlignment: Text.AlignLeft
- verticalAlignment: Text.AlignVCenter
- elide: Text.ElideRight
- }
- }
-
- Component {
- id: colorEditorComponent
-
- ColorViewDelegate {}
- }
-
- function resetSource() {
- if (columnType === CollectionDetails.DataType.Color)
- cellContentLoader.sourceComponent = colorEditorComponent
- else
- cellContentLoader.sourceComponent = cellText
- }
-
- Component.onCompleted: resetSource()
- onCellColumnTypeChanged: resetSource()
- }
-
- TableView.editDelegate: CollectionDetailsEditDelegate {
- anchors {
- top: itemCell.top
- left: itemCell.left
- }
- }
-
- Connections {
- target: tableView.model
-
- function onModelReset() {
- tableView.clearColumnWidths()
- tableView.clearRowHeights()
- }
- }
- }
-
- HoverHandler { id: hoverHandler }
-
- ScrollBar.horizontal: StudioControls.TransientScrollBar {
- id: horizontalScrollBar
- style: StudioTheme.Values.viewStyle
- orientation: Qt.Horizontal
-
- show: (hoverHandler.hovered || tableView.focus || horizontalScrollBar.inUse)
- && horizontalScrollBar.isNeeded
- }
-
- ScrollBar.vertical: StudioControls.TransientScrollBar {
- id: verticalScrollBar
- style: StudioTheme.Values.viewStyle
- orientation: Qt.Vertical
-
- show: (hoverHandler.hovered || tableView.focus || verticalScrollBar.inUse)
- && verticalScrollBar.isNeeded
- }
- }
-
- HelperWidgets.IconButton {
- id: addColumnContainer
-
- iconSize:16
- Layout.preferredWidth: 24
- Layout.preferredHeight: tableView.height
- Layout.minimumHeight: 24
- Layout.alignment: Qt.AlignLeft + Qt.AlignVCenter
-
- icon: StudioTheme.Constants.create_medium
- tooltip: "Add Column"
-
- onClicked: toolbar.addNewColumn()
- }
-
- HelperWidgets.IconButton {
- id: addRowContainer
-
- iconSize:16
- Layout.preferredWidth: tableView.width
- Layout.preferredHeight: 24
- Layout.minimumWidth: 24
- Layout.alignment: Qt.AlignTop + Qt.AlignHCenter
-
- icon: StudioTheme.Constants.create_medium
- tooltip: "Add Row"
-
- onClicked: toolbar.addNewRow()
- }
-
- Item {
- Layout.fillWidth: true
- Layout.fillHeight: true
- }
- }
- }
-
- Text {
- anchors.centerIn: parent
- text: qsTr("Select a model to continue")
- visible: !topRow.visible
- color: StudioTheme.Values.themeTextColor
- font.pixelSize: StudioTheme.Values.mediumFontSize
- }
-
- TextMetrics {
- id: headerTextMetrics
-
- font.pixelSize: StudioTheme.Values.baseFontSize
- text: "Xq"
- }
-
- StudioControls.Menu {
- id: cellContextMenu
-
- property int rowIndex: -1
-
- closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
-
- function showMenu(rowIndex) {
- cellContextMenu.rowIndex = rowIndex
- cellContextMenu.popup()
- }
-
- CellContextMenuItem {
- id: addRowAboveCellMenuItem
-
- itemText: qsTr("Add row above")
- itemIcon: StudioTheme.Constants.addrowabove_medium
- onTriggered: root.model.insertRow(cellContextMenu.rowIndex)
- }
- CellContextMenuItem {
- id: addRowBelowCellMenuItem
-
- itemText: qsTr("Add row below")
- itemIcon: StudioTheme.Constants.addrowbelow_medium
- onTriggered: root.model.insertRow(cellContextMenu.rowIndex + 1)
- }
- CellContextMenuItem {
- id: deleteRowCellMenuItem
-
- itemText: qsTr("Delete row")
- itemIcon: StudioTheme.Constants.deleterow_medium
- onTriggered: root.model.removeRows(cellContextMenu.rowIndex, 1)
- }
- }
-
- component HeaderDelegate: Rectangle {
- id: headerItem
-
- required property int selectedItem
- property alias horizontalAlignment: headerText.horizontalAlignment
- property alias verticalAlignment: headerText.verticalAlignment
-
- implicitWidth: headerText.implicitWidth
- implicitHeight: headerText.implicitHeight
- border.width: 1
- clip: true
-
- Text {
- id: headerText
-
- topPadding: headerView.topPadding
- bottomPadding: headerView.bottomPadding
- leftPadding: 5
- rightPadding: 5
- text: display
- font: headerTextMetrics.font
- color: StudioTheme.Values.themeTextColor
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- elide: Text.ElideRight
- }
-
- states: [
- State {
- name: "default"
- when: index !== selectedItem
- PropertyChanges {
- target: headerItem
- border.color: StudioTheme.Values.themeControlBackgroundInteraction
- }
-
- PropertyChanges {
- target: headerText
- font.bold: false
- }
- },
- State {
- name: "selected"
- when: index === selectedItem
-
- PropertyChanges {
- target: headerItem
- border.color: StudioTheme.Values.themeControlBackground
- }
-
- PropertyChanges {
- target: headerText
- font.bold: true
- }
- }
- ]
- }
-
- component CellContextMenuItem: StudioControls.MenuItem {
- id: cellContextMenuItemComponent
-
- property alias itemText: cellContextMenuText.text
- property alias itemIcon: cellContextMenuIcon.text
- text: ""
-
- implicitWidth: cellContextMenuRow.width
- implicitHeight: cellContextMenuRow.height
-
- Row {
- id: cellContextMenuRow
-
- property color textColor : cellContextMenuItemComponent.enabled
- ? cellContextMenuItemComponent.highlighted
- ? cellContextMenuItemComponent.style.text.selectedText
- : cellContextMenuItemComponent.style.text.idle
- : cellContextMenuItemComponent.style.text.disabled
-
- spacing: 2 * StudioTheme.Values.contextMenuHorizontalPadding
- height: StudioTheme.Values.defaultControlHeight
- leftPadding: StudioTheme.Values.contextMenuHorizontalPadding
- rightPadding: StudioTheme.Values.contextMenuHorizontalPadding
-
- Text {
- id: cellContextMenuIcon
-
- color: cellContextMenuRow.textColor
- text: StudioTheme.Constants.addrowabove_medium
- font.family: StudioTheme.Constants.iconFont.family
- font.pixelSize: StudioTheme.Values.myIconFontSize
- anchors.verticalCenter: parent.verticalCenter
- }
-
- Text {
- id: cellContextMenuText
-
- color: cellContextMenuRow.textColor
- anchors.verticalCenter: parent.verticalCenter
- }
- }
- }
-
- EditPropertyDialog {
- id: editPropertyDialog
- model: root.model
- }
-
- StudioControls.Dialog {
- id: deleteColumnDialog
-
- property int clickedIndex: -1
-
- title: qsTr("Delete Column")
- width: 400
-
- onAccepted: {
- root.model.removeColumn(clickedIndex)
- }
-
- function popUp(index)
- {
- deleteColumnDialog.clickedIndex = index
- deleteColumnDialog.open()
- }
-
- contentItem: ColumnLayout {
- spacing: StudioTheme.Values.sectionColumnSpacing
-
- Text {
- text: qsTr("Are you sure that you want to delete column \"%1\"?").arg(
- root.model.headerData(
- deleteColumnDialog.clickedIndex, Qt.Horizontal))
- color: StudioTheme.Values.themeTextColor
- }
-
- RowLayout {
- Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
- spacing: StudioTheme.Values.sectionRowSpacing
-
- HelperWidgets.Button {
- text: qsTr("Delete")
- onClicked: deleteColumnDialog.accept()
- }
-
- HelperWidgets.Button {
- text: qsTr("Cancel")
- onClicked: deleteColumnDialog.reject()
- }
- }
- }
- }
-}
diff --git a/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionItem.qml b/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionItem.qml
deleted file mode 100644
index 31ced43c1d..0000000000
--- a/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionItem.qml
+++ /dev/null
@@ -1,289 +0,0 @@
-// Copyright (C) 2023 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-import QtQuick
-import QtQuick.Controls
-import QtQuick.Layouts
-import HelperWidgets 2.0 as HelperWidgets
-import StudioControls 1.0 as StudioControls
-import StudioTheme as StudioTheme
-import CollectionEditorBackend
-
-Item {
- id: root
-
- implicitWidth: 300
- implicitHeight: boundingRect.height + 3
-
- property color textColor
-
- signal selectItem(int itemIndex)
- signal deleteItem()
-
- Item {
- id: boundingRect
-
- width: parent.width
- height: itemLayout.height
- clip: true
-
- MouseArea {
- id: itemMouse
-
- anchors.fill: parent
- acceptedButtons: Qt.LeftButton
- propagateComposedEvents: true
- hoverEnabled: true
- onClicked: (event) => {
- if (!collectionIsSelected) {
- collectionIsSelected = true
- event.accepted = true
- }
- }
- }
-
- Rectangle {
- id: innerRect
- anchors.fill: parent
- }
-
- RowLayout {
- id: itemLayout
-
- width: parent.width
-
- Text {
- id: nameHolder
-
- Layout.fillWidth: true
- Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
- Layout.leftMargin: StudioTheme.Values.collectionItemTextSideMargin
- Layout.topMargin: StudioTheme.Values.collectionItemTextMargin
- Layout.bottomMargin: StudioTheme.Values.collectionItemTextMargin
-
- text: collectionName
- font.pixelSize: StudioTheme.Values.baseFontSize
- color: root.textColor
- topPadding: StudioTheme.Values.collectionItemTextPadding
- bottomPadding: StudioTheme.Values.collectionItemTextPadding
- elide: Text.ElideMiddle
- verticalAlignment: Text.AlignVCenter
- }
-
- Text {
- id: threeDots
-
- Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
- Layout.topMargin: StudioTheme.Values.collectionItemTextMargin
- Layout.bottomMargin: StudioTheme.Values.collectionItemTextMargin
- Layout.rightMargin: StudioTheme.Values.collectionItemTextSideMargin
-
- text: StudioTheme.Constants.more_medium
- font.family: StudioTheme.Constants.iconFont.family
- font.pixelSize: StudioTheme.Values.baseIconFontSize
- color: root.textColor
- padding: StudioTheme.Values.collectionItemTextPadding
-
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
-
- MouseArea {
- anchors.fill: parent
- acceptedButtons: Qt.RightButton | Qt.LeftButton
- onClicked: collectionMenu.popup()
- }
- }
- }
- }
-
- StudioControls.Menu {
- id: collectionMenu
-
- closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
-
- StudioControls.MenuItem {
- text: qsTr("Delete")
- shortcut: StandardKey.Delete
- onTriggered: deleteDialog.open()
- }
-
- StudioControls.MenuItem {
- text: qsTr("Rename")
- shortcut: StandardKey.Replace
- onTriggered: renameDialog.open()
- }
-
- StudioControls.MenuItem {
- text: qsTr("Assign to the selected node")
- enabled: CollectionEditorBackend.rootView.targetNodeSelected
- onTriggered: rootView.assignCollectionToSelectedNode(collectionName)
- }
- }
-
- component Spacer: Item {
- implicitWidth: 1
- implicitHeight: StudioTheme.Values.columnGap
- }
-
- StudioControls.Dialog {
- id: deleteDialog
-
- title: qsTr("Deleting the model")
- clip: true
- implicitWidth: 300
-
- contentItem: ColumnLayout {
- spacing: 2
-
- Text {
- Layout.fillWidth: true
-
- wrapMode: Text.WordWrap
- color: StudioTheme.Values.themeTextColor
- text: qsTr("Are you sure that you want to delete model \"%1\"?"
- + "\nThe model will be deleted permanently.").arg(collectionName)
-
- }
-
- Spacer {}
-
- RowLayout {
- spacing: StudioTheme.Values.sectionRowSpacing
- Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
-
- HelperWidgets.Button {
- text: qsTr("Delete")
- onClicked: root.deleteItem()
- }
-
- HelperWidgets.Button {
- text: qsTr("Cancel")
- onClicked: deleteDialog.reject()
- }
- }
- }
- }
-
- StudioControls.Dialog {
- id: renameDialog
-
- title: qsTr("Rename model")
-
- onAccepted: {
- if (newNameField.text !== "")
- collectionName = newNameField.text
- }
-
- onOpened: {
- newNameField.text = collectionName
- }
-
- contentItem: ColumnLayout {
- spacing: 2
-
- Text {
- text: qsTr("Previous name: " + collectionName)
- color: StudioTheme.Values.themeTextColor
- }
-
- Spacer {}
-
- Text {
- Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
- text: qsTr("New name:")
- color: StudioTheme.Values.themeTextColor
- }
-
- StudioControls.TextField {
- id: newNameField
-
- Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
- Layout.fillWidth: true
-
- actionIndicator.visible: false
- translationIndicator.visible: false
- validator: newNameValidator
-
- Keys.onEnterPressed: renameDialog.accept()
- Keys.onReturnPressed: renameDialog.accept()
- Keys.onEscapePressed: renameDialog.reject()
-
- onTextChanged: {
- btnRename.enabled = newNameField.text !== ""
- }
- }
-
- Spacer {}
-
- RowLayout {
- Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
- spacing: StudioTheme.Values.sectionRowSpacing
-
- HelperWidgets.Button {
- id: btnRename
-
- text: qsTr("Rename")
- onClicked: renameDialog.accept()
- }
-
- HelperWidgets.Button {
- text: qsTr("Cancel")
- onClicked: renameDialog.reject()
- }
- }
- }
- }
-
- RegularExpressionValidator {
- id: newNameValidator
- regularExpression: /^\w+$/
- }
-
- states: [
- State {
- name: "default"
- when: !collectionIsSelected && !itemMouse.containsMouse
-
- PropertyChanges {
- target: innerRect
- opacity: 0.6
- color: StudioTheme.Values.themeControlBackground
- }
-
- PropertyChanges {
- target: root
- textColor: StudioTheme.Values.themeTextColor
- }
- },
- State {
- name: "hovered"
- when: !collectionIsSelected && itemMouse.containsMouse
-
- PropertyChanges {
- target: innerRect
- opacity: 0.8
- color: StudioTheme.Values.themeControlBackgroundHover
- }
-
- PropertyChanges {
- target: root
- textColor: StudioTheme.Values.themeTextColor
- }
- },
- State {
- name: "selected"
- when: collectionIsSelected
-
- PropertyChanges {
- target: innerRect
- opacity: 1
- color: StudioTheme.Values.themeIconColorSelected
- }
-
- PropertyChanges {
- target: root
- textColor: StudioTheme.Values.themeTextSelectedTextColor
- }
- }
- ]
-}
diff --git a/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionListView.qml b/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionListView.qml
deleted file mode 100644
index ef06a2e7a0..0000000000
--- a/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionListView.qml
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (C) 2024 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-import QtQuick
-import CollectionEditorBackend
-
-ListView {
- id: root
-
- model: CollectionEditorBackend.model
- clip: true
-
- delegate: CollectionItem {
- implicitWidth: root.width
- onDeleteItem: root.model.removeRow(index)
- }
-}
diff --git a/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionView.qml b/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionView.qml
deleted file mode 100644
index acf82fe452..0000000000
--- a/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionView.qml
+++ /dev/null
@@ -1,190 +0,0 @@
-// Copyright (C) 2023 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-import QtQuick
-import QtQuick.Controls
-import QtQuick.Layouts
-import HelperWidgets as HelperWidgets
-import StudioTheme as StudioTheme
-import CollectionEditorBackend
-
-Item {
- id: root
- focus: true
-
- property var rootView: CollectionEditorBackend.rootView
- property var model: CollectionEditorBackend.model
- property var collectionDetailsModel: CollectionEditorBackend.collectionDetailsModel
- property var collectionDetailsSortFilterModel: CollectionEditorBackend.collectionDetailsSortFilterModel
-
- function showWarning(title, message) {
- warningDialog.title = title
- warningDialog.message = message
- warningDialog.open()
- }
-
- // called from C++ when using the delete key
- function deleteSelectedCollection() {
- print("TODO: deleteSelectedCollection")
- }
-
- ImportDialog {
- id: importDialog
-
- backendValue: root.rootView
- anchors.centerIn: parent
- }
-
- NewCollectionDialog {
- id: newCollection
-
- anchors.centerIn: parent
- }
-
- Message {
- id: warningDialog
-
- title: ""
- message: ""
- }
-
- Rectangle {
- // Covers the toolbar color on top to prevent the background
- // color for the margin of splitter
-
- anchors.top: parent.top
- anchors.left: parent.left
- anchors.right: parent.right
- height: topToolbar.height
- color: topToolbar.color
- }
-
- SplitView {
- id: splitView
-
- readonly property bool isHorizontal: splitView.orientation === Qt.Horizontal
-
- orientation: width >= 500 ? Qt.Horizontal : Qt.Vertical
- anchors.fill: parent
-
- onOrientationChanged: detailsView.closeDialogs()
-
- handle: Item {
- id: handleDelegate
-
- property color color: SplitHandle.pressed ? StudioTheme.Values.themeControlOutlineInteraction
- : SplitHandle.hovered ? StudioTheme.Values.themeControlOutlineHover
- : StudioTheme.Values.themeControlOutline
-
- implicitWidth: 1
- implicitHeight: 1
-
- Rectangle {
- id: handleRect
-
- property real verticalMargin: splitView.isHorizontal ? StudioTheme.Values.splitterMargin : 0
- property real horizontalMargin: splitView.isHorizontal ? 0 : StudioTheme.Values.splitterMargin
-
- anchors.fill: parent
- anchors.topMargin: handleRect.verticalMargin
- anchors.bottomMargin: handleRect.verticalMargin
- anchors.leftMargin: handleRect.horizontalMargin
- anchors.rightMargin: handleRect.horizontalMargin
-
- color: handleDelegate.color
- }
-
- containmentMask: Item {
- x: splitView.isHorizontal ? ((handleDelegate.width - width) / 2) : 0
- y: splitView.isHorizontal ? 0 : ((handleDelegate.height - height) / 2)
- height: splitView.isHorizontal ? handleDelegate.height : StudioTheme.Values.borderHover
- width: splitView.isHorizontal ? StudioTheme.Values.borderHover : handleDelegate.width
- }
- }
-
- ColumnLayout {
- id: collectionsSideBar
- spacing: 0
-
- SplitView.minimumWidth: 200
- SplitView.maximumWidth: 450
- SplitView.minimumHeight: 200
- SplitView.maximumHeight: 400
- SplitView.fillWidth: !splitView.isHorizontal
- SplitView.fillHeight: splitView.isHorizontal
-
- Rectangle {
- id: topToolbar
- color: StudioTheme.Values.themeToolbarBackground
-
- Layout.preferredHeight: StudioTheme.Values.toolbarHeight
- Layout.fillWidth: true
- Layout.alignment: Qt.AlignTop | Qt.AlignHCenter
-
- Text {
- anchors.verticalCenter: parent.verticalCenter
- anchors.left: parent.left
- anchors.leftMargin: StudioTheme.Values.toolbarHorizontalMargin
-
- text: qsTr("Data Models")
- font.pixelSize: StudioTheme.Values.baseFontSize
- color: StudioTheme.Values.themeTextColor
- }
-
- HelperWidgets.AbstractButton {
- id: importCollectionButton
-
- anchors.verticalCenter: parent.verticalCenter
- anchors.right: parent.right
- anchors.rightMargin: StudioTheme.Values.toolbarHorizontalMargin
-
- style: StudioTheme.Values.viewBarButtonStyle
- buttonIcon: StudioTheme.Constants.import_medium
- tooltip: qsTr("Import a model")
-
- onClicked: importDialog.open()
- }
- }
-
- CollectionListView { // Model Groups
- Layout.fillWidth: true
- Layout.minimumHeight: bottomSpacer.isExpanded ? 150 : 0
- Layout.fillHeight: !bottomSpacer.isExpanded
- Layout.preferredHeight: contentHeight
- Layout.maximumHeight: contentHeight
- Layout.alignment: Qt.AlignTop | Qt.AlignHCenter
- }
-
- HelperWidgets.IconButton {
- id: addCollectionButton
-
- iconSize: 16
- Layout.fillWidth: true
- Layout.minimumWidth: 24
- Layout.alignment: Qt.AlignTop | Qt.AlignHCenter
-
- tooltip: qsTr("Add a new model")
- icon: StudioTheme.Constants.create_medium
- onClicked: newCollection.open()
- }
-
- Item {
- id: bottomSpacer
-
- readonly property bool isExpanded: height > 0
- Layout.minimumWidth: 1
- Layout.fillHeight: true
- }
- }
-
- CollectionDetailsView {
- id: detailsView
-
- model: root.collectionDetailsModel
- backend: root.model
- sortedModel: root.collectionDetailsSortFilterModel
- SplitView.fillHeight: true
- SplitView.fillWidth: true
- }
- }
-}
diff --git a/share/qtcreator/qmldesigner/collectionEditorQmlSource/ColorViewDelegate.qml b/share/qtcreator/qmldesigner/collectionEditorQmlSource/ColorViewDelegate.qml
deleted file mode 100644
index 6bb1b60159..0000000000
--- a/share/qtcreator/qmldesigner/collectionEditorQmlSource/ColorViewDelegate.qml
+++ /dev/null
@@ -1,296 +0,0 @@
-// Copyright (C) 2024 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-import QtQuick
-import QtQuick.Layouts
-import QtQuick.Shapes
-import QtQuick.Templates as T
-import HelperWidgets 2.0 as HelperWidgets
-import StudioTheme as StudioTheme
-import StudioControls as StudioControls
-import QtQuickDesignerTheme
-import QtQuickDesignerColorPalette
-
-Row {
- id: colorEditor
-
- property color color
- property bool supportGradient: false
- readonly property color __editColor: edit
-
- property variant value: {
- if (!edit)
- return "white" // default color for Rectangle
-
- if (colorEditor.isVector3D) {
- return Qt.rgba(__editColor.x,
- __editColor.y,
- __editColor.z, 1)
- }
-
- return __editColor
- }
-
- property alias gradientPropertyName: popupDialog.gradientPropertyName
-
- property alias gradientThumbnail: gradientThumbnail
- property alias shapeGradientThumbnail: shapeGradientThumbnail
-
- property bool shapeGradients: false
- property bool isVector3D: false
- property color originalColor
-
- property bool __block: false
-
- function getColorFromEditValue() {
- if (!edit)
- return "white" // default color for Rectangle
-
- if (colorEditor.isVector3D) {
- return Qt.rgba(__editColor.x,
- __editColor.y,
- __editColor.z, 1)
- }
-
- return __editColor
- }
-
- function resetShapeColor() {
- if (edit)
- edit = ""
- }
-
- function writeColor() {
- if (colorEditor.isVector3D) {
- edit = Qt.vector3d(colorEditor.color.r,
- colorEditor.color.g,
- colorEditor.color.b)
- } else {
- edit = colorEditor.color
- }
- }
-
- function initEditor() {
- colorEditor.syncColor()
- }
-
- // Syncing color from backend to frontend and block reflection
- function syncColor() {
- colorEditor.__block = true
- colorEditor.color = colorEditor.getColorFromEditValue()
- hexTextField.syncColor()
- colorEditor.__block = false
- }
-
- Connections {
- id: backendConnection
-
- target: colorEditor
-
- function onValueChanged() {
- if (popupDialog.isSolid())
- colorEditor.syncColor()
- }
-
- function on__EditColorChanged() {
- if (popupDialog.isSolid())
- colorEditor.syncColor()
- }
- }
-
- Timer {
- id: colorEditorTimer
-
- repeat: false
- interval: 100
- running: false
- onTriggered: {
- backendConnection.enabled = false
- colorEditor.writeColor()
- hexTextField.syncColor()
- backendConnection.enabled = true
- }
- }
-
- onColorChanged: {
- if (colorEditor.__block)
- return
-
- if (!popupDialog.isInValidState)
- return
-
- popupDialog.commitToGradient()
-
- // Delay setting the color to keep ui responsive
- if (popupDialog.isSolid())
- colorEditorTimer.restart()
- }
-
- Rectangle {
- id: preview
-
- implicitWidth: StudioTheme.Values.twoControlColumnWidth
- implicitHeight: StudioTheme.Values.height
- color: colorEditor.color
- border.color: StudioTheme.Values.themeControlOutline
- border.width: StudioTheme.Values.border
-
- Rectangle {
- id: gradientThumbnail
-
- anchors.fill: parent
- anchors.margins: StudioTheme.Values.border
- visible: !popupDialog.isSolid()
- && !colorEditor.shapeGradients
- && popupDialog.isLinearGradient()
- }
-
- Shape {
- id: shape
-
- anchors.fill: parent
- anchors.margins: StudioTheme.Values.border
- visible: !popupDialog.isSolid() && colorEditor.shapeGradients
-
- ShapePath {
- id: shapeGradientThumbnail
-
- startX: shape.x - 1
- startY: shape.y - 1
- strokeWidth: -1
- strokeColor: "green"
-
- PathLine {
- x: shape.x - 1
- y: shape.height
- }
- PathLine {
- x: shape.width
- y: shape.height
- }
- PathLine {
- x: shape.width
- y: shape.y - 1
- }
- }
- }
-
- Image {
- anchors.fill: parent
- source: "qrc:/navigator/icon/checkers.png"
- fillMode: Image.Tile
- z: -1
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: {
- popupDialog.visibility ? popupDialog.close() : popupDialog.open()
- forceActiveFocus()
- }
- }
-
- StudioControls.PopupDialog {
- id: popupDialog
-
- property bool isInValidState: loader.active ? popupDialog.loaderItem.isInValidState : true
- property QtObject loaderItem: loader.item
- property string gradientPropertyName
-
- keepOpen: loader.item?.eyeDropperActive ?? false
-
- width: 260
-
- function commitToGradient() {
- if (!loader.active)
- return
-
- if (colorEditor.supportGradient && popupDialog.loaderItem.gradientModel.hasGradient) {
- var hexColor = convertColorToString(colorEditor.color)
- hexTextField.text = hexColor
- edit = hexColor
- popupDialog.loaderItem.commitGradientColor()
- }
- }
-
- function isSolid() {
- if (!loader.active)
- return true
-
- return popupDialog.loaderItem.isSolid()
- }
-
- function isLinearGradient(){
- if (!loader.active)
- return false
-
- return popupDialog.loaderItem.isLinearGradient()
- }
-
- function ensureLoader() {
- if (!loader.active)
- loader.active = true
- }
-
- function open() {
- popupDialog.ensureLoader()
- popupDialog.loaderItem.initEditor()
- popupDialog.show(preview)
- }
-
- function determineActiveColorMode() {
- if (loader.active && popupDialog.loaderItem)
- popupDialog.loaderItem.determineActiveColorMode()
- else
- colorEditor.syncColor()
- }
-
- Loader {
- id: loader
-
- active: colorEditor.supportGradient
-
- sourceComponent: HelperWidgets.ColorEditorPopup {
- shapeGradients: colorEditor.shapeGradients
- supportGradient: colorEditor.supportGradient
- width: popupDialog.contentWidth
- }
-
- onLoaded: {
- popupDialog.loaderItem.initEditor()
- popupDialog.titleBar = loader.item.titleBarContent
- }
- }
- }
- }
-
- HelperWidgets.LineEdit {
- id: hexTextField
- implicitWidth: StudioTheme.Values.twoControlColumnWidth
- + StudioTheme.Values.actionIndicatorWidth
- width: hexTextField.implicitWidth
- enabled: popupDialog.isSolid()
- writeValueManually: true
- validator: RegularExpressionValidator {
- regularExpression: /#[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?/g
- }
- showTranslateCheckBox: false
- showExtendedFunctionButton: false
- indicatorVisible: false
-
- onAccepted: colorEditor.color = hexTextField.text
- onCommitData: {
- colorEditor.color = hexTextField.text
- if (popupDialog.isSolid())
- colorEditor.writeColor()
- }
-
- function syncColor() {
- hexTextField.text = colorEditor.color
- }
- }
-
- Component.onCompleted: popupDialog.determineActiveColorMode()
-
- on__EditColorChanged: popupDialog.determineActiveColorMode()
-}
diff --git a/share/qtcreator/qmldesigner/collectionEditorQmlSource/EditPropertyDialog.qml b/share/qtcreator/qmldesigner/collectionEditorQmlSource/EditPropertyDialog.qml
deleted file mode 100644
index 546dc5d770..0000000000
--- a/share/qtcreator/qmldesigner/collectionEditorQmlSource/EditPropertyDialog.qml
+++ /dev/null
@@ -1,158 +0,0 @@
-// Copyright (C) 2023 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-import QtQuick
-import QtQuick.Layouts
-import StudioTheme 1.0 as StudioTheme
-import StudioControls 1.0 as StudioControls
-import HelperWidgets 2.0 as HelperWidgets
-import CollectionDetails
-
-StudioControls.Dialog {
- id: root
-
- required property var model
- property int __propertyIndex: -1
- property string __currentName
-
- title: qsTr("Edit Column")
-
- function openDialog(index, initialPosition) {
- root.__propertyIndex = index
-
- if (root.__propertyIndex < 0)
- return
-
- root.__currentName = root.model.propertyName(root.__propertyIndex)
- nameTextField.text = root.__currentName
- nameTextField.selectAll()
- nameTextField.forceActiveFocus()
-
- typeComboBox.initialType = root.model.propertyType(root.__propertyIndex)
- typeComboBox.currentIndex = typeComboBox.find(typeComboBox.initialType)
-
- let newPoint = mapFromGlobal(initialPosition.x, initialPosition.y)
- x = newPoint.x
- y = newPoint.y
-
- root.open()
- }
-
- onWidthChanged: {
- if (visible && x > parent.width)
- root.close()
- }
-
- onAccepted: {
- if (nameTextField.text !== "" && nameTextField.text !== root.__currentName)
- root.model.renameColumn(root.__propertyIndex, nameTextField.text)
-
- if (typeComboBox.initialType !== typeComboBox.currentText)
- root.model.setPropertyType(root.__propertyIndex, typeComboBox.currentText)
- }
-
- contentItem: Column {
- spacing: 5
-
- Grid {
- columns: 2
- rows: 2
- rowSpacing: 2
- columnSpacing: 25
- verticalItemAlignment: Grid.AlignVCenter
-
- Text {
- text: qsTr("Name")
- color: StudioTheme.Values.themeTextColor
- verticalAlignment: Text.AlignVCenter
- }
-
- StudioControls.TextField {
- id: nameTextField
-
- actionIndicator.visible: false
- translationIndicator.visible: false
-
- Keys.onEnterPressed: root.accept()
- Keys.onReturnPressed: root.accept()
- Keys.onEscapePressed: root.reject()
-
- validator: RegularExpressionValidator {
- regularExpression: /^\w+$/
- }
- }
-
- Text {
- text: qsTr("Type")
- color: StudioTheme.Values.themeTextColor
- }
-
- StudioControls.ComboBox {
- id: typeComboBox
-
- property string initialType
-
- model: CollectionDataTypeModel{}
- textRole: "display"
- tooltipRole: "toolTip"
- actionIndicatorVisible: false
- }
- }
-
- Rectangle {
- id: warningBox
-
- visible: typeComboBox.initialType !== typeComboBox.currentText
- color: "transparent"
- clip: true
- border.color: StudioTheme.Values.themeWarning
- width: parent.width
- height: warning.height
-
- Row {
- id: warning
-
- padding: 5
- spacing: 5
-
- HelperWidgets.IconLabel {
- icon: StudioTheme.Constants.warning_medium
- anchors.verticalCenter: parent.verticalCenter
- }
-
- Text {
- text: qsTr("Conversion from %1 to %2 may lead to data loss")
- .arg(typeComboBox.initialType)
- .arg(typeComboBox.currentText)
-
- width: warningBox.width - 20
-
- color: StudioTheme.Values.themeTextColor
- wrapMode: Text.WordWrap
- }
- }
- }
-
- Row {
- height: 40
- spacing: 5
-
- HelperWidgets.Button {
- id: editButton
-
- text: qsTr("Apply")
- enabled: nameTextField.text !== ""
- anchors.bottom: parent.bottom
-
- onClicked: root.accept()
- }
-
- HelperWidgets.Button {
- text: qsTr("Cancel")
- anchors.bottom: parent.bottom
-
- onClicked: root.reject()
- }
- }
- }
-}
diff --git a/share/qtcreator/qmldesigner/collectionEditorQmlSource/IconTextButton.qml b/share/qtcreator/qmldesigner/collectionEditorQmlSource/IconTextButton.qml
deleted file mode 100644
index fe9d094349..0000000000
--- a/share/qtcreator/qmldesigner/collectionEditorQmlSource/IconTextButton.qml
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright (C) 2023 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-import QtQuick
-import QtQuick.Controls
-import QtQuick.Layouts
-import StudioTheme as StudioTheme
-
-Rectangle {
- id: root
-
- required property string text
- required property string icon
-
- property alias tooltip: toolTip.text
- property StudioTheme.ControlStyle style: StudioTheme.Values.viewBarButtonStyle
- property int fontSize: StudioTheme.Values.baseFontSize
-
- implicitHeight: style.squareControlSize.height
- implicitWidth: rowAlign.width
-
- signal clicked()
-
- RowLayout {
- id: rowAlign
-
- anchors.verticalCenter: parent.verticalCenter
- spacing: StudioTheme.Values.inputHorizontalPadding
-
- Text {
- id: iconItem
-
- Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
- text: root.icon
- color: StudioTheme.Values.themeTextColor
- font.family: StudioTheme.Constants.iconFont.family
- font.pixelSize: StudioTheme.Values.bigFont
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- leftPadding: StudioTheme.Values.inputHorizontalPadding
- }
-
- Text {
- id: textItem
-
- Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
- text: root.text
- color: StudioTheme.Values.themeTextColor
- font.family: StudioTheme.Constants.font.family
- font.pixelSize: StudioTheme.Values.baseFontSize
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- rightPadding: StudioTheme.Values.inputHorizontalPadding
- }
- }
-
- MouseArea {
- id: mouseArea
- anchors.fill: parent
- hoverEnabled: true
- onClicked: root.clicked()
- }
-
- ToolTip {
- id: toolTip
-
- visible: mouseArea.containsMouse && text !== ""
- delay: 1000
- }
-
- states: [
- State {
- name: "default"
- when: !mouseArea.pressed && !mouseArea.containsMouse
- PropertyChanges {
- target: root
- color: StudioTheme.Values.themeControlBackground
- }
- },
- State {
- name: "Pressed"
- when: mouseArea.pressed
- PropertyChanges {
- target: root
- color: StudioTheme.Values.themeControlBackgroundInteraction
- }
- },
- State {
- name: "Hovered"
- when: !mouseArea.pressed && mouseArea.containsMouse
- PropertyChanges {
- target: root
- color: StudioTheme.Values.themeControlBackgroundHover
- }
- }
- ]
-}
diff --git a/share/qtcreator/qmldesigner/collectionEditorQmlSource/ImportDialog.qml b/share/qtcreator/qmldesigner/collectionEditorQmlSource/ImportDialog.qml
deleted file mode 100644
index 21a5e4e8e0..0000000000
--- a/share/qtcreator/qmldesigner/collectionEditorQmlSource/ImportDialog.qml
+++ /dev/null
@@ -1,225 +0,0 @@
-// Copyright (C) 2023 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-import QtQuick
-import QtQuick.Controls
-import QtQuick.Layouts
-import Qt.labs.platform as PlatformWidgets
-import HelperWidgets as HelperWidgets
-import StudioControls as StudioControls
-import StudioTheme as StudioTheme
-
-StudioControls.Dialog {
- id: root
-
- title: qsTr("Import a model")
- anchors.centerIn: parent
- closePolicy: Popup.CloseOnEscape
- modal: true
-
- required property var backendValue
-
- property bool fileExists: false
-
- onOpened: {
- collectionName.text = "Model"
- fileName.text = qsTr("Model path")
- fileName.selectAll()
- fileName.forceActiveFocus()
- }
-
- onRejected: {
- fileName.text = ""
- }
-
- function acceptIfIsValid() {
- if (btnImport.enabled)
- btnImport.onClicked()
- }
-
- RegularExpressionValidator {
- id: fileNameValidator
- regularExpression: /^(\w[^*><?|]*)[^/\\:*><?|]$/
- }
-
- PlatformWidgets.FileDialog {
- id: fileDialog
- nameFilters : ["All Model Files (*.json *.csv)",
- "JSON Files (*.json)",
- "Comma-Separated Values (*.csv)"]
-
- title: qsTr("Select a model file")
- fileMode: PlatformWidgets.FileDialog.OpenFile
- acceptLabel: qsTr("Open")
-
- onAccepted: fileName.text = fileDialog.file
- }
-
- Message {
- id: creationFailedDialog
-
- title: qsTr("Could not load the file")
- message: qsTr("An error occurred while trying to load the file.")
-
- onClosed: root.reject()
- }
-
- component Spacer: Item {
- implicitWidth: 1
- implicitHeight: StudioTheme.Values.columnGap
- }
-
- contentItem: ColumnLayout {
- spacing: 2
-
- Keys.onEnterPressed: root.acceptIfIsValid()
- Keys.onReturnPressed: root.acceptIfIsValid()
- Keys.onEscapePressed: root.reject()
-
- Text {
- text: qsTr("File name")
- color: StudioTheme.Values.themeTextColor
- }
-
- RowLayout {
- spacing: StudioTheme.Values.sectionRowSpacing
-
- Layout.fillWidth: true
-
- StudioControls.TextField {
- id: fileName
-
- Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
- Layout.fillWidth: true
-
- actionIndicator.visible: false
- translationIndicator.visible: false
- validator: fileNameValidator
-
- onTextChanged: root.fileExists = root.backendValue.isValidUrlToImport(fileName.text)
- }
-
- HelperWidgets.Button {
- id: fileDialogButton
-
- Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
-
- text: qsTr("Open")
- onClicked: fileDialog.open()
- }
- }
-
- Spacer {}
-
- Text {
- text: qsTr("The model name")
- color: StudioTheme.Values.themeTextColor
- }
-
- StudioControls.TextField {
- id: collectionName
-
- Layout.fillWidth: true
-
- actionIndicator.visible: false
- translationIndicator.visible: false
- validator: RegularExpressionValidator {
- regularExpression: /^[\w ]+$/
- }
- }
-
- Spacer { implicitHeight: StudioTheme.Values.controlLabelGap }
-
- Label {
- id: fieldErrorText
-
- Layout.fillWidth: true
-
- color: StudioTheme.Values.themeTextColor
- wrapMode: Label.WordWrap
- padding: 5
-
- background: Rectangle {
- color: "transparent"
- border.width: StudioTheme.Values.border
- border.color: StudioTheme.Values.themeWarning
- }
-
- states: [
- State {
- name: "default"
- when: fileName.text !== "" && collectionName.text !== ""
-
- PropertyChanges {
- target: fieldErrorText
- text: ""
- visible: false
- }
- },
- State {
- name: "fileError"
- when: fileName.text === ""
-
- PropertyChanges {
- target: fieldErrorText
- text: qsTr("File name can not be empty")
- visible: true
- }
- },
- State {
- name: "collectionNameError"
- when: collectionName.text === ""
-
- PropertyChanges {
- target: fieldErrorText
- text: qsTr("The model name can not be empty")
- visible: true
- }
- }
- ]
- }
-
- Spacer {}
-
- StudioControls.CheckBox {
- id: csvFirstRowIsHeader
-
- visible: root.fileExists && fileName.text.endsWith(".csv")
- text: qsTr("Consider first row as headers")
- checked: true
- actionIndicatorVisible: false
- }
-
- Spacer {}
-
- RowLayout {
- spacing: StudioTheme.Values.sectionRowSpacing
-
- Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
-
- HelperWidgets.Button {
- id: btnImport
-
- text: qsTr("Import")
- enabled: root.fileExists && collectionName.text !== ""
-
- onClicked: {
- let collectionImported = root.backendValue.importFile(
- collectionName.text,
- fileName.text,
- csvFirstRowIsHeader.checked)
-
- if (collectionImported)
- root.accept()
- else
- creationFailedDialog.open()
- }
- }
-
- HelperWidgets.Button {
- text: qsTr("Cancel")
- onClicked: root.reject()
- }
- }
- }
-}
diff --git a/share/qtcreator/qmldesigner/collectionEditorQmlSource/Message.qml b/share/qtcreator/qmldesigner/collectionEditorQmlSource/Message.qml
deleted file mode 100644
index f6e7af4560..0000000000
--- a/share/qtcreator/qmldesigner/collectionEditorQmlSource/Message.qml
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (C) 2023 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-import QtQuick
-import QtQuick.Controls
-import QtQuick.Layouts
-import HelperWidgets 2.0 as HelperWidgets
-import StudioControls 1.0 as StudioControls
-import StudioTheme as StudioTheme
-
-StudioControls.Dialog {
- id: root
-
- required property string message
-
- anchors.centerIn: parent
- closePolicy: Popup.CloseOnEscape
- implicitWidth: 300
- modal: true
-
- contentItem: ColumnLayout {
- spacing: StudioTheme.Values.sectionColumnSpacing
-
- Text {
- Layout.fillWidth: true
- text: root.message
- color: StudioTheme.Values.themeTextColor
- wrapMode: Text.WordWrap
- leftPadding: 10
- rightPadding: 10
- }
-
- HelperWidgets.Button {
- Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
-
- text: qsTr("Close")
- onClicked: root.reject()
- }
- }
-
- onOpened: root.forceActiveFocus()
-}
diff --git a/share/qtcreator/qmldesigner/collectionEditorQmlSource/NewCollectionDialog.qml b/share/qtcreator/qmldesigner/collectionEditorQmlSource/NewCollectionDialog.qml
deleted file mode 100644
index 6f567a775c..0000000000
--- a/share/qtcreator/qmldesigner/collectionEditorQmlSource/NewCollectionDialog.qml
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright (C) 2023 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-import QtQuick
-import QtQuick.Controls
-import QtQuick.Layouts
-import HelperWidgets as HelperWidgets
-import StudioControls as StudioControls
-import StudioTheme as StudioTheme
-import CollectionEditorBackend
-
-StudioControls.Dialog {
- id: root
-
- property bool nameExists: false
- readonly property bool isValid: collectionName.text !== "" && !root.nameExists
-
- title: qsTr("Add a new model")
-
- closePolicy: Popup.CloseOnEscape
- modal: true
-
- onOpened: {
- collectionName.text = CollectionEditorBackend.model.getUniqueCollectionName()
- }
-
- onRejected: {
- collectionName.text = ""
- }
-
- onAccepted: {
- if (root.isValid)
- root.CollectionEditorBackend.rootView.addCollectionToDataStore(collectionName.text);
- }
-
- ColumnLayout {
- spacing: 5
-
- NameField {
- text: qsTr("Name")
- }
-
- StudioControls.TextField {
- id: collectionName
-
- Layout.fillWidth: true
-
- actionIndicator.visible: false
- translationIndicator.visible: false
- validator: RegularExpressionValidator {
- regularExpression: /^[\w ]+$/
- }
-
- Keys.onEnterPressed: btnCreate.onClicked()
- Keys.onReturnPressed: btnCreate.onClicked()
- Keys.onEscapePressed: root.reject()
-
- onTextChanged: {
- root.nameExists = CollectionEditorBackend.model.collectionExists(collectionName.text)
- }
- }
-
- ErrorField {
- id: errorField
- text: {
- if (collectionName.text === "")
- return qsTr("Name can not be empty")
- else if (root.nameExists)
- return qsTr("Name '%1' already exists").arg(collectionName.text)
- else
- return ""
- }
- }
-
- Spacer {}
-
- Row {
- spacing: StudioTheme.Values.sectionRowSpacing
-
- HelperWidgets.Button {
- id: btnCreate
-
- text: qsTr("Create")
- enabled: root.isValid
- onClicked: root.accept()
- }
-
- HelperWidgets.Button {
- text: qsTr("Cancel")
- onClicked: root.reject()
- }
- }
- }
-
- component NameField: Text {
- color: StudioTheme.Values.themeTextColor
- font.family: StudioTheme.Constants.font.family
- font.pixelSize: StudioTheme.Values.baseIconFontSize
- }
-
- component ErrorField: Text {
- color: StudioTheme.Values.themeError
- font.family: StudioTheme.Constants.font.family
- font.pixelSize: StudioTheme.Values.baseIconFontSize
- }
-
- component Spacer: Item {
- width: 1
- height: StudioTheme.Values.columnGap
- }
-}
diff --git a/share/qtcreator/qmldesigner/connectionseditor/ConnectionsDialog.qml b/share/qtcreator/qmldesigner/connectionseditor/ConnectionsDialog.qml
index 965f31d21a..299234127a 100644
--- a/share/qtcreator/qmldesigner/connectionseditor/ConnectionsDialog.qml
+++ b/share/qtcreator/qmldesigner/connectionseditor/ConnectionsDialog.qml
@@ -11,6 +11,8 @@ StudioControls.PopupDialog {
property alias backend: form.backend
+ keepOpen: form.keepOpen
+
titleBar: Row {
spacing: 30 // TODO
anchors.fill: parent
@@ -43,6 +45,8 @@ StudioControls.PopupDialog {
ConnectionsDialogForm {
id: form
+ parentWindow: root.window
+
Connections {
target: root.backend
function onPopupShouldClose() {
diff --git a/share/qtcreator/qmldesigner/connectionseditor/ConnectionsDialogForm.qml b/share/qtcreator/qmldesigner/connectionseditor/ConnectionsDialogForm.qml
index 603903dbdd..a799165375 100644
--- a/share/qtcreator/qmldesigner/connectionseditor/ConnectionsDialogForm.qml
+++ b/share/qtcreator/qmldesigner/connectionseditor/ConnectionsDialogForm.qml
@@ -16,6 +16,9 @@ Column {
property var backend
+ property bool keepOpen: expressionDialogLoader.visible
+ property Window parentWindow: null
+
width: parent.width
spacing: root.verticalSpacing
@@ -267,10 +270,8 @@ Column {
horizontalAlignment: code.lineCount === 1 ? Text.AlignHCenter : Text.AlignLeft
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
-
}
-
Loader {
id: expressionDialogLoader
parent: editor
@@ -297,19 +298,19 @@ Column {
id: bindingEditor
onRejected: {
- hideWidget()
+ bindingEditor.hideWidget()
expressionDialogLoader.visible = false
}
onAccepted: {
backend.setNewSource(bindingEditor.text)
- hideWidget()
+ bindingEditor.hideWidget()
expressionDialogLoader.visible = false
}
}
}
- } // loader
- } // rect
- } //col 2
-}//col1
+ }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibrary.qml b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibrary.qml
index c6db8425ff..d3eb29563d 100644
--- a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibrary.qml
+++ b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibrary.qml
@@ -23,6 +23,7 @@ Item {
texturesView.closeContextMenu()
environmentsView.closeContextMenu()
effectsView.closeContextMenu()
+ userView.closeContextMenu()
HelperWidgets.Controller.closeContextMenu()
}
@@ -113,18 +114,26 @@ Item {
id: tabBar
width: parent.width
height: StudioTheme.Values.toolbarHeight
- tabsModel: [{name: qsTr("Materials"), icon: StudioTheme.Constants.material_medium},
- {name: qsTr("Textures"), icon: StudioTheme.Constants.textures_medium},
- {name: qsTr("Environments"), icon: StudioTheme.Constants.languageList_medium},
- {name: qsTr("Effects"), icon: StudioTheme.Constants.effects}]
+
+ tabsModel: [
+ { name: qsTr("Materials"), icon: StudioTheme.Constants.material_medium },
+ { name: qsTr("Textures"), icon: StudioTheme.Constants.textures_medium },
+ { name: qsTr("Environments"), icon: StudioTheme.Constants.languageList_medium },
+ { name: qsTr("Effects"), icon: StudioTheme.Constants.effects },
+ { name: qsTr("User Assets"), icon: StudioTheme.Constants.effects } // TODO: update icon
+ ]
}
}
}
- UnimportBundleMaterialDialog {
+ UnimportBundleItemDialog {
id: confirmUnimportDialog
}
+ DeleteBundleItemDialog {
+ id: confirmDeleteDialog
+ }
+
StackLayout {
id: stackLayout
width: root.width
@@ -148,7 +157,8 @@ Item {
onUnimport: (bundleMat) => {
confirmUnimportDialog.targetBundleItem = bundleMat
- confirmUnimportDialog.targetBundleType = "material"
+ confirmUnimportDialog.targetBundleLabel = "material"
+ confirmUnimportDialog.targetBundleModel = ContentLibraryBackend.materialsModel
confirmUnimportDialog.open()
}
@@ -208,10 +218,40 @@ Item {
onUnimport: (bundleItem) => {
confirmUnimportDialog.targetBundleItem = bundleItem
- confirmUnimportDialog.targetBundleType = "effect"
+ confirmUnimportDialog.targetBundleLabel = "effect"
+ confirmUnimportDialog.targetBundleModel = ContentLibraryBackend.effectsModel
+ confirmUnimportDialog.open()
+ }
+
+ onCountChanged: root.responsiveResize(stackLayout.width, stackLayout.height)
+ }
+
+ ContentLibraryUserView {
+ id: userView
+
+ adsFocus: root.adsFocus
+ width: root.width
+
+ cellWidth: root.thumbnailSize
+ cellHeight: root.thumbnailSize + 20
+ numColumns: root.numColumns
+ hideHorizontalScrollBar: true
+
+ searchBox: searchBox
+
+ onUnimport: (bundleItem) => {
+ confirmUnimportDialog.targetBundleItem = bundleItem
+ confirmUnimportDialog.targetBundleLabel = "material"
+ confirmUnimportDialog.targetBundleModel = ContentLibraryBackend.userModel
confirmUnimportDialog.open()
}
+ onRemoveFromContentLib: (bundleItem) => {
+ confirmDeleteDialog.targetBundleItem = bundleItem
+ confirmDeleteDialog.targetBundleLabel = "material"
+ confirmDeleteDialog.open()
+ }
+
onCountChanged: root.responsiveResize(stackLayout.width, stackLayout.height)
}
}
diff --git a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryEffectContextMenu.qml b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryEffectContextMenu.qml
index 1e0bcf1eb4..008f99d4fa 100644
--- a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryEffectContextMenu.qml
+++ b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryEffectContextMenu.qml
@@ -12,7 +12,7 @@ StudioControls.Menu {
property var targetItem: null
- readonly property bool targetAvailable: targetItem && !ContentLibraryBackend.effectsModel.importerRunning
+ readonly property bool targetAvailable: targetItem && !ContentLibraryBackend.rootView.importerRunning
signal unimport(var bundleEff);
diff --git a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryEffectsView.qml b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryEffectsView.qml
index f6df99156b..199f784db1 100644
--- a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryEffectsView.qml
+++ b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryEffectsView.qml
@@ -91,7 +91,7 @@ HelperWidgets.ScrollView {
id: repeater
model: bundleCategoryItems
- delegate: ContentLibraryEffect {
+ delegate: ContentLibraryItem {
width: root.cellWidth
height: root.cellHeight
diff --git a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryEffect.qml b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryItem.qml
index b20cc71e15..e6e5cd05c3 100644
--- a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryEffect.qml
+++ b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryItem.qml
@@ -23,8 +23,8 @@ Item {
acceptedButtons: Qt.LeftButton | Qt.RightButton
onPressed: (mouse) => {
- if (mouse.button === Qt.LeftButton && !ContentLibraryBackend.effectsModel.importerRunning)
- ContentLibraryBackend.rootView.startDragEffect(modelData, mapToGlobal(mouse.x, mouse.y))
+ if (mouse.button === Qt.LeftButton && !ContentLibraryBackend.rootView.importerRunning)
+ ContentLibraryBackend.rootView.startDragItem(modelData, mapToGlobal(mouse.x, mouse.y))
else if (mouse.button === Qt.RightButton)
root.showContextMenu()
}
@@ -43,7 +43,7 @@ Item {
source: modelData.bundleItemIcon
cache: false
- Rectangle { // circular indicator for imported bundle effect
+ Rectangle { // circular indicator for imported bundle item
width: 10
height: 10
radius: 5
@@ -57,7 +57,7 @@ Item {
ToolTip {
visible: indicatorMouseArea.containsMouse
- text: qsTr("Effect is imported to project")
+ text: qsTr("Item is imported to the project")
delay: 1000
}
diff --git a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryItemContextMenu.qml b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryItemContextMenu.qml
new file mode 100644
index 0000000000..6f50512430
--- /dev/null
+++ b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryItemContextMenu.qml
@@ -0,0 +1,71 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import StudioControls as StudioControls
+import StudioTheme as StudioTheme
+import ContentLibraryBackend
+
+StudioControls.Menu {
+ id: root
+
+ property var targetItem: null
+ property bool enableRemove: false // true: adds an option to remove targetItem
+
+ readonly property bool targetAvailable: targetItem && !ContentLibraryBackend.rootView.importerRunning
+
+ signal unimport();
+ signal addToProject()
+ signal applyToSelected(bool add)
+ signal removeFromContentLib()
+
+ function popupMenu(item = null)
+ {
+ root.targetItem = item
+
+ let isMaterial = root.targetItem.itemType === "material"
+ applyToSelectedReplace.visible = isMaterial
+ applyToSelectedAdd.visible = isMaterial
+
+ popup()
+ }
+
+ closePolicy: StudioControls.Menu.CloseOnEscape | StudioControls.Menu.CloseOnPressOutside
+
+ StudioControls.MenuItem {
+ id: applyToSelectedReplace
+ text: qsTr("Apply to selected (replace)")
+ height: visible ? implicitHeight : 0
+ enabled: root.targetAvailable && ContentLibraryBackend.rootView.hasModelSelection
+ onTriggered: root.applyToSelected(false)
+ }
+
+ StudioControls.MenuItem {
+ id: applyToSelectedAdd
+ text: qsTr("Apply to selected (add)")
+ height: visible ? implicitHeight : 0
+ enabled: root.targetAvailable && ContentLibraryBackend.rootView.hasModelSelection
+ onTriggered: root.applyToSelected(true)
+ }
+
+ StudioControls.MenuSeparator {}
+
+ StudioControls.MenuItem {
+ enabled: root.targetAvailable
+ text: qsTr("Add an instance to project")
+ onTriggered: root.addToProject()
+ }
+
+ StudioControls.MenuItem {
+ enabled: root.targetAvailable && root.targetItem.bundleItemImported
+ text: qsTr("Remove from project")
+ onTriggered: root.unimport()
+ }
+
+ StudioControls.MenuItem {
+ text: qsTr("Remove from Content Library")
+ visible: root.enableRemove && root.targetAvailable
+ height: visible ? implicitHeight : 0
+ onTriggered: root.removeFromContentLib()
+ }
+}
diff --git a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryMaterial.qml b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryMaterial.qml
index 93b226d6ca..20ba17d804 100644
--- a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryMaterial.qml
+++ b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryMaterial.qml
@@ -12,12 +12,13 @@ import WebFetcher
Item {
id: root
- signal showContextMenu()
-
// Download states: "" (ie default, not downloaded), "unavailable", "downloading", "downloaded",
// "failed"
property string downloadState: modelData.isDownloaded() ? "downloaded" : ""
+ signal showContextMenu()
+ signal addToProject()
+
visible: modelData.bundleMaterialVisible
MouseArea {
@@ -29,7 +30,7 @@ Item {
acceptedButtons: Qt.LeftButton | Qt.RightButton
onPressed: (mouse) => {
- if (mouse.button === Qt.LeftButton && !materialsModel.importerRunning) {
+ if (mouse.button === Qt.LeftButton && !ContentLibraryBackend.rootView.importerRunning) {
if (root.downloadState === "downloaded")
ContentLibraryBackend.rootView.startDragMaterial(modelData, mapToGlobal(mouse.x, mouse.y))
} else if (mouse.button === Qt.RightButton && root.downloadState === "downloaded") {
@@ -71,7 +72,7 @@ Item {
color: "#00ff00"
border.color: "#555555"
border.width: 1
- visible: modelData.bundleMaterialImported
+ visible: modelData.bundleItemImported
ToolTip {
visible: indicatorMouseArea.containsMouse
@@ -96,12 +97,12 @@ Item {
pressColor: Qt.hsla(c.hslHue, c.hslSaturation, c.hslLightness, .4)
anchors.right: img.right
anchors.bottom: img.bottom
- enabled: !ContentLibraryBackend.materialsModel.importerRunning
+ enabled: !ContentLibraryBackend.rootView.importerRunning
visible: root.downloadState === "downloaded"
&& (containsMouse || mouseArea.containsMouse)
onClicked: {
- ContentLibraryBackend.materialsModel.addToProject(modelData)
+ root.addToProject()
}
}
@@ -183,7 +184,7 @@ Item {
baseUrl: modelData.bundleMaterialBaseWebUrl
files: modelData.bundleMaterialFiles
- targetDirPath: modelData.bundleMaterialParentPath
+ targetDirPath: modelData.bundleMaterialDirPath
onDownloadStarting: {
root.downloadState = "downloading"
diff --git a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryMaterialContextMenu.qml b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryMaterialContextMenu.qml
deleted file mode 100644
index ca3a05bdd1..0000000000
--- a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryMaterialContextMenu.qml
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-import QtQuick 2.15
-import HelperWidgets 2.0
-import StudioControls 1.0 as StudioControls
-import StudioTheme 1.0 as StudioTheme
-
-StudioControls.Menu {
- id: root
-
- property var targetMaterial: null
- property bool hasModelSelection: false
- property bool importerRunning: false
-
- readonly property bool targetAvailable: targetMaterial && !importerRunning
-
- signal unimport(var bundleMat);
- signal addToProject(var bundleMat)
-
- function popupMenu(targetMaterial = null)
- {
- this.targetMaterial = targetMaterial
- popup()
- }
-
- closePolicy: StudioControls.Menu.CloseOnEscape | StudioControls.Menu.CloseOnPressOutside
-
- StudioControls.MenuItem {
- text: qsTr("Apply to selected (replace)")
- enabled: root.targetAvailable && root.hasModelSelection
- onTriggered: materialsModel.applyToSelected(root.targetMaterial, false)
- }
-
- StudioControls.MenuItem {
- text: qsTr("Apply to selected (add)")
- enabled: root.targetAvailable && root.hasModelSelection
- onTriggered: materialsModel.applyToSelected(root.targetMaterial, true)
- }
-
- StudioControls.MenuSeparator {}
-
- StudioControls.MenuItem {
- enabled: root.targetAvailable
- text: qsTr("Add an instance to project")
-
- onTriggered: {
- root.addToProject(root.targetMaterial)
- }
- }
-
- StudioControls.MenuItem {
- enabled: root.targetAvailable && root.targetMaterial.bundleMaterialImported
- text: qsTr("Remove from project")
-
- onTriggered: root.unimport(root.targetMaterial)
- }
-}
diff --git a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryMaterialsView.qml b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryMaterialsView.qml
index c21baf4c58..e9fca31973 100644
--- a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryMaterialsView.qml
+++ b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryMaterialsView.qml
@@ -27,8 +27,6 @@ HelperWidgets.ScrollView {
root.count = c
}
- property var currMaterialItem: null
- property var rootItem: null
property var materialsModel: ContentLibraryBackend.materialsModel
required property var searchBox
@@ -48,20 +46,19 @@ HelperWidgets.ScrollView {
}
Column {
- ContentLibraryMaterialContextMenu {
+ ContentLibraryItemContextMenu {
id: ctxMenu
- hasModelSelection: materialsModel.hasModelSelection
- importerRunning: materialsModel.importerRunning
+ onApplyToSelected: (add) => root.materialsModel.applyToSelected(ctxMenu.targetItem, add)
- onUnimport: (bundleMat) => root.unimport(bundleMat)
- onAddToProject: (bundleMat) => materialsModel.addToProject(bundleMat)
+ onUnimport: root.unimport(ctxMenu.targetItem)
+ onAddToProject: root.materialsModel.addToProject(ctxMenu.targetItem)
}
Repeater {
id: categoryRepeater
- model: materialsModel
+ model: root.materialsModel
delegate: HelperWidgets.Section {
id: section
@@ -73,7 +70,7 @@ HelperWidgets.ScrollView {
bottomPadding: StudioTheme.Values.sectionPadding
caption: bundleCategoryName
- visible: bundleCategoryVisible && !materialsModel.isEmpty
+ visible: bundleCategoryVisible && !root.materialsModel.isEmpty
expanded: bundleCategoryExpanded
expandOnClick: false
category: "ContentLib_Mat"
@@ -104,6 +101,7 @@ HelperWidgets.ScrollView {
height: root.cellHeight
onShowContextMenu: ctxMenu.popupMenu(modelData)
+ onAddToProject: root.materialsModel.addToProject(modelData)
}
onCountChanged: root.assignMaxCount()
@@ -115,13 +113,13 @@ HelperWidgets.ScrollView {
Text {
id: infoText
text: {
- if (!materialsModel.matBundleExists)
+ if (!root.materialsModel.matBundleExists)
qsTr("No materials available. Make sure you have internet connection.")
else if (!ContentLibraryBackend.rootView.isQt6Project)
qsTr("<b>Content Library</b> materials are not supported in Qt5 projects.")
else if (!ContentLibraryBackend.rootView.hasQuick3DImport)
qsTr("To use <b>Content Library</b>, first add the QtQuick3D module in the <b>Components</b> view.")
- else if (!materialsModel.hasRequiredQuick3DImport)
+ else if (!root.materialsModel.hasRequiredQuick3DImport)
qsTr("To use <b>Content Library</b>, version 6.3 or later of the QtQuick3D module is required.")
else if (!ContentLibraryBackend.rootView.hasMaterialLibrary)
qsTr("<b>Content Library</b> is disabled inside a non-visual component.")
@@ -134,7 +132,7 @@ HelperWidgets.ScrollView {
font.pixelSize: StudioTheme.Values.baseFontSize
topPadding: 10
leftPadding: 10
- visible: materialsModel.isEmpty
+ visible: root.materialsModel.isEmpty
}
}
}
diff --git a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTexture.qml b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTexture.qml
index f74f190040..4fbeb1b8b5 100644
--- a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTexture.qml
+++ b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTexture.qml
@@ -148,7 +148,7 @@ Item {
visible: root.delegateVisible && root.downloadState != "downloading"
cache: false
- property string webUrl: modelData.textureWebUrl
+ property string textureUrl: modelData.textureUrl
IconButton {
id: downloadIcon
@@ -279,7 +279,7 @@ Item {
FileDownloader {
id: textureDownloader
- url: image.webUrl
+ url: image.textureUrl
probeUrl: false
downloadEnabled: true
onDownloadStarting: {
@@ -333,7 +333,7 @@ Item {
FileDownloader {
id: iconDownloader
- url: modelData.textureWebIconUrl
+ url: modelData.textureIconUrl
probeUrl: false
downloadEnabled: true
targetFilePath: modelData.textureIconPath
diff --git a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTextureContextMenu.qml b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTextureContextMenu.qml
index f804f16d89..b1f690f10c 100644
--- a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTextureContextMenu.qml
+++ b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTextureContextMenu.qml
@@ -12,6 +12,7 @@ StudioControls.Menu {
property var targetTexture: null
property bool hasSceneEnv: false
+ property bool enableRemove: false // true: adds an option to remove targetTexture
property bool canUse3D: targetTexture && ContentLibraryBackend.rootView.hasQuick3DImport && ContentLibraryBackend.rootView.hasMaterialLibrary
@@ -32,13 +33,20 @@ StudioControls.Menu {
StudioControls.MenuItem {
text: qsTr("Add texture")
- enabled: canUse3D
+ enabled: root.canUse3D
onTriggered: ContentLibraryBackend.rootView.addTexture(root.targetTexture)
}
StudioControls.MenuItem {
text: qsTr("Add light probe")
- enabled: root.hasSceneEnv && canUse3D
+ enabled: root.hasSceneEnv && root.canUse3D
onTriggered: ContentLibraryBackend.rootView.addLightProbe(root.targetTexture)
}
+
+ StudioControls.MenuItem {
+ text: qsTr("Remove from Content Library")
+ visible: root.targetTexture && root.enableRemove
+ height: visible ? implicitHeight : 0
+ onTriggered: ContentLibraryBackend.userModel.removeTexture(root.targetTexture)
+ }
}
diff --git a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTexturesView.qml b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTexturesView.qml
index 1fac9f2234..617b724e66 100644
--- a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTexturesView.qml
+++ b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTexturesView.qml
@@ -27,9 +27,6 @@ HelperWidgets.ScrollView {
root.count = c
}
- property var currMaterialItem: null
- property var rootItem: null
-
required property var searchBox
required property var model
required property string sectionCategory
diff --git a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryUserView.qml b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryUserView.qml
new file mode 100644
index 0000000000..cced9e5f09
--- /dev/null
+++ b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryUserView.qml
@@ -0,0 +1,170 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import Qt.labs.qmlmodels
+import HelperWidgets as HelperWidgets
+import StudioControls as StudioControls
+import StudioTheme as StudioTheme
+import ContentLibraryBackend
+
+HelperWidgets.ScrollView {
+ id: root
+
+ clip: true
+ interactive: !ctxMenuItem.opened && !ctxMenuTexture.opened
+ && !ContentLibraryBackend.rootView.isDragging && !HelperWidgets.Controller.contextMenuOpened
+
+ property real cellWidth: 100
+ property real cellHeight: 120
+ property int numColumns: 4
+
+ property int count: 0
+ function assignMaxCount() {
+ let c = 0
+ for (let i = 0; i < categoryRepeater.count; ++i)
+ c = Math.max(c, categoryRepeater.itemAt(i)?.count ?? 0)
+
+ root.count = c
+ }
+
+ required property var searchBox
+
+ signal unimport(var bundleItem);
+ signal removeFromContentLib(var bundleItem);
+
+ function closeContextMenu() {
+ ctxMenuItem.close()
+ ctxMenuTexture.close()
+ }
+
+ function expandVisibleSections() {
+ for (let i = 0; i < categoryRepeater.count; ++i) {
+ let cat = categoryRepeater.itemAt(i)
+ if (cat.visible && !cat.expanded)
+ cat.expandSection()
+ }
+ }
+
+ Column {
+ ContentLibraryItemContextMenu {
+ id: ctxMenuItem
+
+ enableRemove: true
+
+ onApplyToSelected: (add) => ContentLibraryBackend.userModel.applyToSelected(ctxMenuItem.targetItem, add)
+
+ onUnimport: root.unimport(ctxMenuItem.targetItem)
+ onAddToProject: ContentLibraryBackend.userModel.addToProject(ctxMenuItem.targetItem)
+ onRemoveFromContentLib: root.removeFromContentLib(ctxMenuItem.targetItem)
+ }
+
+ ContentLibraryTextureContextMenu {
+ id: ctxMenuTexture
+
+ enableRemove: true
+ hasSceneEnv: ContentLibraryBackend.texturesModel.hasSceneEnv
+ }
+
+ Repeater {
+ id: categoryRepeater
+
+ model: ContentLibraryBackend.userModel
+
+ delegate: HelperWidgets.Section {
+ id: section
+
+ width: root.width
+ leftPadding: StudioTheme.Values.sectionPadding
+ rightPadding: StudioTheme.Values.sectionPadding
+ topPadding: StudioTheme.Values.sectionPadding
+ bottomPadding: StudioTheme.Values.sectionPadding
+
+ caption: categoryName
+ visible: categoryVisible && infoText.text === ""
+ category: "ContentLib_User"
+
+ function expandSection() {
+ section.expanded = true
+ }
+
+ property alias count: repeater.count
+
+ onCountChanged: root.assignMaxCount()
+
+ Grid {
+ width: section.width - section.leftPadding - section.rightPadding
+ spacing: StudioTheme.Values.sectionGridSpacing
+ columns: root.numColumns
+
+ Repeater {
+ id: repeater
+ model: categoryItems
+
+ delegate: DelegateChooser {
+ role: "itemType"
+
+ DelegateChoice {
+ roleValue: "material"
+ ContentLibraryMaterial {
+ width: root.cellWidth
+ height: root.cellHeight
+
+ onShowContextMenu: ctxMenuItem.popupMenu(modelData)
+ onAddToProject: ContentLibraryBackend.userModel.addToProject(modelData)
+ }
+ }
+ DelegateChoice {
+ roleValue: "texture"
+ delegate: ContentLibraryTexture {
+ width: root.cellWidth
+ height: root.cellWidth // for textures use a square size since there is no name row
+
+ onShowContextMenu: ctxMenuTexture.popupMenu(modelData)
+ }
+ }
+ DelegateChoice {
+ roleValue: "item"
+ delegate: ContentLibraryItem {
+ width: root.cellWidth
+ height: root.cellHeight
+
+ onShowContextMenu: ctxMenuItem.popupMenu(modelData)
+ }
+ }
+ }
+
+ onCountChanged: root.assignMaxCount()
+ }
+ }
+
+ Text {
+ text: qsTr("No match found.");
+ color: StudioTheme.Values.themeTextColor
+ font.pixelSize: StudioTheme.Values.baseFontSize
+ leftPadding: 10
+ visible: infoText.text === "" && !searchBox.isEmpty() && categoryNoMatch
+ }
+ }
+ }
+
+ Text {
+ id: infoText
+ text: {
+ if (!ContentLibraryBackend.rootView.isQt6Project)
+ qsTr("<b>Content Library</b> is not supported in Qt5 projects.")
+ else if (!ContentLibraryBackend.rootView.hasQuick3DImport)
+ qsTr("To use <b>Content Library</b>, first add the QtQuick3D module in the <b>Components</b> view.")
+ else if (!ContentLibraryBackend.rootView.hasMaterialLibrary)
+ qsTr("<b>Content Library</b> is disabled inside a non-visual component.")
+ else
+ ""
+ }
+ color: StudioTheme.Values.themeTextColor
+ font.pixelSize: StudioTheme.Values.baseFontSize
+ topPadding: 10
+ leftPadding: 10
+ visible: infoText.text !== ""
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/contentLibraryQmlSource/DeleteBundleItemDialog.qml b/share/qtcreator/qmldesigner/contentLibraryQmlSource/DeleteBundleItemDialog.qml
new file mode 100644
index 0000000000..d8f6551ae5
--- /dev/null
+++ b/share/qtcreator/qmldesigner/contentLibraryQmlSource/DeleteBundleItemDialog.qml
@@ -0,0 +1,65 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import HelperWidgets
+import StudioControls as StudioControls
+import StudioTheme as StudioTheme
+import ContentLibraryBackend
+
+StudioControls.Dialog {
+ id: root
+
+ property var targetBundleItem
+ property var targetBundleModel
+ property string targetBundleLabel // "effect" or "material"
+
+ title: qsTr("Remove bundle %1").arg(root.targetBundleLabel)
+ anchors.centerIn: parent
+ closePolicy: Popup.CloseOnEscape
+ implicitWidth: 300
+ modal: true
+
+ onOpened: warningText.forceActiveFocus()
+
+ contentItem: Column {
+ spacing: 20
+ width: parent.width
+
+ Text {
+ id: warningText
+
+ text: qsTr("Are you sure you? The action cannot be undone")
+ color: StudioTheme.Values.themeTextColor
+ wrapMode: Text.WordWrap
+ anchors.right: parent.right
+ anchors.left: parent.left
+ leftPadding: 10
+ rightPadding: 10
+
+ Keys.onEnterPressed: btnRemove.onClicked()
+ Keys.onReturnPressed: btnRemove.onClicked()
+ }
+
+ Row {
+ anchors.right: parent.right
+ Button {
+ id: btnRemove
+
+ text: qsTr("Remove")
+
+ onClicked: {
+ ContentLibraryBackend.userModel.removeFromContentLib(root.targetBundleItem)
+ root.accept()
+ }
+ }
+
+ Button {
+ text: qsTr("Cancel")
+ onClicked: root.reject()
+ }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/contentLibraryQmlSource/UnimportBundleMaterialDialog.qml b/share/qtcreator/qmldesigner/contentLibraryQmlSource/UnimportBundleItemDialog.qml
index 48be045d8b..305e1018e3 100644
--- a/share/qtcreator/qmldesigner/contentLibraryQmlSource/UnimportBundleMaterialDialog.qml
+++ b/share/qtcreator/qmldesigner/contentLibraryQmlSource/UnimportBundleItemDialog.qml
@@ -12,24 +12,27 @@ import ContentLibraryBackend
StudioControls.Dialog {
id: root
- title: qsTr("Bundle material might be in use")
+ property var targetBundleItem
+ property var targetBundleModel
+ property string targetBundleLabel // "effect" or "material"
+
+ title: qsTr("Bundle %1 might be in use").arg(root.targetBundleLabel)
anchors.centerIn: parent
closePolicy: Popup.CloseOnEscape
implicitWidth: 300
modal: true
- property var targetBundleType // "effect" or "material"
- property var targetBundleItem
+ onOpened: warningText.forceActiveFocus()
contentItem: Column {
spacing: 20
width: parent.width
Text {
- id: folderNotEmpty
+ id: warningText
- text: qsTr("If the %1 you are removing is in use, it might cause the project to malfunction.\n\nAre you sure you want to remove the %1?")
- .arg(root.targetBundleType)
+ text: qsTr("If the %1 you are removing is in use, it might cause the project to malfunction.\n\nAre you sure you want to remove it?")
+ .arg(root.targetBundleLabel)
color: StudioTheme.Values.themeTextColor
wrapMode: Text.WordWrap
anchors.right: parent.right
@@ -49,11 +52,7 @@ StudioControls.Dialog {
text: qsTr("Remove")
onClicked: {
- if (root.targetBundleType === "material")
- ContentLibraryBackend.materialsModel.removeFromProject(root.targetBundleItem)
- else if (root.targetBundleType === "effect")
- ContentLibraryBackend.effectsModel.removeFromProject(root.targetBundleItem)
-
+ root.targetBundleModel.removeFromProject(root.targetBundleItem)
root.accept()
}
}
@@ -64,6 +63,4 @@ StudioControls.Dialog {
}
}
}
-
- onOpened: folderNotEmpty.forceActiveFocus()
}
diff --git a/share/qtcreator/qmldesigner/designericons.json b/share/qtcreator/qmldesigner/designericons.json
index 157012b312..005494b471 100644
--- a/share/qtcreator/qmldesigner/designericons.json
+++ b/share/qtcreator/qmldesigner/designericons.json
@@ -219,7 +219,7 @@
}
},
"CameraSpeedConfigIcon": {
- "iconName": "camera_medium"
+ "iconName": "cameraSpeed_medium"
},
"EditColorIcon": {
"iconName": "colorSelection_medium"
diff --git a/share/qtcreator/qmldesigner/edit3dQmlSource/CameraSpeedConfigurationDialog.qml b/share/qtcreator/qmldesigner/edit3dQmlSource/CameraSpeedConfigurationDialog.qml
index 2e2ff54700..b51369ffa3 100644
--- a/share/qtcreator/qmldesigner/edit3dQmlSource/CameraSpeedConfigurationDialog.qml
+++ b/share/qtcreator/qmldesigner/edit3dQmlSource/CameraSpeedConfigurationDialog.qml
@@ -57,7 +57,7 @@ Rectangle {
HelperWidgets.IconIndicator {
anchors.fill: parent
- icon: StudioTheme.Constants.camera_medium
+ icon: StudioTheme.Constants.cameraSpeed_medium
pixelSize: StudioTheme.Values.myIconFontSize * 1.4
iconColor: StudioTheme.Values.themeLinkIndicatorColorHover
enabled: false
diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposer.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposer.qml
index dda1d93ff9..305bbc7925 100644
--- a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposer.qml
+++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposer.qml
@@ -365,7 +365,7 @@ ColumnLayout {
Connections {
id: dragConnection
target: root.draggedSec
- onYChanged: root.handleDragMove()
+ function onYChanged() { root.handleDragMove() }
}
Timer {
diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerPreview.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerPreview.qml
index c832b2f370..c0c47f7366 100644
--- a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerPreview.qml
+++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerPreview.qml
@@ -21,6 +21,7 @@ Column {
readonly property int updateDelay: 100
readonly property int previewMargin: 5
+ readonly property int extraMargin: 200
property real previewScale: 1
@@ -246,6 +247,8 @@ Column {
layer.enabled: true
layer.mipmap: true
layer.smooth: true
+ layer.sourceRect: Qt.rect(-root.extraMargin, -root.extraMargin,
+ width + root.extraMargin * 2, height + root.extraMargin * 2)
visible: false
Image {
@@ -347,10 +350,6 @@ Column {
width: source.width
height: source.height
anchors.centerIn: parent
- // Cache the layer. This way heavy shaders rendering doesn't
- // slow down code editing & rest of the UI.
- layer.enabled: true
- layer.smooth: true
}
}
@@ -383,7 +382,6 @@ Column {
Connections {
target: effectComposerModel
function onShadersBaked() {
- console.log("Shaders Baked!")
updateTimer.restart()
}
}
diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerTopBar.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerTopBar.qml
index d5ac4461c4..799dbeeddc 100644
--- a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerTopBar.qml
+++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerTopBar.qml
@@ -48,7 +48,7 @@ Rectangle {
style: StudioTheme.Values.viewBarButtonStyle
buttonIcon: StudioTheme.Constants.saveAs_medium
tooltip: qsTr("Save current composition with a new name")
- enabled: root.backendModel ? root.backendModel.isEnabled && !root.backendModel.isEmpty
+ enabled: root.backendModel ? root.backendModel.isEnabled && root.backendModel.currentComposition !== ""
: false
onClicked: root.saveAsClicked()
@@ -58,7 +58,8 @@ Rectangle {
style: StudioTheme.Values.viewBarButtonStyle
buttonIcon: StudioTheme.Constants.assignTo_medium
tooltip: qsTr("Assign current composition to selected item")
- enabled: root.backendModel ? root.backendModel.isEnabled
+ enabled: root.backendModel ? root.backendModel.hasValidTarget
+ && root.backendModel.isEnabled
&& root.backendModel.currentComposition !== ""
: false
@@ -88,8 +89,8 @@ Rectangle {
2. Adjust the effect nodes properties
3. Change the order of the effects, if you like
4. See the preview
-5. Save in the library, if you wish to reuse the effect later") // TODO: revise with doc engineer
+5. Save in the assets library, if you wish to reuse the effect later")
- onClicked: Qt.openUrlExternally("https://doc.qt.io/qtdesignstudio/qt-using-effect-maker-effects.html")
+ onClicked: Qt.openUrlExternally("https://doc.qt.io/qtdesignstudio/qtquick-effect-composer-view.html")
}
}
diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNode.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNode.qml
index 6defa3b092..a606461b5c 100644
--- a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNode.qml
+++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNode.qml
@@ -43,6 +43,8 @@ HelperWidgets.Section {
EffectCompositionNodeUniform {
width: root.width
+
+ onReset: nodeUniformsModel.resetData(index)
}
}
}
diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNodeUniform.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNodeUniform.qml
index 71cbf94f8b..7c3214c5fa 100644
--- a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNodeUniform.qml
+++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNodeUniform.qml
@@ -13,9 +13,10 @@ Item {
id: root
height: layout.implicitHeight
-
visible: !uniformUseCustomValue
+ signal reset()
+
Component.onCompleted: {
if (uniformType === "int") {
if (uniformControlType === "channel")
@@ -49,10 +50,11 @@ Item {
RowLayout {
id: layout
- spacing: 20
anchors.fill: parent
Text {
+ id: textName
+
text: uniformDisplayName
color: StudioTheme.Values.themeTextColor
font.pixelSize: StudioTheme.Values.baseFontSize
@@ -63,11 +65,38 @@ Item {
elide: Text.ElideRight
HelperWidgets.ToolTipArea {
+ id: tooltipArea
+
anchors.fill: parent
tooltip: uniformDescription
}
}
+ Item {
+ Layout.preferredHeight: 30
+ Layout.preferredWidth: 30
+
+ MouseArea {
+ id: mouseArea
+
+ anchors.fill: parent
+ hoverEnabled: true
+ }
+
+ HelperWidgets.IconButton {
+ id: iconButton
+
+ buttonSize: 24
+ icon: StudioTheme.Constants.reload_medium
+ iconSize: 16
+ anchors.centerIn: parent
+ visible: mouseArea.containsMouse || iconButton.containsMouse
+ tooltip: qsTr("Reset value")
+ onClicked: root.reset()
+ }
+
+ }
+
Loader {
id: valueLoader
Layout.fillWidth: true
diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/SaveAsDialog.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/SaveAsDialog.qml
index d139ba9205..65b01be457 100644
--- a/share/qtcreator/qmldesigner/effectComposerQmlSources/SaveAsDialog.qml
+++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/SaveAsDialog.qml
@@ -50,11 +50,13 @@ StudioControls.Dialog {
if (/[^A-Za-z0-9_]+/.test(text))
errMsg = qsTr("Name contains invalid characters.")
else if (!/^[A-Z]/.test(text))
- errMsg = qsTr("Name must start with a capital letter")
+ errMsg = qsTr("Name must start with a capital letter.")
else if (text.length < 3)
- errMsg = qsTr("Name must have at least 3 characters")
+ errMsg = qsTr("Name must have at least 3 characters.")
else if (/\s/.test(text))
- errMsg = qsTr("Name cannot contain white space")
+ errMsg = qsTr("Name cannot contain white space.")
+ else if (EffectComposerBackend.effectComposerModel.nameExists(text))
+ errMsg = qsTr("Name is already taken.")
emptyText.text = errMsg
btnSave.enabled = errMsg.length === 0
diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueColor.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueColor.qml
index 4b00bd7613..f7482260b5 100644
--- a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueColor.qml
+++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueColor.qml
@@ -15,8 +15,14 @@ Row {
StudioControls.ColorEditor {
actionIndicatorVisible: false
- Component.onCompleted: color = uniformValue
+ // color: uniformValue binding can get overwritten by normal operation of the control
+ property color resetValue: uniformValue
- onColorChanged: uniformValue = color
+ onResetValueChanged: color = uniformValue
+ Component.onCompleted: color = uniformValue
+ onColorChanged: {
+ if (uniformValue !== color)
+ uniformValue = color
+ }
}
}
diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueFloat.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueFloat.qml
index 7348d6668b..6b723a9bc5 100644
--- a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueFloat.qml
+++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueFloat.qml
@@ -14,6 +14,10 @@ Row {
HelperWidgets.DoubleSpinBox {
id: spinBox
+ // value: uniformValue binding can get overwritten by normal operation of the control
+ property double resetValue: uniformValue
+ onResetValueChanged: value = resetValue
+
width: 60
spinBoxIndicatorVisible: false
inputHAlignment: Qt.AlignHCenter
@@ -22,7 +26,7 @@ Row {
value: uniformValue
stepSize: .01
decimals: 2
- onValueChanged: uniformValue = value
+ onValueModified: uniformValue = value
}
StudioControls.Slider {
@@ -38,8 +42,9 @@ Row {
to: uniformMaxValue
value: uniformValue
onMoved: {
- uniformValue = value
- spinBox.value = value // binding isn't working for this property so update it
+ let fixedValue = Number.parseFloat(value).toFixed(slider.decimals)
+ uniformValue = fixedValue
+ spinBox.value = fixedValue // binding isn't working for this property so update it
}
}
}
diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueInt.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueInt.qml
index 89f571c8cb..d67929168a 100644
--- a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueInt.qml
+++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueInt.qml
@@ -14,6 +14,10 @@ Row {
HelperWidgets.DoubleSpinBox {
id: spinBox
+ // value: uniformValue binding can get overwritten by normal operation of the control
+ property double resetValue: uniformValue
+ onResetValueChanged: value = resetValue
+
width: 60
spinBoxIndicatorVisible: false
inputHAlignment: Qt.AlignHCenter
@@ -22,7 +26,7 @@ Row {
value: uniformValue
stepSize: 1
decimals: 0
- onValueChanged: uniformValue = Math.round(value)
+ onValueModified: uniformValue = Math.round(value)
}
StudioControls.Slider {
diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec2.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec2.qml
index b703d5f184..adb4fe9905 100644
--- a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec2.qml
+++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec2.qml
@@ -15,6 +15,10 @@ RowLayout {
HelperWidgets.DoubleSpinBox {
id: vX
+ // value: uniformValue binding can get overwritten by normal operation of the control
+ property double resetValue: uniformValue.x
+ onResetValueChanged: value = resetValue
+
Layout.fillWidth: true
Layout.minimumWidth: 30
Layout.maximumWidth: 60
@@ -26,7 +30,7 @@ RowLayout {
value: uniformValue.x
stepSize: .01
decimals: 2
- onValueChanged: uniformValue.x = value
+ onValueModified: uniformValue.x = value
}
Item { // spacer
@@ -51,6 +55,10 @@ RowLayout {
HelperWidgets.DoubleSpinBox {
id: vY
+ // value: uniformValue binding can get overwritten by normal operation of the control
+ property double resetValue: uniformValue.y
+ onResetValueChanged: value = resetValue
+
Layout.fillWidth: true
Layout.minimumWidth: 30
Layout.maximumWidth: 60
@@ -62,7 +70,7 @@ RowLayout {
value: uniformValue.y
stepSize: .01
decimals: 2
- onValueChanged: uniformValue.y = value
+ onValueModified: uniformValue.y = value
}
Item { // spacer
diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec3.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec3.qml
index d59b63a514..78573c48f6 100644
--- a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec3.qml
+++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec3.qml
@@ -15,6 +15,10 @@ RowLayout {
HelperWidgets.DoubleSpinBox {
id: vX
+ // value: uniformValue binding can get overwritten by normal operation of the control
+ property double resetValue: uniformValue.x
+ onResetValueChanged: value = resetValue
+
Layout.fillWidth: true
Layout.minimumWidth: 30
Layout.maximumWidth: 60
@@ -26,7 +30,7 @@ RowLayout {
value: uniformValue.x
stepSize: .01
decimals: 2
- onValueChanged: uniformValue.x = value
+ onValueModified: uniformValue.x = value
}
Item { // spacer
@@ -51,6 +55,10 @@ RowLayout {
HelperWidgets.DoubleSpinBox {
id: vY
+ // value: uniformValue binding can get overwritten by normal operation of the control
+ property double resetValue: uniformValue.y
+ onResetValueChanged: value = resetValue
+
Layout.fillWidth: true
Layout.minimumWidth: 30
Layout.maximumWidth: 60
@@ -62,7 +70,7 @@ RowLayout {
value: uniformValue.y
stepSize: .01
decimals: 2
- onValueChanged: uniformValue.y = value
+ onValueModified: uniformValue.y = value
}
Item { // spacer
@@ -87,6 +95,10 @@ RowLayout {
HelperWidgets.DoubleSpinBox {
id: vZ
+ // value: uniformValue binding can get overwritten by normal operation of the control
+ property double resetValue: uniformValue.z
+ onResetValueChanged: value = resetValue
+
Layout.fillWidth: true
Layout.minimumWidth: 30
Layout.maximumWidth: 60
@@ -98,7 +110,7 @@ RowLayout {
value: uniformValue.z
stepSize: .01
decimals: 2
- onValueChanged: uniformValue.z = value
+ onValueModified: uniformValue.z = value
}
Item { // spacer
diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec4.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec4.qml
index 7e930abf81..61ce8e6389 100644
--- a/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec4.qml
+++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/ValueVec4.qml
@@ -15,6 +15,10 @@ RowLayout {
HelperWidgets.DoubleSpinBox {
id: vX
+ // value: uniformValue binding can get overwritten by normal operation of the control
+ property double resetValue: uniformValue.x
+ onResetValueChanged: value = resetValue
+
Layout.fillWidth: true
Layout.minimumWidth: 30
Layout.maximumWidth: 60
@@ -26,7 +30,7 @@ RowLayout {
value: uniformValue.x
stepSize: .01
decimals: 2
- onValueChanged: uniformValue.x = value
+ onValueModified: uniformValue.x = value
}
Item { // spacer
@@ -51,6 +55,10 @@ RowLayout {
HelperWidgets.DoubleSpinBox {
id: vY
+ // value: uniformValue binding can get overwritten by normal operation of the control
+ property double resetValue: uniformValue.y
+ onResetValueChanged: value = resetValue
+
Layout.fillWidth: true
Layout.minimumWidth: 30
Layout.maximumWidth: 60
@@ -62,7 +70,7 @@ RowLayout {
value: uniformValue.y
stepSize: .01
decimals: 2
- onValueChanged: uniformValue.y = value
+ onValueModified: uniformValue.y = value
}
Item { // spacer
@@ -87,6 +95,10 @@ RowLayout {
HelperWidgets.DoubleSpinBox {
id: vZ
+ // value: uniformValue binding can get overwritten by normal operation of the control
+ property double resetValue: uniformValue.z
+ onResetValueChanged: value = resetValue
+
Layout.fillWidth: true
Layout.minimumWidth: 30
Layout.maximumWidth: 60
@@ -98,7 +110,7 @@ RowLayout {
value: uniformValue.z
stepSize: .01
decimals: 2
- onValueChanged: uniformValue.z = value
+ onValueModified: uniformValue.z = value
}
Item { // spacer
@@ -123,6 +135,10 @@ RowLayout {
HelperWidgets.DoubleSpinBox {
id: vW
+ // value: uniformValue binding can get overwritten by normal operation of the control
+ property double resetValue: uniformValue.w
+ onResetValueChanged: value = resetValue
+
Layout.fillWidth: true
Layout.minimumWidth: 30
Layout.maximumWidth: 60
@@ -134,7 +150,7 @@ RowLayout {
value: uniformValue.w
stepSize: .01
decimals: 2
- onValueChanged: uniformValue.w = value
+ onValueModified: uniformValue.w = value
}
Item { // spacer
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-16.png b/share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-16.png
new file mode 100644
index 0000000000..6b16d81397
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-24.png b/share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-24.png
new file mode 100644
index 0000000000..0549a84758
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-24.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-24@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-24@2x.png
new file mode 100644
index 0000000000..8876f95ae6
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/ambient-sound-24@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon.png
new file mode 100644
index 0000000000..71371f97a3
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon16.png
new file mode 100644
index 0000000000..86b80e95ab
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon@2x.png
new file mode 100644
index 0000000000..4ad2a9011b
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/animated-image-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/animatedsprite-loading.png b/share/qtcreator/qmldesigner/itemLibrary/images/animatedsprite-loading.png
new file mode 100644
index 0000000000..ff2bbbd140
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/animatedsprite-loading.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-16.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-16.png
new file mode 100644
index 0000000000..da40bc69a2
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-24.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-24.png
new file mode 100644
index 0000000000..b3ebdf745b
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-24.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-24@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-24@2x.png
new file mode 100644
index 0000000000..476df8640f
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/audio-engine-24@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-16.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-16.png
new file mode 100644
index 0000000000..ecc583b859
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-24.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-24.png
new file mode 100644
index 0000000000..ee181f57cc
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-24.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-24@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-24@2x.png
new file mode 100644
index 0000000000..2588277e53
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/audio-listener-24@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-output-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-output-16px.png
new file mode 100644
index 0000000000..6ae703de64
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/audio-output-16px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-output-24px.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-output-24px.png
new file mode 100644
index 0000000000..f2133ca716
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/audio-output-24px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-output-24px@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-output-24px@2x.png
new file mode 100644
index 0000000000..9336b81b6e
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/audio-output-24px@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-room-16.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-room-16.png
new file mode 100644
index 0000000000..98f245d624
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/audio-room-16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-room-24.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-room-24.png
new file mode 100644
index 0000000000..294d1574ae
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/audio-room-24.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/audio-room-24@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/audio-room-24@2x.png
new file mode 100644
index 0000000000..bef7f80e3e
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/audio-room-24@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/border-image-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/border-image-icon.png
new file mode 100644
index 0000000000..5418a0f55a
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/border-image-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/border-image-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/border-image-icon16.png
new file mode 100644
index 0000000000..17f7ed0688
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/border-image-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/border-image-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/border-image-icon@2x.png
new file mode 100644
index 0000000000..fb4fb33910
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/border-image-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon.png
new file mode 100644
index 0000000000..666d1ed93f
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon16.png
new file mode 100644
index 0000000000..5aa57d7f48
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon@2x.png
new file mode 100644
index 0000000000..bb2278ff89
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/busyindicator-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/button-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/button-icon.png
new file mode 100644
index 0000000000..c44909f6dd
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/button-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/button-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/button-icon16.png
new file mode 100644
index 0000000000..5c921deb13
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/button-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/button-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/button-icon@2x.png
new file mode 100644
index 0000000000..f90a1ba7dc
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/button-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/checkbox-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/checkbox-icon.png
new file mode 100644
index 0000000000..ee669b3a88
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/checkbox-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/checkbox-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/checkbox-icon16.png
new file mode 100644
index 0000000000..8d89eab841
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/checkbox-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/checkbox-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/checkbox-icon@2x.png
new file mode 100644
index 0000000000..51c5601de0
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/checkbox-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/column-positioner-icon-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/column-positioner-icon-16px.png
new file mode 100644
index 0000000000..8d963e2bab
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/column-positioner-icon-16px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/column-positioner-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/column-positioner-icon.png
new file mode 100644
index 0000000000..0cd116d13c
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/column-positioner-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/column-positioner-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/column-positioner-icon@2x.png
new file mode 100644
index 0000000000..3247384285
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/column-positioner-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/combobox-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/combobox-icon.png
new file mode 100644
index 0000000000..2d31b17c65
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/combobox-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/combobox-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/combobox-icon16.png
new file mode 100644
index 0000000000..15fc3505ba
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/combobox-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/combobox-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/combobox-icon@2x.png
new file mode 100644
index 0000000000..5f82390596
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/combobox-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/component-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/component-icon.png
new file mode 100644
index 0000000000..9c7df42bc7
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/component-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/component-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/component-icon16.png
new file mode 100644
index 0000000000..99941541c6
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/component-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/component-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/component-icon@2x.png
new file mode 100644
index 0000000000..f66349a63b
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/component-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/control-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/control-icon.png
new file mode 100644
index 0000000000..fd9e4e8ff3
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/control-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/control-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/control-icon16.png
new file mode 100644
index 0000000000..31c765483e
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/control-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/control-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/control-icon@2x.png
new file mode 100644
index 0000000000..22604d2492
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/control-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/default-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/default-icon.png
new file mode 100644
index 0000000000..564226e949
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/default-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/default3d.png b/share/qtcreator/qmldesigner/itemLibrary/images/default3d.png
new file mode 100644
index 0000000000..a3b6c7f6f2
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/default3d.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/default3d16.png b/share/qtcreator/qmldesigner/itemLibrary/images/default3d16.png
new file mode 100644
index 0000000000..de8906a724
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/default3d16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/default3d@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/default3d@2x.png
new file mode 100644
index 0000000000..7ca04a01ea
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/default3d@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon.png
new file mode 100644
index 0000000000..5a55bd9f77
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon16.png
new file mode 100644
index 0000000000..cd21394e46
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon@2x.png
new file mode 100644
index 0000000000..7beee2fab0
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/delaybutton-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/dial-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/dial-icon.png
new file mode 100644
index 0000000000..b3b63e3523
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/dial-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/dial-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/dial-icon16.png
new file mode 100644
index 0000000000..8d8c7c09b0
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/dial-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/dial-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/dial-icon@2x.png
new file mode 100644
index 0000000000..22547a16b8
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/dial-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/drop-area-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/drop-area-16px.png
new file mode 100644
index 0000000000..278690f07f
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/drop-area-16px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/drop-area-24px.png b/share/qtcreator/qmldesigner/itemLibrary/images/drop-area-24px.png
new file mode 100644
index 0000000000..a286efb032
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/drop-area-24px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/drop-area-24px@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/drop-area-24px@2x.png
new file mode 100644
index 0000000000..47abb7f9e3
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/drop-area-24px@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-16px.png
new file mode 100644
index 0000000000..d9027813d0
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-16px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-24px.png b/share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-24px.png
new file mode 100644
index 0000000000..a8a0bf65a4
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-24px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-24px@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-24px@2x.png
new file mode 100644
index 0000000000..a2f7bf93d3
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/extended-view3d-24px@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/flickable-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/flickable-icon.png
new file mode 100644
index 0000000000..bdc2253959
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/flickable-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/flickable-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/flickable-icon16.png
new file mode 100644
index 0000000000..d7ab9de8a7
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/flickable-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/flickable-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/flickable-icon@2x.png
new file mode 100644
index 0000000000..b28b0fa4d9
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/flickable-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/flipable-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/flipable-icon.png
new file mode 100644
index 0000000000..1f5f6966c0
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/flipable-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/flipable-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/flipable-icon16.png
new file mode 100644
index 0000000000..cf252f08b8
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/flipable-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon-16px.png
new file mode 100644
index 0000000000..67be7b474d
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon-16px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon.png
new file mode 100644
index 0000000000..f8fa80970e
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon@2x.png
new file mode 100644
index 0000000000..fc3deff849
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/flow-positioner-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon.png
new file mode 100644
index 0000000000..0dff9a075d
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon16.png
new file mode 100644
index 0000000000..50c6f75cd8
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon@2x.png
new file mode 100644
index 0000000000..b3ffdea6eb
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/focusscope-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/frame-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/frame-icon.png
new file mode 100644
index 0000000000..32abc8bf1e
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/frame-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/frame-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/frame-icon16.png
new file mode 100644
index 0000000000..e5b65ad53b
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/frame-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/frame-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/frame-icon@2x.png
new file mode 100644
index 0000000000..8b876f38ec
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/frame-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon-16px.png
new file mode 100644
index 0000000000..47b34f9d14
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon-16px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon.png
new file mode 100644
index 0000000000..10d0b69a7b
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon@2x.png
new file mode 100644
index 0000000000..4374b60e7a
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/grid-positioner-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon.png
new file mode 100644
index 0000000000..7457fbd7e1
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon16.png
new file mode 100644
index 0000000000..038a02ed86
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon@2x.png
new file mode 100644
index 0000000000..af233a0df3
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/gridview-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon.png
new file mode 100644
index 0000000000..5542ecf8bf
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon16.png
new file mode 100644
index 0000000000..9cf4324819
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon@2x.png
new file mode 100644
index 0000000000..80dab3c716
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/groupbox-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/image-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/image-icon.png
new file mode 100644
index 0000000000..318ce0874a
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/image-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/image-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/image-icon16.png
new file mode 100644
index 0000000000..3aa46b6106
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/image-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/image-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/image-icon@2x.png
new file mode 100644
index 0000000000..cc84918975
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/image-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/item-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/item-icon.png
new file mode 100644
index 0000000000..af81cdfdb1
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/item-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/item-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/item-icon16.png
new file mode 100644
index 0000000000..46d3ec1dbc
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/item-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/item-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/item-icon@2x.png
new file mode 100644
index 0000000000..f05aa57c2f
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/item-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon.png
new file mode 100644
index 0000000000..822cf3e7b8
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon16.png
new file mode 100644
index 0000000000..b3ed007a0e
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon@2x.png
new file mode 100644
index 0000000000..cb81308ff8
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/itemdelegate-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/keyframe-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/keyframe-16px.png
new file mode 100644
index 0000000000..6e1c9f912a
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/keyframe-16px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/label-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/label-icon.png
new file mode 100644
index 0000000000..788bef078c
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/label-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/label-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/label-icon16.png
new file mode 100644
index 0000000000..b68d384568
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/label-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/label-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/label-icon@2x.png
new file mode 100644
index 0000000000..7001413d3b
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/label-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/listview-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/listview-icon.png
new file mode 100644
index 0000000000..5a2f3c203b
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/listview-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/listview-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/listview-icon16.png
new file mode 100644
index 0000000000..2657bf2181
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/listview-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/listview-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/listview-icon@2x.png
new file mode 100644
index 0000000000..b1d3fb67d2
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/listview-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/loader-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/loader-icon.png
new file mode 100644
index 0000000000..29082eacf1
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/loader-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/loader-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/loader-icon16.png
new file mode 100644
index 0000000000..4a2b093259
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/loader-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/loader-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/loader-icon@2x.png
new file mode 100644
index 0000000000..750b13bd02
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/loader-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/media-player-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/media-player-16px.png
new file mode 100644
index 0000000000..515287a846
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/media-player-16px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/media-player-24px.png b/share/qtcreator/qmldesigner/itemLibrary/images/media-player-24px.png
new file mode 100644
index 0000000000..1b31ddc826
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/media-player-24px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/media-player-24px@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/media-player-24px@2x.png
new file mode 100644
index 0000000000..86ae5914ac
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/media-player-24px@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon.png
new file mode 100644
index 0000000000..fe316caf8d
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon16.png
new file mode 100644
index 0000000000..bc8725fb5f
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon@2x.png
new file mode 100644
index 0000000000..04a25e13db
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/mouse-area-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/page-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/page-icon.png
new file mode 100644
index 0000000000..b5ac87e899
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/page-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/page-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/page-icon16.png
new file mode 100644
index 0000000000..bc6810b605
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/page-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/page-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/page-icon@2x.png
new file mode 100644
index 0000000000..23db032f4a
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/page-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon.png
new file mode 100644
index 0000000000..edb6b377bb
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon16.png
new file mode 100644
index 0000000000..0fb8967564
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon@2x.png
new file mode 100644
index 0000000000..7be0ee813b
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/pageindicator-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/pane-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/pane-icon.png
new file mode 100644
index 0000000000..62ebe487ff
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/pane-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/pane-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/pane-icon16.png
new file mode 100644
index 0000000000..2b8048441c
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/pane-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/pane-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/pane-icon@2x.png
new file mode 100644
index 0000000000..55bb116a69
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/pane-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon.png
new file mode 100644
index 0000000000..8dc82b8196
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon16.png
new file mode 100644
index 0000000000..a6a61f61b2
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon@2x.png
new file mode 100644
index 0000000000..d654a8e7e6
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/pathview-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/progressbar-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/progressbar-icon.png
new file mode 100644
index 0000000000..a023f73c30
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/progressbar-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/progressbar-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/progressbar-icon16.png
new file mode 100644
index 0000000000..6fede21d8c
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/progressbar-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/progressbar-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/progressbar-icon@2x.png
new file mode 100644
index 0000000000..0069400335
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/progressbar-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon.png
new file mode 100644
index 0000000000..d38170e22f
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon16.png
new file mode 100644
index 0000000000..07b46a8ab0
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon@2x.png
new file mode 100644
index 0000000000..4bbddda4b2
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/radiobutton-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon.png
new file mode 100644
index 0000000000..1c4c7b2948
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon16.png
new file mode 100644
index 0000000000..3be4624ddd
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon@2x.png
new file mode 100644
index 0000000000..aee69b3302
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/rangeslider-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/rect-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/rect-icon.png
new file mode 100644
index 0000000000..3997195f72
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/rect-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/rect-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/rect-icon16.png
new file mode 100644
index 0000000000..72893106ae
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/rect-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/rect-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/rect-icon@2x.png
new file mode 100644
index 0000000000..150fa50ea2
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/rect-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon.png
new file mode 100644
index 0000000000..efe3ca80b4
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon16.png
new file mode 100644
index 0000000000..775a57a38c
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon@2x.png
new file mode 100644
index 0000000000..bb541b6711
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/repeater-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/roundbutton-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/roundbutton-icon.png
new file mode 100644
index 0000000000..d4b470dc25
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/roundbutton-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/roundbutton-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/roundbutton-icon16.png
new file mode 100644
index 0000000000..f6f3666639
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/roundbutton-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/roundbutton-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/roundbutton-icon@2x.png
new file mode 100644
index 0000000000..4553e165e7
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/roundbutton-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon-16px.png
new file mode 100644
index 0000000000..1c5be82245
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon-16px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon.png
new file mode 100644
index 0000000000..a7e654c918
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon@2x.png
new file mode 100644
index 0000000000..48c99f8c0e
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/row-positioner-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/scrollview-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/scrollview-icon.png
new file mode 100644
index 0000000000..5ef73ff19f
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/scrollview-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/scrollview-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/scrollview-icon16.png
new file mode 100644
index 0000000000..f8ca7a3685
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/scrollview-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/scrollview-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/scrollview-icon@2x.png
new file mode 100644
index 0000000000..0eb7f9665e
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/scrollview-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/slider-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/slider-icon.png
new file mode 100644
index 0000000000..bd0a9729be
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/slider-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/slider-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/slider-icon16.png
new file mode 100644
index 0000000000..a08622df89
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/slider-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/slider-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/slider-icon@2x.png
new file mode 100644
index 0000000000..93842e4cdd
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/slider-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/spatial-audio-16.png b/share/qtcreator/qmldesigner/itemLibrary/images/spatial-audio-16.png
new file mode 100644
index 0000000000..676fe13404
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/spatial-audio-16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/spatial-audio-24.png b/share/qtcreator/qmldesigner/itemLibrary/images/spatial-audio-24.png
new file mode 100644
index 0000000000..29f7f14db3
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/spatial-audio-24.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/spatial-audio-24@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/spatial-audio-24@2x.png
new file mode 100644
index 0000000000..a518cada63
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/spatial-audio-24@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon.png
new file mode 100644
index 0000000000..37277c5e43
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon16.png
new file mode 100644
index 0000000000..f88711dd25
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon@2x.png
new file mode 100644
index 0000000000..b62a3bad51
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/spinbox-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon.png
new file mode 100644
index 0000000000..a6ced34925
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon16.png
new file mode 100644
index 0000000000..0f19d0efa3
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon@2x.png
new file mode 100644
index 0000000000..9b5ef9517b
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/stackview-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon.png
new file mode 100644
index 0000000000..031cb27c36
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon16.png
new file mode 100644
index 0000000000..446c469690
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon@2x.png
new file mode 100644
index 0000000000..0ccb978c46
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/swipeview-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/switch-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/switch-icon.png
new file mode 100644
index 0000000000..e018159286
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/switch-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/switch-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/switch-icon16.png
new file mode 100644
index 0000000000..9abd275659
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/switch-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/switch-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/switch-icon@2x.png
new file mode 100644
index 0000000000..787f54ca41
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/switch-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon.png
new file mode 100644
index 0000000000..068ebeef0f
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon16.png
new file mode 100644
index 0000000000..b96ed468cb
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon@2x.png
new file mode 100644
index 0000000000..3b7cb6d5da
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/text-edit-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/text-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/text-icon.png
new file mode 100644
index 0000000000..29a81f5d6c
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/text-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/text-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/text-icon16.png
new file mode 100644
index 0000000000..ee7cc512cb
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/text-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/text-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/text-icon@2x.png
new file mode 100644
index 0000000000..1df8f765de
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/text-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon.png
new file mode 100644
index 0000000000..c743c22074
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon16.png
new file mode 100644
index 0000000000..3ceef6d037
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon@2x.png
new file mode 100644
index 0000000000..666644d2d3
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/text-input-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon.png
new file mode 100644
index 0000000000..f1b2dc0f84
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon16.png
new file mode 100644
index 0000000000..4afc1fbab5
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon@2x.png
new file mode 100644
index 0000000000..c32ecc71a9
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/textarea-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/textfield-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/textfield-icon.png
new file mode 100644
index 0000000000..ba5537acef
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/textfield-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/textfield-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/textfield-icon16.png
new file mode 100644
index 0000000000..c4a62a6582
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/textfield-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/textfield-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/textfield-icon@2x.png
new file mode 100644
index 0000000000..e05fd41b9a
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/textfield-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/timeline-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/timeline-16px.png
new file mode 100644
index 0000000000..d4ecf00031
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/timeline-16px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/timeline-animation-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/timeline-animation-16px.png
new file mode 100644
index 0000000000..31b8fed666
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/timeline-animation-16px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/timer-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/timer-16px.png
new file mode 100644
index 0000000000..c675d5a707
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/timer-16px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/timer-24px.png b/share/qtcreator/qmldesigner/itemLibrary/images/timer-24px.png
new file mode 100644
index 0000000000..bd9419aaa0
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/timer-24px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/timer-24px@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/timer-24px@2x.png
new file mode 100644
index 0000000000..ff2d487cc9
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/timer-24px@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon.png
new file mode 100644
index 0000000000..5cb5b2e1af
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon16.png
new file mode 100644
index 0000000000..569373afa1
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon@2x.png
new file mode 100644
index 0000000000..fd9e6ceebc
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/toolbar-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/toolbutton-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/toolbutton-icon.png
new file mode 100644
index 0000000000..3298f69519
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/toolbutton-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/toolbutton-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/toolbutton-icon16.png
new file mode 100644
index 0000000000..9ab7861c25
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/toolbutton-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/toolbutton-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/toolbutton-icon@2x.png
new file mode 100644
index 0000000000..e5958cded3
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/toolbutton-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/toolseparator-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/toolseparator-icon.png
new file mode 100644
index 0000000000..5e99f06f2e
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/toolseparator-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/toolseparator-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/toolseparator-icon16.png
new file mode 100644
index 0000000000..68f22c5df1
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/toolseparator-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/toolseparator-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/toolseparator-icon@2x.png
new file mode 100644
index 0000000000..549c11c67c
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/toolseparator-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon.png
new file mode 100644
index 0000000000..98eb8232a2
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon16.png
new file mode 100644
index 0000000000..ff5f95cf32
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon@2x.png
new file mode 100644
index 0000000000..236abf0cfe
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/tumbler-icon@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/video-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/video-16px.png
new file mode 100644
index 0000000000..caf9c16a61
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/video-16px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/video-24px.png b/share/qtcreator/qmldesigner/itemLibrary/images/video-24px.png
new file mode 100644
index 0000000000..df1b84e5c9
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/video-24px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/video-24px@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/video-24px@2x.png
new file mode 100644
index 0000000000..4b9f31faf3
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/video-24px@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/video-output-16px.png b/share/qtcreator/qmldesigner/itemLibrary/images/video-output-16px.png
new file mode 100644
index 0000000000..f00afc52e9
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/video-output-16px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/video-output-24px.png b/share/qtcreator/qmldesigner/itemLibrary/images/video-output-24px.png
new file mode 100644
index 0000000000..fd3c89c081
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/video-output-24px.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/video-output-24px@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/video-output-24px@2x.png
new file mode 100644
index 0000000000..0f651a1013
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/video-output-24px@2x.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/webview-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/webview-icon.png
new file mode 100644
index 0000000000..22904f2f8b
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/webview-icon.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/webview-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/webview-icon16.png
new file mode 100644
index 0000000000..ac7be01bb7
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/images/webview-icon16.png
Binary files differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/multimedia.metainfo b/share/qtcreator/qmldesigner/itemLibrary/multimedia.metainfo
new file mode 100644
index 0000000000..2e3616aa4b
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/multimedia.metainfo
@@ -0,0 +1,84 @@
+MetaInfo {
+ Type {
+ name: "QtMultimedia.MediaPlayer"
+ icon: "images/media-player-16px.png"
+
+ Hints {
+ visibleInNavigator: true
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeContainer: false
+ }
+
+ ItemLibraryEntry {
+ name: "Media Player"
+ category: "f.Qt Quick - Multimedia"
+ libraryIcon: "images/media-player-24px.png"
+ version: "6.0"
+ requiredImport: "QtMultimedia"
+ }
+ }
+
+ Type {
+ name: "QtMultimedia.AudioOutput"
+ icon: "images/audio-output-16px.png"
+
+ Hints {
+ visibleInNavigator: true
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeContainer: false
+ }
+
+ ItemLibraryEntry {
+ name: "Audio Output"
+ category: "f.Qt Quick - Multimedia"
+ libraryIcon: "images/audio-output-24px.png"
+ version: "6.0"
+ requiredImport: "QtMultimedia"
+ }
+ }
+
+ Type {
+ name: "QtMultimedia.VideoOutput"
+ icon: "images/video-output-16px.png"
+
+ Hints {
+ visibleInNavigator: true
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeContainer: false
+ }
+
+ ItemLibraryEntry {
+ name: "Video Output"
+ category: "f.Qt Quick - Multimedia"
+ libraryIcon: "images/video-output-24px.png"
+ version: "6.0"
+ requiredImport: "QtMultimedia"
+ }
+ }
+
+ Type {
+ name: "QtMultimedia.Video"
+ icon: "images/video-16px.png"
+
+ Hints {
+ visibleInNavigator: true
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: true
+ canBeContainer: false
+ }
+
+ ItemLibraryEntry {
+ name: "Video"
+ category: "f.Qt Quick - Multimedia"
+ libraryIcon: "images/video-24px.png"
+ version: "6.0"
+ requiredImport: "QtMultimedia"
+
+ Property { name: "width"; type: "int"; value: 200; }
+ Property { name: "height"; type: "int"; value: 200; }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/qml.metainfo b/share/qtcreator/qmldesigner/itemLibrary/qml.metainfo
new file mode 100644
index 0000000000..4bef02ddd3
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/qml.metainfo
@@ -0,0 +1,53 @@
+MetaInfo {
+
+ Type {
+ name: "QML.Component"
+ icon: "images/component-icon16.png"
+
+ Hints {
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ }
+
+ ItemLibraryEntry {
+ name: "Component"
+ category: "e.Qt Quick - Instancers"
+ libraryIcon: "images/component-icon.png"
+ version: "1.0"
+
+ QmlSource { source: "source/component.qml" }
+ toolTip: qsTr("Allows you to define components inline, within a QML document.")
+ }
+
+ ItemLibraryEntry {
+ name: "Component 3D"
+ category: "Instancers"
+ libraryIcon: "images/component-icon.png"
+ version: "1.0"
+ requiredImport: "QtQuick3D"
+
+ QmlSource { source: "source/component3d.qml" }
+ toolTip: qsTr("Allows you to define 3D components inline, within a QML document.")
+ }
+ }
+
+Type {
+ name: "QtQml.Base.Timer"
+ icon: "images/timer-16px.png"
+
+ Hints {
+ visibleInNavigator: true
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeContainer: false
+ }
+
+ ItemLibraryEntry {
+ name: "Timer"
+ category: "d.Qt Quick - Animation"
+ libraryIcon: "images/timer-24px.png"
+ version: "2.0"
+ toolTip: qsTr(" Triggers an action at a given time.")
+ }
+}
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/qtquickcontrols2.metainfo b/share/qtcreator/qmldesigner/itemLibrary/qtquickcontrols2.metainfo
new file mode 100644
index 0000000000..cd4165957d
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/qtquickcontrols2.metainfo
@@ -0,0 +1,575 @@
+MetaInfo {
+ Type {
+ name: "QtQuick.Controls.Basic.BusyIndicator"
+ icon: "images/busyindicator-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Busy Indicator"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/busyindicator-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("Indicates activity while, for example, content is being loaded.")
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.Button"
+ icon: "images/button-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Button"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/button-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A button with text.")
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Button\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.CheckBox"
+ icon: "images/checkbox-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Check Box"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/checkbox-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A checkbox with a text label.")
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Check Box\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.CheckDelegate"
+ icon: "images/checkbox-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Check Delegate"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/checkbox-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("Presents items from a model as checkboxes.")
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Check Delegate\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.ComboBox"
+ icon: "images/combobox-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Combo Box"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/combobox-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("An editable drop-down list.")
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.Control"
+ icon: "images/control-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Control"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/control-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("An abstract base type for UI controls.")
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.DelayButton"
+ icon: "images/button-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Delay Button"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/delaybutton-icon.png"
+ version: "2.2"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A button with a delay preventing accidental presses.")
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Delay Button\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.Dial"
+ icon: "images/dial-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Dial"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/dial-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ toolTip: qsTr("A circular dial that is rotated to set a value.")
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.Frame"
+ icon: "images/frame-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Frame"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/frame-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("An untitled container for a group of controls.")
+
+ Property { name: "width"; type: "int"; value: 200 }
+ Property { name: "height"; type: "int"; value: 200 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.GroupBox"
+ icon: "images/groupbox-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Group Box"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/groupbox-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A titled container for a group of controls.")
+
+ Property { name: "width"; type: "int"; value: 200 }
+ Property { name: "height"; type: "int"; value: 200 }
+ Property { name: "title"; type: "binding"; value: "qsTr(\"Group Box\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.ItemDelegate"
+ icon: "images/itemdelegate-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Item Delegate"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/itemdelegate-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("Presents a standard view item. It can be used as a delegate in various views and controls, such as ListView and ComboBox.")
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Item Delegate\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.Label"
+ icon: "images/label-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Label"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/label-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A text label.")
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Label\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.Page"
+ icon: "images/page-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Page"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/page-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A page with header and footer.")
+
+ Property { name: "width"; type: "int"; value: 200 }
+ Property { name: "height"; type: "int"; value: 200 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.PageIndicator"
+ icon: "images/pageindicator-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Page Indicator"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/pageindicator-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("Indicates the currently active page.")
+
+ Property { name: "count"; type: "int"; value: 3 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.Pane"
+ icon: "images/pane-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Pane"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/pane-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("Provides a background matching the application style and theme.")
+
+ Property { name: "width"; type: "int"; value: 200 }
+ Property { name: "height"; type: "int"; value: 200 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.ProgressBar"
+ icon: "images/progressbar-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Progress Bar"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/progressbar-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A bar indicating the progress of an operation.")
+
+ Property { name: "value"; type: "real"; value: 0.5 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.RadioButton"
+ icon: "images/radiobutton-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Radio Button"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/radiobutton-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("An option button that you can toggle on or off.")
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Radio Button\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.RadioDelegate"
+ icon: "images/radiobutton-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Radio Delegate"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/radiobutton-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("Presents items from a model as radio buttons.")
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Radio Delegate\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.RangeSlider"
+ icon: "images/rangeslider-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Range Slider"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/rangeslider-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A bar with adjustable start and end points.")
+
+ Property { name: "first.value"; type: "real"; value: 0.25 }
+ Property { name: "second.value"; type: "real"; value: 0.75 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.RoundButton"
+ icon: "images/roundbutton-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Round Button"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/roundbutton-icon.png"
+ version: "2.1"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A round button with text.")
+
+ Property { name: "text"; type: "string"; value: "+" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.Slider"
+ icon: "images/slider-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Slider"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/slider-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("An adjustable slider.")
+
+ Property { name: "value"; type: "real"; value: 0.5 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.SpinBox"
+ icon: "images/spinbox-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Spin Box"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/spinbox-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A box with an adjustable number.")
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.ScrollView"
+ icon: "images/scrollview-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Scroll View"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/scrollview-icon.png"
+ version: "2.2"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A scrollable area.")
+
+ Property { name: "width"; type: "int"; value: 200 }
+ Property { name: "height"; type: "int"; value: 200 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.StackView"
+ icon: "images/stackview-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Stack View"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/stackview-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("Provides a stack-based navigation for a set of pages.")
+
+ Property { name: "width"; type: "int"; value: 200 }
+ Property { name: "height"; type: "int"; value: 200 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.SwipeDelegate"
+ icon: "images/itemdelegate-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Swipe Delegate"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/itemdelegate-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("Presents items from a model as items that you can swipe to expose more options.")
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Swipe Delegate\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.SwipeView"
+ icon: "images/swipeview-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Swipe View"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/swipeview-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("Provides a view where you can navigate pages by swiping.")
+
+ Property { name: "width"; type: "int"; value: 200 }
+ Property { name: "height"; type: "int"; value: 200 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.Switch"
+ icon: "images/switch-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Switch"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/switch-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A button that you can toggle on and off.")
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Switch\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.SwitchDelegate"
+ icon: "images/switch-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Switch Delegate"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/switch-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("Presents items from a model as toggle switches.")
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Switch Delegate\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.TabBar"
+ icon: "images/toolbar-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Tab Bar"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/toolbar-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A tab-based navigation model.")
+
+ Property { name: "width"; type: "int"; value: 240 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.TabButton"
+ icon: "images/toolbutton-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Tab Button"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/toolbutton-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A button suitable for a tab bar.")
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Tab Button\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.TextArea"
+ icon: "images/textarea-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Text Area"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/textarea-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A multi-line text box.")
+
+ Property { name: "placeholderText"; type: "binding"; value: "qsTr(\"Text Area\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.TextField"
+ icon: "images/textfield-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Text Field"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/textfield-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A single-line text box.")
+
+ Property { name: "placeholderText"; type: "binding"; value: "qsTr(\"Text Field\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.ToolBar"
+ icon: "images/toolbar-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Tool Bar"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/toolbar-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A row that can hold actions and buttons.")
+
+ Property { name: "width"; type: "int"; value: 360 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.ToolButton"
+ icon: "images/toolbutton-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Tool Button"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/toolbutton-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A button suitable for a tool bar.")
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Tool Button\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.ToolSeparator"
+ icon: "images/toolseparator-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Tool Separator"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/toolseparator-icon.png"
+ version: "2.1"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A line to separate sections in a tool bar.")
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Basic.Tumbler"
+ icon: "images/tumbler-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Tumbler"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/tumbler-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ toolTip: qsTr("A spinnable wheel of selectable items.")
+
+ Property { name: "model"; type: "int"; value: "10" }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/quick.metainfo b/share/qtcreator/qmldesigner/itemLibrary/quick.metainfo
index f390f72260..98e5684bdc 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/quick.metainfo
+++ b/share/qtcreator/qmldesigner/itemLibrary/quick.metainfo
@@ -2,7 +2,7 @@ MetaInfo {
Type {
name: "QtQuick.Item"
- icon: ":/qtquickplugin/images/item-icon16.png"
+ icon: "images/item-icon16.png"
Hints {
visibleNonDefaultProperties: "layer.effect"
@@ -11,7 +11,7 @@ MetaInfo {
ItemLibraryEntry {
name: "Item"
category: "a.Qt Quick - Basic"
- libraryIcon: ":/qtquickplugin/images/item-icon.png"
+ libraryIcon: "images/item-icon.png"
version: "2.0"
Property { name: "width"; type: "int"; value: 200; }
@@ -22,12 +22,12 @@ MetaInfo {
Type {
name: "QtQuick.Rectangle"
- icon: ":/qtquickplugin/images/rect-icon16.png"
+ icon: "images/rect-icon16.png"
ItemLibraryEntry {
name: "Rectangle"
category: "a.Qt Quick - Basic"
- libraryIcon: ":/qtquickplugin/images/rect-icon.png"
+ libraryIcon: "images/rect-icon.png"
version: "2.0"
Property { name: "width"; type: "int"; value: 200; }
@@ -39,12 +39,12 @@ MetaInfo {
Type {
name: "QtQuick.Text"
- icon: ":/qtquickplugin/images/text-icon16.png"
+ icon: "images/text-icon16.png"
ItemLibraryEntry {
name: "Text"
category: "a.Qt Quick - Basic"
- libraryIcon: ":/qtquickplugin/images/text-icon.png"
+ libraryIcon: "images/text-icon.png"
version: "2.0"
Property { name: "font.pixelSize"; type: "int"; value: 12; }
@@ -55,12 +55,12 @@ MetaInfo {
Type {
name: "QtQuick.TextEdit"
- icon: ":/qtquickplugin/images/text-edit-icon16.png"
+ icon: "images/text-edit-icon16.png"
ItemLibraryEntry {
name: "Text Edit"
category: "a.Qt Quick - Basic"
- libraryIcon: ":/qtquickplugin/images/text-edit-icon.png"
+ libraryIcon: "images/text-edit-icon.png"
version: "2.0"
Property { name: "width"; type: "int"; value: 80; }
@@ -73,12 +73,12 @@ MetaInfo {
Type {
name: "QtQuick.TextInput"
- icon: ":/qtquickplugin/images/text-input-icon16.png"
+ icon: "images/text-input-icon16.png"
ItemLibraryEntry {
name: "Text Input"
category: "a.Qt Quick - Basic"
- libraryIcon: ":/qtquickplugin/images/text-input-icon.png"
+ libraryIcon: "images/text-input-icon.png"
version: "2.0"
Property { name: "width"; type: "int"; value: 80; }
@@ -91,12 +91,12 @@ MetaInfo {
Type {
name: "QtQuick.MouseArea"
- icon: ":/qtquickplugin/images/mouse-area-icon16.png"
+ icon: "images/mouse-area-icon16.png"
ItemLibraryEntry {
name: "Mouse Area"
category: "a.Qt Quick - Basic"
- libraryIcon: ":/qtquickplugin/images/mouse-area-icon.png"
+ libraryIcon: "images/mouse-area-icon.png"
version: "2.0"
Property { name: "width"; type: "int"; value: 100; }
@@ -107,17 +107,17 @@ MetaInfo {
Type {
name: "QtQuick.Image"
- icon: ":/qtquickplugin/images/image-icon16.png"
+ icon: "images/image-icon16.png"
ItemLibraryEntry {
name: "Image"
category: "a.Qt Quick - Basic"
- libraryIcon: ":/qtquickplugin/images/image-icon.png"
+ libraryIcon: "images/image-icon.png"
version: "2.0"
Property { name: "width"; type: "int"; value: 100; }
Property { name: "height"; type: "int"; value: 100; }
- Property { name: "source"; type: "QUrl"; value:"qrc:/qtquickplugin/images/template_image.png"; }
+ Property { name: "source"; type: "QUrl"; value:"qrcimages/template_image.png"; }
Property { name: "fillMode"; type: "enum"; value: "Image.PreserveAspectFit"; }
toolTip: qsTr("Displays an image.")
}
@@ -125,29 +125,29 @@ MetaInfo {
Type {
name: "QtQuick.AnimatedImage"
- icon: ":/qtquickplugin/images/animated-image-icon16.png"
+ icon: "images/animated-image-icon16.png"
ItemLibraryEntry {
name: "Animated Image"
category: "a.Qt Quick - Basic"
- libraryIcon: ":/qtquickplugin/images/animated-image-icon.png"
+ libraryIcon: "images/animated-image-icon.png"
version: "2.0"
Property { name: "width"; type: "int"; value: 100; }
Property { name: "height"; type: "int"; value: 100; }
- Property { name: "source"; type: "QUrl"; value:"qrc:/qtquickplugin/images/template_image.png"; }
+ Property { name: "source"; type: "QUrl"; value:"qrcimages/template_image.png"; }
toolTip: qsTr("Animates a series of images.")
}
}
Type {
name: "QtQuick.AnimatedSprite"
- icon: ":/qtquickplugin/images/animated-image-icon16.png"
+ icon: "images/animated-image-icon16.png"
ItemLibraryEntry {
name: "Animated Sprite"
category: "a.Qt Quick - Basic"
- libraryIcon: ":/qtquickplugin/images/animated-image-icon.png"
+ libraryIcon: "images/animated-image-icon.png"
version: "2.0"
Property { name: "frameWidth"; type: "int"; value: 64; }
@@ -155,36 +155,36 @@ MetaInfo {
Property { name: "frameCount"; type: "int"; value: 4; }
Property { name: "frameDuration"; type: "int"; value: 500; }
Property { name: "source"; type: "QUrl"; value:"animatedsprite-loading.png"; }
- ExtraFile { source: ":/qtquickplugin/images/animatedsprite-loading.png" }
+ ExtraFile { source: "images/animatedsprite-loading.png" }
toolTip: qsTr("Draws a sprite animation.")
}
}
Type {
name: "QtQuick.BorderImage"
- icon: ":/qtquickplugin/images/border-image-icon16.png"
+ icon: "images/border-image-icon16.png"
ItemLibraryEntry {
name: "Border Image"
category: "a.Qt Quick - Basic"
- libraryIcon: ":/qtquickplugin/images/border-image-icon.png"
+ libraryIcon: "images/border-image-icon.png"
version: "2.0"
Property { name: "width"; type: "int"; value: 100; }
Property { name: "height"; type: "int"; value: 100; }
- Property { name: "source"; type: "QUrl"; value:"qrc:/qtquickplugin/images/template_image.png"; }
+ Property { name: "source"; type: "QUrl"; value:"qrcimages/template_image.png"; }
toolTip: qsTr("A responsive border based on an image.")
}
}
Type {
name: "QtQuick.Flickable"
- icon: ":/qtquickplugin/images/flickable-icon16.png"
+ icon: "images/flickable-icon16.png"
ItemLibraryEntry {
name: "Flickable"
category: "a.Qt Quick - Basic"
- libraryIcon: ":/qtquickplugin/images/flickable-icon.png"
+ libraryIcon: "images/flickable-icon.png"
version: "2.0"
Property { name: "width"; type: "int"; value: 300; }
@@ -195,57 +195,57 @@ MetaInfo {
Type {
name: "QtQuick.GridView"
- icon: ":/qtquickplugin/images/gridview-icon16.png"
+ icon: "images/gridview-icon16.png"
ItemLibraryEntry {
name: "Grid View"
category: "b.Qt Quick - Views"
- libraryIcon: ":/qtquickplugin/images/gridview-icon.png"
+ libraryIcon: "images/gridview-icon.png"
version: "2.0"
- QmlSource { source: ":/qtquickplugin/source/gridviewv2.qml" }
+ QmlSource { source: "source/gridviewv2.qml" }
toolTip: qsTr("Organizes dynamic data sets in a grid.")
}
}
Type {
name: "QtQuick.ListView"
- icon: ":/qtquickplugin/images/listview-icon16.png"
+ icon: "images/listview-icon16.png"
ItemLibraryEntry {
name: "List View"
category: "b.Qt Quick - Views"
- libraryIcon: ":/qtquickplugin/images/listview-icon.png"
+ libraryIcon: "images/listview-icon.png"
version: "2.0"
- QmlSource { source: ":/qtquickplugin/source/listviewv2.qml" }
+ QmlSource { source: "source/listviewv2.qml" }
toolTip: qsTr("Organizes dynamic data sets in a list.")
}
}
Type {
name: "QtQuick.PathView"
- icon: ":/qtquickplugin/images/pathview-icon16.png"
+ icon: "images/pathview-icon16.png"
ItemLibraryEntry {
name: "Path View"
category: "b.Qt Quick - Views"
- libraryIcon: ":/qtquickplugin/images/pathview-icon.png"
+ libraryIcon: "images/pathview-icon.png"
version: "2.0"
- QmlSource { source: ":/qtquickplugin/source/pathviewv2.qml" }
+ QmlSource { source: "source/pathviewv2.qml" }
toolTip: qsTr("Organizes dynamic data sets along a path.")
}
}
Type {
name: "QtQuick.FocusScope"
- icon: ":/qtquickplugin/images/focusscope-icon16.png"
+ icon: "images/focusscope-icon16.png"
ItemLibraryEntry {
name: "Focus Scope"
category: "a.Qt Quick - Basic"
- libraryIcon: ":/qtquickplugin/images/focusscope-icon.png"
+ libraryIcon: "images/focusscope-icon.png"
version: "2.0"
Property { name: "width"; type: "int"; value: 100; }
@@ -256,12 +256,12 @@ MetaInfo {
Type {
name: "QtQuick.Column"
- icon: ":/qtquickplugin/images/column-positioner-icon-16px.png"
+ icon: "images/column-positioner-icon-16px.png"
ItemLibraryEntry {
name: "Column"
category: "c.Qt Quick - Positioner"
- libraryIcon: ":/qtquickplugin/images/column-positioner-icon.png"
+ libraryIcon: "images/column-positioner-icon.png"
version: "2.0"
Property { name: "width"; type: "int"; value: 200; }
@@ -273,12 +273,12 @@ MetaInfo {
Type {
name: "QtQuick.Row"
- icon: ":/qtquickplugin/images/row-positioner-icon-16px.png"
+ icon: "images/row-positioner-icon-16px.png"
ItemLibraryEntry {
name: "Row"
category: "c.Qt Quick - Positioner"
- libraryIcon: ":/qtquickplugin/images/row-positioner-icon.png"
+ libraryIcon: "images/row-positioner-icon.png"
version: "2.0"
toolTip: qsTr("Organizes items in a row.")
@@ -289,12 +289,12 @@ MetaInfo {
Type {
name: "QtQuick.Grid"
- icon: ":/qtquickplugin/images/grid-positioner-icon-16px.png"
+ icon: "images/grid-positioner-icon-16px.png"
ItemLibraryEntry {
name: "Grid"
category: "c.Qt Quick - Positioner"
- libraryIcon: ":/qtquickplugin/images/grid-positioner-icon.png"
+ libraryIcon: "images/grid-positioner-icon.png"
version: "2.0"
Property { name: "width"; type: "int"; value: 400; }
@@ -305,12 +305,12 @@ MetaInfo {
Type {
name: "QtQuick.Flow"
- icon: ":/qtquickplugin/images/flow-positioner-icon-16px.png"
+ icon: "images/flow-positioner-icon-16px.png"
ItemLibraryEntry {
name: "Flow"
category: "c.Qt Quick - Positioner"
- libraryIcon: ":/qtquickplugin/images/flow-positioner-icon.png"
+ libraryIcon: "images/flow-positioner-icon.png"
version: "2.0"
Property { name: "width"; type: "int"; value: 400; }
@@ -321,7 +321,7 @@ MetaInfo {
Type {
name: "QtQuick.Timeline.Timeline"
- icon: ":/qtquickplugin/images/timeline-16px.png"
+ icon: "images/timeline-16px.png"
Hints {
visibleNonDefaultProperties: "animations"
@@ -337,7 +337,7 @@ MetaInfo {
Type {
name: "QtQuick.Timeline.TimelineAnimation"
- icon: ":/qtquickplugin/images/timeline-animation-16px.png"
+ icon: "images/timeline-animation-16px.png"
Hints {
visibleInLibrary: false
@@ -352,7 +352,7 @@ MetaInfo {
Type {
name: "QtQuick.Timeline.Keyframe"
- icon: ":/qtquickplugin/images/keyframe-16px.png"
+ icon: "images/keyframe-16px.png"
ItemLibraryEntry {
name: "Keyframe"
@@ -364,7 +364,7 @@ MetaInfo {
Type {
name: "QtQuick.Timeline.KeyframeGroup"
- icon: ":/qtquickplugin/images/keyframe-16px.png"
+ icon: "images/keyframe-16px.png"
ItemLibraryEntry {
name: "KeyframeGroup"
@@ -376,7 +376,7 @@ MetaInfo {
Type {
name: "QtQuick.PropertyAnimation"
- icon: ":/qtquickplugin/images/item-icon16.png"
+ icon: "images/item-icon16.png"
Hints {
visibleInNavigator: true
@@ -388,7 +388,7 @@ MetaInfo {
ItemLibraryEntry {
name: "Property Animation"
category: "d.Qt Quick - Animation"
- libraryIcon: ":/qtquickplugin/images/item-icon.png"
+ libraryIcon: "images/item-icon.png"
version: "2.0"
toolTip: qsTr("Animates changes in property values.")
}
@@ -396,7 +396,7 @@ MetaInfo {
Type {
name: "QtQuick.PauseAnimation"
- icon: ":/qtquickplugin/images/item-icon16.png"
+ icon: "images/item-icon16.png"
Hints {
visibleInNavigator: true
@@ -408,7 +408,7 @@ MetaInfo {
ItemLibraryEntry {
name: "Pause Animation"
category: "d.Qt Quick - Animation"
- libraryIcon: ":/qtquickplugin/images/item-icon.png"
+ libraryIcon: "images/item-icon.png"
version: "2.0"
toolTip: qsTr("Provides a pause between animations.")
}
@@ -416,7 +416,7 @@ MetaInfo {
Type {
name: "QtQuick.SequentialAnimation"
- icon: ":/qtquickplugin/images/item-icon16.png"
+ icon: "images/item-icon16.png"
Hints {
visibleInNavigator: true
@@ -427,7 +427,7 @@ MetaInfo {
ItemLibraryEntry {
name: "Sequential Animation"
category: "d.Qt Quick - Animation"
- libraryIcon: ":/qtquickplugin/images/item-icon.png"
+ libraryIcon: "images/item-icon.png"
version: "2.0"
toolTip: qsTr("Runs animations one after the other.")
}
@@ -435,7 +435,7 @@ MetaInfo {
Type {
name: "QtQuick.ParallelAnimation"
- icon: ":/qtquickplugin/images/item-icon16.png"
+ icon: "images/item-icon16.png"
Hints {
visibleInNavigator: true
@@ -446,7 +446,7 @@ MetaInfo {
ItemLibraryEntry {
name: "Parallel Animation"
category: "d.Qt Quick - Animation"
- libraryIcon: ":/qtquickplugin/images/item-icon.png"
+ libraryIcon: "images/item-icon.png"
version: "2.0"
toolTip: qsTr("Runs animations together at the same time.")
}
@@ -454,7 +454,7 @@ MetaInfo {
Type {
name: "QtQuick.PropertyAction"
- icon: ":/qtquickplugin/images/item-icon16.png"
+ icon: "images/item-icon16.png"
Hints {
visibleInNavigator: true
@@ -466,7 +466,7 @@ MetaInfo {
ItemLibraryEntry {
name: "Property Action"
category: "d.Qt Quick - Animation"
- libraryIcon: ":/qtquickplugin/images/item-icon.png"
+ libraryIcon: "images/item-icon.png"
version: "2.0"
toolTip: qsTr("Provides an immediate property change during animations.")
}
@@ -474,7 +474,7 @@ MetaInfo {
Type {
name: "QtQuick.ScriptAction"
- icon: ":/qtquickplugin/images/item-icon16.png"
+ icon: "images/item-icon16.png"
Hints {
visibleInNavigator: true
@@ -486,7 +486,7 @@ MetaInfo {
ItemLibraryEntry {
name: "Script Action"
category: "d.Qt Quick - Animation"
- libraryIcon: ":/qtquickplugin/images/item-icon.png"
+ libraryIcon: "images/item-icon.png"
version: "2.0"
toolTip: qsTr("Runs a script during animation.")
}
@@ -494,7 +494,7 @@ MetaInfo {
Type {
name: "QtQuick.ColorAnimation"
- icon: ":/qtquickplugin/images/item-icon16.png"
+ icon: "images/item-icon16.png"
Hints {
visibleInNavigator: true
@@ -506,7 +506,7 @@ MetaInfo {
ItemLibraryEntry {
name: "Color Animation"
category: "d.Qt Quick - Animation"
- libraryIcon: ":/qtquickplugin/images/item-icon.png"
+ libraryIcon: "images/item-icon.png"
version: "2.0"
toolTip: qsTr("Animates the color of an item.")
}
@@ -514,7 +514,7 @@ MetaInfo {
Type {
name: "QtQuick.NumberAnimation"
- icon: ":/qtquickplugin/images/item-icon16.png"
+ icon: "images/item-icon16.png"
Hints {
visibleInNavigator: true
@@ -526,7 +526,7 @@ MetaInfo {
ItemLibraryEntry {
name: "Number Animation"
category: "d.Qt Quick - Animation"
- libraryIcon: ":/qtquickplugin/images/item-icon.png"
+ libraryIcon: "images/item-icon.png"
version: "2.0"
Property { name: "to"; type: "int"; value: 0; }
Property { name: "from"; type: "int"; value: 0; }
@@ -535,74 +535,13 @@ MetaInfo {
}
Type {
- name: "QtQml.Timer"
- icon: ":/qtquickplugin/images/timer-16px.png"
-
- Hints {
- visibleInNavigator: true
- canBeDroppedInNavigator: true
- canBeDroppedInFormEditor: false
- canBeContainer: false
- }
-
- ItemLibraryEntry {
- name: "Timer"
- category: "d.Qt Quick - Animation"
- libraryIcon: ":/qtquickplugin/images/timer-24px.png"
- version: "2.0"
- toolTip: qsTr(" Triggers an action at a given time.")
- }
- }
-
- Type {
- name: "QML.Component"
- icon: ":/qtquickplugin/images/component-icon16.png"
-
- Hints {
- canBeDroppedInNavigator: true
- canBeDroppedInFormEditor: false
- }
-
- ItemLibraryEntry {
- name: "Component"
- category: "e.Qt Quick - Instancers"
- libraryIcon: ":/qtquickplugin/images/component-icon.png"
- version: "1.0"
-
- QmlSource { source: ":/qtquickplugin/source/component.qml" }
- toolTip: qsTr("Allows you to define components inline, within a QML document.")
- }
- }
-
- Type {
- name: "QML.Component"
- icon: ":/qtquickplugin/images/component-icon16.png"
-
- Hints {
- canBeDroppedInNavigator: true
- canBeDroppedInFormEditor: false
- }
-
- ItemLibraryEntry {
- name: "Component 3D"
- category: "Instancers"
- libraryIcon: ":/qtquickplugin/images/component-icon.png"
- version: "1.0"
- requiredImport: "QtQuick3D"
-
- QmlSource { source: ":/qtquickplugin/source/component3d.qml" }
- toolTip: qsTr("Allows you to define 3D components inline, within a QML document.")
- }
- }
-
- Type {
name: "QtQuick.Loader"
- icon: ":/qtquickplugin/images/loader-icon16.png"
+ icon: "images/loader-icon16.png"
ItemLibraryEntry {
name: "Loader"
category: "e.Qt Quick - Instancers"
- libraryIcon: ":/qtquickplugin/images/loader-icon.png"
+ libraryIcon: "images/loader-icon.png"
version: "2.0"
Property { name: "width"; type: "int"; value: 200; }
Property { name: "height"; type: "int"; value: 200; }
@@ -612,7 +551,7 @@ MetaInfo {
Type {
name: "QtQuick.Repeater"
- icon: ":/qtquickplugin/images/repeater-icon16.png"
+ icon: "images/repeater-icon16.png"
Hints {
canBeDroppedInFormEditor: false
@@ -622,216 +561,9 @@ MetaInfo {
ItemLibraryEntry {
name: "Repeater"
category: "e.Qt Quick - Instancers"
- libraryIcon: ":/qtquickplugin/images/repeater-icon.png"
+ libraryIcon: "images/repeater-icon.png"
version: "2.0"
toolTip: qsTr("Creates a number of copies of the same item.")
}
}
-
- Type {
- name: "QtMultimedia.MediaPlayer"
- icon: ":/qtquickplugin/images/media-player-16px.png"
-
- Hints {
- visibleInNavigator: true
- canBeDroppedInNavigator: true
- canBeDroppedInFormEditor: false
- canBeContainer: false
- }
-
- ItemLibraryEntry {
- name: "Media Player"
- category: "f.Qt Quick - Multimedia"
- libraryIcon: ":/qtquickplugin/images/media-player-24px.png"
- version: "6.0"
- requiredImport: "QtMultimedia"
- }
- }
-
- Type {
- name: "QtMultimedia.AudioOutput"
- icon: ":/qtquickplugin/images/audio-output-16px.png"
-
- Hints {
- visibleInNavigator: true
- canBeDroppedInNavigator: true
- canBeDroppedInFormEditor: false
- canBeContainer: false
- }
-
- ItemLibraryEntry {
- name: "Audio Output"
- category: "f.Qt Quick - Multimedia"
- libraryIcon: ":/qtquickplugin/images/audio-output-24px.png"
- version: "6.0"
- requiredImport: "QtMultimedia"
- }
- }
-
- Type {
- name: "QtMultimedia.VideoOutput"
- icon: ":/qtquickplugin/images/video-output-16px.png"
-
- Hints {
- visibleInNavigator: true
- canBeDroppedInNavigator: true
- canBeDroppedInFormEditor: false
- canBeContainer: false
- }
-
- ItemLibraryEntry {
- name: "Video Output"
- category: "f.Qt Quick - Multimedia"
- libraryIcon: ":/qtquickplugin/images/video-output-24px.png"
- version: "6.0"
- requiredImport: "QtMultimedia"
- }
- }
-
- Type {
- name: "QtMultimedia.Video"
- icon: ":/qtquickplugin/images/video-16px.png"
-
- Hints {
- visibleInNavigator: true
- canBeDroppedInNavigator: true
- canBeDroppedInFormEditor: true
- canBeContainer: false
- }
-
- ItemLibraryEntry {
- name: "Video"
- category: "f.Qt Quick - Multimedia"
- libraryIcon: ":/qtquickplugin/images/video-24px.png"
- version: "6.0"
- requiredImport: "QtMultimedia"
-
- Property { name: "width"; type: "int"; value: 200; }
- Property { name: "height"; type: "int"; value: 200; }
- }
- }
-
- Type {
- name: "QtQuick3D.SpatialAudio.AmbientSound"
- icon: ":/qtquickplugin/images/ambient-sound-16.png"
-
- Hints {
- canBeDroppedInNavigator: true
- canBeDroppedInFormEditor: false
- canBeDroppedInView3D: false
- canBeContainer: false
- }
-
- ItemLibraryEntry {
- name: "Ambient Sound"
- category: "Spatial Audio"
- libraryIcon: ":/qtquickplugin/images/ambient-sound-24.png"
- version: "6.0"
- requiredImport: "QtQuick3D.SpatialAudio"
- toolTip: qsTr("An ambient background sound.")
- }
- }
-
- Type {
- name: "QtQuick3D.SpatialAudio.AudioEngine"
- icon: ":/qtquickplugin/images/audio-engine-16.png"
-
- Hints {
- canBeDroppedInNavigator: true
- canBeDroppedInFormEditor: false
- canBeDroppedInView3D: false
- canBeContainer: false
- }
-
- ItemLibraryEntry {
- name: "Audio Engine"
- category: "Spatial Audio"
- libraryIcon: ":/qtquickplugin/images/audio-engine-24.png"
- version: "6.0"
- requiredImport: "QtQuick3D.SpatialAudio"
- toolTip: qsTr("Manages sound objects inside a 3D scene.")
- }
- }
-
- Type {
- name: "QtQuick3D.SpatialAudio.AudioListener"
- icon: ":/qtquickplugin/images/audio-listener-16.png"
-
- Hints {
- canBeDroppedInNavigator: true
- canBeDroppedInFormEditor: false
- canBeDroppedInView3D: true
- }
-
- ItemLibraryEntry {
- name: "Audio Listener"
- category: "Spatial Audio"
- libraryIcon: ":/qtquickplugin/images/audio-listener-24.png"
- version: "6.0"
- requiredImport: "QtQuick3D.SpatialAudio"
- toolTip: qsTr("Sets the position and orientation of listening.")
- }
- }
-
- Type {
- name: "QtQuick3D.SpatialAudio.AudioRoom"
- icon: ":/qtquickplugin/images/audio-room-16.png"
-
- Hints {
- canBeDroppedInNavigator: true
- canBeDroppedInFormEditor: false
- canBeDroppedInView3D: true
- }
-
- ItemLibraryEntry {
- name: "Audio Room"
- category: "Spatial Audio"
- libraryIcon: ":/qtquickplugin/images/audio-room-24.png"
- version: "6.0"
- requiredImport: "QtQuick3D.SpatialAudio"
- toolTip: qsTr("Sets up a room for the spatial audio engine.")
- }
- }
-
- Type {
- name: "QtQuick3D.SpatialAudio.SpatialSound"
- icon: ":/qtquickplugin/images/spatial-audio-16.png"
-
- Hints {
- canBeDroppedInNavigator: true
- canBeDroppedInFormEditor: false
- canBeDroppedInView3D: true
- }
-
- ItemLibraryEntry {
- name: "Spatial Sound"
- category: "Spatial Audio"
- libraryIcon: ":/qtquickplugin/images/spatial-audio-24.png"
- version: "6.0"
- requiredImport: "QtQuick3D.SpatialAudio"
- toolTip: qsTr("A sound object in 3D space.")
- }
- }
-
- Type {
- name: "QtQuick3D.BakedLightmap"
- icon: ":/ItemLibrary/images/item-default-icon.png"
-
- Hints {
- canBeDroppedInNavigator: true
- canBeDroppedInFormEditor: false
- canBeDroppedInView3D: false
- }
-
- ItemLibraryEntry {
- name: "Baked Lightmap"
- category: "Components"
- libraryIcon: ":/ItemLibrary/images/item-default-icon.png"
- version: "6.5"
- requiredImport: "QtQuick3D"
- toolTip: qsTr("An object to specify details about baked lightmap of a model.")
-
- Property { name: "loadPrefix"; type: "string"; value: "lightmaps"; }
- }
- }
}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/quick3d.metainfo b/share/qtcreator/qmldesigner/itemLibrary/quick3d.metainfo
new file mode 100644
index 0000000000..8f00613966
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/quick3d.metainfo
@@ -0,0 +1,125 @@
+MetaInfo {
+ Type {
+ name: "QtQuick3D.SpatialAudio.AmbientSound"
+ icon: "images/ambient-sound-16.png"
+
+ Hints {
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: false
+ canBeContainer: false
+ }
+
+ ItemLibraryEntry {
+ name: "Ambient Sound"
+ category: "Spatial Audio"
+ libraryIcon: "images/ambient-sound-24.png"
+ version: "6.0"
+ requiredImport: "QtQuick3D.SpatialAudio"
+ toolTip: qsTr("An ambient background sound.")
+ }
+ }
+
+ Type {
+ name: "QtQuick3D.SpatialAudio.AudioEngine"
+ icon: "images/audio-engine-16.png"
+
+ Hints {
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: false
+ canBeContainer: false
+ }
+
+ ItemLibraryEntry {
+ name: "Audio Engine"
+ category: "Spatial Audio"
+ libraryIcon: "images/audio-engine-24.png"
+ version: "6.0"
+ requiredImport: "QtQuick3D.SpatialAudio"
+ toolTip: qsTr("Manages sound objects inside a 3D scene.")
+ }
+ }
+
+ Type {
+ name: "QtQuick3D.SpatialAudio.AudioListener"
+ icon: "images/audio-listener-16.png"
+
+ Hints {
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: true
+ }
+
+ ItemLibraryEntry {
+ name: "Audio Listener"
+ category: "Spatial Audio"
+ libraryIcon: "images/audio-listener-24.png"
+ version: "6.0"
+ requiredImport: "QtQuick3D.SpatialAudio"
+ toolTip: qsTr("Sets the position and orientation of listening.")
+ }
+ }
+
+ Type {
+ name: "QtQuick3D.SpatialAudio.AudioRoom"
+ icon: "images/audio-room-16.png"
+
+ Hints {
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: true
+ }
+
+ ItemLibraryEntry {
+ name: "Audio Room"
+ category: "Spatial Audio"
+ libraryIcon: "images/audio-room-24.png"
+ version: "6.0"
+ requiredImport: "QtQuick3D.SpatialAudio"
+ toolTip: qsTr("Sets up a room for the spatial audio engine.")
+ }
+ }
+
+ Type {
+ name: "QtQuick3D.SpatialAudio.SpatialSound"
+ icon: "images/spatial-audio-16.png"
+
+ Hints {
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: true
+ }
+
+ ItemLibraryEntry {
+ name: "Spatial Sound"
+ category: "Spatial Audio"
+ libraryIcon: "images/spatial-audio-24.png"
+ version: "6.0"
+ requiredImport: "QtQuick3D.SpatialAudio"
+ toolTip: qsTr("A sound object in 3D space.")
+ }
+ }
+
+ Type {
+ name: "QtQuick3D.BakedLightmap"
+ icon: ":/ItemLibrary/images/item-default-icon.png"
+
+ Hints {
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: false
+ }
+
+ ItemLibraryEntry {
+ name: "Baked Lightmap"
+ category: "Components"
+ libraryIcon: ":/ItemLibrary/images/item-default-icon.png"
+ version: "6.5"
+ requiredImport: "QtQuick3D"
+ toolTip: qsTr("An object to specify details about baked lightmap of a model.")
+
+ Property { name: "loadPrefix"; type: "string"; value: "lightmaps"; }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowserContextMenu.qml b/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowserContextMenu.qml
index f72d21b35b..248e07bf6c 100644
--- a/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowserContextMenu.qml
+++ b/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowserContextMenu.qml
@@ -127,4 +127,11 @@ StudioControls.Menu {
onTriggered: materialBrowserModel.addNewMaterial()
}
+
+ StudioControls.MenuItem {
+ text: qsTr("Add to Content Library")
+ enabled: !materialBrowserModel.selectedMaterialIsComponent
+
+ onTriggered: MaterialBrowserBackend.rootView.addMaterialToContentLibrary()
+ }
}
diff --git a/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorPane.qml b/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorPane.qml
index dde7ecd0dc..0ab7e59d01 100644
--- a/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorPane.qml
+++ b/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorPane.qml
@@ -4,8 +4,8 @@
import QtQuick
import HelperWidgets
-PropertyEditorPane {
- id: itemPane
+Item {
+ id: root
width: 420
height: 420
@@ -17,63 +17,75 @@ PropertyEditorPane {
// invoked from C++ to refresh material preview image
function refreshPreview()
{
- topSection.refreshPreview()
+ itemPane.headerItem.refreshPreview()
}
// Called from C++ to close context menu on focus out
function closeContextMenu()
{
- topSection.closeContextMenu()
+ itemPane.headerItem.closeContextMenu()
Controller.closeContextMenu()
}
// Called from C++ to initialize preview menu checkmarks
function initPreviewData(env, model)
{
- topSection.previewEnv = env;
- topSection.previewModel = model
+ itemPane.headerItem.previewEnv = env
+ itemPane.headerItem.previewModel = model
}
- MaterialEditorTopSection {
- id: topSection
+ MaterialEditorToolBar {
+ id: toolbar
- onToolBarAction: (action) => itemPane.toolBarAction(action)
- onPreviewEnvChanged: itemPane.previewEnvChanged(previewEnv)
- onPreviewModelChanged: itemPane.previewModelChanged(previewModel)
+ width: parent.width
+
+ onToolBarAction: (action) => root.toolBarAction(action)
}
- Item { width: 1; height: 10 }
+ PropertyEditorPane {
+ id: itemPane
- DynamicPropertiesSection {
- propertiesModel: MaterialEditorDynamicPropertiesModel {}
- }
+ anchors.top: toolbar.bottom
+ anchors.bottom: parent.bottom
+ width: parent.width
+
+ clip: true
- Loader {
- id: specificsTwo
+ headerComponent: MaterialEditorTopSection {
+ onPreviewEnvChanged: root.previewEnvChanged(previewEnv)
+ onPreviewModelChanged: root.previewModelChanged(previewModel)
+ }
+
+ DynamicPropertiesSection {
+ propertiesModel: MaterialEditorDynamicPropertiesModel {}
+ }
- property string theSource: specificQmlData
+ Loader {
+ id: specificsTwo
- anchors.left: parent.left
- anchors.right: parent.right
- visible: specificsTwo.theSource !== ""
- sourceComponent: specificQmlComponent
+ property string theSource: specificQmlData
- onTheSourceChanged: {
- specificsTwo.active = false
- specificsTwo.active = true
+ width: parent.width
+ visible: specificsTwo.theSource !== ""
+ sourceComponent: specificQmlComponent
+
+ onTheSourceChanged: {
+ specificsTwo.active = false
+ specificsTwo.active = true
+ }
}
- }
- Item {
- width: 1
- height: 10
- visible: specificsTwo.visible
- }
+ Item { // spacer
+ width: 1
+ height: 10
+ visible: specificsTwo.visible
+ }
- Loader {
- id: specificsOne
- anchors.left: parent.left
- anchors.right: parent.right
- source: specificsUrl
+ Loader {
+ id: specificsOne
+ anchors.left: parent.left
+ anchors.right: parent.right
+ source: specificsUrl
+ }
}
}
diff --git a/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorTopSection.qml b/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorTopSection.qml
index 23311636bc..d60c98933b 100644
--- a/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorTopSection.qml
+++ b/share/qtcreator/qmldesigner/materialEditorQmlSources/MaterialEditorTopSection.qml
@@ -11,10 +11,11 @@ import StudioTheme as StudioTheme
Column {
id: root
- signal toolBarAction(int action)
-
property string previewEnv
property string previewModel
+
+ property real __horizontalSpacing: 5
+
property StudioTheme.ControlStyle buttonStyle: StudioTheme.ViewBarButtonStyle {
//This is how you can override stuff from the control styles
controlSize: Qt.size(previewOptions.width, previewOptions.width)
@@ -37,14 +38,7 @@ Column {
anchors.left: parent.left
anchors.right: parent.right
- MaterialEditorToolBar {
- width: root.width
-
- onToolBarAction: (action) => root.toolBarAction(action)
- }
-
- Item { width: 1; height: 10 } // spacer
-
+ Item { width: 1; height: 5 } // spacer
StudioControls.Menu {
id: modelMenu
@@ -129,6 +123,19 @@ Column {
width: parent.width
height: previewRect.height
+ StudioControls.AbstractButton {
+ id: pinButton
+
+ x: root.__horizontalSpacing
+
+ style: root.buttonStyle
+ iconSize: StudioTheme.Values.bigFont
+ buttonIcon: pinButton.checked ? StudioTheme.Constants.pin : StudioTheme.Constants.unpin
+ checkable: true
+ checked: itemPane.headerDocked
+ onCheckedChanged: itemPane.headerDocked = pinButton.checked
+ }
+
Rectangle {
id: previewRect
anchors.horizontalCenter: parent.horizontalCenter
@@ -153,6 +160,7 @@ Column {
height: previewRect.height
anchors.top: previewRect.top
anchors.left: previewRect.right
+ anchors.leftMargin: root.__horizontalSpacing
Column {
anchors.horizontalCenter: parent.horizontalCenter
@@ -172,7 +180,6 @@ Column {
}
}
}
-
}
HelperWidgets.Section {
@@ -214,6 +221,7 @@ Column {
model: possibleTypes
showExtendedFunctionButton: false
implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ enabled: possibleTypes.length > 1
onActivated: changeTypeName(currentValue)
}
diff --git a/share/qtcreator/qmldesigner/projectstorage/fake.qmltypes b/share/qtcreator/qmldesigner/projectstorage/fake.qmltypes
index f6f2159689..60096cd790 100644
--- a/share/qtcreator/qmldesigner/projectstorage/fake.qmltypes
+++ b/share/qtcreator/qmldesigner/projectstorage/fake.qmltypes
@@ -318,4 +318,13 @@ Component {
Component {
name: "QScxmlError"
}
+
+Component {
+ name: "QList<QQuickLayoutItemProxy*>"
+}
+
+Component {
+ name: "VertexColorMaskFlags"
+}
+
}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AdvancedSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AdvancedSection.qml
index f88defbff5..1b626623ea 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AdvancedSection.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AdvancedSection.qml
@@ -33,7 +33,7 @@ Section {
PropertyLabel {
text: qsTr("Smooth")
- tooltip: qsTr("Toggles if the smoothing is performed using linear interpolation method. Keeping it unchecked would follow non-smooth method using nearest neighbor. It is mostly applicable on image based items. ")
+ tooltip: qsTr("Toggles if the smoothing is performed using linear interpolation method. Keeping it unchecked would follow non-smooth method using nearest neighbor. It is mostly applicable on image based items.")
blockedByTemplate: !backendValues.smooth.isAvailable
}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/BusyIndicatorSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/BusyIndicatorSpecifics.qml
new file mode 100644
index 0000000000..2cc82d7fab
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/BusyIndicatorSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.BusyIndicatorSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ButtonSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ButtonSpecifics.qml
new file mode 100644
index 0000000000..ea32a00594
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ButtonSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.ButtonSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/CheckBoxSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/CheckBoxSpecifics.qml
new file mode 100644
index 0000000000..c38b75b327
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/CheckBoxSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.CheckBoxSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/CheckDelegateSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/CheckDelegateSpecifics.qml
new file mode 100644
index 0000000000..939433f5ea
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/CheckDelegateSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.CheckDelegateSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ComboBoxSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ComboBoxSpecifics.qml
new file mode 100644
index 0000000000..13ad9346d4
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ComboBoxSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.ComboBoxSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ControlSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ControlSpecifics.qml
new file mode 100644
index 0000000000..07cc704a07
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ControlSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.ControlSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/DelayButtonSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/DelayButtonSpecifics.qml
new file mode 100644
index 0000000000..3818cebc33
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/DelayButtonSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.DelayButtonSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/DialSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/DialSpecifics.qml
new file mode 100644
index 0000000000..c62608cd00
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/DialSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.DialSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/DialogSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/DialogSpecifics.qml
new file mode 100644
index 0000000000..237cb41862
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/DialogSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.DialogSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/DrawerSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/DrawerSpecifics.qml
new file mode 100644
index 0000000000..d5cf0a482e
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/DrawerSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.DrawerSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/FrameSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/FrameSpecifics.qml
new file mode 100644
index 0000000000..ac1881a865
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/FrameSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.FrameSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/GroupBoxSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/GroupBoxSpecifics.qml
new file mode 100644
index 0000000000..3067af7640
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/GroupBoxSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.GroupBoxSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ItemDelegateSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ItemDelegateSpecifics.qml
new file mode 100644
index 0000000000..6c7f5dc812
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ItemDelegateSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.ItemDelegateSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/LabelSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/LabelSpecifics.qml
new file mode 100644
index 0000000000..6c826e46ea
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/LabelSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.LabelSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/PageIndicatorSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/PageIndicatorSpecifics.qml
new file mode 100644
index 0000000000..7437975f96
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/PageIndicatorSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.PageIndicatorSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/PageSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/PageSpecifics.qml
new file mode 100644
index 0000000000..16e8b51cb5
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/PageSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.PageSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/PaneSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/PaneSpecifics.qml
new file mode 100644
index 0000000000..dd07a3cf7f
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/PaneSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.PaneSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/PopupSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/PopupSpecifics.qml
new file mode 100644
index 0000000000..788b2a4359
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/PopupSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.PopupSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ProgressBarSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ProgressBarSpecifics.qml
new file mode 100644
index 0000000000..a58f9e2f36
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ProgressBarSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.ProgressBarSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/RadioButtonSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/RadioButtonSpecifics.qml
new file mode 100644
index 0000000000..fc2500dd1b
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/RadioButtonSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.RadioButtonSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/RadioDelegateSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/RadioDelegateSpecifics.qml
new file mode 100644
index 0000000000..d07f17b7e8
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/RadioDelegateSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.RadioDelegateSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/RangeSliderSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/RangeSliderSpecifics.qml
new file mode 100644
index 0000000000..14e493e69e
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/RangeSliderSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.RangeSliderSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/RoundButtonSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/RoundButtonSpecifics.qml
new file mode 100644
index 0000000000..5bd8776f62
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/RoundButtonSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.RoundButtonSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ScrollViewSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ScrollViewSpecifics.qml
new file mode 100644
index 0000000000..2af497fcb7
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ScrollViewSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.ScrollViewSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SliderSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SliderSpecifics.qml
new file mode 100644
index 0000000000..846ca8bb14
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SliderSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.SliderSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SpinBoxSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SpinBoxSpecifics.qml
new file mode 100644
index 0000000000..f75983a9fa
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SpinBoxSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.SpinBoxSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/StackViewSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/StackViewSpecifics.qml
new file mode 100644
index 0000000000..593cba24d7
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/StackViewSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.StackViewSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SwipeDelegateSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SwipeDelegateSpecifics.qml
new file mode 100644
index 0000000000..40648a3431
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SwipeDelegateSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.SwipeDelegateSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SwipeViewSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SwipeViewSpecifics.qml
new file mode 100644
index 0000000000..eaf769135c
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SwipeViewSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.SwipeViewSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SwitchDelegateSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SwitchDelegateSpecifics.qml
new file mode 100644
index 0000000000..cba96b930f
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SwitchDelegateSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.SwitchDelegateSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SwitchSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SwitchSpecifics.qml
new file mode 100644
index 0000000000..e6647f4f7d
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/SwitchSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.SwitchSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TabBarSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TabBarSpecifics.qml
new file mode 100644
index 0000000000..c23580a25e
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TabBarSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.TabBarSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TabButtonSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TabButtonSpecifics.qml
new file mode 100644
index 0000000000..dc5bcb36e2
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TabButtonSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.TabButtonSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TextAreaSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TextAreaSpecifics.qml
new file mode 100644
index 0000000000..a9871612a9
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TextAreaSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.TextAreaSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TextFieldSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TextFieldSpecifics.qml
new file mode 100644
index 0000000000..fbcac9c389
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TextFieldSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.TextFieldSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ToolBarSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ToolBarSpecifics.qml
new file mode 100644
index 0000000000..63d1f179eb
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ToolBarSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.ToolBarSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ToolButtonSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ToolButtonSpecifics.qml
new file mode 100644
index 0000000000..98aabdd274
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ToolButtonSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.ToolButtonSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ToolSeparatorSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ToolSeparatorSpecifics.qml
new file mode 100644
index 0000000000..060808a2a6
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/ToolSeparatorSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.ToolSeparatorSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TumblerSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TumblerSpecifics.qml
new file mode 100644
index 0000000000..5ca8280642
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Controls/Basic/TumblerSpecifics.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import ".." as Original
+
+Original.TumblerSpecifics {}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/EffectsSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/EffectsSection.qml
new file mode 100644
index 0000000000..3e9a79f8e0
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/EffectsSection.qml
@@ -0,0 +1,549 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+import StudioTheme as StudioTheme
+import StudioControls as StudioControls
+
+Section {
+ id: root
+
+ property bool hasDesignerEffect: false
+ property var model
+ property var effectNode
+ property var effectNodeWrapper
+
+ // Draggging
+ property Item draggedSec: null
+ property var secsY: []
+ property int moveFromIdx: 0
+ property int moveToIdx: 0
+
+ function invalidate() {
+ root.effectNode = null
+ root.model = null
+
+ var effect = modelNodeBackend.allChildrenOfType("DesignEffect")
+ root.effectNode = effect
+ root.effectNodeWrapper = modelNodeBackend.registerSubSelectionWrapper(effect)
+ root.hasDesignerEffect = effect.length === 1
+
+ if (!root.hasDesignerEffect)
+ return
+
+ root.model = modelNodeBackend.allChildren(effect[0]) // ids for all effects
+ }
+
+ leftPadding: 0
+ anchors.left: parent.left
+ anchors.right: parent.right
+ caption: qsTr('Effects <a style="color:%1;">[beta]</a>').arg(StudioTheme.Values.themeInteraction)
+ visible: backendValues.layer_effect.isAvailable
+
+ property Connections connection: Connections {
+ target: modelNodeBackend
+
+ function onSelectionChanged() { root.invalidate() }
+ function onSelectionToBeChanged() { root.model = [] }
+ }
+
+ SectionLayout {
+ x: StudioTheme.Values.sectionLeftPadding
+
+ PropertyLabel {}
+
+ SecondColumnLayout {
+ Spacer { implicitWidth: StudioTheme.Values.actionIndicatorWidth }
+
+ AbstractButton {
+ id: effectButton
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ width: StudioTheme.Values.singleControlColumnWidth
+ buttonIcon: root.hasDesignerEffect ? qsTr("Remove Effects") : qsTr("Add Effects")
+ iconFont: StudioTheme.Constants.font
+ tooltip: qsTr("Adds visual effects on the component.")
+ onClicked: {
+ if (root.hasDesignerEffect) {
+ root.effectNodeWrapper.deleteModelNode()
+ } else {
+ modelNodeBackend.createModelNode(-1, "data", "DesignEffect", "QtQuick.Studio.DesignEffects")
+ var effectNode = modelNodeBackend.allChildrenOfType("DesignEffect")
+ modelNodeBackend.createModelNode(effectNode, "effects", "DesignDropShadow")
+ }
+ root.invalidate()
+ }
+ }
+ }
+
+ PropertyLabel {
+ text: qsTr("Visible")
+ tooltip: qsTr("Toggles the visibility of visual effects on the component.")
+ visible: root.hasDesignerEffect
+ }
+
+ SecondColumnLayout {
+ visible: root.hasDesignerEffect
+
+ CheckBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: root.effectNodeWrapper.properties.visible
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+
+ Item {
+ visible: root.hasDesignerEffect
+ width: 1
+ height: StudioTheme.Values.sectionHeadSpacerHeight
+ }
+
+ function handleDragMove() {
+ root.dragTimer.stop()
+ if (root.secsY.length === 0) {
+ for (let i = 0; i < repeater.count; ++i)
+ root.secsY[i] = repeater.itemAt(i).y
+ }
+
+ let scrollView = Controller.mainScrollView
+
+ let oldContentY = scrollView.contentY
+ if (root.draggedSec.y < scrollView.dragScrollMargin + scrollView.contentY
+ && scrollView.contentY > 0) {
+ scrollView.contentY -= scrollView.dragScrollMargin / 2
+ } else if (root.draggedSec.y > scrollView.contentY + scrollView.height - scrollView.dragScrollMargin
+ && scrollView.contentY < scrollView.contentHeight - scrollView.height) {
+ scrollView.contentY += scrollView.dragScrollMargin / 2
+ if (scrollView.contentY > scrollView.contentHeight - scrollView.height)
+ scrollView.contentY = scrollView.contentHeight - scrollView.height
+ }
+
+ if (scrollView.contentY < 0)
+ scrollView.contentY = 0
+
+ if (oldContentY !== scrollView.contentY) {
+ // Changing dragged section position in drag handler doesn't seem to stick
+ // when triggered by mouse move, so do it again async
+ root.dragTimer.targetY = root.draggedSec.y - oldContentY + scrollView.contentY
+ root.dragTimer.restart()
+ root.dragConnection.enabled = false
+ root.draggedSec.y = root.dragTimer.targetY
+ root.dragConnection.enabled = true
+ }
+
+ root.moveToIdx = root.moveFromIdx
+ for (let i = 0; i < repeater.count; ++i) {
+ let currItem = repeater.itemAt(i)
+ if (i > root.moveFromIdx) {
+ if (root.draggedSec.y > currItem.y) {
+ currItem.y = root.secsY[i] - root.draggedSec.height - nodesCol.spacing
+ root.moveToIdx = i
+ } else {
+ currItem.y = root.secsY[i]
+ }
+ } else if (i < root.moveFromIdx) {
+ if (root.draggedSec.y < currItem.y) {
+ currItem.y = root.secsY[i] + root.draggedSec.height + nodesCol.spacing
+ root.moveToIdx = Math.min(root.moveToIdx, i)
+ } else {
+ currItem.y = root.secsY[i]
+ }
+ }
+ }
+ }
+
+ property Connections dragConnection: Connections {
+ target: root.draggedSec
+
+ function onYChanged() { root.handleDragMove() }
+ }
+
+ property Timer dragTimer: Timer {
+ running: false
+ interval: 16
+ repeat: false
+
+ property real targetY: -1
+
+ onTriggered: {
+ // Ensure we get position change triggers even if user holds mouse still to
+ // make scrolling smooth
+ root.draggedSec.y = targetY
+ root.handleDragMove()
+ }
+ }
+
+ Column {
+ id: nodesCol
+ anchors.left: parent.left
+ anchors.right: parent.right
+ spacing: 1
+
+ Section {
+ sectionHeight: 37
+ anchors.left: parent.left
+ anchors.right: parent.right
+ caption: qsTr("Layer Blur")
+ labelCapitalization: Font.MixedCase
+ visible: root.hasDesignerEffect
+ category: "DesignEffects"
+ expanded: false
+
+ SectionLayout {
+
+ PropertyLabel {
+ text: qsTr("Visible")
+ tooltip: qsTr("Toggles the visibility of the <b>Layer Blur</b> on the component.")
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: root.effectNodeWrapper.properties.layerBlurVisible
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: qsTr("Blur")
+ tooltip: qsTr("Sets the intensity of the <b>Layer Blur</b> on the component.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: root.effectNodeWrapper.properties.layerBlurRadius
+ minimumValue: 0
+ maximumValue: 250
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+ }
+
+ Section {
+ sectionHeight: 37
+ anchors.left: parent.left
+ anchors.right: parent.right
+ caption: qsTr("Background Blur")
+ labelCapitalization: Font.MixedCase
+ visible: root.hasDesignerEffect
+ category: "DesignEffects"
+ expanded: false
+
+ SectionLayout {
+
+ PropertyLabel {
+ text: qsTr("Visible")
+ tooltip: qsTr("Toggles the visibility of blur on the selected background component.")
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: root.effectNodeWrapper.properties.backgroundBlurVisible
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: qsTr("Blur")
+ tooltip: qsTr("Sets the intensity of blur on the selected background component.\n"
+ + "The foreground component should be transparent, and the background "
+ + "component should be opaque.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: root.effectNodeWrapper.properties.backgroundBlurRadius
+ minimumValue: 0
+ maximumValue: 250
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: qsTr("Background")
+ tooltip: qsTr("Sets a component as the background of a transparent component."
+ + "The <b>Background Blur</b> works only on this component. The component should "
+ + "be solid.")
+ }
+
+ SecondColumnLayout {
+ ItemFilterComboBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ width: implicitWidth
+ typeFilter: "QtQuick.Item"
+ backendValue: root.effectNodeWrapper.properties.backgroundLayer
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+ }
+
+ Repeater {
+ id: repeater
+ model: root.model
+
+ Section {
+ id: delegate
+
+ property QtObject wrapper: modelNodeBackend.registerSubSelectionWrapper(modelData)
+ property bool wasExpanded: false
+
+ Behavior on y {
+ id: dragAnimation
+
+ PropertyAnimation {
+ duration: 300
+ easing.type: Easing.InOutQuad
+ }
+ }
+
+ onStartDrag: function(section) {
+ root.draggedSec = section
+ root.moveFromIdx = index
+ // We only need to animate non-dragged sections
+ dragAnimation.enabled = false
+ delegate.wasExpanded = delegate.expanded
+ delegate.expanded = false
+ delegate.highlightBorder = true
+ root.secsY = []
+ }
+
+ onStopDrag: {
+ if (root.secsY.length !== 0) {
+ if (root.moveFromIdx === root.moveToIdx)
+ root.draggedSec.y = root.secsY[root.moveFromIdx]
+ else
+ modelNodeBackend.moveNode(root.effectNode, "effects", root.moveFromIdx, root.moveToIdx)
+ }
+
+ delegate.highlightBorder = false
+ root.draggedSec = null
+ delegate.expanded = delegate.wasExpanded
+ dragAnimation.enabled = true
+
+ Qt.callLater(root.invalidate)
+ }
+
+ sectionHeight: 37
+ anchors.left: parent.left
+ anchors.right: parent.right
+ category: "DesignEffects"
+ fillBackground: true
+ expanded: false
+
+ draggable: true
+ showCloseButton: true
+
+ content: StudioControls.ComboBox {
+ id: shadowComboBox
+ actionIndicatorVisible: false
+ width: 200
+ textRole: "text"
+ valueRole: "value"
+ model: [
+ { value: "DesignDropShadow", text: qsTr("Drop Shadow") },
+ { value: "DesignInnerShadow", text: qsTr("Inner Shadow") }
+ ]
+ anchors.verticalCenter: parent.verticalCenter
+
+ // When an item is selected, update the backend.
+ onActivated: {
+ delegate.wrapper.properties.showBehind.resetValue()
+ modelNodeBackend.changeType(modelData, shadowComboBox.currentValue)
+ }
+ // Set the initial currentIndex to the value stored in the backend.
+ Component.onCompleted: {
+ shadowComboBox.currentIndex = shadowComboBox.indexOfValue(modelNodeBackend.simplifiedTypeName(modelData))
+ }
+ }
+
+ onCloseButtonClicked: {
+ delegate.wrapper.deleteModelNode()
+ Qt.callLater(root.invalidate)
+ }
+
+ SectionLayout {
+ id: controlContainer
+ property bool isDropShadow: shadowComboBox.currentValue === "DesignDropShadow"
+
+ PropertyLabel {
+ text: qsTr("Visible")
+ tooltip: qsTr("Toggles the visibility of the component shadow.")
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: delegate.wrapper.properties.visible
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: qsTr("Blur")
+ tooltip: qsTr("Sets the softness of the component shadow. A larger value"
+ + " causes the edges of the shadow to appear more blurry.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: delegate.wrapper.properties.blur
+ minimumValue: 0
+ maximumValue: 250
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: qsTr("Spread")
+ tooltip: modelNodeBackend.isInstanceOf("Rectangle")
+ ? qsTr("Resizes the base shadow of the component by pixels.")
+ : qsTr("Only supported for Rectangles.")
+ enabled: modelNodeBackend.isInstanceOf("Rectangle")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: delegate.wrapper.properties.spread
+ enabled: modelNodeBackend.isInstanceOf("Rectangle")
+ minimumValue: -2048
+ maximumValue: 2048
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: qsTr("Color")
+ tooltip: qsTr("Sets the color of the shadow.")
+ }
+
+ ColorEditor {
+ backendValue: delegate.wrapper.properties.color
+ supportGradient: false
+ }
+
+ PropertyLabel {
+ text: qsTr("Offset")
+ tooltip: qsTr("Moves the shadow with respect to the component in "
+ + "X and Y coordinates by pixels.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: delegate.wrapper.properties.offsetX
+ minimumValue: -0xffff
+ maximumValue: 0xffff
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "X"
+ tooltip: qsTr("X-coordinate")
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlGap }
+
+ SpinBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: delegate.wrapper.properties.offsetY
+ minimumValue: -0xffff
+ maximumValue: 0xffff
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Y"
+ tooltip: qsTr("Y-coordinate")
+ }
+
+ ExpandingSpacer {}
+ }
+
+
+ PropertyLabel {
+ visible: controlContainer.isDropShadow
+ text: qsTr("Show behind")
+ tooltip: qsTr("Toggles the visibility of the shadow behind a transparent component.")
+ }
+
+ SecondColumnLayout {
+ visible: controlContainer.isDropShadow
+
+ CheckBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: delegate.wrapper.properties.showBehind
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+ }
+ }
+ }
+
+ Item {
+ visible: root.hasDesignerEffect
+ width: 1
+ height: StudioTheme.Values.sectionHeadSpacerHeight
+ }
+
+ SectionLayout {
+ x: StudioTheme.Values.sectionLeftPadding
+ visible: root.hasDesignerEffect
+
+ PropertyLabel {}
+
+ SecondColumnLayout {
+ Spacer { implicitWidth: StudioTheme.Values.actionIndicatorWidth }
+
+ AbstractButton {
+ id: addShadowEffectButton
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ width: StudioTheme.Values.singleControlColumnWidth
+ buttonIcon: qsTr("Add Shadow Effect")
+ iconFont: StudioTheme.Constants.font
+ tooltip: qsTr("Adds <b>Drop Shadow</b> or <b>Inner Shadow</b> effects to a component.")
+ onClicked: {
+ modelNodeBackend.createModelNode(root.effectNode,
+ "effects",
+ "DesignDropShadow")
+ root.invalidate()
+ }
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/ItemPane.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/ItemPane.qml
index 60bd415a6a..aeef8a9598 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/ItemPane.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/ItemPane.qml
@@ -133,6 +133,10 @@ PropertyEditorPane {
visible: specificsOne.source.toString() !== ""
}
+ EffectsSection {
+ expanded: false
+ }
+
AdvancedSection {
expanded: false
}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/ColumnLayoutSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/ColumnLayoutSpecifics.qml
index 2072f13a8e..aeaeacbd4e 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/ColumnLayoutSpecifics.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/ColumnLayoutSpecifics.qml
@@ -12,7 +12,10 @@ Section {
caption: qsTr("Column Layout")
SectionLayout {
- PropertyLabel { text: qsTr("Column spacing") }
+ PropertyLabel {
+ text: qsTr("Column spacing")
+ tooltip: qsTr("Sets the space between the items in pixels in the <b>Column Layout</b>.")
+ }
SecondColumnLayout {
SpinBox {
@@ -30,6 +33,7 @@ Section {
PropertyLabel {
text: qsTr("Layout direction")
blockedByTemplate: !backendValues.layoutDirection.isAvailable
+ tooltip: qsTr("Sets the direction of the item flow in the <b>Column Layout</b>.")
}
SecondColumnLayout {
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/GridLayoutSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/GridLayoutSpecifics.qml
index 8eea143542..e6606ffe00 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/GridLayoutSpecifics.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/GridLayoutSpecifics.qml
@@ -12,7 +12,10 @@ Section {
caption: qsTr("Grid Layout")
SectionLayout {
- PropertyLabel { text: qsTr("Columns & Rows") }
+ PropertyLabel {
+ text: qsTr("Columns & Rows")
+ tooltip: qsTr("Sets the number of columns and rows in the <b>Grid Layout</b>.")
+ }
SecondColumnLayout {
SpinBox {
@@ -49,7 +52,10 @@ Section {
ExpandingSpacer {}
}
- PropertyLabel { text: qsTr("Spacing") }
+ PropertyLabel {
+ text: qsTr("Spacing")
+ tooltip: qsTr("Sets the space between the items in pixels in the rows and columns in the <b>Grid Layout</b>.")
+ }
SecondColumnLayout {
SpinBox {
@@ -86,7 +92,10 @@ Section {
ExpandingSpacer {}
}
- PropertyLabel { text: qsTr("Flow") }
+ PropertyLabel {
+ text: qsTr("Flow")
+ tooltip: qsTr("Set the direction of dynamic items to flow in rows or columns in the <b>Grid Layout</b>.")
+ }
SecondColumnLayout {
ComboBox {
@@ -100,7 +109,11 @@ Section {
ExpandingSpacer {}
}
- PropertyLabel { text: qsTr("Layout direction") }
+ PropertyLabel {
+ text: qsTr("Layout direction")
+ tooltip: qsTr("Sets the direction of the dynamic items left to right or right to left in the <b>Grid Layout</b>.")
+
+ }
SecondColumnLayout {
ComboBox {
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/RowLayoutSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/RowLayoutSpecifics.qml
index b4a2ced1cd..726b3783fb 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/RowLayoutSpecifics.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/RowLayoutSpecifics.qml
@@ -12,7 +12,10 @@ Section {
caption: qsTr("Row Layout")
SectionLayout {
- PropertyLabel { text: qsTr("Row spacing") }
+ PropertyLabel {
+ text: qsTr("Row spacing")
+ tooltip: qsTr("Sets the space between the items in pixels in the <b>Row Layout</b>.")
+ }
SecondColumnLayout {
SpinBox {
@@ -30,6 +33,7 @@ Section {
PropertyLabel {
text: qsTr("Layout direction")
blockedByTemplate: !backendValues.layoutDirection.isAvailable
+ tooltip: qsTr("Sets the direction of the item flow in the <b>Row Layout</b>.")
}
SecondColumnLayout {
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/StackLayoutSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/StackLayoutSpecifics.qml
index 110a8cbf1a..dc865bf128 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/StackLayoutSpecifics.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Layouts/StackLayoutSpecifics.qml
@@ -12,7 +12,10 @@ Section {
caption: qsTr("Stack Layout")
SectionLayout {
- PropertyLabel { text: qsTr("Current index") }
+ PropertyLabel {
+ text: qsTr("Current index")
+ tooltip: qsTr("Sets the index of the child item currently visible in the <b>Stack Layout</b>.")
+ }
SecondColumnLayout {
SpinBox {
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/CheckBox.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/CheckBox.qml
index 95788a9ec6..7f1e6f5d46 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/CheckBox.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/CheckBox.qml
@@ -22,17 +22,25 @@ StudioControls.CheckBox {
labelColor: colorLogic.textColor
+ property bool __block: false
+
ColorLogic {
id: colorLogic
backendValue: checkBox.backendValue
onValueFromBackendChanged: {
+ checkBox.__block = true
if (colorLogic.valueFromBackend !== undefined
&& checkBox.checked !== colorLogic.valueFromBackend)
checkBox.checked = colorLogic.valueFromBackend
+ checkBox.__block = false
}
+
}
onCheckedChanged: {
+ if (checkBox.__block)
+ return
+
if (backendValue.value !== checkBox.checked)
backendValue.value = checkBox.checked
}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ColorEditor.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ColorEditor.qml
index 4b4d2b8dc6..cc8247d706 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ColorEditor.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ColorEditor.qml
@@ -38,6 +38,10 @@ SecondColumnLayout {
property alias showHexTextField: hexTextField.visible
property bool shapeGradients: false
+
+ //for now, gradients on MCUs are limited to Basic and Shape Linear Gradient:
+ property bool mcuGradients: false
+
property color originalColor
property bool isVector3D: false
@@ -219,7 +223,10 @@ SecondColumnLayout {
function open() {
popupDialog.ensureLoader()
+
popupDialog.show(preview)
+
+ popupDialog.loaderItem.aboutToBeShown() //need it for now
}
function determineActiveColorMode() {
@@ -235,9 +242,11 @@ SecondColumnLayout {
sourceComponent: ColorEditorPopup {
shapeGradients: colorEditor.shapeGradients
+ mcuGradients: colorEditor.mcuGradients
supportGradient: colorEditor.supportGradient
width: popupDialog.contentWidth
visible: popupDialog.visible
+ parentWindow: popupDialog.window
}
onLoaded: {
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ColorEditorPopup.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ColorEditorPopup.qml
index 22be367c37..41f2c433fa 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ColorEditorPopup.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ColorEditorPopup.qml
@@ -12,10 +12,20 @@ import QtQuickDesignerColorPalette
Column {
id: root
+ // There seems to be an issue on Windows and MacOS with ColorPickers
+ // Canvases not being painted on initialization
+ // because ColorEditorPopup is invisible at init time,
+ // so we use this signal to explicitly pass visibility status
+ signal aboutToBeShown
+
property bool eyeDropperActive: ColorPaletteBackend.eyeDropperActive
property bool supportGradient: false
property bool shapeGradients: false
+
+ //for now, gradients on MCUs are limited to Basic and Shape Linear Gradient:
+ property bool mcuGradients: false
+
property alias gradientLine: gradientLine
property alias popupHexTextField: popupHexTextField
property alias gradientPropertyName: root.gradientModel.gradientPropertyName
@@ -23,6 +33,8 @@ Column {
property alias gradientModel: gradientModel
+ property Window parentWindow: null
+
property bool isInValidState: false
readonly property real twoColumnWidth: (colorColumn.width - StudioTheme.Values.controlGap) * 0.5
@@ -224,12 +236,12 @@ Column {
ceMode.items.append({
value: "RadialGradient",
text: qsTr("Radial"),
- enabled: root.supportGradient && root.shapeGradients
+ enabled: root.supportGradient && root.shapeGradients && !root.mcuGradients
})
ceMode.items.append({
value: "ConicalGradient",
text: qsTr("Conical"),
- enabled: root.supportGradient && root.shapeGradients
+ enabled: root.supportGradient && root.shapeGradients && !root.mcuGradients
})
}
@@ -429,6 +441,13 @@ Column {
hsvValueSpinBox.value = colorPicker.value
hsvAlphaSpinBox.value = colorPicker.alpha
}
+
+ Connections {
+ target: root
+ onAboutToBeShown: {
+ colorPicker.aboutToBeShown()
+ }
+ }
}
Column {
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/DoubleSpinBox.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/DoubleSpinBox.qml
index a44e8c690b..11ce0e1e75 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/DoubleSpinBox.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/DoubleSpinBox.qml
@@ -53,5 +53,6 @@ Item {
decimals: 2
onRealValueModified: wrapper.valueModified()
+ onCompressedRealValueModified: wrapper.valueModified()
}
}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/DynamicPropertiesSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/DynamicPropertiesSection.qml
index 39176ca82a..e0c70ff946 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/DynamicPropertiesSection.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/DynamicPropertiesSection.qml
@@ -291,53 +291,64 @@ Section {
property int vecSize: 0
property var proxyValues: []
property var spinBoxes: [boxX, boxY, boxZ, boxW]
+ property bool block: false
signal remove
- onVecSizeChanged: updateProxyValues()
+ onVecSizeChanged: layoutVector.updateProxyValues()
- spacing: StudioTheme.Values.sectionRowSpacing / 2
+ spacing: StudioTheme.Values.sectionRowSpacing
function isValidValue(v) {
return !(v === undefined || isNaN(v))
}
- function updateExpression() {
+ function updateExpressionFromExpression() {
+ if (layoutVector.block)
+ return
+
+ layoutVector.backendValue.expression = layoutVector.proxyValues[0].expression
+ // Only the first proxy value has an expression editor enabled
+ }
+
+ function updateExpressionFromValue() {
+ if (layoutVector.block)
+ return
+
for (let i = 0; i < vecSize; ++i) {
- if (!isValidValue(proxyValues[i].value))
+ if (!layoutVector.isValidValue(layoutVector.proxyValues[i].value))
return
}
- let expStr = "Qt.vector" + vecSize + "d("+proxyValues[0].value
- for (let j=1; j < vecSize; ++j)
- expStr += ", " + proxyValues[j].value
+ let expStr = "Qt.vector" + layoutVector.vecSize + "d(" + layoutVector.proxyValues[0].value
+ for (let j=1; j < layoutVector.vecSize; ++j)
+ expStr += ", " + layoutVector.proxyValues[j].value
expStr += ")"
layoutVector.backendValue.expression = expStr
}
function updateProxyValues() {
- if (!backendValue)
+ if (!layoutVector.backendValue)
return;
- const startIndex = backendValue.expression.indexOf('(')
- const endIndex = backendValue.expression.indexOf(')')
- if (startIndex === -1 || endIndex === -1 || endIndex < startIndex)
- return
- const numberStr = backendValue.expression.slice(startIndex + 1, endIndex)
- const numbers = numberStr.split(",")
- if (!Array.isArray(numbers) || numbers.length !== vecSize)
- return
+ let vals = layoutVector.backendValue.getExpressionAsVector()
- let vals = []
- for (let i = 0; i < vecSize; ++i) {
- vals[i] = parseFloat(numbers[i])
- if (!isValidValue(vals[i]))
- return
+ layoutVector.block = true
+
+ if (layoutVector.vecSize === vals.length) {
+ for (let j = 0; j < layoutVector.vecSize; ++j) {
+ layoutVector.proxyValues[j].setForceBound(false)
+ layoutVector.proxyValues[j].value = vals[j]
+ }
+ } else {
+ for (let j = 0; j < layoutVector.vecSize; ++j) {
+ layoutVector.proxyValues[j].setForceBound(true) // Required since the backendValue is just proxied
+ layoutVector.proxyValues[j].expression = layoutVector.backendValue.expression
+ }
}
- for (let j = 0; j < vecSize; ++j)
- proxyValues[j].value = vals[j]
+ layoutVector.block = false
}
SecondColumnLayout {
@@ -357,15 +368,18 @@ Section {
tooltip: "X"
}
- Spacer { implicitWidth: StudioTheme.Values.controlGap }
+ Spacer {
+ implicitWidth: StudioTheme.Values.controlGap
+ + StudioTheme.Values.actionIndicatorWidth
+ }
SpinBox {
id: boxY
+ actionIndicatorVisible: false
minimumValue: -9999999
maximumValue: 9999999
decimals: 2
implicitWidth: StudioTheme.Values.twoControlColumnWidth
- + StudioTheme.Values.actionIndicatorWidth
}
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
@@ -386,14 +400,16 @@ Section {
}
SecondColumnLayout {
- visible: vecSize > 2
+ visible: layoutVector.vecSize > 2
+ Spacer { implicitWidth: StudioTheme.Values.actionIndicatorWidth }
+
SpinBox {
id: boxZ
+ actionIndicatorVisible: false
minimumValue: -9999999
maximumValue: 9999999
decimals: 2
implicitWidth: StudioTheme.Values.twoControlColumnWidth
- + StudioTheme.Values.actionIndicatorWidth
}
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
@@ -401,19 +417,22 @@ Section {
ControlLabel {
text: "Z"
tooltip: "Z"
- visible: vecSize > 2
+ visible: layoutVector.vecSize > 2
}
- Spacer { implicitWidth: StudioTheme.Values.controlGap }
+ Spacer {
+ implicitWidth: StudioTheme.Values.controlGap
+ + StudioTheme.Values.actionIndicatorWidth
+ }
SpinBox {
id: boxW
+ actionIndicatorVisible: false
minimumValue: -9999999
maximumValue: 9999999
decimals: 2
implicitWidth: StudioTheme.Values.twoControlColumnWidth
- + StudioTheme.Values.actionIndicatorWidth
- visible: vecSize > 3
+ visible: layoutVector.vecSize > 3
}
Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
@@ -421,7 +440,7 @@ Section {
ControlLabel {
text: "W"
tooltip: "W"
- visible: vecSize > 3
+ visible: layoutVector.vecSize > 3
}
Spacer { implicitWidth: StudioTheme.Values.controlGap }
@@ -430,7 +449,7 @@ Section {
height: 10
implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
- visible: vecSize === 2 // Placeholder for last spinbox
+ visible: layoutVector.vecSize === 2 // Placeholder for last spinbox
}
Spacer { implicitWidth: StudioTheme.Values.twoControlColumnGap }
@@ -486,9 +505,12 @@ Section {
model: root.propertiesModel
row: index
}
+
PropertyLabel {
text: propertyName
tooltip: propertyType
+ Layout.alignment: Qt.AlignTop
+ Layout.topMargin: 6
}
Loader {
@@ -506,6 +528,8 @@ Section {
return intEditor
if (propertyType == "real")
return realEditor
+ if (propertyType == "double")
+ return realEditor
if (propertyType == "string")
return stringEditor
if (propertyType == "bool")
@@ -540,7 +564,8 @@ Section {
for (let i = 0; i < vecSize; ++i) {
var newProxyValue = propertyRow.createProxyBackendValue()
loader.item.proxyValues.push(newProxyValue)
- newProxyValue.valueChangedQml.connect(loader.item.updateExpression)
+ newProxyValue.valueChangedQml.connect(loader.item.updateExpressionFromValue)
+ newProxyValue.expressionChangedQml.connect(loader.item.updateExpressionFromExpression)
loader.item.spinBoxes[i].backendValue = newProxyValue
}
propertyRow.backendValue.expressionChanged.connect(loader.item.updateProxyValues)
@@ -685,7 +710,7 @@ Section {
StudioControls.ComboBox {
id: comboBox
actionIndicator.visible: false
- model: ["int", "real", "color", "string", "bool", "url", "alias",
+ model: ["int", "real", "double", "color", "string", "bool", "url", "alias", "signal",
"TextureInput", "vector2d", "vector3d", "vector4d"]
width: cePopup.itemWidth
}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ExtendedFunctionLogic.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ExtendedFunctionLogic.qml
index 76e6bd8f09..8a8c8c33ce 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ExtendedFunctionLogic.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ExtendedFunctionLogic.qml
@@ -103,7 +103,7 @@ Item {
StudioControls.MenuItem {
text: qsTr("Insert Keyframe")
enabled: hasActiveTimeline
- onTriggered: insertKeyframe(backendValue.name)
+ onTriggered: backendValue.insertKeyframe()
}
}
}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FlagsComboBox.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FlagsComboBox.qml
index 46c98f25c5..edf17374e2 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FlagsComboBox.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FlagsComboBox.qml
@@ -132,6 +132,8 @@ StudioControls.CustomComboBox {
ExtendedFunctionLogic {
id: extFuncLogic
backendValue: root.backendValue
+
+ onMenuVisibleChanged: root.popup.visible = false
}
actionIndicator.icon.color: extFuncLogic.color
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/IconButton.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/IconButton.qml
index 008320cb92..4534d3fe7d 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/IconButton.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/IconButton.qml
@@ -8,9 +8,9 @@ import StudioTheme as StudioTheme
Rectangle {
id: root
- signal clicked()
- signal pressed()
- signal released()
+ signal clicked(mouse: var)
+ signal pressed(mouse: var)
+ signal released(mouse: var)
property alias icon: icon.text
property alias tooltip: toolTip.text
@@ -30,18 +30,17 @@ Rectangle {
property color hoverColor: root.transparentBg ? "transparent" : StudioTheme.Values.themeControlBackgroundHover
property color pressColor: root.transparentBg ? "transparent" : StudioTheme.Values.themeControlBackgroundInteraction
- width: buttonSize
- height: buttonSize
+ width: root.buttonSize
+ height: root.buttonSize
- color: !enabled ? normalColor
- : mouseArea.pressed ? pressColor
- : mouseArea.containsMouse ? hoverColor
- : normalColor
+ color: !root.enabled ? root.normalColor
+ : mouseArea.pressed ? root.pressColor
+ : mouseArea.containsMouse ? root.hoverColor
+ : root.normalColor
Text {
id: icon
anchors.centerIn: root
-
color: root.enabled ? StudioTheme.Values.themeTextColor : StudioTheme.Values.themeTextColorDisabled
font.family: StudioTheme.Constants.iconFont.family
font.pixelSize: StudioTheme.Values.baseIconFontSize
@@ -49,30 +48,29 @@ Rectangle {
MouseArea {
id: mouseArea
-
anchors.fill: parent
hoverEnabled: root.visible
- onClicked: {
+ onClicked: function(mouse) {
// We need to keep mouse area enabled even when button is disabled to make tooltip work
if (root.enabled)
- root.clicked()
+ root.clicked(mouse)
}
- onPressed: {
+ onPressed: function(mouse) {
if (root.enabled)
- root.pressed()
+ root.pressed(mouse)
}
- onReleased: {
+ onReleased: function(mouse) {
if (root.enabled)
- root.released()
+ root.released(mouse)
}
}
ToolTip {
id: toolTip
- visible: mouseArea.containsMouse && text !== ""
+ visible: mouseArea.containsMouse && toolTip.text !== ""
delay: 1000
}
}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/PropertyEditorPane.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/PropertyEditorPane.qml
index 7046ca48e1..309d815d7a 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/PropertyEditorPane.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/PropertyEditorPane.qml
@@ -19,30 +19,83 @@ Rectangle {
default property alias content: mainColumn.children
property alias scrollView: mainScrollView
+ property bool headerDocked: false
+ readonly property Item headerItem: headerDocked ? dockedHeaderLoader.item : undockedHeaderLoader.item
+
+ property Component headerComponent: null
+
// Called from C++ to close context menu on focus out
function closeContextMenu() {
Controller.closeContextMenu()
}
+ Loader {
+ id: dockedHeaderLoader
+
+ anchors.top: itemPane.top
+ z: parent.z + 1
+ height: item ? item.implicitHeight : 0
+ width: parent.width
+
+ active: itemPane.headerDocked
+ sourceComponent: itemPane.headerComponent
+
+ HeaderBackground{}
+ }
+
MouseArea {
anchors.fill: parent
- onClicked: forceActiveFocus()
+ onClicked: itemPane.forceActiveFocus()
}
HelperWidgets.ScrollView {
id: mainScrollView
- //clip: true
- anchors.fill: parent
+
+ clip: true
+ anchors {
+ top: dockedHeaderLoader.bottom
+ bottom: itemPane.bottom
+ left: itemPane.left
+ right: itemPane.right
+ }
interactive: !Controller.contextMenuOpened
- Column {
- id: mainColumn
- y: -1
- width: itemPane.width
+ ColumnLayout {
+ spacing: 2
+ width: mainScrollView.width
- onWidthChanged: StudioTheme.Values.responsiveResize(itemPane.width)
- Component.onCompleted: StudioTheme.Values.responsiveResize(itemPane.width)
+ Loader {
+ id: undockedHeaderLoader
+
+ Layout.fillWidth: true
+ Layout.preferredHeight: item ? item.implicitHeight : 0
+
+ active: !itemPane.headerDocked
+ sourceComponent: itemPane.headerComponent
+
+ HeaderBackground{}
+ }
+
+ Column {
+ id: mainColumn
+
+ Layout.fillWidth: true
+
+ onWidthChanged: StudioTheme.Values.responsiveResize(itemPane.width)
+ Component.onCompleted: StudioTheme.Values.responsiveResize(itemPane.width)
+ }
}
}
+
+ component HeaderBackground: Rectangle {
+ anchors.fill: parent
+ anchors.leftMargin: -StudioTheme.Values.border
+ anchors.rightMargin: -StudioTheme.Values.border
+ z: parent.z - 1
+
+ color: StudioTheme.Values.themeToolbarBackground
+ border.color: StudioTheme.Values.themePanelBackground
+ border.width: StudioTheme.Values.border
+ }
}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/Section.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/Section.qml
index dbbb200f73..245b8506a2 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/Section.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/Section.qml
@@ -9,11 +9,13 @@ import StudioTheme as StudioTheme
Item {
id: section
- property alias caption: label.text
- property alias labelColor: label.color
+
+ property string caption: "Title"
+ property color labelColor: StudioTheme.Values.themeTextColor
+ property int labelCapitalization: Font.AllUppercase
property alias sectionHeight: header.height
property alias sectionBackgroundColor: header.color
- property alias sectionFontSize: label.font.pixelSize
+ property int sectionFontSize: StudioTheme.Values.myFontSize
property alias showTopSeparator: topSeparator.visible
property alias showArrow: arrow.visible
property alias showLeftBorder: leftBorder.visible
@@ -26,6 +28,17 @@ Item {
property alias fillBackground: sectionBackground.visible
property alias highlightBorder: sectionBorder.visible
+ property Item content: Controls.Label {
+ id: label
+ text: section.caption
+ color: section.labelColor
+ elide: Text.ElideRight
+ font.pixelSize: section.sectionFontSize
+ font.capitalization: section.labelCapitalization
+ anchors.verticalCenter: parent?.verticalCenter
+ textFormat: Text.RichText
+ }
+
property int leftPadding: StudioTheme.Values.sectionLeftPadding
property int rightPadding: 0
property int topPadding: StudioTheme.Values.sectionHeadSpacerHeight
@@ -59,7 +72,7 @@ Item {
Connections {
target: Controller
function onCollapseAll(cat) {
- if (collapsible && cat === section.category) {
+ if (section.collapsible && cat === section.category) {
if (section.expandOnClick)
section.expanded = false
else
@@ -106,6 +119,22 @@ Item {
onExited: section.dropExit()
}
+ StudioControls.Menu {
+ id: contextMenu
+
+ StudioControls.MenuItem {
+ text: qsTr("Expand All")
+ onTriggered: Controller.expandAll(section.category)
+ }
+
+ StudioControls.MenuItem {
+ text: qsTr("Collapse All")
+ onTriggered: Controller.collapseAll(section.category)
+ }
+
+ onOpenedChanged: Controller.contextMenuOpened = contextMenu.opened
+ }
+
Rectangle {
id: header
height: section.hideHeader ? 0 : StudioTheme.Values.sectionHeadHeight
@@ -116,43 +145,6 @@ Item {
: Qt.lighter(StudioTheme.Values.themeSectionHeadBackground, 1.0
+ (0.2 * section.level))
- Item {
- StudioControls.Menu {
- id: contextMenu
-
- StudioControls.MenuItem {
- text: qsTr("Expand All")
- onTriggered: Controller.expandAll(section.category)
- }
-
- StudioControls.MenuItem {
- text: qsTr("Collapse All")
- onTriggered: Controller.collapseAll(section.category)
- }
-
- onOpenedChanged: Controller.contextMenuOpened = contextMenu.opened
- }
- }
-
- Image {
- id: arrow
- width: 8
- height: 4
- source: "image://icons/down-arrow"
- anchors.left: parent.left
- anchors.leftMargin: 4 + (section.level * section.levelShift) + (section.draggable ? 20 : 0) + (section.showEyeButton ? 25 : 0)
- anchors.verticalCenter: parent.verticalCenter
- }
-
- Controls.Label {
- id: label
- anchors.verticalCenter: parent.verticalCenter
- color: StudioTheme.Values.themeTextColor
- x: arrow.x + 18
- font.pixelSize: StudioTheme.Values.myFontSize
- font.capitalization: Font.AllUppercase
- }
-
MouseArea {
id: mouseArea
anchors.fill: parent
@@ -173,58 +165,102 @@ Item {
}
}
- IconButton {
- id: closeButton
+ RowLayout {
+ spacing: 1
+ anchors.fill: parent
- icon: StudioTheme.Constants.closeCross
- buttonSize: 22
- iconScale: containsMouse ? 1.2 : 1
- transparentBg: true
- anchors.right: parent.right
- anchors.rightMargin: 10
- visible: false
+ IconButton {
+ id: dragButton
+ visible: false
+ icon: StudioTheme.Constants.dragmarks
+ buttonSize: 21
+ iconScale: dragButton.enabled && dragButton.containsMouse ? 1.2 : 1
+ transparentBg: true
- onClicked: root.closeButtonClicked()
- }
+ Layout.alignment: Qt.AlignVCenter
+ Layout.preferredWidth: dragButton.width
+ Layout.maximumWidth: dragButton.width
+
+ drag.target: dragButton.enabled ? section : null
+ drag.axis: Drag.YAxis
+
+ onPressed: {
+ section.startDrag(section)
+ section.z = ++section.parent.z // put the dragged section on top
+ }
- IconButton {
- id: dragButton
+ onReleased: {
+ section.stopDrag()
+ }
+ }
- icon: StudioTheme.Constants.dragmarks
- buttonSize: 22
- iconScale: dragButton.enabled && dragButton.containsMouse ? 1.2 : 1
- transparentBg: true
+ IconButton {
+ id: eyeButton
- visible: false
- drag.target: dragButton.enabled ? section : null
- drag.axis: Drag.YAxis
+ visible: false
+ icon: section.eyeEnabled ? StudioTheme.Constants.visible_small
+ : StudioTheme.Constants.invisible_small
+ buttonSize: 21
+ iconScale: eyeButton.containsMouse ? 1.2 : 1
+ transparentBg: true
- onPressed: {
- section.startDrag(section)
+ Layout.alignment: Qt.AlignVCenter
+ Layout.preferredWidth: eyeButton.width
+ Layout.maximumWidth: eyeButton.width
- section.z = ++section.parent.z // put the dragged section on top
+ onClicked: {
+ section.eyeEnabled = !section.eyeEnabled
+ section.eyeButtonClicked()
+ }
}
- onReleased: {
- section.stopDrag()
+ IconButton {
+ id: arrow
+ icon: StudioTheme.Constants.sectionToggle
+ transparentBg: true
+
+ buttonSize: 21
+ iconSize: StudioTheme.Values.smallIconFontSize
+ iconColor: StudioTheme.Values.themeTextColor
+
+ Layout.alignment: Qt.AlignVCenter
+ Layout.preferredWidth: arrow.width
+ Layout.maximumWidth: arrow.width
+
+ onClicked: function(mouse) {
+ if (!section.collapsible && section.expanded)
+ return
+
+ transition.enabled = true
+ if (section.expandOnClick)
+ section.expanded = !section.expanded
+ else
+ section.toggleExpand()
+ }
}
- }
- IconButton {
- id: eyeButton
+ Item {
+ id: headerContent
+ height: header.height
+ Layout.fillWidth: true
+ children: [ section.content ]
+ }
- anchors.left: dragButton.right
+ IconButton {
+ id: closeButton
- icon: section.eyeEnabled ? StudioTheme.Constants.visible_small : StudioTheme.Constants.invisible_small
- buttonSize: 22
- iconScale: eyeButton.containsMouse ? 1.2 : 1
- transparentBg: true
+ visible: false
+ icon: StudioTheme.Constants.closeCross
+ buttonSize: 21
+ iconScale: closeButton.containsMouse ? 1.2 : 1
+ transparentBg: true
- visible: false
+ Layout.alignment: Qt.AlignVCenter
+ Layout.preferredWidth: closeButton.width
+ Layout.maximumWidth: closeButton.width
+ Layout.rightMargin: 10
- onClicked: {
- section.eyeEnabled = !section.eyeEnabled
- root.eyeButtonClicked()
+ onClicked: section.closeButtonClicked()
}
}
}
@@ -266,6 +302,7 @@ Item {
border.width: 1
visible: false
}
+
Item {
id: topSpacer
height: section.addTopPadding && column.height > 0 ? section.topPadding : 0
@@ -285,7 +322,7 @@ Item {
id: leftBorder
visible: false
width: 1
- height: parent.height - bottomPadding
+ height: parent.height - section.bottomPadding
color: header.color
}
@@ -320,8 +357,8 @@ Item {
}
onRunningChanged: {
- if (!running)
- enabled = false
+ if (!transition.running)
+ transition.enabled = false
}
}
}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/SpinBox.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/SpinBox.qml
index f125c459c5..04cbb78f35 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/SpinBox.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/SpinBox.qml
@@ -22,6 +22,9 @@ Item {
property alias realDragRange: spinBox.realDragRange
property alias pixelsPerUnit: spinBox.pixelsPerUnit
+ property alias actionIndicatorEnabled: spinBox.actionIndicator.enabled
+ property alias actionIndicatorVisible: spinBox.actionIndicatorVisible
+
width: 96
implicitHeight: spinBox.height
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/UrlChooser.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/UrlChooser.qml
index c73e736ef4..8dadd1db2c 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/UrlChooser.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/UrlChooser.qml
@@ -448,9 +448,10 @@ Row {
for (var j = 0; j < myModel.length; ++j) {
let item = myModel[j]
if (root.hideDuplicates && nameMap.has(item.fileName)) {
- // Prefer hiding imported asset files rather than other project files
+ // Prefer hiding generated component files rather than other project files
let listIndex = nameMap.get(item.fileName)
- if (comboBox.listModel.get(listIndex).absoluteFilePath.includes("/asset_imports/")) {
+ let absPath = comboBox.listModel.get(listIndex).absoluteFilePath
+ if (absPath.includes("/Generated/") || absPath.includes("/asset_imports/")) {
comboBox.listModel.set(listIndex, {
absoluteFilePath: item.absoluteFilePath,
relativeFilePath: item.relativeFilePath,
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/CheckBox.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/CheckBox.qml
index 573b78012f..7e565e3a47 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/CheckBox.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/CheckBox.qml
@@ -14,7 +14,6 @@ T.CheckBox {
// This property is used to indicate the global hover state
property bool hover: control.hovered && control.enabled
- property bool edit: false
property alias actionIndicatorVisible: actionIndicator.visible
property real __actionIndicatorWidth: control.style.actionIndicatorSize.width
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/MenuItem.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/MenuItem.qml
index 07265e41a7..28372e41be 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/MenuItem.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/MenuItem.qml
@@ -9,7 +9,7 @@ import StudioTheme 1.0 as StudioTheme
T.MenuItem {
id: control
- property alias shortcut: itemAction.shortcut
+ property alias shortcut: shortcutObserver.shortcutWorkaround
property StudioTheme.ControlStyle style: StudioTheme.Values.controlStyle
@@ -24,9 +24,6 @@ T.MenuItem {
padding: 0
spacing: 0
horizontalPadding: control.style.contextMenuHorizontalPadding
- action: Action {
- id: itemAction
- }
contentItem: Item {
Text {
@@ -41,16 +38,23 @@ T.MenuItem {
Text {
id: shortcutLabel
+
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
text: shortcutObserver.nativeText
+ ? shortcutObserver.nativeText
+ : control.action
+ ? control.action.fakeShortcut ? control.action.fakeShortcut : ""
+ : ""
font: control.font
color: textLabel.color
Shortcut {
id: shortcutObserver
- property int shortcutWorkaround: control.shortcut ?? 0
+
+ property int shortcutWorkaround: 0
sequence: shortcutObserver.shortcutWorkaround
+ enabled: false
}
}
}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/PopupDialog.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/PopupDialog.qml
index 40c35df27c..821ba3a849 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/PopupDialog.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/PopupDialog.qml
@@ -104,7 +104,7 @@ QtObject {
return root.maximumHeight + (2 * window.margin)
}
visible: false
- flags: Qt.FramelessWindowHint | Qt.Tool | Qt.WindowStaysOnTopHint
+ flags: Qt.FramelessWindowHint | Qt.Tool
color: "transparent"
onClosing: function (close) {
@@ -286,10 +286,8 @@ QtObject {
enabled: root.visible
function onFocusWindowChanged(focusWindow) {
- if (!focusWindow) {
- root.close()
+ if (!focusWindow)
return
- }
if (root.keepOpen)
return
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/impl/ColorPicker.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/impl/ColorPicker.qml
index cd52511426..fc2a025664 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/impl/ColorPicker.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/impl/ColorPicker.qml
@@ -13,6 +13,8 @@ Column {
HSLA
}
+ signal aboutToBeShown
+
property int mode: ColorPicker.Mode.HSVA
property color color: "#303091"
@@ -206,6 +208,8 @@ Column {
target: root
function onHueChanged() { gradientOverlay.requestPaint() }
function onModeChanged() { gradientOverlay.requestPaint() }
+ function onAlphaChanged() { gradientOverlay.requestPaint() }
+ function onAboutToBeShown() { gradientOverlay.requestPaint() }
}
onPaint: {
@@ -249,6 +253,7 @@ Column {
function onColorInvalidated() { pickerCross.requestPaint() }
function onColorChanged() { pickerCross.requestPaint() }
function onModeChanged() { pickerCross.requestPaint() }
+ function onAboutToBeShown() { pickerCross.requestPaint() }
}
onPaint: {
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml
index ee2df02e04..3c74243f68 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml
@@ -75,309 +75,310 @@ QtObject {
readonly property string binding_medium: "\u005C"
readonly property string bounds_small: "\u005D"
readonly property string branch_medium: "\u005E"
- readonly property string camera_medium: "\u005F"
- readonly property string camera_small: "\u0060"
- readonly property string centerHorizontal: "\u0061"
- readonly property string centerVertical: "\u0062"
- readonly property string cleanLogs_medium: "\u0063"
- readonly property string clearList_large: "\u0064"
- readonly property string clearList_medium: "\u0065"
- readonly property string closeCross: "\u0066"
- readonly property string closeFile_large: "\u0067"
- readonly property string closeLink: "\u0068"
- readonly property string close_small: "\u0069"
- readonly property string code: "\u006A"
- readonly property string codeEditor_medium: "\u006B"
- readonly property string codeview_medium: "\u006C"
- readonly property string colorPopupClose: "\u006D"
- readonly property string colorSelection_medium: "\u006E"
- readonly property string columnsAndRows: "\u006F"
- readonly property string comboBox_medium: "\u0070"
- readonly property string cone_medium: "\u0071"
- readonly property string cone_small: "\u0072"
- readonly property string connection_small: "\u0073"
- readonly property string connections_medium: "\u0074"
- readonly property string copyLink: "\u0075"
- readonly property string copyStyle: "\u0076"
- readonly property string copy_small: "\u0077"
- readonly property string cornerA: "\u0078"
- readonly property string cornerB: "\u0079"
- readonly property string cornersAll: "\u007A"
- readonly property string createComponent_large: "\u007B"
- readonly property string createComponent_small: "\u007C"
- readonly property string createObject_medium: "\u007D"
- readonly property string create_medium: "\u007E"
- readonly property string create_small: "\u007F"
- readonly property string cube_medium: "\u0080"
- readonly property string cube_small: "\u0081"
- readonly property string curveDesigner: "\u0082"
- readonly property string curveDesigner_medium: "\u0083"
- readonly property string curveEditor: "\u0084"
- readonly property string customMaterialEditor: "\u0085"
- readonly property string cylinder_medium: "\u0086"
- readonly property string cylinder_small: "\u0087"
- readonly property string decisionNode: "\u0088"
- readonly property string deleteColumn: "\u0089"
- readonly property string deleteMaterial: "\u008A"
- readonly property string deleteRow: "\u008B"
- readonly property string deleteTable: "\u008C"
- readonly property string delete_medium: "\u008D"
- readonly property string delete_small: "\u008E"
- readonly property string deletecolumn_medium: "\u008F"
- readonly property string deletepermanently_medium: "\u0090"
- readonly property string deleterow_medium: "\u0091"
- readonly property string designMode_large: "\u0092"
- readonly property string detach: "\u0093"
- readonly property string directionalLight_small: "\u0094"
- readonly property string distributeBottom: "\u0095"
- readonly property string distributeCenterHorizontal: "\u0096"
- readonly property string distributeCenterVertical: "\u0097"
- readonly property string distributeLeft: "\u0098"
- readonly property string distributeOriginBottomRight: "\u0099"
- readonly property string distributeOriginCenter: "\u009A"
- readonly property string distributeOriginNone: "\u009B"
- readonly property string distributeOriginTopLeft: "\u009D"
- readonly property string distributeRight: "\u009E"
- readonly property string distributeSpacingHorizontal: "\u009F"
- readonly property string distributeSpacingVertical: "\u00A0"
- readonly property string distributeTop: "\u00A1"
- readonly property string download: "\u00A2"
- readonly property string downloadUnavailable: "\u00A3"
- readonly property string downloadUpdate: "\u00A4"
- readonly property string downloaded: "\u00A5"
- readonly property string dragmarks: "\u00A6"
- readonly property string duplicate_small: "\u00A7"
- readonly property string edit: "\u00A8"
- readonly property string editComponent_large: "\u00A9"
- readonly property string editComponent_small: "\u00AA"
- readonly property string editLightOff_medium: "\u00AB"
- readonly property string editLightOn_medium: "\u00AC"
- readonly property string edit_medium: "\u00AE"
- readonly property string edit_small: "\u00AF"
- readonly property string effects: "\u00B0"
- readonly property string events_small: "\u00B1"
- readonly property string export_medium: "\u00B2"
- readonly property string eyeDropper: "\u00B3"
- readonly property string favorite: "\u00B4"
- readonly property string fitAll_medium: "\u00B5"
- readonly property string fitSelected_small: "\u00B6"
- readonly property string fitSelection_medium: "\u00B7"
- readonly property string fitToView_medium: "\u00B8"
- readonly property string flowAction: "\u00B9"
- readonly property string flowTransition: "\u00BA"
- readonly property string fontStyleBold: "\u00BB"
- readonly property string fontStyleItalic: "\u00BC"
- readonly property string fontStyleStrikethrough: "\u00BD"
- readonly property string fontStyleUnderline: "\u00BE"
- readonly property string forward_medium: "\u00BF"
- readonly property string globalOrient_medium: "\u00C0"
- readonly property string gradient: "\u00C1"
- readonly property string gridView: "\u00C2"
- readonly property string grid_medium: "\u00C3"
- readonly property string group_small: "\u00C4"
- readonly property string help: "\u00C5"
- readonly property string home_large: "\u00C6"
- readonly property string idAliasOff: "\u00C7"
- readonly property string idAliasOn: "\u00C8"
- readonly property string import_medium: "\u00C9"
- readonly property string imported: "\u00CA"
- readonly property string importedModels_small: "\u00CB"
- readonly property string infinity: "\u00CC"
- readonly property string invisible_medium: "\u00CD"
- readonly property string invisible_small: "\u00CE"
- readonly property string jumpToCode_medium: "\u00CF"
- readonly property string jumpToCode_small: "\u00D0"
- readonly property string keyframe: "\u00D1"
- readonly property string languageList_medium: "\u00D2"
- readonly property string layouts_small: "\u00D3"
- readonly property string lights_small: "\u00D4"
- readonly property string linear_medium: "\u00D5"
- readonly property string linkTriangle: "\u00D6"
- readonly property string linked: "\u00D7"
- readonly property string listView: "\u00D8"
- readonly property string listView_medium: "\u00D9"
- readonly property string list_medium: "\u00DA"
- readonly property string localOrient_medium: "\u00DB"
- readonly property string lockOff: "\u00DC"
- readonly property string lockOn: "\u00DD"
- readonly property string loopPlayback_medium: "\u00DE"
- readonly property string materialBrowser_medium: "\u00DF"
- readonly property string materialPreviewEnvironment: "\u00E0"
- readonly property string materialPreviewModel: "\u00E1"
- readonly property string material_medium: "\u00E2"
- readonly property string maxBar_small: "\u00E3"
- readonly property string mergeCells: "\u00E4"
- readonly property string merge_small: "\u00E5"
- readonly property string minus: "\u00E6"
- readonly property string mirror: "\u00E7"
- readonly property string more_medium: "\u00E8"
- readonly property string mouseArea_small: "\u00E9"
- readonly property string moveDown_medium: "\u00EA"
- readonly property string moveInwards_medium: "\u00EB"
- readonly property string moveUp_medium: "\u00EC"
- readonly property string moveUpwards_medium: "\u00ED"
- readonly property string move_medium: "\u00EE"
- readonly property string newMaterial: "\u00EF"
- readonly property string nextFile_large: "\u00F0"
- readonly property string normalBar_small: "\u00F1"
- readonly property string openLink: "\u00F2"
- readonly property string openMaterialBrowser: "\u00F3"
- readonly property string orientation: "\u00F4"
- readonly property string orthCam_medium: "\u00F5"
- readonly property string orthCam_small: "\u00F6"
- readonly property string paddingEdge: "\u00F7"
- readonly property string paddingFrame: "\u00F8"
- readonly property string particleAnimation_medium: "\u00F9"
- readonly property string pasteStyle: "\u00FA"
- readonly property string paste_small: "\u00FB"
- readonly property string pause: "\u00FC"
- readonly property string pause_medium: "\u00FD"
- readonly property string perspectiveCam_medium: "\u00FE"
- readonly property string perspectiveCam_small: "\u00FF"
- readonly property string pin: "\u0100"
- readonly property string plane_medium: "\u0101"
- readonly property string plane_small: "\u0102"
- readonly property string play: "\u0103"
- readonly property string playFill_medium: "\u0104"
- readonly property string playOutline_medium: "\u0105"
- readonly property string plus: "\u0106"
- readonly property string pointLight_small: "\u0107"
- readonly property string positioners_small: "\u0108"
- readonly property string previewEnv_medium: "\u0109"
- readonly property string previousFile_large: "\u010A"
- readonly property string promote: "\u010B"
- readonly property string properties_medium: "\u010C"
- readonly property string readOnly: "\u010D"
- readonly property string recent_medium: "\u010E"
- readonly property string recordFill_medium: "\u010F"
- readonly property string recordOutline_medium: "\u0110"
- readonly property string redo: "\u0111"
- readonly property string reload_medium: "\u0112"
- readonly property string remove_medium: "\u0113"
- readonly property string remove_small: "\u0114"
- readonly property string rename_small: "\u0115"
- readonly property string replace_small: "\u0116"
- readonly property string resetView_small: "\u0117"
- readonly property string restartParticles_medium: "\u0118"
- readonly property string reverseOrder_medium: "\u0119"
- readonly property string roatate_medium: "\u011A"
- readonly property string rotationFill: "\u011B"
- readonly property string rotationOutline: "\u011C"
- readonly property string runProjFill_large: "\u011D"
- readonly property string runProjOutline_large: "\u011E"
- readonly property string s_anchors: "\u011F"
- readonly property string s_annotations: "\u0120"
- readonly property string s_arrange: "\u0121"
- readonly property string s_boundingBox: "\u0122"
- readonly property string s_component: "\u0123"
- readonly property string s_connections: "\u0124"
- readonly property string s_edit: "\u0125"
- readonly property string s_enterComponent: "\u0126"
- readonly property string s_eventList: "\u0127"
- readonly property string s_group: "\u0128"
- readonly property string s_layouts: "\u0129"
- readonly property string s_merging: "\u012A"
- readonly property string s_mouseArea: "\u012B"
- readonly property string s_positioners: "\u012C"
- readonly property string s_selection: "\u012D"
- readonly property string s_snapping: "\u012E"
- readonly property string s_timeline: "\u012F"
- readonly property string s_visibility: "\u0130"
- readonly property string saveAs_medium: "\u0131"
- readonly property string saveLogs_medium: "\u0132"
- readonly property string save_medium: "\u0133"
- readonly property string scale_medium: "\u0134"
- readonly property string search: "\u0135"
- readonly property string search_small: "\u0136"
- readonly property string sectionToggle: "\u0137"
- readonly property string selectFill_medium: "\u0138"
- readonly property string selectOutline_medium: "\u0139"
- readonly property string selectParent_small: "\u013A"
- readonly property string selection_small: "\u013B"
- readonly property string settings_medium: "\u013C"
- readonly property string signal_small: "\u013D"
- readonly property string snapping_conf_medium: "\u013E"
- readonly property string snapping_medium: "\u013F"
- readonly property string snapping_small: "\u0140"
- readonly property string sortascending_medium: "\u0141"
- readonly property string sortdescending_medium: "\u0142"
- readonly property string sphere_medium: "\u0143"
- readonly property string sphere_small: "\u0144"
- readonly property string splitColumns: "\u0145"
- readonly property string splitRows: "\u0146"
- readonly property string splitScreen_medium: "\u0147"
- readonly property string spotLight_small: "\u0148"
- readonly property string stackedContainer_small: "\u0149"
- readonly property string startNode: "\u014A"
- readonly property string step_medium: "\u014B"
- readonly property string stop_medium: "\u014C"
- readonly property string tableView_medium: "\u014D"
- readonly property string testIcon: "\u014E"
- readonly property string textAlignBottom: "\u014F"
- readonly property string textAlignCenter: "\u0150"
- readonly property string textAlignJustified: "\u0151"
- readonly property string textAlignLeft: "\u0152"
- readonly property string textAlignMiddle: "\u0153"
- readonly property string textAlignRight: "\u0154"
- readonly property string textAlignTop: "\u0155"
- readonly property string textBulletList: "\u0156"
- readonly property string textFullJustification: "\u0157"
- readonly property string textNumberedList: "\u0158"
- readonly property string textures_medium: "\u0159"
- readonly property string tickIcon: "\u015A"
- readonly property string tickMark_small: "\u015B"
- readonly property string timeline_small: "\u015C"
- readonly property string toEndFrame_medium: "\u015D"
- readonly property string toNextFrame_medium: "\u015E"
- readonly property string toPrevFrame_medium: "\u015F"
- readonly property string toStartFrame_medium: "\u0160"
- readonly property string topToolbar_annotations: "\u0161"
- readonly property string topToolbar_closeFile: "\u0162"
- readonly property string topToolbar_designMode: "\u0163"
- readonly property string topToolbar_enterComponent: "\u0164"
- readonly property string topToolbar_home: "\u0165"
- readonly property string topToolbar_makeComponent: "\u0166"
- readonly property string topToolbar_navFile: "\u0167"
- readonly property string topToolbar_runProject: "\u0168"
- readonly property string translationCreateFiles: "\u0169"
- readonly property string translationCreateReport: "\u016A"
- readonly property string translationExport: "\u016B"
- readonly property string translationImport: "\u016C"
- readonly property string translationSelectLanguages: "\u016D"
- readonly property string translationTest: "\u016E"
- readonly property string transparent: "\u016F"
- readonly property string triState: "\u0170"
- readonly property string triangleArcA: "\u0171"
- readonly property string triangleArcB: "\u0172"
- readonly property string triangleCornerA: "\u0173"
- readonly property string triangleCornerB: "\u0174"
- readonly property string unLinked: "\u0175"
- readonly property string undo: "\u0176"
- readonly property string unify_medium: "\u0177"
- readonly property string unpin: "\u0178"
- readonly property string upDownIcon: "\u0179"
- readonly property string upDownSquare2: "\u017A"
- readonly property string updateAvailable_medium: "\u017B"
- readonly property string updateContent_medium: "\u017C"
- readonly property string visibilityOff: "\u017D"
- readonly property string visibilityOn: "\u017E"
- readonly property string visible_medium: "\u017F"
- readonly property string visible_small: "\u0180"
- readonly property string warning_medium: "\u0181"
- readonly property string wildcard: "\u0182"
- readonly property string wizardsAutomotive: "\u0183"
- readonly property string wizardsDesktop: "\u0184"
- readonly property string wizardsGeneric: "\u0185"
- readonly property string wizardsMcuEmpty: "\u0186"
- readonly property string wizardsMcuGraph: "\u0187"
- readonly property string wizardsMobile: "\u0188"
- readonly property string wizardsUnknown: "\u0189"
- readonly property string zoomAll: "\u018A"
- readonly property string zoomIn: "\u018B"
- readonly property string zoomIn_medium: "\u018C"
- readonly property string zoomOut: "\u018D"
- readonly property string zoomOut_medium: "\u018E"
- readonly property string zoomSelection: "\u018F"
+ readonly property string cameraSpeed_medium: "\u005F"
+ readonly property string camera_medium: "\u0060"
+ readonly property string camera_small: "\u0061"
+ readonly property string centerHorizontal: "\u0062"
+ readonly property string centerVertical: "\u0063"
+ readonly property string cleanLogs_medium: "\u0064"
+ readonly property string clearList_large: "\u0065"
+ readonly property string clearList_medium: "\u0066"
+ readonly property string closeCross: "\u0067"
+ readonly property string closeFile_large: "\u0068"
+ readonly property string closeLink: "\u0069"
+ readonly property string close_small: "\u006A"
+ readonly property string code: "\u006B"
+ readonly property string codeEditor_medium: "\u006C"
+ readonly property string codeview_medium: "\u006D"
+ readonly property string colorPopupClose: "\u006E"
+ readonly property string colorSelection_medium: "\u006F"
+ readonly property string columnsAndRows: "\u0070"
+ readonly property string comboBox_medium: "\u0071"
+ readonly property string cone_medium: "\u0072"
+ readonly property string cone_small: "\u0073"
+ readonly property string connection_small: "\u0074"
+ readonly property string connections_medium: "\u0075"
+ readonly property string copyLink: "\u0076"
+ readonly property string copyStyle: "\u0077"
+ readonly property string copy_small: "\u0078"
+ readonly property string cornerA: "\u0079"
+ readonly property string cornerB: "\u007A"
+ readonly property string cornersAll: "\u007B"
+ readonly property string createComponent_large: "\u007C"
+ readonly property string createComponent_small: "\u007D"
+ readonly property string createObject_medium: "\u007E"
+ readonly property string create_medium: "\u007F"
+ readonly property string create_small: "\u0080"
+ readonly property string cube_medium: "\u0081"
+ readonly property string cube_small: "\u0082"
+ readonly property string curveDesigner: "\u0083"
+ readonly property string curveDesigner_medium: "\u0084"
+ readonly property string curveEditor: "\u0085"
+ readonly property string customMaterialEditor: "\u0086"
+ readonly property string cylinder_medium: "\u0087"
+ readonly property string cylinder_small: "\u0088"
+ readonly property string decisionNode: "\u0089"
+ readonly property string deleteColumn: "\u008A"
+ readonly property string deleteMaterial: "\u008B"
+ readonly property string deleteRow: "\u008C"
+ readonly property string deleteTable: "\u008D"
+ readonly property string delete_medium: "\u008E"
+ readonly property string delete_small: "\u008F"
+ readonly property string deletecolumn_medium: "\u0090"
+ readonly property string deletepermanently_medium: "\u0091"
+ readonly property string deleterow_medium: "\u0092"
+ readonly property string designMode_large: "\u0093"
+ readonly property string detach: "\u0094"
+ readonly property string directionalLight_small: "\u0095"
+ readonly property string distributeBottom: "\u0096"
+ readonly property string distributeCenterHorizontal: "\u0097"
+ readonly property string distributeCenterVertical: "\u0098"
+ readonly property string distributeLeft: "\u0099"
+ readonly property string distributeOriginBottomRight: "\u009A"
+ readonly property string distributeOriginCenter: "\u009B"
+ readonly property string distributeOriginNone: "\u009D"
+ readonly property string distributeOriginTopLeft: "\u009E"
+ readonly property string distributeRight: "\u009F"
+ readonly property string distributeSpacingHorizontal: "\u00A0"
+ readonly property string distributeSpacingVertical: "\u00A1"
+ readonly property string distributeTop: "\u00A2"
+ readonly property string download: "\u00A3"
+ readonly property string downloadUnavailable: "\u00A4"
+ readonly property string downloadUpdate: "\u00A5"
+ readonly property string downloaded: "\u00A6"
+ readonly property string dragmarks: "\u00A7"
+ readonly property string duplicate_small: "\u00A8"
+ readonly property string edit: "\u00A9"
+ readonly property string editComponent_large: "\u00AA"
+ readonly property string editComponent_small: "\u00AB"
+ readonly property string editLightOff_medium: "\u00AC"
+ readonly property string editLightOn_medium: "\u00AE"
+ readonly property string edit_medium: "\u00AF"
+ readonly property string edit_small: "\u00B0"
+ readonly property string effects: "\u00B1"
+ readonly property string events_small: "\u00B2"
+ readonly property string export_medium: "\u00B3"
+ readonly property string eyeDropper: "\u00B4"
+ readonly property string favorite: "\u00B5"
+ readonly property string fitAll_medium: "\u00B6"
+ readonly property string fitSelected_small: "\u00B7"
+ readonly property string fitSelection_medium: "\u00B8"
+ readonly property string fitToView_medium: "\u00B9"
+ readonly property string flowAction: "\u00BA"
+ readonly property string flowTransition: "\u00BB"
+ readonly property string fontStyleBold: "\u00BC"
+ readonly property string fontStyleItalic: "\u00BD"
+ readonly property string fontStyleStrikethrough: "\u00BE"
+ readonly property string fontStyleUnderline: "\u00BF"
+ readonly property string forward_medium: "\u00C0"
+ readonly property string globalOrient_medium: "\u00C1"
+ readonly property string gradient: "\u00C2"
+ readonly property string gridView: "\u00C3"
+ readonly property string grid_medium: "\u00C4"
+ readonly property string group_small: "\u00C5"
+ readonly property string help: "\u00C6"
+ readonly property string home_large: "\u00C7"
+ readonly property string idAliasOff: "\u00C8"
+ readonly property string idAliasOn: "\u00C9"
+ readonly property string import_medium: "\u00CA"
+ readonly property string imported: "\u00CB"
+ readonly property string importedModels_small: "\u00CC"
+ readonly property string infinity: "\u00CD"
+ readonly property string invisible_medium: "\u00CE"
+ readonly property string invisible_small: "\u00CF"
+ readonly property string jumpToCode_medium: "\u00D0"
+ readonly property string jumpToCode_small: "\u00D1"
+ readonly property string keyframe: "\u00D2"
+ readonly property string languageList_medium: "\u00D3"
+ readonly property string layouts_small: "\u00D4"
+ readonly property string lights_small: "\u00D5"
+ readonly property string linear_medium: "\u00D6"
+ readonly property string linkTriangle: "\u00D7"
+ readonly property string linked: "\u00D8"
+ readonly property string listView: "\u00D9"
+ readonly property string listView_medium: "\u00DA"
+ readonly property string list_medium: "\u00DB"
+ readonly property string localOrient_medium: "\u00DC"
+ readonly property string lockOff: "\u00DD"
+ readonly property string lockOn: "\u00DE"
+ readonly property string loopPlayback_medium: "\u00DF"
+ readonly property string materialBrowser_medium: "\u00E0"
+ readonly property string materialPreviewEnvironment: "\u00E1"
+ readonly property string materialPreviewModel: "\u00E2"
+ readonly property string material_medium: "\u00E3"
+ readonly property string maxBar_small: "\u00E4"
+ readonly property string mergeCells: "\u00E5"
+ readonly property string merge_small: "\u00E6"
+ readonly property string minus: "\u00E7"
+ readonly property string mirror: "\u00E8"
+ readonly property string more_medium: "\u00E9"
+ readonly property string mouseArea_small: "\u00EA"
+ readonly property string moveDown_medium: "\u00EB"
+ readonly property string moveInwards_medium: "\u00EC"
+ readonly property string moveUp_medium: "\u00ED"
+ readonly property string moveUpwards_medium: "\u00EE"
+ readonly property string move_medium: "\u00EF"
+ readonly property string newMaterial: "\u00F0"
+ readonly property string nextFile_large: "\u00F1"
+ readonly property string normalBar_small: "\u00F2"
+ readonly property string openLink: "\u00F3"
+ readonly property string openMaterialBrowser: "\u00F4"
+ readonly property string orientation: "\u00F5"
+ readonly property string orthCam_medium: "\u00F6"
+ readonly property string orthCam_small: "\u00F7"
+ readonly property string paddingEdge: "\u00F8"
+ readonly property string paddingFrame: "\u00F9"
+ readonly property string particleAnimation_medium: "\u00FA"
+ readonly property string pasteStyle: "\u00FB"
+ readonly property string paste_small: "\u00FC"
+ readonly property string pause: "\u00FD"
+ readonly property string pause_medium: "\u00FE"
+ readonly property string perspectiveCam_medium: "\u00FF"
+ readonly property string perspectiveCam_small: "\u0100"
+ readonly property string pin: "\u0101"
+ readonly property string plane_medium: "\u0102"
+ readonly property string plane_small: "\u0103"
+ readonly property string play: "\u0104"
+ readonly property string playFill_medium: "\u0105"
+ readonly property string playOutline_medium: "\u0106"
+ readonly property string plus: "\u0107"
+ readonly property string pointLight_small: "\u0108"
+ readonly property string positioners_small: "\u0109"
+ readonly property string previewEnv_medium: "\u010A"
+ readonly property string previousFile_large: "\u010B"
+ readonly property string promote: "\u010C"
+ readonly property string properties_medium: "\u010D"
+ readonly property string readOnly: "\u010E"
+ readonly property string recent_medium: "\u010F"
+ readonly property string recordFill_medium: "\u0110"
+ readonly property string recordOutline_medium: "\u0111"
+ readonly property string redo: "\u0112"
+ readonly property string reload_medium: "\u0113"
+ readonly property string remove_medium: "\u0114"
+ readonly property string remove_small: "\u0115"
+ readonly property string rename_small: "\u0116"
+ readonly property string replace_small: "\u0117"
+ readonly property string resetView_small: "\u0118"
+ readonly property string restartParticles_medium: "\u0119"
+ readonly property string reverseOrder_medium: "\u011A"
+ readonly property string roatate_medium: "\u011B"
+ readonly property string rotationFill: "\u011C"
+ readonly property string rotationOutline: "\u011D"
+ readonly property string runProjFill_large: "\u011E"
+ readonly property string runProjOutline_large: "\u011F"
+ readonly property string s_anchors: "\u0120"
+ readonly property string s_annotations: "\u0121"
+ readonly property string s_arrange: "\u0122"
+ readonly property string s_boundingBox: "\u0123"
+ readonly property string s_component: "\u0124"
+ readonly property string s_connections: "\u0125"
+ readonly property string s_edit: "\u0126"
+ readonly property string s_enterComponent: "\u0127"
+ readonly property string s_eventList: "\u0128"
+ readonly property string s_group: "\u0129"
+ readonly property string s_layouts: "\u012A"
+ readonly property string s_merging: "\u012B"
+ readonly property string s_mouseArea: "\u012C"
+ readonly property string s_positioners: "\u012D"
+ readonly property string s_selection: "\u012E"
+ readonly property string s_snapping: "\u012F"
+ readonly property string s_timeline: "\u0130"
+ readonly property string s_visibility: "\u0131"
+ readonly property string saveAs_medium: "\u0132"
+ readonly property string saveLogs_medium: "\u0133"
+ readonly property string save_medium: "\u0134"
+ readonly property string scale_medium: "\u0135"
+ readonly property string search: "\u0136"
+ readonly property string search_small: "\u0137"
+ readonly property string sectionToggle: "\u0138"
+ readonly property string selectFill_medium: "\u0139"
+ readonly property string selectOutline_medium: "\u013A"
+ readonly property string selectParent_small: "\u013B"
+ readonly property string selection_small: "\u013C"
+ readonly property string settings_medium: "\u013D"
+ readonly property string signal_small: "\u013E"
+ readonly property string snapping_conf_medium: "\u013F"
+ readonly property string snapping_medium: "\u0140"
+ readonly property string snapping_small: "\u0141"
+ readonly property string sortascending_medium: "\u0142"
+ readonly property string sortdescending_medium: "\u0143"
+ readonly property string sphere_medium: "\u0144"
+ readonly property string sphere_small: "\u0145"
+ readonly property string splitColumns: "\u0146"
+ readonly property string splitRows: "\u0147"
+ readonly property string splitScreen_medium: "\u0148"
+ readonly property string spotLight_small: "\u0149"
+ readonly property string stackedContainer_small: "\u014A"
+ readonly property string startNode: "\u014B"
+ readonly property string step_medium: "\u014C"
+ readonly property string stop_medium: "\u014D"
+ readonly property string tableView_medium: "\u014E"
+ readonly property string testIcon: "\u014F"
+ readonly property string textAlignBottom: "\u0150"
+ readonly property string textAlignCenter: "\u0151"
+ readonly property string textAlignJustified: "\u0152"
+ readonly property string textAlignLeft: "\u0153"
+ readonly property string textAlignMiddle: "\u0154"
+ readonly property string textAlignRight: "\u0155"
+ readonly property string textAlignTop: "\u0156"
+ readonly property string textBulletList: "\u0157"
+ readonly property string textFullJustification: "\u0158"
+ readonly property string textNumberedList: "\u0159"
+ readonly property string textures_medium: "\u015A"
+ readonly property string tickIcon: "\u015B"
+ readonly property string tickMark_small: "\u015C"
+ readonly property string timeline_small: "\u015D"
+ readonly property string toEndFrame_medium: "\u015E"
+ readonly property string toNextFrame_medium: "\u015F"
+ readonly property string toPrevFrame_medium: "\u0160"
+ readonly property string toStartFrame_medium: "\u0161"
+ readonly property string topToolbar_annotations: "\u0162"
+ readonly property string topToolbar_closeFile: "\u0163"
+ readonly property string topToolbar_designMode: "\u0164"
+ readonly property string topToolbar_enterComponent: "\u0165"
+ readonly property string topToolbar_home: "\u0166"
+ readonly property string topToolbar_makeComponent: "\u0167"
+ readonly property string topToolbar_navFile: "\u0168"
+ readonly property string topToolbar_runProject: "\u0169"
+ readonly property string translationCreateFiles: "\u016A"
+ readonly property string translationCreateReport: "\u016B"
+ readonly property string translationExport: "\u016C"
+ readonly property string translationImport: "\u016D"
+ readonly property string translationSelectLanguages: "\u016E"
+ readonly property string translationTest: "\u016F"
+ readonly property string transparent: "\u0170"
+ readonly property string triState: "\u0171"
+ readonly property string triangleArcA: "\u0172"
+ readonly property string triangleArcB: "\u0173"
+ readonly property string triangleCornerA: "\u0174"
+ readonly property string triangleCornerB: "\u0175"
+ readonly property string unLinked: "\u0176"
+ readonly property string undo: "\u0177"
+ readonly property string unify_medium: "\u0178"
+ readonly property string unpin: "\u0179"
+ readonly property string upDownIcon: "\u017A"
+ readonly property string upDownSquare2: "\u017B"
+ readonly property string updateAvailable_medium: "\u017C"
+ readonly property string updateContent_medium: "\u017D"
+ readonly property string visibilityOff: "\u017E"
+ readonly property string visibilityOn: "\u017F"
+ readonly property string visible_medium: "\u0180"
+ readonly property string visible_small: "\u0181"
+ readonly property string warning_medium: "\u0182"
+ readonly property string wildcard: "\u0183"
+ readonly property string wizardsAutomotive: "\u0184"
+ readonly property string wizardsDesktop: "\u0185"
+ readonly property string wizardsGeneric: "\u0186"
+ readonly property string wizardsMcuEmpty: "\u0187"
+ readonly property string wizardsMcuGraph: "\u0188"
+ readonly property string wizardsMobile: "\u0189"
+ readonly property string wizardsUnknown: "\u018A"
+ readonly property string zoomAll: "\u018B"
+ readonly property string zoomIn: "\u018C"
+ readonly property string zoomIn_medium: "\u018D"
+ readonly property string zoomOut: "\u018E"
+ readonly property string zoomOut_medium: "\u018F"
+ readonly property string zoomSelection: "\u0190"
readonly property font iconFont: Qt.font({
"family": controlIcons.name,
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/Values.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/Values.qml
index 59030cd126..69803cf320 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/Values.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/Values.qml
@@ -243,15 +243,6 @@ QtObject {
property real dialogButtonSpacing: 10
property real dialogButtonPadding: 4
- // Collection Editor
- property real collectionItemTextSideMargin: 10
- property real collectionItemTextMargin: 5
- property real collectionItemTextPadding: 5
- property real collectionTableHorizontalMargin: 10
- property real collectionTableVerticalMargin: 10
- property real collectionCellMinimumWidth: 60
- property real collectionCellMinimumHeight: 20
-
// NEW NEW NEW
readonly property int flowMargin: 7
readonly property int flowSpacing: 7 // Odd so cursor has a center location
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/icons.ttf b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/icons.ttf
index 714cd4b753..cdce3eeefd 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/icons.ttf
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/icons.ttf
Binary files differ
diff --git a/share/qtcreator/qmldesigner/qt4mcu/metadata.qml b/share/qtcreator/qmldesigner/qt4mcu/metadata.qml
index b4ae840bdd..2df700e72a 100644
--- a/share/qtcreator/qmldesigner/qt4mcu/metadata.qml
+++ b/share/qtcreator/qmldesigner/qt4mcu/metadata.qml
@@ -5,7 +5,7 @@
Metadata {
id: metadataFile
- defaultVersion: v26
+ defaultVersion: v27
VersionData {
id: v14
@@ -72,4 +72,10 @@ Metadata {
name: "Qt for MCUs 2.6"
path: "qul-26.qml"
}
+
+ VersionData {
+ id: v27
+ name: "Qt for MCUs 2.7"
+ path: "qul-27.qml"
+ }
}
diff --git a/share/qtcreator/qmldesigner/qt4mcu/qul-27.qml b/share/qtcreator/qmldesigner/qt4mcu/qul-27.qml
new file mode 100644
index 0000000000..6cb5640472
--- /dev/null
+++ b/share/qtcreator/qmldesigner/qt4mcu/qul-27.qml
@@ -0,0 +1,227 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+// new import: QUL.Studio.Components
+// new types: ArcItem, Gradients, Basic and LinearGradient
+// new properties: gradients related
+// Layer Application renamed to ApplicationScreens
+
+VersionData {
+ name: "Qt for MCUs 2.7"
+
+ bannedItems: [
+ "QtQuick.AnimatedImage",
+ "QtQuick.Flow",
+ "QtQuick.FocusScope",
+ "QtQuick.Grid",
+ "QtQuick.GridView",
+ "QtQuick.PathView",
+ "QtQuick.TextEdit",
+ "QtQuick.TextInput",
+ "QtQuick.Controls",
+ "QtQuick.Controls.BusyIndicator",
+ "QtQuick.Controls.ButtonGroup",
+ "QtQuick.Controls.CheckDelegate",
+ "QtQuick.Controls.ComboBox",
+ "QtQuick.Controls.Container",
+ "QtQuick.Controls.DelayButton",
+ "QtQuick.Controls.Frame",
+ "QtQuick.Controls.GroupBox",
+ "QtQuick.Controls.ItemDelegate",
+ "QtQuick.Controls.Label",
+ "QtQuick.Controls.Page",
+ "QtQuick.Controls.PageIndicator",
+ "QtQuick.Controls.Pane",
+ "QtQuick.Controls.RadioDelegate",
+ "QtQuick.Controls.RangeSlider",
+ "QtQuick.Controls.RoundButton",
+ "QtQuick.Controls.ScrollView",
+ "QtQuick.Controls.SpinBox",
+ "QtQuick.Controls.StackView",
+ "QtQuick.Controls.SwipeDelegate",
+ "QtQuick.Controls.SwitchDelegate",
+ "QtQuick.Controls.TabBar",
+ "QtQuick.Controls.TabButton",
+ "QtQuick.Controls.TextArea",
+ "QtQuick.Controls.TextField",
+ "QtQuick.Controls.ToolBar",
+ "QtQuick.Controls.ToolButton",
+ "QtQuick.Controls.ToolSeparator",
+ "QtQuick.Controls.Tumbler",
+ "QtQuick.Shapes.ConicalGradient",
+ "QtQuick.Shapes.RadialGradient"
+ ]
+
+ allowedImports: [
+ "QtQuick",
+ "QtQuick.Controls",
+ "QtQuick.Shapes",
+ "QtQuick.Timeline",
+ "QtQuickUltralite.Extras",
+ "QtQuickUltralite.Layers",
+ "QtQuickUltralite.Profiling",
+ "QtQuickUltralite.Studio.Components"
+ ]
+
+ bannedImports: [
+ "FlowView",
+ "SimulinkConnector"
+ ]
+
+ //ComplexProperty is not a type, it's just a way to handle bigger props
+ ComplexProperty {
+ prefix: "font"
+ bannedProperties: ["wordSpacing", "letterSpacing", "hintingPreference",
+ "kerning", "preferShaping", "capitalization",
+ "strikeout", "underline", "styleName"]
+ }
+
+ QtQml.Timer {
+ bannedProperties: ["triggeredOnStart"]
+ }
+
+ QtQuick.Item {
+ bannedProperties: ["layer", "opacity", "smooth", "antialiasing",
+ "baselineOffset", "focus", "activeFocusOnTab",
+ "rotation", "scale", "transformOrigin"]
+ }
+
+ QtQuick.Rectangle {
+ bannedProperties: ["border"]
+ }
+
+ QtQuick.Flickable {
+ bannedProperties: ["boundsMovement", "flickDeceleration",
+ "leftMargin", "rightMargin", "bottomMargin", "topMargin",
+ "originX", "originY", "pixelAligned", "pressDelay", "synchronousDrag"]
+ }
+
+ QtQuick.MouseArea {
+ bannedProperties: ["propagateComposedEvents", "preventStealing", "cursorShape",
+ "scrollGestureEnabled", "drag", "acceptedButtons", "hoverEnabled"]
+ }
+
+ QtQuick.Image {
+ allowChildren: false
+ allowedProperties: ["rotation", "scale", "transformOrigin"]
+ bannedProperties: ["mirror", "mipmap", "cache", "autoTransform", "asynchronous",
+ "sourceSize", "smooth"]
+ }
+
+ QtQuick.BorderImage {
+ bannedProperties: ["asynchronous", "cache", "currentFrame", "frameCount",
+ "horizontalTileMode", "mirror", "progress", "smooth", "sourceSize",
+ "status", "verticalTileMode"]
+ }
+
+ QtQuick.Text {
+ allowChildren: false
+ allowedProperties: ["rotation", "scale", "transformOrigin"]
+ bannedProperties: ["lineHeight", "lineHeightMode", "style",
+ "styleColor", "minimumPointSize", "minimumPixelSize",
+ "fontSizeMode", "renderType", "renderTypeQuality", "maximumLineCount"]
+ }
+
+ QtQuick.Loader {
+ bannedProperties: ["asynchronous", "progress", "status"]
+ }
+
+ //Padding is not an actual item, but rather set of properties in Text
+ Padding {
+ bannedProperties: ["bottomPadding", "topPadding", "leftPadding", "rightPadding"]
+ }
+
+ QtQuick.Column {
+ bannedProperties: ["bottomPadding", "leftPadding", "rightPadding", "topPadding"]
+ }
+
+ QtQuick.Row {
+ bannedProperties: ["bottomPadding", "leftPadding", "rightPadding", "topPadding",
+ "effectiveLayoutDirection", "layoutDirection"]
+ }
+
+ QtQuick.ListView {
+ bannedProperties: ["cacheBuffer", "highlightRangeMode", "highlightMoveDuration",
+ "highlightResizeDuration", "preferredHighlightBegin", "layoutDirection",
+ "preferredHighlightEnd", "highlightFollowsCurrentItem", "keyNavigationWraps",
+ "snapMode", "highlightMoveVelocity", "highlightResizeVelocity"]
+ }
+
+ QtQuick.Animation {
+ bannedProperties: ["paused"]
+ }
+
+ QtQuick.AnimatedSprite {
+ allowedProperties: ["currentFrame", "frameCount", "paused"]
+ bannedProperties: ["finishBehavior", "frameRate", "frameSync",
+ "frameX", "frameY", "interpolate", "reverse"]
+ }
+
+ //Quick Controls2 Items and properties:
+
+ QtQuick.Controls.Control {
+ bannedProperties: ["focusPolicy", "hoverEnabled", "wheelEnabled"]
+ }
+
+ QtQuick.Controls.AbstractButton {
+ bannedProperties: ["display", "autoExclusive", "icon"]
+ }
+
+ QtQuick.Controls.ProgressBar {
+ bannedProperties: ["indeterminate"]
+ }
+
+ QtQuick.Controls.Slider {
+ bannedProperties: ["live", "snapMode", "touchDragThreshold"]
+ }
+
+ //Path and Shapes related:
+
+ QtQuick.Path {
+ bannedProperties: ["scale", "pathElements"]
+ }
+
+ QtQuick.PathArc {
+ bannedProperties: ["relativeX", "relativeY"]
+ }
+
+ QtQuick.PathLine {
+ bannedProperties: ["relativeX", "relativeY"]
+ }
+
+ QtQuick.PathMove {
+ bannedProperties: ["relativeX", "relativeY"]
+ }
+
+ QtQuick.PathQuad {
+ bannedProperties: ["relativeX", "relativeY",
+ "relativeControlX", "relativeControlY"]
+ }
+
+ QtQuick.PathCubic {
+ bannedProperties: ["relativeX", "relativeY",
+ "relativeControl1X", "relativeControl1Y",
+ "relativeControl2X", "relativeControl2Y"]
+ }
+
+ QtQuick.PathElement {
+ //nothing
+ }
+
+ QtQuick.PathSvg {
+ //nothing
+ }
+
+ QtQuick.Shapes.Shape {
+ bannedProperties: ["asynchronous", "containsMode", "data",
+ "renderType", "status", "vendorExtensionsEnabled"]
+ }
+
+ QtQuick.Shapes.ShapePath {
+ bannedProperties: ["dashOffset", "dashPattern", "strokeStyle"]
+ }
+
+ QtQuickUltralite.Extras.ItemBuffer {
+ allowedProperties: ["rotation", "scale", "transformOrigin"]
+ }
+}
diff --git a/share/qtcreator/qmldesigner/studio_templates/files/javascript/wizard.json b/share/qtcreator/qmldesigner/studio_templates/files/javascript/wizard.json
index 7ba90f75f6..f70ed11c1d 100644
--- a/share/qtcreator/qmldesigner/studio_templates/files/javascript/wizard.json
+++ b/share/qtcreator/qmldesigner/studio_templates/files/javascript/wizard.json
@@ -9,13 +9,46 @@
"icon": "file_javascript.png",
"platformIndependent": true,
+ "options":
+ [
+ { "key": "JSFile", "value": "%{Class}.%{JS: Util.preferredSuffix('application/javascript')}" },
+ { "key": "ApplicationImport", "value": "%{QmlProjectName} 1.0" },
+ { "key": "RootItem", "value": "%{JS: %{RootItemCB}.RootItem}" },
+ { "key": "UseImportDefault", "value": "%{JS: false}" },
+ { "key": "UseQtQuickControls2Default", "value": "%{JS: true}" }
+ ],
"pages" :
- [
+ [
{
- "trDisplayName": "Location",
- "trShortTitle": "Location",
- "typeId": "File"
+ "trDisplayName": "Define Class",
+ "trShortTitle": "Details",
+ "typeId": "Fields",
+ "data" :
+ [
+ {
+ "name": "Class",
+ "trDisplayName": "Component name:",
+ "mandatory": true,
+ "type": "LineEdit",
+ "data": {
+ "validator": "(?:[A-Z_][a-zA-Z_0-9]*|)",
+ "fixup": "%{JS: '%{INPUT}'.charAt(0).toUpperCase() + '%{INPUT}'.slice(1) }"
+ }
+ },
+ {
+ "name": "TargetPath",
+ "type": "PathChooser",
+ "trDisplayName": "Path:",
+ "mandatory": true,
+ "data":
+ {
+ "kind": "existingDirectory",
+ "basePath": "%{InitialPath}",
+ "path": "%{InitialPath}"
+ }
+ }
+ ]
},
{
"trDisplayName": "Options",
@@ -34,21 +67,16 @@
}
}
]
- },
- {
- "trDisplayName": "Project Management",
- "trShortTitle": "Summary",
- "typeId": "Summary"
}
],
"generators" :
- [
+ [
{
"typeId": "File",
"data":
{
"source": "file.js.tpl",
- "target": "%{JS: Util.fileName('%{TargetPath}', '%{JS: Util.preferredSuffix('application/javascript')}')}",
+ "target": "%{TargetPath}/%{JSFile}",
"openInEditor": true
}
}
diff --git a/share/qtcreator/qmldesigner/studio_templates/files/qtquickfile/file.qml.tpl b/share/qtcreator/qmldesigner/studio_templates/files/qtquickfile/file.qml.tpl
index f77f7d99c9..996d474208 100644
--- a/share/qtcreator/qmldesigner/studio_templates/files/qtquickfile/file.qml.tpl
+++ b/share/qtcreator/qmldesigner/studio_templates/files/qtquickfile/file.qml.tpl
@@ -7,6 +7,7 @@ import %{ApplicationImport}
@endif
%{RootItem} {
+ id: root
@if %{UseImport}
width: Constants.width
height: Constants.height
diff --git a/share/qtcreator/qmldesigner/studio_templates/files/qtuiquickfile/file.qml.tpl b/share/qtcreator/qmldesigner/studio_templates/files/qtuiquickfile/file.qml.tpl
index 47ca3af299..e7e86e9ffa 100644
--- a/share/qtcreator/qmldesigner/studio_templates/files/qtuiquickfile/file.qml.tpl
+++ b/share/qtcreator/qmldesigner/studio_templates/files/qtuiquickfile/file.qml.tpl
@@ -14,6 +14,7 @@ import %{ApplicationImport}
@endif
%{RootItem} {
+ id: root
@if %{UseImport}
width: Constants.width
height: Constants.height
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/application-3d/wizard.json b/share/qtcreator/qmldesigner/studio_templates/projects/application-3d/wizard.json
index 42d0bf748c..a897fa421a 100644
--- a/share/qtcreator/qmldesigner/studio_templates/projects/application-3d/wizard.json
+++ b/share/qtcreator/qmldesigner/studio_templates/projects/application-3d/wizard.json
@@ -18,6 +18,8 @@
{ "key": "ProjectPluginClassName", "value": "%{ProjectName}Plugin" },
{ "key": "QmlProjectFileName", "value": "%{JS: Util.fileName('%{ProjectName}', 'qmlproject')}" },
{ "key": "IsQt6Project", "value": "%{JS: value('QtQuickVersion') !== '2.15' }" },
+ { "key": "AssetDir", "value": "Generated" },
+ { "key": "ContentDir", "value": "%{ProjectName}Content" },
{ "key": "ImportModuleName", "value": "%{ProjectName}" },
{ "key": "UIClassName", "value": "Screen01" },
{ "key": "UIClassFileName", "value": "%{JS: Util.fileName('%{UIClassName}', 'ui.qml')}" },
@@ -236,7 +238,7 @@
"type": "ComboBox",
"data":
{
- "index": 3,
+ "index": 5,
"items":
[
{
@@ -278,6 +280,14 @@
'TargetQuickVersion': '6.6',
'TargetQuick3DVersion': '6.6'
})"
+ },
+ {
+ "trKey": "Qt 6.7",
+ "value":
+ "({
+ 'TargetQuickVersion': '6.7',
+ 'TargetQuick3DVersion': '6.7'
+ })"
}
]
}
@@ -298,98 +308,49 @@
"openAsProject": true
},
{
- "source": "../common/CMakeLists.main.txt.tpl",
- "target": "%{ProjectDirectory}/CMakeLists.txt"
- },
- {
- "source": "../common/qmlmodules.tpl",
- "target": "%{ProjectDirectory}/qmlmodules"
- },
- {
- "source": "../common/qmlcomponents.tpl",
- "target": "%{ProjectDirectory}/qmlcomponents"
- },
- {
- "source": "../common/insight.tpl",
- "target": "%{ProjectDirectory}/insight"
- },
- {
- "source": "../common/main.qml",
- "target": "%{ProjectDirectory}/main.qml"
- },
- {
"source": "../common/qtquickcontrols2.conf.tpl",
"target": "%{ProjectDirectory}/qtquickcontrols2.conf"
},
{
- "source": "../common/main.cpp.tpl",
- "target": "%{ProjectDirectory}/src/main.cpp"
- },
- {
- "source": "../common/app_environment.h.tpl",
- "target": "%{ProjectDirectory}/src/app_environment.h"
- },
- {
- "source": "../common/import_qml_plugins.h.tpl",
- "target": "%{ProjectDirectory}/src/import_qml_plugins.h"
- },
- {
- "source": "../common/import_qml_components_plugins.h.tpl",
- "target": "%{ProjectDirectory}/src/import_qml_components_plugins.h"
- },
-
- {
- "source": "../common/CMakeLists.content.txt.tpl",
- "target": "%{ProjectDirectory}/content/CMakeLists.txt"
- },
- {
"source": "../common/App.qml.tpl",
- "target": "%{ProjectDirectory}/content/App.qml"
+ "target": "%{ProjectDirectory}/%{ContentDir}/App.qml"
},
{
"source": "Screen01.ui.qml.tpl",
- "target": "%{ProjectDirectory}/content/Screen01.ui.qml",
+ "target": "%{ProjectDirectory}/%{ContentDir}/Screen01.ui.qml",
"openInEditor": true
},
{
"source": "../common/fonts.txt",
- "target": "%{ProjectDirectory}/content/fonts/fonts.txt"
+ "target": "%{ProjectDirectory}/%{ContentDir}/fonts/fonts.txt"
},
{
"source": "../common/asset_imports.txt",
- "target": "%{ProjectDirectory}/asset_imports/asset_imports.txt"
- },
- {
- "source": "../common/CMakeLists.imports.txt.tpl",
- "target": "%{ProjectDirectory}/imports/CMakeLists.txt"
- },
- {
- "source": "../shared-plugin/name/CMakeLists.importmodule.txt.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/CMakeLists.txt"
+ "target": "%{ProjectDirectory}/%{AssetDir}/%{AssetDir}.txt"
},
{
"source": "../shared-plugin/name/importmodule.qmldir.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/qmldir"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/qmldir"
},
{
"source": "../shared-plugin/name/Constants.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/Constants.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/Constants.qml"
},
{
"source": "../shared-plugin/name/DirectoryFontLoader.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/DirectoryFontLoader.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/DirectoryFontLoader.qml"
},
{
"source": "../shared-plugin/name/EventListModel.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/EventListModel.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/EventListModel.qml"
},
{
"source": "../shared-plugin/name/EventListSimulator.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/EventListSimulator.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/EventListSimulator.qml"
},
{
"source": "../shared-plugin/name/designer/plugin.metainfo",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/designer/plugin.metainfo"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/designer/plugin.metainfo"
}
]
}
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/application-extended-3d/Screen01.ui.qml.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/application-extended-3d/Screen01.ui.qml.tpl
index 2b26fe3f0c..41d562fb53 100644
--- a/share/qtcreator/qmldesigner/studio_templates/projects/application-extended-3d/Screen01.ui.qml.tpl
+++ b/share/qtcreator/qmldesigner/studio_templates/projects/application-extended-3d/Screen01.ui.qml.tpl
@@ -19,7 +19,7 @@ Rectangle {
color: Constants.backgroundColor
View3D {
- id: view3D
+ id: extendedView3D
anchors.fill: parent
environment: sceneEnvironment
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/application-extended-3d/wizard.json b/share/qtcreator/qmldesigner/studio_templates/projects/application-extended-3d/wizard.json
index 101d5c6903..ccd522f7c8 100644
--- a/share/qtcreator/qmldesigner/studio_templates/projects/application-extended-3d/wizard.json
+++ b/share/qtcreator/qmldesigner/studio_templates/projects/application-extended-3d/wizard.json
@@ -18,6 +18,8 @@
{ "key": "ProjectPluginClassName", "value": "%{ProjectName}Plugin" },
{ "key": "QmlProjectFileName", "value": "%{JS: Util.fileName('%{ProjectName}', 'qmlproject')}" },
{ "key": "IsQt6Project", "value": "%{JS: value('QtQuickVersion') !== '2.15' }" },
+ { "key": "AssetDir", "value": "Generated" },
+ { "key": "ContentDir", "value": "%{ProjectName}Content" },
{ "key": "ImportModuleName", "value": "%{ProjectName}" },
{ "key": "UIClassName", "value": "Screen01" },
{ "key": "UIClassFileName", "value": "%{JS: Util.fileName('%{UIClassName}', 'ui.qml')}" },
@@ -236,34 +238,10 @@
"type": "ComboBox",
"data":
{
- "index": 3,
+ "index": 2,
"items":
[
{
- "trKey": "Qt 6.2",
- "value":
- "({
- 'TargetQuickVersion': '6.2',
- 'TargetQuick3DVersion': '6.2'
- })"
- },
- {
- "trKey": "Qt 6.3",
- "value":
- "({
- 'TargetQuickVersion': '6.3',
- 'TargetQuick3DVersion': '6.3'
- })"
- },
- {
- "trKey": "Qt 6.4",
- "value":
- "({
- 'TargetQuickVersion': '6.4',
- 'TargetQuick3DVersion': '6.4'
- })"
- },
- {
"trKey": "Qt 6.5",
"value":
"({
@@ -278,6 +256,14 @@
'TargetQuickVersion': '6.6',
'TargetQuick3DVersion': '6.6'
})"
+ },
+ {
+ "trKey": "Qt 6.7",
+ "value":
+ "({
+ 'TargetQuickVersion': '6.7',
+ 'TargetQuick3DVersion': '6.7'
+ })"
}
]
}
@@ -298,98 +284,49 @@
"openAsProject": true
},
{
- "source": "../common/CMakeLists.main.txt.tpl",
- "target": "%{ProjectDirectory}/CMakeLists.txt"
- },
- {
- "source": "../common/qmlmodules.tpl",
- "target": "%{ProjectDirectory}/qmlmodules"
- },
- {
- "source": "../common/qmlcomponents.tpl",
- "target": "%{ProjectDirectory}/qmlcomponents"
- },
- {
- "source": "../common/insight.tpl",
- "target": "%{ProjectDirectory}/insight"
- },
- {
- "source": "../common/main.qml",
- "target": "%{ProjectDirectory}/main.qml"
- },
- {
"source": "../common/qtquickcontrols2.conf.tpl",
"target": "%{ProjectDirectory}/qtquickcontrols2.conf"
},
{
- "source": "../common/main.cpp.tpl",
- "target": "%{ProjectDirectory}/src/main.cpp"
- },
- {
- "source": "../common/app_environment.h.tpl",
- "target": "%{ProjectDirectory}/src/app_environment.h"
- },
- {
- "source": "../common/import_qml_plugins.h.tpl",
- "target": "%{ProjectDirectory}/src/import_qml_plugins.h"
- },
- {
- "source": "../common/import_qml_components_plugins.h.tpl",
- "target": "%{ProjectDirectory}/src/import_qml_components_plugins.h"
- },
-
- {
- "source": "../common/CMakeLists.content.txt.tpl",
- "target": "%{ProjectDirectory}/content/CMakeLists.txt"
- },
- {
"source": "../common/App.qml.tpl",
- "target": "%{ProjectDirectory}/content/App.qml"
+ "target": "%{ProjectDirectory}/%{ContentDir}/App.qml"
},
{
"source": "Screen01.ui.qml.tpl",
- "target": "%{ProjectDirectory}/content/Screen01.ui.qml",
+ "target": "%{ProjectDirectory}/%{ContentDir}/Screen01.ui.qml",
"openInEditor": true
},
{
"source": "../common/fonts.txt",
- "target": "%{ProjectDirectory}/content/fonts/fonts.txt"
+ "target": "%{ProjectDirectory}/%{ContentDir}/fonts/fonts.txt"
},
{
"source": "../common/asset_imports.txt",
- "target": "%{ProjectDirectory}/asset_imports/asset_imports.txt"
- },
- {
- "source": "../common/CMakeLists.imports.txt.tpl",
- "target": "%{ProjectDirectory}/imports/CMakeLists.txt"
- },
- {
- "source": "../shared-plugin/name/CMakeLists.importmodule.txt.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/CMakeLists.txt"
+ "target": "%{ProjectDirectory}/%{AssetDir}/%{AssetDir}.txt"
},
{
"source": "../shared-plugin/name/importmodule.qmldir.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/qmldir"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/qmldir"
},
{
"source": "../shared-plugin/name/Constants.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/Constants.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/Constants.qml"
},
{
"source": "../shared-plugin/name/DirectoryFontLoader.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/DirectoryFontLoader.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/DirectoryFontLoader.qml"
},
{
"source": "../shared-plugin/name/EventListModel.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/EventListModel.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/EventListModel.qml"
},
{
"source": "../shared-plugin/name/EventListSimulator.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/EventListSimulator.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/EventListSimulator.qml"
},
{
"source": "../shared-plugin/name/designer/plugin.metainfo",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/designer/plugin.metainfo"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/designer/plugin.metainfo"
}
]
}
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/application-mcu/app_mcu.qmlproject.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/application-mcu/app_mcu.qmlproject.tpl
index f17d608f96..7c4453752a 100644
--- a/share/qtcreator/qmldesigner/studio_templates/projects/application-mcu/app_mcu.qmlproject.tpl
+++ b/share/qtcreator/qmldesigner/studio_templates/projects/application-mcu/app_mcu.qmlproject.tpl
@@ -42,7 +42,9 @@ Project {
"Controls",
"ControlsTemplates",
"Timeline",
- "Shapes"
+ "Shapes",
+ "Profiling",
+ "StudioComponents"
]
}
@@ -55,8 +57,8 @@ Project {
QDS.qtForMCUs: true
QDS.qt6Project: true
- QDS.qdsVersion: "4.3"
- QDS.quickVersion: "6.5"
+ QDS.qdsVersion: "4.5"
+ QDS.quickVersion: "6.7"
/* List of plugin directories passed to QML runtime */
importPaths: [ "imports" ]
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/application/wizard.json b/share/qtcreator/qmldesigner/studio_templates/projects/application/wizard.json
index c8b74dec49..f0f98c3331 100644
--- a/share/qtcreator/qmldesigner/studio_templates/projects/application/wizard.json
+++ b/share/qtcreator/qmldesigner/studio_templates/projects/application/wizard.json
@@ -17,6 +17,8 @@
{ "key": "ProjectPluginName", "value": "%{ProjectName}plugin" },
{ "key": "ProjectPluginClassName", "value": "%{ProjectName}Plugin" },
{ "key": "QmlProjectFileName", "value": "%{JS: Util.fileName('%{ProjectName}', 'qmlproject')}" },
+ { "key": "AssetDir", "value": "Generated" },
+ { "key": "ContentDir", "value": "%{ProjectName}Content" },
{ "key": "ImportModuleName", "value": "%{ProjectName}" },
{ "key": "UIClassName", "value": "Screen01" },
{ "key": "UIClassFileName", "value": "%{JS: Util.fileName('%{UIClassName}', 'ui.qml')}" },
@@ -236,7 +238,7 @@
"type": "ComboBox",
"data":
{
- "index": 4,
+ "index": 6,
"items":
[
{
@@ -280,6 +282,13 @@
"({
'TargetQuickVersion': '6.6'
})"
+ },
+ {
+ "trKey": "Qt 6.7",
+ "value":
+ "({
+ 'TargetQuickVersion': '6.7'
+ })"
}
]
}
@@ -300,108 +309,48 @@
"openAsProject": true
},
{
- "source": "../common/CMakeLists.main.txt.tpl",
- "target": "%{ProjectDirectory}/CMakeLists.txt",
- "condition": "%{IsQt6Project}"
- },
- {
- "source": "../common/qmlmodules.tpl",
- "target": "%{ProjectDirectory}/qmlmodules",
- "condition": "%{IsQt6Project}"
- },
- {
- "source": "../common/qmlcomponents.tpl",
- "target": "%{ProjectDirectory}/qmlcomponents",
- "condition": "%{IsQt6Project}"
- },
- {
- "source": "../common/insight.tpl",
- "target": "%{ProjectDirectory}/insight",
- "condition": "%{IsQt6Project}"
- },
- {
- "source": "../common/main.qml",
- "target": "%{ProjectDirectory}/main.qml",
- "condition": "%{IsQt6Project}"
- },
- {
"source": "../common/qtquickcontrols2.conf.tpl",
"target": "%{ProjectDirectory}/qtquickcontrols2.conf"
},
{
- "source": "../common/main.cpp.tpl",
- "target": "%{ProjectDirectory}/src/main.cpp",
- "condition": "%{IsQt6Project}"
- },
- {
- "source": "../common/app_environment.h.tpl",
- "target": "%{ProjectDirectory}/src/app_environment.h",
- "condition": "%{IsQt6Project}"
- },
- {
- "source": "../common/import_qml_plugins.h.tpl",
- "target": "%{ProjectDirectory}/src/import_qml_plugins.h",
- "condition": "%{IsQt6Project}"
- },
- {
- "source": "../common/import_qml_components_plugins.h.tpl",
- "target": "%{ProjectDirectory}/src/import_qml_components_plugins.h",
- "condition": "%{IsQt6Project}"
- },
- {
- "source": "../common/CMakeLists.content.txt.tpl",
- "target": "%{ProjectDirectory}/content/CMakeLists.txt",
- "condition": "%{IsQt6Project}"
- },
- {
"source": "../common/App.qml.tpl",
- "target": "%{ProjectDirectory}/content/App.qml"
+ "target": "%{ProjectDirectory}/%{ContentDir}/App.qml"
},
{
"source": "Screen01.ui.qml.tpl",
- "target": "%{ProjectDirectory}/content/Screen01.ui.qml"
+ "target": "%{ProjectDirectory}/%{ContentDir}/Screen01.ui.qml"
},
{
"source": "../common/fonts.txt",
- "target": "%{ProjectDirectory}/content/fonts/fonts.txt"
+ "target": "%{ProjectDirectory}/%{ContentDir}/fonts/fonts.txt"
},
{
"source": "../common/asset_imports.txt",
- "target": "%{ProjectDirectory}/asset_imports/asset_imports.txt"
- },
- {
- "source": "../common/CMakeLists.imports.txt.tpl",
- "target": "%{ProjectDirectory}/imports/CMakeLists.txt",
- "condition": "%{IsQt6Project}"
- },
- {
- "source": "../shared-plugin/name/CMakeLists.importmodule.txt.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/CMakeLists.txt",
- "condition": "%{IsQt6Project}"
+ "target": "%{ProjectDirectory}/%{AssetDir}/Quick3DAssets.txt"
},
{
"source": "../shared-plugin/name/importmodule.qmldir.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/qmldir"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/qmldir"
},
{
"source": "../shared-plugin/name/Constants.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/Constants.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/Constants.qml"
},
{
"source": "../shared-plugin/name/DirectoryFontLoader.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/DirectoryFontLoader.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/DirectoryFontLoader.qml"
},
{
"source": "../shared-plugin/name/EventListModel.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/EventListModel.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/EventListModel.qml"
},
{
"source": "../shared-plugin/name/EventListSimulator.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/EventListSimulator.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/EventListSimulator.qml"
},
{
"source": "../shared-plugin/name/designer/plugin.metainfo",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/designer/plugin.metainfo"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/designer/plugin.metainfo"
}
]
}
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/common/CMakeLists.content.txt.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/common/CMakeLists.content.txt.tpl
deleted file mode 100644
index a5a4360e3f..0000000000
--- a/share/qtcreator/qmldesigner/studio_templates/projects/common/CMakeLists.content.txt.tpl
+++ /dev/null
@@ -1,14 +0,0 @@
-### This file is automatically generated by Qt Design Studio.
-### Do not change
-
-qt_add_library(content STATIC)
-qt6_add_qml_module(content
- URI "content"
- VERSION 1.0
- RESOURCE_PREFIX "/qt/qml"
- QML_FILES
- App.qml
- %{UIClassFileName}
- RESOURCES
- fonts/fonts.txt
-)
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/common/CMakeLists.imports.txt.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/common/CMakeLists.imports.txt.tpl
deleted file mode 100644
index 418f6d7719..0000000000
--- a/share/qtcreator/qmldesigner/studio_templates/projects/common/CMakeLists.imports.txt.tpl
+++ /dev/null
@@ -1,4 +0,0 @@
-### This file is automatically generated by Qt Design Studio.
-### Do not change
-
-add_subdirectory(%{ImportModuleName})
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/common/CMakeLists.main.txt.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/common/CMakeLists.main.txt.tpl
deleted file mode 100644
index eb621ef219..0000000000
--- a/share/qtcreator/qmldesigner/studio_templates/projects/common/CMakeLists.main.txt.tpl
+++ /dev/null
@@ -1,56 +0,0 @@
-cmake_minimum_required(VERSION 3.21.1)
-
-option(LINK_INSIGHT "Link Qt Insight Tracker library" ON)
-option(BUILD_QDS_COMPONENTS "Build design studio components" ON)
-
-project(%{ProjectName}App LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-find_package(Qt6 6.2 REQUIRED COMPONENTS Core Gui Qml Quick)
-
-if (Qt6_VERSION VERSION_GREATER_EQUAL 6.3)
- qt_standard_project_setup()
-endif()
-
-qt_add_executable(%{ProjectName}App src/main.cpp)
-
-qt_add_resources(%{ProjectName}App "configuration"
- PREFIX "/"
- FILES
- qtquickcontrols2.conf
-)
-
-target_link_libraries(%{ProjectName}App PRIVATE
- Qt6::Core
- Qt6::Gui
- Qt6::Qml
- Qt6::Quick
-)
-
-set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/qml)
-set(QML_IMPORT_PATH ${QT_QML_OUTPUT_DIRECTORY}
- CACHE STRING "Import paths for Qt Creator's code model"
- FORCE
-)
-
-if (BUILD_QDS_COMPONENTS)
- include(${CMAKE_CURRENT_SOURCE_DIR}/qmlcomponents)
-endif()
-
-include(${CMAKE_CURRENT_SOURCE_DIR}/qmlmodules)
-
-if (LINK_INSIGHT)
- include(${CMAKE_CURRENT_SOURCE_DIR}/insight)
-endif ()
-
-include(GNUInstallDirs)
-install(TARGETS %{ProjectName}App
- BUNDLE DESTINATION .
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
-)
-
-# make IDEs aware of the QML import path
-set(QML_IMPORT_PATH ${PROJECT_BINARY_DIR}/qml CACHE PATH
- "Path to the custom QML components defined by the project")
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/common/app.qmlproject.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/common/app.qmlproject.tpl
index 75aeae6714..6d346818e4 100644
--- a/share/qtcreator/qmldesigner/studio_templates/projects/common/app.qmlproject.tpl
+++ b/share/qtcreator/qmldesigner/studio_templates/projects/common/app.qmlproject.tpl
@@ -5,32 +5,36 @@ import QmlProject 1.1
@endif
Project {
- mainFile: "content/App.qml"
- mainUiFile: "content/Screen01.ui.qml"
+ mainFile: "%{ContentDir}/App.qml"
+ mainUiFile: "%{ContentDir}/Screen01.ui.qml"
/* Include .qml, .js, and image files from current directory and subdirectories */
QmlFiles {
- directory: "content"
+ directory: "%{ProjectName}"
}
QmlFiles {
- directory: "imports"
+ directory: "%{ContentDir}"
+ }
+
+ QmlFiles {
+ directory: "%{AssetDir}"
}
JavaScriptFiles {
- directory: "content"
+ directory: "%{ProjectName}"
}
JavaScriptFiles {
- directory: "imports"
+ directory: "%{ProjectName}"
}
ImageFiles {
- directory: "content"
+ directory: "%{ContentDir}"
}
ImageFiles {
- directory: "asset_imports"
+ directory: "%{AssetDir}"
}
Files {
@@ -69,17 +73,12 @@ Project {
Files {
filter: "*.mesh"
- directory: "asset_imports"
+ directory: "%{AssetDir}"
}
Files {
filter: "*.qad"
- directory: "asset_imports"
- }
-
- Files {
- filter: "*.qml"
- directory: "asset_imports"
+ directory: "%{AssetDir}"
}
Environment {
@@ -109,7 +108,7 @@ Project {
@endif
/* List of plugin directories passed to QML runtime */
- importPaths: [ "imports", "asset_imports" ]
+ importPaths: [ "." ]
/* Required for deployment */
targetDirectory: "/opt/%{ProjectName}"
@@ -125,10 +124,10 @@ Project {
/* args: Specifies command line arguments for qsb tool to generate shaders.
files: Specifies target files for qsb tool. If path is included, it must be relative to this file.
Wildcard '*' can be used in the file name part of the path.
- e.g. files: [ "content/shaders/*.vert", "*.frag" ] */
+ e.g. files: [ "%{ContentDir}/shaders/*.vert", "*.frag" ] */
ShaderTool {
args: "-s --glsl \\\"100 es,120,150\\\" --hlsl 50 --msl 12"
- files: [ "content/shaders/*" ]
+ files: [ "%{ContentDir}/shaders/*" ]
}
@endif
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/common/app_environment.h.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/common/app_environment.h.tpl
deleted file mode 100644
index e1f7ec2e23..0000000000
--- a/share/qtcreator/qmldesigner/studio_templates/projects/common/app_environment.h.tpl
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * This file is automatically generated by Qt Design Studio.
- * Do not change.
-*/
-
-#include <QGuiApplication>
-
-void set_qt_environment()
-{
-@if %{UseVirtualKeyboard}
- qputenv("QT_IM_MODULE", "qtvirtualkeyboard");
- qputenv("QT_VIRTUALKEYBOARD_DESKTOP_DISABLE", "1");
-@endif
- qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1");
- qputenv("QT_ENABLE_HIGHDPI_SCALING", "0");
- qputenv("QT_LOGGING_RULES", "qt.qml.connections=false");
- qputenv("QT_QUICK_CONTROLS_CONF", ":/qtquickcontrols2.conf");
- qputenv("QML_COMPAT_RESOLVE_URLS_ON_ASSIGNMENT", "1");
-}
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/common/contentmodule.main.qml.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/common/contentmodule.main.qml.tpl
deleted file mode 100644
index ac0b0b28c0..0000000000
--- a/share/qtcreator/qmldesigner/studio_templates/projects/common/contentmodule.main.qml.tpl
+++ /dev/null
@@ -1,17 +0,0 @@
-import QtQuick %{QtQuickVersion}
-@if !%{IsQt6Project}
-import QtQuick.Window %{QtQuickVersion}
-@endif
-import %{ApplicationImport}
-
-Window {
- width: Constants.width
- height: Constants.height
-
- visible: true
-
- Screen01 {
- width: parent.width
- height: parent.height
- }
-}
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/common/import_qml_components_plugins.h.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/common/import_qml_components_plugins.h.tpl
deleted file mode 100644
index 167481d7c7..0000000000
--- a/share/qtcreator/qmldesigner/studio_templates/projects/common/import_qml_components_plugins.h.tpl
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * This file is automatically generated by Qt Design Studio.
- * Do not change.
-*/
-
-#include "qqmlextensionplugin.h"
-
-#ifdef BUILD_QDS_COMPONENTS
-
-Q_IMPORT_QML_PLUGIN(QtQuick_Studio_ComponentsPlugin)
-Q_IMPORT_QML_PLUGIN(QtQuick_Studio_EffectsPlugin)
-Q_IMPORT_QML_PLUGIN(QtQuick_Studio_ApplicationPlugin)
-Q_IMPORT_QML_PLUGIN(FlowViewPlugin)
-Q_IMPORT_QML_PLUGIN(QtQuick_Studio_LogicHelperPlugin)
-Q_IMPORT_QML_PLUGIN(QtQuick_Studio_MultiTextPlugin)
-Q_IMPORT_QML_PLUGIN(QtQuick_Studio_EventSimulatorPlugin)
-Q_IMPORT_QML_PLUGIN(QtQuick_Studio_EventSystemPlugin)
-
-#endif
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/common/import_qml_plugins.h.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/common/import_qml_plugins.h.tpl
deleted file mode 100644
index f9700ff452..0000000000
--- a/share/qtcreator/qmldesigner/studio_templates/projects/common/import_qml_plugins.h.tpl
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * This file is automatically generated by Qt Design Studio.
- * Do not change.
-*/
-
-#include <QtQml/qqmlextensionplugin.h>
-
-Q_IMPORT_QML_PLUGIN(contentPlugin)
-Q_IMPORT_QML_PLUGIN(%{ProjectPluginClassName})
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/common/insight.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/common/insight.tpl
deleted file mode 100644
index 8245e31f0d..0000000000
--- a/share/qtcreator/qmldesigner/studio_templates/projects/common/insight.tpl
+++ /dev/null
@@ -1,19 +0,0 @@
-### This file is automatically generated by Qt Design Studio.
-### Do not change
-
-if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/qtinsight.conf)
- if (QT_VERSION GREATER_EQUAL 6.5.0)
- find_package(Qt6 REQUIRED COMPONENTS InsightTracker)
-
- qt_add_resources(${CMAKE_PROJECT_NAME} "configuration"
- PREFIX "/"
- FILES
- qtinsight.conf
- )
- target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE
- Qt6::InsightTracker
- )
- else()
- message(WARNING "You need Qt 6.5.0 or newer to build the application.")
- endif()
-endif()
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/common/main.cpp.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/common/main.cpp.tpl
deleted file mode 100644
index 915d08462e..0000000000
--- a/share/qtcreator/qmldesigner/studio_templates/projects/common/main.cpp.tpl
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#include <QGuiApplication>
-#include <QQmlApplicationEngine>
-
-#include "app_environment.h"
-#include "import_qml_components_plugins.h"
-#include "import_qml_plugins.h"
-
-int main(int argc, char *argv[])
-{
- set_qt_environment();
-
- QGuiApplication app(argc, argv);
-
- QQmlApplicationEngine engine;
- const QUrl url(u"qrc:/qt/qml/Main/main.qml"_qs);
- QObject::connect(
- &engine, &QQmlApplicationEngine::objectCreated, &app,
- [url](QObject *obj, const QUrl &objUrl) {
- if (!obj && url == objUrl)
- QCoreApplication::exit(-1);
- },
- Qt::QueuedConnection);
-
- engine.addImportPath(QCoreApplication::applicationDirPath() + "/qml");
- engine.addImportPath(":/");
-
- engine.load(url);
-
- if (engine.rootObjects().isEmpty()) {
- return -1;
- }
-
- return app.exec();
-}
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/common/main.qml b/share/qtcreator/qmldesigner/studio_templates/projects/common/main.qml
deleted file mode 100644
index 2c4f857df3..0000000000
--- a/share/qtcreator/qmldesigner/studio_templates/projects/common/main.qml
+++ /dev/null
@@ -1,8 +0,0 @@
-/* This file is generated and only relevant for integrating the project into a Qt 6 and cmake based
-C++ project. */
-
-import QtQuick
-import content
-
-App {
-}
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/common/qmlcomponents.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/common/qmlcomponents.tpl
deleted file mode 100644
index 2e940be032..0000000000
--- a/share/qtcreator/qmldesigner/studio_templates/projects/common/qmlcomponents.tpl
+++ /dev/null
@@ -1,34 +0,0 @@
-### This file is automatically generated by Qt Design Studio.
-### Do not change
-
-message("Building designer components.")
-
-set(QT_QML_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/qml")
-
-include(FetchContent)
-FetchContent_Declare(
- ds
- GIT_TAG qds-4.4
- GIT_REPOSITORY https://code.qt.io/qt-labs/qtquickdesigner-components.git
-)
-
-FetchContent_GetProperties(ds)
-FetchContent_Populate(ds)
-
-target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE
- QuickStudioComponentsplugin
- QuickStudioEffectsplugin
- QuickStudioApplicationplugin
- FlowViewplugin
- QuickStudioLogicHelperplugin
- QuickStudioMultiTextplugin
- QuickStudioEventSimulatorplugin
- QuickStudioEventSystemplugin
- QuickStudioUtilsplugin
-)
-
-add_subdirectory(${ds_SOURCE_DIR} ${ds_BINARY_DIR})
-
-target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE
- BULD_QDS_COMPONENTS=true
-)
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/common/qmlmodules.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/common/qmlmodules.tpl
deleted file mode 100644
index 5a22661b5a..0000000000
--- a/share/qtcreator/qmldesigner/studio_templates/projects/common/qmlmodules.tpl
+++ /dev/null
@@ -1,18 +0,0 @@
-### This file is automatically generated by Qt Design Studio.
-### Do not change
-
-qt6_add_qml_module(${CMAKE_PROJECT_NAME}
- URI "Main"
- VERSION 1.0
- RESOURCE_PREFIX "/qt/qml"
- NO_PLUGIN
- QML_FILES main.qml
-)
-
-add_subdirectory(content)
-add_subdirectory(imports)
-
-target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE
- contentplugin
- %{ProjectPluginName}
-)
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/common/qtquickcontrols2.conf b/share/qtcreator/qmldesigner/studio_templates/projects/common/qtquickcontrols2.conf
deleted file mode 100644
index 9c7633fb0a..0000000000
--- a/share/qtcreator/qmldesigner/studio_templates/projects/common/qtquickcontrols2.conf
+++ /dev/null
@@ -1,23 +0,0 @@
-; This file can be edited to change the style of the application
-; Read "Qt Quick Controls 2 Configuration File" for details:
-; http://doc.qt.io/qt-5/qtquickcontrols2-configuration.html
-
-[Controls]
-Style=%{QtQuickControlsStyle}
-@if '%{QtQuickControlsStyle}' == 'Universal'
-
-[Universal]
-Theme=%{QtQuickControlsStyleTheme}
-;Accent=Steel
-;Foreground=Brown
-;Background=Steel
-@endif
-@if '%{QtQuickControlsStyle}' == 'Material'
-
-[Material]
-Theme=%{QtQuickControlsStyleTheme}
-;Accent=BlueGrey
-;Primary=BlueGray
-;Foreground=Brown
-;Background=Grey
-@endif
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/desktop-launcher/wizard.json b/share/qtcreator/qmldesigner/studio_templates/projects/desktop-launcher/wizard.json
index 01a603eb9d..c15d4dbf74 100644
--- a/share/qtcreator/qmldesigner/studio_templates/projects/desktop-launcher/wizard.json
+++ b/share/qtcreator/qmldesigner/studio_templates/projects/desktop-launcher/wizard.json
@@ -17,6 +17,8 @@
{ "key": "ProjectPluginName", "value": "%{ProjectName}plugin" },
{ "key": "ProjectPluginClassName", "value": "%{ProjectName}Plugin" },
{ "key": "QmlProjectFileName", "value": "%{JS: Util.fileName('%{ProjectName}', 'qmlproject')}" },
+ { "key": "AssetDir", "value": "Generated" },
+ { "key": "ContentDir", "value": "%{ProjectName}Content" },
{ "key": "ImportModuleName", "value": "%{ProjectName}" },
{ "key": "UIClassName", "value": "Screen01" },
{ "key": "UIClassFileName", "value": "%{JS: Util.fileName('%{UIClassName}', 'ui.qml')}" },
@@ -298,97 +300,49 @@
"openAsProject": true
},
{
- "source": "../common/CMakeLists.main.txt.tpl",
- "target": "%{ProjectDirectory}/CMakeLists.txt"
- },
- {
- "source": "../common/qmlmodules.tpl",
- "target": "%{ProjectDirectory}/qmlmodules"
- },
- {
- "source": "../common/qmlcomponents.tpl",
- "target": "%{ProjectDirectory}/qmlcomponents"
- },
- {
- "source": "../common/insight.tpl",
- "target": "%{ProjectDirectory}/insight"
- },
- {
- "source": "../common/main.qml",
- "target": "%{ProjectDirectory}/main.qml"
- },
- {
"source": "../common/qtquickcontrols2.conf.tpl",
"target": "%{ProjectDirectory}/qtquickcontrols2.conf"
},
{
- "source": "../common/main.cpp.tpl",
- "target": "%{ProjectDirectory}/src/main.cpp"
- },
- {
- "source": "../common/app_environment.h.tpl",
- "target": "%{ProjectDirectory}/src/app_environment.h"
- },
- {
- "source": "../common/import_qml_plugins.h.tpl",
- "target": "%{ProjectDirectory}/src/import_qml_plugins.h"
- },
- {
- "source": "../common/import_qml_components_plugins.h.tpl",
- "target": "%{ProjectDirectory}/src/import_qml_components_plugins.h"
- },
- {
- "source": "../common/CMakeLists.content.txt.tpl",
- "target": "%{ProjectDirectory}/content/CMakeLists.txt"
- },
- {
"source": "../common/App.qml.tpl",
- "target": "%{ProjectDirectory}/content/App.qml"
+ "target": "%{ProjectDirectory}/%{ContentDir}/App.qml"
},
{
"source": "Screen01.ui.qml.tpl",
- "target": "%{ProjectDirectory}/content/Screen01.ui.qml",
+ "target": "%{ProjectDirectory}/%{ContentDir}/Screen01.ui.qml",
"openInEditor": true
},
{
"source": "../common/fonts.txt",
- "target": "%{ProjectDirectory}/content/fonts/fonts.txt"
+ "target": "%{ProjectDirectory}/%{ContentDir}/fonts/fonts.txt"
},
{
"source": "../common/asset_imports.txt",
- "target": "%{ProjectDirectory}/asset_imports/asset_imports.txt"
- },
- {
- "source": "../common/CMakeLists.imports.txt.tpl",
- "target": "%{ProjectDirectory}/imports/CMakeLists.txt"
- },
- {
- "source": "../shared-plugin/name/CMakeLists.importmodule.txt.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/CMakeLists.txt"
+ "target": "%{ProjectDirectory}/%{AssetDir}/%{AssetDir}.txt"
},
{
"source": "../shared-plugin/name/importmodule.qmldir.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/qmldir"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/qmldir"
},
{
"source": "../shared-plugin/name/Constants.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/Constants.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/Constants.qml"
},
{
"source": "../shared-plugin/name/DirectoryFontLoader.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/DirectoryFontLoader.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/DirectoryFontLoader.qml"
},
{
"source": "../shared-plugin/name/EventListModel.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/EventListModel.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/EventListModel.qml"
},
{
"source": "../shared-plugin/name/EventListSimulator.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/EventListSimulator.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/EventListSimulator.qml"
},
{
"source": "../shared-plugin/name/designer/plugin.metainfo",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/designer/plugin.metainfo"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/designer/plugin.metainfo"
}
]
}
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/mobile-scroll/wizard.json b/share/qtcreator/qmldesigner/studio_templates/projects/mobile-scroll/wizard.json
index d521cc201e..d9e4b97908 100644
--- a/share/qtcreator/qmldesigner/studio_templates/projects/mobile-scroll/wizard.json
+++ b/share/qtcreator/qmldesigner/studio_templates/projects/mobile-scroll/wizard.json
@@ -17,6 +17,8 @@
{ "key": "ProjectPluginName", "value": "%{ProjectName}plugin" },
{ "key": "ProjectPluginClassName", "value": "%{ProjectName}Plugin" },
{ "key": "QmlProjectFileName", "value": "%{JS: Util.fileName('%{ProjectName}', 'qmlproject')}" },
+ { "key": "AssetDir", "value": "Generated" },
+ { "key": "ContentDir", "value": "%{ProjectName}Content" },
{ "key": "ImportModuleName", "value": "%{ProjectName}" },
{ "key": "UIClassName", "value": "Screen01" },
{ "key": "UIClassFileName", "value": "%{JS: Util.fileName('%{UIClassName}', 'ui.qml')}" },
@@ -193,7 +195,7 @@
"type": "ComboBox",
"data":
{
- "index": 4,
+ "index": 6,
"items":
[
{
@@ -237,6 +239,13 @@
"({
'TargetQuickVersion': '6.6'
})"
+ },
+ {
+ "trKey": "Qt 6.7",
+ "value":
+ "({
+ 'TargetQuickVersion': '6.7'
+ })"
}
]
}
@@ -257,97 +266,49 @@
"openAsProject": true
},
{
- "source": "../common/CMakeLists.main.txt.tpl",
- "target": "%{ProjectDirectory}/CMakeLists.txt"
- },
- {
- "source": "../common/qmlmodules.tpl",
- "target": "%{ProjectDirectory}/qmlmodules"
- },
- {
- "source": "../common/qmlcomponents.tpl",
- "target": "%{ProjectDirectory}/qmlcomponents"
- },
- {
- "source": "../common/insight.tpl",
- "target": "%{ProjectDirectory}/insight"
- },
- {
- "source": "../common/main.qml",
- "target": "%{ProjectDirectory}/main.qml"
- },
- {
"source": "../common/qtquickcontrols2.conf.tpl",
"target": "%{ProjectDirectory}/qtquickcontrols2.conf"
},
{
- "source": "../common/main.cpp.tpl",
- "target": "%{ProjectDirectory}/src/main.cpp"
- },
- {
- "source": "../common/app_environment.h.tpl",
- "target": "%{ProjectDirectory}/src/app_environment.h"
- },
- {
- "source": "../common/import_qml_plugins.h.tpl",
- "target": "%{ProjectDirectory}/src/import_qml_plugins.h"
- },
- {
- "source": "../common/import_qml_components_plugins.h.tpl",
- "target": "%{ProjectDirectory}/src/import_qml_components_plugins.h"
- },
- {
- "source": "../common/CMakeLists.content.txt.tpl",
- "target": "%{ProjectDirectory}/content/CMakeLists.txt"
- },
- {
"source": "../common/App.qml.tpl",
- "target": "%{ProjectDirectory}/content/App.qml"
+ "target": "%{ProjectDirectory}/%{ContentDir}/App.qml"
},
{
"source": "Screen01.ui.qml.tpl",
- "target": "%{ProjectDirectory}/content/Screen01.ui.qml",
+ "target": "%{ProjectDirectory}/%{ContentDir}/Screen01.ui.qml",
"openInEditor": true
},
{
"source": "../common/fonts.txt",
- "target": "%{ProjectDirectory}/content/fonts/fonts.txt"
+ "target": "%{ProjectDirectory}/%{ContentDir}/fonts/fonts.txt"
},
{
"source": "../common/asset_imports.txt",
- "target": "%{ProjectDirectory}/asset_imports/asset_imports.txt"
- },
- {
- "source": "../common/CMakeLists.imports.txt.tpl",
- "target": "%{ProjectDirectory}/imports/CMakeLists.txt"
- },
- {
- "source": "../shared-plugin/name/CMakeLists.importmodule.txt.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/CMakeLists.txt"
+ "target": "%{ProjectDirectory}/%{AssetDir}/%{AssetDir}.txt"
},
{
"source": "../shared-plugin/name/importmodule.qmldir.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/qmldir"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/qmldir"
},
{
"source": "../shared-plugin/name/Constants.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/Constants.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/Constants.qml"
},
{
"source": "../shared-plugin/name/DirectoryFontLoader.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/DirectoryFontLoader.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/DirectoryFontLoader.qml"
},
{
"source": "../shared-plugin/name/EventListModel.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/EventListModel.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/EventListModel.qml"
},
{
"source": "../shared-plugin/name/EventListSimulator.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/EventListSimulator.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/EventListSimulator.qml"
},
{
"source": "../shared-plugin/name/designer/plugin.metainfo",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/designer/plugin.metainfo"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/designer/plugin.metainfo"
}
]
}
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/mobile-stack/wizard.json b/share/qtcreator/qmldesigner/studio_templates/projects/mobile-stack/wizard.json
index 17cd30d507..910c32a42c 100644
--- a/share/qtcreator/qmldesigner/studio_templates/projects/mobile-stack/wizard.json
+++ b/share/qtcreator/qmldesigner/studio_templates/projects/mobile-stack/wizard.json
@@ -17,6 +17,8 @@
{ "key": "ProjectPluginName", "value": "%{ProjectName}plugin" },
{ "key": "ProjectPluginClassName", "value": "%{ProjectName}Plugin" },
{ "key": "QmlProjectFileName", "value": "%{JS: Util.fileName('%{ProjectName}', 'qmlproject')}" },
+ { "key": "AssetDir", "value": "Generated" },
+ { "key": "ContentDir", "value": "%{ProjectName}Content" },
{ "key": "ImportModuleName", "value": "%{ProjectName}" },
{ "key": "IsQt6Project", "value": "%{JS: value('QtQuickVersion') !== '2.15' }" },
{ "key": "QtQuickVersion", "value": "%{JS: %{TargetQtVersion}.TargetQuickVersion}" },
@@ -191,7 +193,7 @@
"type": "ComboBox",
"data":
{
- "index": 4,
+ "index": 6,
"items":
[
{
@@ -235,6 +237,13 @@
"({
'TargetQuickVersion': '6.6'
})"
+ },
+ {
+ "trKey": "Qt 6.7",
+ "value":
+ "({
+ 'TargetQuickVersion': '6.7'
+ })"
}
]
}
@@ -254,102 +263,54 @@
"openAsProject": true
},
{
- "source": "../common/CMakeLists.main.txt.tpl",
- "target": "%{ProjectDirectory}/CMakeLists.txt"
- },
- {
- "source": "../common/qmlmodules.tpl",
- "target": "%{ProjectDirectory}/qmlmodules"
- },
- {
- "source": "../common/qmlcomponents.tpl",
- "target": "%{ProjectDirectory}/qmlcomponents"
- },
- {
- "source": "../common/insight.tpl",
- "target": "%{ProjectDirectory}/insight"
- },
- {
- "source": "../common/main.qml",
- "target": "%{ProjectDirectory}/main.qml"
- },
- {
"source": "../common/qtquickcontrols2.conf.tpl",
"target": "%{ProjectDirectory}/qtquickcontrols2.conf"
},
{
- "source": "../common/main.cpp.tpl",
- "target": "%{ProjectDirectory}/src/main.cpp"
- },
- {
- "source": "../common/app_environment.h.tpl",
- "target": "%{ProjectDirectory}/src/app_environment.h"
- },
- {
- "source": "../common/import_qml_plugins.h.tpl",
- "target": "%{ProjectDirectory}/src/import_qml_plugins.h"
- },
- {
- "source": "../common/import_qml_components_plugins.h.tpl",
- "target": "%{ProjectDirectory}/src/import_qml_components_plugins.h"
- },
- {
- "source": "CMakeLists.content.txt.tpl",
- "target": "%{ProjectDirectory}/content/CMakeLists.txt"
- },
- {
"source": "App.qml.tpl",
- "target": "%{ProjectDirectory}/content/App.qml"
+ "target": "%{ProjectDirectory}/%{ContentDir}/App.qml"
},
{
"source": "Screen01.ui.qml.tpl",
- "target": "%{ProjectDirectory}/content/Screen01.ui.qml",
+ "target": "%{ProjectDirectory}/%{ContentDir}/Screen01.ui.qml",
"openInEditor": true
},
{
"source": "Screen02.ui.qml.tpl",
- "target": "%{ProjectDirectory}/content/Screen02.ui.qml",
+ "target": "%{ProjectDirectory}/%{ContentDir}/Screen02.ui.qml",
"openInEditor": true
},
{
"source": "../common/fonts.txt",
- "target": "%{ProjectDirectory}/content/fonts/fonts.txt"
+ "target": "%{ProjectDirectory}/%{ContentDir}/fonts/fonts.txt"
},
{
"source": "../common/asset_imports.txt",
- "target": "%{ProjectDirectory}/asset_imports/asset_imports.txt"
- },
- {
- "source": "../common/CMakeLists.imports.txt.tpl",
- "target": "%{ProjectDirectory}/imports/CMakeLists.txt"
- },
- {
- "source": "../shared-plugin/name/CMakeLists.importmodule.txt.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/CMakeLists.txt"
+ "target": "%{ProjectDirectory}/%{AssetDir}/%{AssetDir}.txt"
},
{
"source": "../shared-plugin/name/importmodule.qmldir.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/qmldir"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/qmldir"
},
{
"source": "../shared-plugin/name/Constants.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/Constants.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/Constants.qml"
},
{
"source": "../shared-plugin/name/DirectoryFontLoader.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/DirectoryFontLoader.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/DirectoryFontLoader.qml"
},
{
"source": "../shared-plugin/name/EventListModel.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/EventListModel.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/EventListModel.qml"
},
{
"source": "../shared-plugin/name/EventListSimulator.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/EventListSimulator.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/EventListSimulator.qml"
},
{
"source": "../shared-plugin/name/designer/plugin.metainfo",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/designer/plugin.metainfo"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/designer/plugin.metainfo"
}
]
}
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/mobile-swipe/wizard.json b/share/qtcreator/qmldesigner/studio_templates/projects/mobile-swipe/wizard.json
index 37710ae91d..1f5be300e1 100644
--- a/share/qtcreator/qmldesigner/studio_templates/projects/mobile-swipe/wizard.json
+++ b/share/qtcreator/qmldesigner/studio_templates/projects/mobile-swipe/wizard.json
@@ -17,6 +17,8 @@
{ "key": "ProjectPluginName", "value": "%{ProjectName}plugin" },
{ "key": "ProjectPluginClassName", "value": "%{ProjectName}Plugin" },
{ "key": "QmlProjectFileName", "value": "%{JS: Util.fileName('%{ProjectName}', 'qmlproject')}" },
+ { "key": "AssetDir", "value": "Generated" },
+ { "key": "ContentDir", "value": "%{ProjectName}Content" },
{ "key": "ImportModuleName", "value": "%{ProjectName}" },
{ "key": "IsQt6Project", "value": "%{JS: value('QtQuickVersion') !== '2.15' }" },
{ "key": "QtQuickVersion", "value": "%{JS: %{TargetQtVersion}.TargetQuickVersion}" },
@@ -191,7 +193,7 @@
"type": "ComboBox",
"data":
{
- "index": 4,
+ "index": 6,
"items":
[
{
@@ -235,6 +237,13 @@
"({
'TargetQuickVersion': '6.6'
})"
+ },
+ {
+ "trKey": "Qt 6.7",
+ "value":
+ "({
+ 'TargetQuickVersion': '6.7'
+ })"
}
]
}
@@ -254,102 +263,54 @@
"openAsProject": true
},
{
- "source": "../common/CMakeLists.main.txt.tpl",
- "target": "%{ProjectDirectory}/CMakeLists.txt"
- },
- {
- "source": "../common/qmlmodules.tpl",
- "target": "%{ProjectDirectory}/qmlmodules"
- },
- {
- "source": "../common/qmlcomponents.tpl",
- "target": "%{ProjectDirectory}/qmlcomponents"
- },
- {
- "source": "../common/insight.tpl",
- "target": "%{ProjectDirectory}/insight"
- },
- {
- "source": "../common/main.qml",
- "target": "%{ProjectDirectory}/main.qml"
- },
- {
"source": "../common/qtquickcontrols2.conf.tpl",
"target": "%{ProjectDirectory}/qtquickcontrols2.conf"
},
{
- "source": "../common/main.cpp.tpl",
- "target": "%{ProjectDirectory}/src/main.cpp"
- },
- {
- "source": "../common/app_environment.h.tpl",
- "target": "%{ProjectDirectory}/src/app_environment.h"
- },
- {
- "source": "../common/import_qml_plugins.h.tpl",
- "target": "%{ProjectDirectory}/src/import_qml_plugins.h"
- },
- {
- "source": "../common/import_qml_components_plugins.h.tpl",
- "target": "%{ProjectDirectory}/src/import_qml_components_plugins.h"
- },
- {
- "source": "CMakeLists.content.txt.tpl",
- "target": "%{ProjectDirectory}/content/CMakeLists.txt"
- },
- {
"source": "App.qml.tpl",
- "target": "%{ProjectDirectory}/content/App.qml"
+ "target": "%{ProjectDirectory}/%{ContentDir}/App.qml"
},
{
"source": "Screen01.ui.qml.tpl",
- "target": "%{ProjectDirectory}/content/Screen01.ui.qml",
+ "target": "%{ProjectDirectory}/%{ContentDir}/Screen01.ui.qml",
"openInEditor": true
},
{
"source": "Screen02.ui.qml.tpl",
- "target": "%{ProjectDirectory}/content/Screen02.ui.qml",
+ "target": "%{ProjectDirectory}/%{ContentDir}/Screen02.ui.qml",
"openInEditor": true
},
{
"source": "../common/fonts.txt",
- "target": "%{ProjectDirectory}/content/fonts/fonts.txt"
+ "target": "%{ProjectDirectory}/%{ContentDir}/fonts/fonts.txt"
},
{
"source": "../common/asset_imports.txt",
- "target": "%{ProjectDirectory}/asset_imports/asset_imports.txt"
- },
- {
- "source": "../common/CMakeLists.imports.txt.tpl",
- "target": "%{ProjectDirectory}/imports/CMakeLists.txt"
- },
- {
- "source": "../shared-plugin/name/CMakeLists.importmodule.txt.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/CMakeLists.txt"
+ "target": "%{ProjectDirectory}/%{AssetDir}/%{AssetDir}.txt"
},
{
"source": "../shared-plugin/name/importmodule.qmldir.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/qmldir"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/qmldir"
},
{
"source": "../shared-plugin/name/Constants.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/Constants.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/Constants.qml"
},
{
"source": "../shared-plugin/name/DirectoryFontLoader.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/DirectoryFontLoader.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/DirectoryFontLoader.qml"
},
{
"source": "../shared-plugin/name/EventListModel.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/EventListModel.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/EventListModel.qml"
},
{
"source": "../shared-plugin/name/EventListSimulator.qml.tpl",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/EventListSimulator.qml"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/EventListSimulator.qml"
},
{
"source": "../shared-plugin/name/designer/plugin.metainfo",
- "target": "%{ProjectDirectory}/imports/%{ImportModuleName}/designer/plugin.metainfo"
+ "target": "%{ProjectDirectory}/%{ImportModuleName}/designer/plugin.metainfo"
}
]
}
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/Colors.json.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/Colors.json.tpl
deleted file mode 100644
index 052b7abd01..0000000000
--- a/share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/Colors.json.tpl
+++ /dev/null
@@ -1,18 +0,0 @@
-[
- {
- "colorCode": "#ff0000",
- "name": "Red"
- },
- {
- "colorCode": "#00ff00",
- "name": "Green"
- },
- {
- "colorCode": "#0000ff",
- "name": "Blue"
- },
- {
- "colorCode": "#ffffff",
- "name": "White"
- }
-]
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/Constants.qml.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/Constants.qml.tpl
index cc5da7be55..35aa48896b 100644
--- a/share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/Constants.qml.tpl
+++ b/share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/Constants.qml.tpl
@@ -26,7 +26,7 @@ QtObject {
@if %{IsQt6Project}
property StudioApplication application: StudioApplication {
- fontPath: Qt.resolvedUrl("../../content/" + relativeFontDirectory)
+ fontPath: Qt.resolvedUrl("../../%{ContentDir}/" + relativeFontDirectory)
}
@else
property DirectoryFontLoader directoryFontLoader: DirectoryFontLoader {
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/DataStore.qml.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/DataStore.qml.tpl
deleted file mode 100644
index ca8b45ede0..0000000000
--- a/share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/DataStore.qml.tpl
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (C) 2023 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-pragma Singleton
-import QtQuick 6.5
-import QtQuick.Studio.Utils 1.0
-
-JsonListModel {
- id: models
- source: Qt.resolvedUrl("models.json")
-
- property ChildListModel book: ChildListModel {
- modelName: "book"
- }
-
- property JsonData backend: JsonData {}
-}
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/DirectoryFontLoader.qml.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/DirectoryFontLoader.qml.tpl
index 677fe05428..56ecc9f2f8 100644
--- a/share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/DirectoryFontLoader.qml.tpl
+++ b/share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/DirectoryFontLoader.qml.tpl
@@ -7,7 +7,7 @@ import Qt.labs.folderlistmodel %{QtQuickVersion}
QtObject {
id: loader
- property url fontDirectory: Qt.resolvedUrl("../../content/" + relativeFontDirectory)
+ property url fontDirectory: Qt.resolvedUrl("../../%{ContentDir}/" + relativeFontDirectory)
property string relativeFontDirectory: "fonts"
function loadFont(url) {
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/models.json.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/models.json.tpl
deleted file mode 100644
index ca9c173651..0000000000
--- a/share/qtcreator/qmldesigner/studio_templates/projects/shared-plugin/name/models.json.tpl
+++ /dev/null
@@ -1,56 +0,0 @@
-{
- "book": {
- "columns": [
- {
- "name": "author",
- "type": "String"
- },
- {
- "name": "category",
- "type": "String"
- },
- {
- "name": "isbn",
- "type": "String"
- },
- {
- "name": "price",
- "type": "Real"
- },
- {
- "name": "title",
- "type": "String"
- }
- ],
- "data": [
- [
- "Nigel Rees",
- "reference",
- "",
- 8.95,
- "Sayings of the Century"
- ],
- [
- "Evelyn Waugh",
- "fiction",
- "",
- 12.99,
- "Sword of Honor"
- ],
- [
- "Herman Melville",
- "fiction",
- "0-553-21311-3",
- 8.99,
- "Moby Dick"
- ],
- [
- "J. R. R. Tolkien",
- "fiction",
- "0-395-19395-8",
- 22.99,
- "The Lord of the Rings"
- ]
- ]
- }
-}
diff --git a/share/qtcreator/qmldesigner/toolbar/Main.qml b/share/qtcreator/qmldesigner/toolbar/Main.qml
index 7235028df6..88a9bd744a 100644
--- a/share/qtcreator/qmldesigner/toolbar/Main.qml
+++ b/share/qtcreator/qmldesigner/toolbar/Main.qml
@@ -190,6 +190,26 @@ Rectangle {
onActivated: backend.openFileByIndex(index)
}
+ Text {
+ parent:currentFile.contentItem
+ visible: backend.isDocumentDirty
+
+ anchors.right: parent.right
+ anchors.rightMargin: parent.width - metric.textWidth - 18
+ color: StudioTheme.Values.themeTextColor
+ text: StudioTheme.Constants.wildcard
+ font.family: StudioTheme.Constants.iconFont.family
+ font.pixelSize: StudioTheme.Values.smallIconFont
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.verticalCenterOffset: -4
+
+ FontMetrics {
+ id: metric
+ font: currentFile.font
+ property int textWidth: metric.boundingRect(currentFile.currentText).width
+ }
+ }
+
ToolbarButton {
id: backButton
anchors.verticalCenter: parent.verticalCenter
diff --git a/share/qtcreator/qmldesigner/welcomepage/MainGridStack.qml b/share/qtcreator/qmldesigner/welcomepage/MainGridStack.qml
index 73b023bddc..555596223b 100644
--- a/share/qtcreator/qmldesigner/welcomepage/MainGridStack.qml
+++ b/share/qtcreator/qmldesigner/welcomepage/MainGridStack.qml
@@ -88,7 +88,17 @@ Item {
Layout.fillWidth: true
Layout.fillHeight: true
hover: hoverHandler.hovered
- model: ExamplesModel { id: examplesModel}
+
+ Component.onCompleted: {
+ // remove items with old versions from the examples model
+ for (let i = examplesModel.count - 1; i >= 0; --i) {
+ if (!projectModel.exampleVersionOk(examplesModel.get(i).minQDSVersion))
+ examplesModel.remove(i)
+ }
+ }
+
+ model: ExamplesModelV2 { id: examplesModel }
+
delegate: ThumbnailDelegate {
type: ThumbnailDelegate.Type.Example
downloadable: showDownload
diff --git a/share/qtcreator/templates/wizards/files/form/wizard.json b/share/qtcreator/templates/wizards/files/form/wizard.json
index ec5fd422a3..d0d826b6c6 100644
--- a/share/qtcreator/templates/wizards/files/form/wizard.json
+++ b/share/qtcreator/templates/wizards/files/form/wizard.json
@@ -3,8 +3,8 @@
"supportedProjectTypes": [ ],
"id": "D.Form",
"category": "R.Qt",
- "trDescription": "Creates a Qt Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic.",
- "trDisplayName": "Qt Designer Form",
+ "trDescription": "Creates a Qt Widgets Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic.",
+ "trDisplayName": "Qt Widgets Designer Form",
"trDisplayCategory": "Qt",
"iconText": "ui",
"enabled": "%{JS: value('Plugins').indexOf('Designer') >= 0}",
diff --git a/share/qtcreator/templates/wizards/projects/qtforpythonapplication/widget/wizard.json b/share/qtcreator/templates/wizards/projects/qtforpythonapplication/widget/wizard.json
index c52c05c12c..6d3f968c1b 100644
--- a/share/qtcreator/templates/wizards/projects/qtforpythonapplication/widget/wizard.json
+++ b/share/qtcreator/templates/wizards/projects/qtforpythonapplication/widget/wizard.json
@@ -3,7 +3,7 @@
"supportedProjectTypes": [ "PythonProject" ],
"id": "F.QtForPythonApplicationWindowWidget",
"category": "F.ApplicationPySide",
- "trDescription": "Creates a Qt for Python application that includes a Qt Designer-based widget (ui file). Requires .ui to Python conversion.",
+ "trDescription": "Creates a Qt for Python application that includes a Qt Widgets Designer-based widget (ui file). Requires .ui to Python conversion.",
"trDisplayName": "Window UI",
"trDisplayCategory": "Application (Qt for Python)",
"icon": "../icons/icon.png",
diff --git a/share/qtcreator/templates/wizards/projects/qtquick2-extension/wizard.json b/share/qtcreator/templates/wizards/projects/qtquick2-extension/wizard.json
index 0164a9f3d5..d12edc4576 100644
--- a/share/qtcreator/templates/wizards/projects/qtquick2-extension/wizard.json
+++ b/share/qtcreator/templates/wizards/projects/qtquick2-extension/wizard.json
@@ -23,8 +23,8 @@
{ "key": "ObjectHdr", "value": "%{JS: Cpp.classToFileName(value('ObjectName'), Util.preferredSuffix('text/x-c++hdr'))}" },
{ "key": "ObjectQml", "value": "%{JS: Util.fileName(value('ObjectName') + 'Controls', 'qml')}" },
{ "key": "PluginName", "value": "%{JS: value('ProjectName').charAt(0).toUpperCase() + value('ProjectName').slice(1) + 'Plugin' }" },
- { "key": "PLUGINGUARD", "value": "%{JS: Cpp.classToHeaderGuard(value('PluginBaseFileName'), Util.preferredSuffix('text/x-c++hdr'))}" },
- { "key": "OBJECTGUARD", "value": "%{JS: Cpp.classToHeaderGuard(value('ObjectName'), Util.preferredSuffix('text/x-c++hdr'))}" },
+ { "key": "PLUGINGUARD", "value": "%{JS: Cpp.headerGuard(value('PluginHdr'))}" },
+ { "key": "OBJECTGUARD", "value": "%{JS: Cpp.headerGuard(value('ObjectHdr'))}" },
{ "key": "IsQt6", "value": "%{JS: value('QtVersion').IsQt6}" },
{ "key": "QtQuickVersion", "value": "%{JS: value('QtVersion').QtQuickVersion}" },
{ "key": "QtQuickFeature", "value": "%{JS: (value('QtQuickVersion')=='') ? 'QtSupport.Wizards.FeatureQt.6.2' : 'QtSupport.Wizards.FeatureQtQuick.%{QtQuickVersion}'}" },
diff --git a/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/wizard.json b/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/wizard.json
index 098cb4f0ec..48791e4fd8 100644
--- a/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/wizard.json
+++ b/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/wizard.json
@@ -3,7 +3,7 @@
"supportedProjectTypes": [ "MesonProjectManager.MesonProject","CMakeProjectManager.CMakeProject", "Qt4ProjectManager.Qt4Project", "Qbs.QbsProject" ],
"id": "C.QtWidgets",
"category": "D.ApplicationQt",
- "trDescription": "Creates a widget-based Qt application that contains a Qt Designer-based main window and C++ source and header files to implement the application logic.\n\nPreselects a desktop Qt for building the application if available.",
+ "trDescription": "Creates a widget-based Qt application that contains a Qt Widgets Designer-based main window and C++ source and header files to implement the application logic.\n\nPreselects a desktop Qt for building the application if available.",
"trDisplayName": "Qt Widgets Application",
"trDisplayCategory": "Application (Qt)",
"icon": "../../global/guiapplication.png",
diff --git a/share/qtcreator/themes/dark.creatortheme b/share/qtcreator/themes/dark.creatortheme
index c2846fa094..463204fd51 100644
--- a/share/qtcreator/themes/dark.creatortheme
+++ b/share/qtcreator/themes/dark.creatortheme
@@ -502,7 +502,6 @@ DrawSearchResultWidgetFrame=false
DrawTargetSelectorBottom=false
DrawToolBarHighlights=true
DrawToolBarBorders=false
-ApplyThemePaletteGlobally=true
FlatToolBars=true
FlatSideBarIcons=true
FlatProjectsMode=true
diff --git a/share/qtcreator/themes/dark.figmatokens b/share/qtcreator/themes/dark.figmatokens
index 8937a3cc2d..d65ae21fa3 100644
--- a/share/qtcreator/themes/dark.figmatokens
+++ b/share/qtcreator/themes/dark.figmatokens
@@ -20,7 +20,13 @@ Token_Foreground_Subtle=ff2A2A2A
Token_Text_Default=ffF8F8F8
Token_Text_Muted=ffAEAEAE
Token_Text_Subtle=ff595959
-Token_Text_Accent=ff23B26A
+
+; Token_Text_Accent value from Figma is still too dark. Therefore, it is modified, here.
+; Text (consisting of thin lines) needs to be substantially brighter than accent colors used for
+; larger-area elements like the filled button.
+
+; Token_Text_Accent=ff23B26A
+Token_Text_Accent=ff30C06A
Token_Stroke_Strong=ffeeeeee
Token_Stroke_Muted=ff727272
@@ -30,3 +36,8 @@ Token_Notification_Alert=ffc98014
Token_Notification_Success=ff1f9b5d
Token_Notification_Neutral=ff016876
Token_Notification_Danger=ffb22245
+
+Token_Gradient01_Start=ff016876
+Token_Gradient01_End=ff1F9B5D
+Token_Gradient02_Start=ff3A3A3A
+Token_Gradient02_End=ff838383
diff --git a/share/qtcreator/themes/default.creatortheme b/share/qtcreator/themes/default.creatortheme
index f2c4c7f7a4..e6cdab1bc3 100644
--- a/share/qtcreator/themes/default.creatortheme
+++ b/share/qtcreator/themes/default.creatortheme
@@ -1,5 +1,5 @@
[General]
-Includes=light.figmatokens
+Includes=light.figmatokens, light-palette.inc
ThemeName=Classic
PreferredStyles=
@@ -465,13 +465,12 @@ TerminalAnsi15=e5e5e6
[Flags]
ComboBoxDrawTextShadow=true
-DerivePaletteFromTheme=false
+DerivePaletteFromThemeIfNeeded=true
DrawIndicatorBranch=false
DrawSearchResultWidgetFrame=true
DrawTargetSelectorBottom=true
DrawToolBarHighlights=true
DrawToolBarBorders=false
-ApplyThemePaletteGlobally=false
FlatToolBars=false
FlatSideBarIcons=false
FlatProjectsMode=false
diff --git a/share/qtcreator/themes/design-light.creatortheme b/share/qtcreator/themes/design-light.creatortheme
index 41a9f07ba8..5271d5fc57 100644
--- a/share/qtcreator/themes/design-light.creatortheme
+++ b/share/qtcreator/themes/design-light.creatortheme
@@ -513,7 +513,6 @@ DrawSearchResultWidgetFrame=false
DrawTargetSelectorBottom=false
DrawToolBarHighlights=false
DrawToolBarBorders=true
-ApplyThemePaletteGlobally=true
FlatToolBars=true
FlatSideBarIcons=true
FlatProjectsMode=false
diff --git a/share/qtcreator/themes/design.creatortheme b/share/qtcreator/themes/design.creatortheme
index 11022bd7e5..874c5116e0 100644
--- a/share/qtcreator/themes/design.creatortheme
+++ b/share/qtcreator/themes/design.creatortheme
@@ -562,7 +562,6 @@ DrawSearchResultWidgetFrame=false
DrawTargetSelectorBottom=false
DrawToolBarHighlights=false
DrawToolBarBorders=false
-ApplyThemePaletteGlobally=true
FlatToolBars=true
FlatSideBarIcons=true
FlatProjectsMode=true
diff --git a/share/qtcreator/themes/flat-dark.creatortheme b/share/qtcreator/themes/flat-dark.creatortheme
index 9737e9cd53..bdf46614b0 100644
--- a/share/qtcreator/themes/flat-dark.creatortheme
+++ b/share/qtcreator/themes/flat-dark.creatortheme
@@ -506,7 +506,6 @@ DrawSearchResultWidgetFrame=false
DrawTargetSelectorBottom=false
DrawToolBarHighlights=false
DrawToolBarBorders=false
-ApplyThemePaletteGlobally=true
FlatToolBars=true
FlatSideBarIcons=true
FlatProjectsMode=true
diff --git a/share/qtcreator/themes/flat-light.creatortheme b/share/qtcreator/themes/flat-light.creatortheme
index 1ff8a7a3ff..a85d3654d8 100644
--- a/share/qtcreator/themes/flat-light.creatortheme
+++ b/share/qtcreator/themes/flat-light.creatortheme
@@ -1,25 +1,28 @@
[General]
-Includes=light.figmatokens
+Includes=light.figmatokens, light-palette.inc
ThemeName=Flat Light
PreferredStyles=
[Palette]
-shadowBackground=ffe4e4e4
-text=ff000000
-textDisabled=55000000
+shadowBackground=PaletteDark
+text=PaletteWindowText
+textDisabled=PaletteTextDisabled
toolBarItem=a0010508
toolBarItemDisabled=38000000
fancyBarsNormalTextColor=ff000000
fancyBarsBoldTextColor=a0010508
hoverBackground=1a000000
selectedBackground=a8ffffff
-normalBackground=ffffffff
-alternateBackground=ff515151
+normalBackground=PaletteWindow
+alternateBackground=PaletteAlternateBase
stop_error=ffec7373
run_success=ff52c23b
splitter=ffbdbebf
error=ffdf4f4f
warning=ffecbc1c
+textColorLink=PaletteLink
+textColorLinkVisited=PaletteLinkVisited
+backgroundColorDisabled=PaletteWindowDisabled
qmlDesignerButtonColor=fff8f8f8
;DS Theme Palette START
@@ -474,13 +477,12 @@ TerminalAnsi15=e5e5e6
[Flags]
ComboBoxDrawTextShadow=false
-DerivePaletteFromTheme=false
+DerivePaletteFromThemeIfNeeded=true
DrawIndicatorBranch=true
DrawSearchResultWidgetFrame=false
DrawTargetSelectorBottom=false
DrawToolBarHighlights=false
DrawToolBarBorders=true
-ApplyThemePaletteGlobally=false
FlatToolBars=true
FlatSideBarIcons=true
FlatProjectsMode=false
diff --git a/share/qtcreator/themes/flat.creatortheme b/share/qtcreator/themes/flat.creatortheme
index f479077889..7fd222e168 100644
--- a/share/qtcreator/themes/flat.creatortheme
+++ b/share/qtcreator/themes/flat.creatortheme
@@ -1,23 +1,26 @@
[General]
-Includes=light.figmatokens
+Includes=light.figmatokens, light-palette.inc
ThemeName=Flat
PreferredStyles=
[Palette]
shadowBackground=ff404142
-text=ff000000
-textDisabled=55000000
+text=PaletteWindowText
+textDisabled=PaletteTextDisabled
toolBarItem=bcfbfdff
toolBarItemDisabled=56a5a6a7
fancyBarsNormalTextColor=ffffffff
fancyBarsBoldTextColor=b6fbfdff
hoverBackground=28ffffff
selectedBackground=7a000000
-normalBackground=ffffffff
-alternateBackground=ff515151
+normalBackground=PaletteWindow
+alternateBackground=PaletteAlternateBase
error=ffdf4f4f
warning=ffecbc1c
splitter=ff313131
+textColorLink=PaletteLink
+textColorLinkVisited=PaletteLinkVisited
+backgroundColorDisabled=PaletteWindowDisabled
qmlDesignerButtonColor=ff4c4e50
;DS Theme Palette START
@@ -472,13 +475,12 @@ TerminalAnsi15=e5e5e6
[Flags]
ComboBoxDrawTextShadow=false
-DerivePaletteFromTheme=false
+DerivePaletteFromThemeIfNeeded=true
DrawIndicatorBranch=true
DrawSearchResultWidgetFrame=false
DrawTargetSelectorBottom=false
DrawToolBarHighlights=false
DrawToolBarBorders=false
-ApplyThemePaletteGlobally=false
FlatToolBars=true
FlatSideBarIcons=true
FlatProjectsMode=false
diff --git a/share/qtcreator/themes/light-palette.inc b/share/qtcreator/themes/light-palette.inc
new file mode 100644
index 0000000000..99fe763a8b
--- /dev/null
+++ b/share/qtcreator/themes/light-palette.inc
@@ -0,0 +1,41 @@
+[Palette]
+PaletteWindow=ffffffff
+PaletteWindowDisabled=ffececec
+PaletteWindowText=ff000000
+PaletteWindowTextDisabled=PaletteTextDisabled
+PaletteBase=PaletteWindow
+PaletteBaseDisabled=PaletteWindowDisabled
+PaletteAlternateBase=ff515151
+;PaletteAlternateBaseDisabled
+PaletteToolTipBase=PaletteDark
+;PaletteToolTipBaseDisabled
+PaletteToolTipText=PaletteWindowText
+;PaletteToolTipTextDisabled
+PaletteText=PaletteWindowText
+PaletteTextDisabled=55000000
+PaletteButton=PaletteDark
+;PaletteButtonDisabled
+PaletteButtonText=PaletteWindowText
+PaletteButtonTextDisabled=PaletteTextDisabled
+PaletteBrightText=ffffffff
+;PaletteBrightTextDisabled
+PaletteHighlight=ffa5cdff
+;PaletteHighlightDisabled
+PaletteHighlightedText=ff000000
+;PaletteHighlightedTextDisabled
+PaletteLink=ff0000ff
+;PaletteLinkDisabled
+PaletteLinkVisited=ff800080
+;PaletteLinkVisitedDisabled
+;PaletteLight
+;PaletteLightDisabled
+;PaletteMidlight
+;PaletteMidlightDisabled
+PaletteDark=ffe4e4e4
+;PaletteDarkDisabled
+PaletteMid=ffa9a9a9
+;PaletteMidDisabled
+;PaletteShadow
+;PaletteShadowDisabled
+PalettePlaceholderText=3f000000
+;PalettePlaceholderTextDisabled
diff --git a/share/qtcreator/themes/light.figmatokens b/share/qtcreator/themes/light.figmatokens
index 6ef243d17d..8bbe56319d 100644
--- a/share/qtcreator/themes/light.figmatokens
+++ b/share/qtcreator/themes/light.figmatokens
@@ -10,7 +10,12 @@ Token_Accent_Muted=ff1f9b5d
Token_Accent_Subtle=ff1a8550
Token_Background_Default=fffcfcfc
-Token_Background_Muted=ffF2F2F2
+
+; Token_Background_Muted value from Figma is too dark to ensure proper contrast when used as
+; text bachground. Therefore, it is modified, here.
+
+;Token_Background_Muted=ffF2F2F2
+Token_Background_Muted=ffF6F6F6
Token_Background_Subtle=ffe7e7e7
Token_Foreground_Default=ffD8D8D8
@@ -20,7 +25,7 @@ Token_Foreground_Subtle=ffEFEFEF
Token_Text_Default=ff393939
Token_Text_Muted=ff6a6a6a
Token_Text_Subtle=ffbebebe
-Token_Text_Accent=ff28C878
+Token_Text_Accent=ff1F9B5D
Token_Stroke_Strong=ff464646
Token_Stroke_Muted=ff727272
@@ -30,3 +35,8 @@ Token_Notification_Alert=ffeb991f
Token_Notification_Success=ff23b26a
Token_Notification_Neutral=ff0e7887
Token_Notification_Danger=ffdc1343
+
+Token_Gradient01_Start=ff23B26A
+Token_Gradient01_End=ff0E7887
+Token_Gradient02_Start=ff949494
+Token_Gradient02_End=ff474747
diff --git a/share/qtcreator/translations/README.md b/share/qtcreator/translations/README.md
index ff9caddf2a..7261305a4b 100644
--- a/share/qtcreator/translations/README.md
+++ b/share/qtcreator/translations/README.md
@@ -80,9 +80,9 @@ How To add translations to Qt Creator
*Note:* `.qm` files are generated as part of the regular build. They are not
submitted to the repository.
-*Note:* QmlDesigner contains code from the Gradient Editor of Qt Designer. If an
-official translation of Qt for your language exists, you can re-use the
-translation of those messages by merging Qt Creator's and Qt Designer's
+*Note:* QmlDesigner contains code from the Gradient Editor of Qt Widgets Designer.
+If an official translation of Qt for your language exists, you can re-use the
+translation of those messages by merging Qt Creator's and Qt Widgets Designer's
translation using `lconvert`:
lconvert qtcreator_<LANG>.ts $QTDIR/translations/designer_<LANG>.ts > temp.ts
@@ -91,6 +91,6 @@ Move the temporary file back to `qtcreator_<LANG>.ts`, complete the Gradient
Editor's translations and update the file, passing the additional option
`-noobsolete` to `lupdate` (by temporarily modifying
`<qtcreator>/cmake/QtCreatorTranslations.cmake`). This will remove the now
-redundant messages originating from Qt Designer.
+redundant messages originating from Qt Widgets Designer.
[1]: https://lists.qt-project.org/listinfo/localization
diff --git a/share/qtcreator/translations/qtcreator_cs.ts b/share/qtcreator/translations/qtcreator_cs.ts
index 94bbf49d0b..23d62545e1 100644
--- a/share/qtcreator/translations/qtcreator_cs.ts
+++ b/share/qtcreator/translations/qtcreator_cs.ts
@@ -764,7 +764,7 @@
<translation type="obsolete">Automaticky vkládat středníky a uzavírající závorky, kulaté závorky, složené závorky a uvozovky, když je to vhodné.</translation>
</message>
<message>
- <source>&amp;Automatically insert matching characters</source>
+ <source>&amp;Automatically Insert Matching Characters</source>
<translation type="obsolete">&amp;Automaticky vložit odpovídající znaky</translation>
</message>
<message>
@@ -2008,7 +2008,7 @@ Chcete je nechat přepsat?</translation>
<translation>Když je to vhodné, automaticky vkládat středníky a uzavírající závorky, kulaté závorky, složené závorky a uvozovky.</translation>
</message>
<message>
- <source>&amp;Automatically insert matching characters</source>
+ <source>&amp;Automatically Insert Matching Characters</source>
<translation>&amp;Automaticky vložit odpovídající znaky</translation>
</message>
<message>
@@ -4278,8 +4278,8 @@ Rebuilding the project might help.</source>
Zkuste projekt vytvořit znovu.</translation>
</message>
<message>
- <source>Qt Designer Form Class</source>
- <translation>Třída formuláře programu Qt Designer</translation>
+ <source>Qt Widgets Designer Form Class</source>
+ <translation>Třída formuláře programu Qt Widgets Designer</translation>
</message>
<message>
<source>Form Template</source>
@@ -4326,8 +4326,8 @@ Zkuste projekt vytvořit znovu.</translation>
<translation>Shift+F4</translation>
</message>
<message>
- <source>Qt Designer Form</source>
- <translation>Formulář programu Qt Designer</translation>
+ <source>Qt Widgets Designer Form</source>
+ <translation>Formulář programu Qt Widgets Designer</translation>
</message>
<message>
<source>Creates a Qt Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic.</source>
@@ -4458,8 +4458,8 @@ Zkuste projekt vytvořit znovu.</translation>
<translation>Alt+Shift+R</translation>
</message>
<message>
- <source>About Qt Designer Plugins...</source>
- <translation>O přídavných modulech programu Qt Designer...</translation>
+ <source>About Qt Widgets Designer Plugins...</source>
+ <translation>O přídavných modulech programu Qt Widgets Designer...</translation>
</message>
<message>
<source>Views</source>
@@ -10752,8 +10752,8 @@ Vybere pro sestavení programu verzi Qt pro stolní počítač, je-li dostupná.
<translation>Tento průvodce vytvoří projekt konzolové aplikace v Qt4. Aplikace je odvozena z QCoreApplication a nemá žádné uživatelské rozhraní.</translation>
</message>
<message>
- <source>Qt Designer is not responding (%1).</source>
- <translation>Qt Designer neodpovídá (%1).</translation>
+ <source>Qt Widgets Designer is not responding (%1).</source>
+ <translation>Qt Widgets Designer neodpovídá (%1).</translation>
</message>
<message>
<source>Unable to create server socket: %1</source>
@@ -16025,8 +16025,8 @@ Toho se dosáhne vložením této zkratky v zadávacím poli vyhledávače, nás
<translation type="obsolete">Editor .qmlproject</translation>
</message>
<message>
- <source>Qt Designer</source>
- <translation>Qt Designer</translation>
+ <source>Qt Widgets Designer</source>
+ <translation>Qt Widgets Designer</translation>
</message>
<message>
<source>Qt Linguist</source>
@@ -17504,7 +17504,7 @@ Důvod: %2</translation>
</message>
<message>
<source>Qt Custom Designer Widget</source>
- <translation>Uživatelsky stanovený prvek pro Qt Designer</translation>
+ <translation>Uživatelsky stanovený prvek pro Qt Widgets Designer</translation>
</message>
<message>
<source>Creates a Qt Custom Designer Widget or a Custom Widget Collection.</source>
@@ -40550,7 +40550,7 @@ Určuje chování odsazení se zřetelem k navazujícím řádkům.
<translation>Nastavit znovu</translation>
</message>
<message>
- <source>Scanning scope</source>
+ <source>Scanning Scope</source>
<translation>Oblast prohledávání</translation>
</message>
<message>
diff --git a/share/qtcreator/translations/qtcreator_da.ts b/share/qtcreator/translations/qtcreator_da.ts
index 43f2146846..53c0246ee3 100644
--- a/share/qtcreator/translations/qtcreator_da.ts
+++ b/share/qtcreator/translations/qtcreator_da.ts
@@ -338,12 +338,12 @@ Minimum API-niveauet krævet af kittet er %1.</translation>
</translation>
</message>
<message>
- <source>
-Uninstalling the installed package may solve the issue.
-Do you want to uninstall the existing package?</source>
- <translation>
-Afinstallation af den installerede pakke løser måske problemstillingen.
-Vil du afinstallere den eksisterende pakke?</translation>
+ <source>Uninstalling the installed package may solve the issue.</source>
+ <translation>Afinstallation af den installerede pakke løser måske problemstillingen.</translation>
+ </message>
+ <message>
+ <source>Do you want to uninstall the existing package?</source>
+ <translation>Vil du afinstallere den eksisterende pakke?</translation>
</message>
<message>
<source>Install failed</source>
@@ -13547,8 +13547,8 @@ Det hjælper måske at genbygge projektet.</translation>
<translation>Designer</translation>
</message>
<message>
- <source>Qt Designer Form Class</source>
- <translation>Qt Designer-udformningsklasse</translation>
+ <source>Qt Widgets Designer Form Class</source>
+ <translation>Qt Widgets Designer-udformningsklasse</translation>
</message>
<message>
<source>Choose a Class Name</source>
@@ -13571,8 +13571,8 @@ Det hjælper måske at genbygge projektet.</translation>
<translation>Skift kilde/udformning</translation>
</message>
<message>
- <source>Creates a Qt Designer form along with a matching class (C++ header and source file) for implementation purposes. You can add the form and class to an existing Qt Widget Project.</source>
- <translation>Opretter en Qt Designer-udformning sammen med en matchende klasse (C++-header og kildefil) til implementeringsformål. Du kan tilføje udformningen og klassen til et eksisterende Qt widget-projekt.</translation>
+ <source>Creates a Qt Widgets Designer form along with a matching class (C++ header and source file) for implementation purposes. You can add the form and class to an existing Qt Widget Project.</source>
+ <translation>Opretter en Qt Widgets Designer-udformning sammen med en matchende klasse (C++-header og kildefil) til implementeringsformål. Du kan tilføje udformningen og klassen til et eksisterende Qt widget-projekt.</translation>
</message>
<message>
<source>For&amp;m Editor</source>
@@ -14990,8 +14990,8 @@ når de ikke kræves, hvilket i de fleste tilfælde vil forbedre ydelsen.</trans
<translation>Alt+Skift+R</translation>
</message>
<message>
- <source>About Qt Designer Plugins...</source>
- <translation>Om Qt Designer-plugins...</translation>
+ <source>About Qt Widgets Designer Plugins...</source>
+ <translation>Om Qt Widgets Designer-plugins...</translation>
</message>
<message>
<source>Preview in</source>
@@ -19970,8 +19970,8 @@ Fejl: %5</translation>
<translation>Python-redigering</translation>
</message>
<message>
- <source>Qt Designer</source>
- <translation>Qt Designer</translation>
+ <source>Qt Widgets Designer</source>
+ <translation>Qt Widgets Designer</translation>
</message>
<message>
<source>Qt Linguist</source>
@@ -23386,12 +23386,12 @@ til projektet &quot;%2&quot;.</translation>
<translation>Udformningsskabelon</translation>
</message>
<message>
- <source>Creates a Qt Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic.</source>
- <translation>Opretter en Qt Designer-udformning som du kan tilføje til et Qt widget-projekt. Dette er nyttigt hvis du allerede har en eksisterende klasse til brugerflade travlhedslogik.</translation>
+ <source>Creates a Qt Widgets Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic.</source>
+ <translation>Opretter en Qt Widgets Designer-udformning som du kan tilføje til et Qt widget-projekt. Dette er nyttigt hvis du allerede har en eksisterende klasse til brugerflade travlhedslogik.</translation>
</message>
<message>
- <source>Qt Designer Form</source>
- <translation>Qt Designer-udformning</translation>
+ <source>Qt Widgets Designer Form</source>
+ <translation>Qt Widgets Designer-udformning</translation>
</message>
<message>
<source>Creates a Java file with boilerplate code.</source>
@@ -24002,52 +24002,36 @@ Brug det kun hvis du prototyper. Du kan ikke oprette et fuldt program med dette.
<translation>Page med typeId&apos;et &quot;%1&quot; har ugyldigt &quot;index&quot;.</translation>
</message>
<message>
- <source>Path &quot;%1&quot; does not exist when checking Json wizard search paths.
-</source>
- <translation>Stien &quot;%1&quot; findes ikke under tjek af Json-assistentens søgestier.
-</translation>
+ <source>Path &quot;%1&quot; does not exist when checking JSON wizard search paths.</source>
+ <translation>Stien &quot;%1&quot; findes ikke under tjek af JSON-assistentens søgestier.</translation>
</message>
<message>
- <source>Checking &quot;%1&quot; for %2.
-</source>
- <translation>Tjekker &quot;%1&quot; for %2.
-</translation>
+ <source>Checking &quot;%1&quot; for %2.</source>
+ <translation>Tjekker &quot;%1&quot; for %2.</translation>
</message>
<message>
- <source>* Failed to parse &quot;%1&quot;:%2:%3: %4
-</source>
- <translation>* Kunne ikke parse &quot;%1&quot;:%2:%3: %4
-</translation>
+ <source>* Failed to parse &quot;%1&quot;:%2:%3: %4</source>
+ <translation>* Kunne ikke parse &quot;%1&quot;:%2:%3: %4</translation>
</message>
<message>
- <source>* Did not find a JSON object in &quot;%1&quot;.
-</source>
- <translation>* Fandt ikke et JSON-objekt i &quot;%1&quot;.
-</translation>
+ <source>* Did not find a JSON object in &quot;%1&quot;.</source>
+ <translation>* Fandt ikke et JSON-objekt i &quot;%1&quot;.</translation>
</message>
<message>
- <source>* Configuration found and parsed.
-</source>
- <translation>* Konfiguration fundet og parset.
-</translation>
+ <source>* Configuration found and parsed.</source>
+ <translation>* Konfiguration fundet og parset.</translation>
</message>
<message>
- <source>* Version %1 not supported.
-</source>
- <translation>* Version %1 understøttes ikke.
-</translation>
+ <source>* Version %1 not supported.</source>
+ <translation>* Version %1 understøttes ikke.</translation>
</message>
<message>
- <source>* Failed to create: %1
-</source>
- <translation>* Kunne ikke oprette: %1
-</translation>
+ <source>* Failed to create: %1</source>
+ <translation>* Kunne ikke oprette: %1</translation>
</message>
<message>
- <source>JsonWizard: &quot;%1&quot; not found
-</source>
- <translation>JsonWizard: &quot;%1&quot; ikke fundet
-</translation>
+ <source>JsonWizard: &quot;%1&quot; not found.</source>
+ <translation>JsonWizard: &quot;%1&quot; ikke fundet.</translation>
</message>
<message>
<source>key not found.</source>
@@ -26282,12 +26266,12 @@ Opdater venligst dit kit eller vælg en mkspec for qmake som matcher dit mål-mi
<translation>Opretter et Qt brugerdefineret Designer-widget eller en brugerdefineret widget-samling.</translation>
</message>
<message>
- <source>This wizard generates a Qt Designer Custom Widget or a Qt Designer Custom Widget Collection project.</source>
- <translation>Denne assistent genererer en Qt Designer brugerdefineret widget eller et Qt Designer brugerdefineret widget-samling-projekt.</translation>
+ <source>This wizard generates a Qt Widgets Designer Custom Widget or a Qt Widgets Designer Custom Widget Collection project.</source>
+ <translation>Denne assistent genererer en Qt Widgets Designer brugerdefineret widget eller et Qt Widgets Designer brugerdefineret widget-samling-projekt.</translation>
</message>
<message>
- <source>Qt Designer is not responding (%1).</source>
- <translation>Qt Designer svarer ikke (%1).</translation>
+ <source>Qt Widgets Designer is not responding (%1).</source>
+ <translation>Qt Widgets Designer svarer ikke (%1).</translation>
</message>
<message>
<source>Unable to create server socket: %1</source>
@@ -26358,10 +26342,10 @@ Opdater venligst dit kit eller vælg en mkspec for qmake som matcher dit mål-mi
<translation>Qt widgets-program</translation>
</message>
<message>
- <source>Creates a Qt application for the desktop. Includes a Qt Designer-based main window.
+ <source>Creates a Qt application for the desktop. Includes a Qt Widgets Designer-based main window.
Preselects a desktop Qt for building the application if available.</source>
- <translation>Opretter et Qt-program til desktop. Inkluderer et Qt Designer-baseret hovedvindue.
+ <translation>Opretter et Qt-program til desktop. Inkluderer et Qt Widgets Designer-baseret hovedvindue.
Prævælger en desktop Qt til bygning af programmet, hvis tilgængeligt.</translation>
</message>
@@ -33820,7 +33804,7 @@ Derudover indsætter Skift+Enter et undvigetegn ved markørens placering og flyt
<translation>Opdel strenge automatisk</translation>
</message>
<message>
- <source>&amp;Automatically insert matching characters</source>
+ <source>&amp;Automatically Insert Matching Characters</source>
<translation>&amp;Indsæt automatisk matchende tegn</translation>
</message>
<message>
@@ -34000,7 +33984,7 @@ Derudover indsætter Skift+Enter et undvigetegn ved markørens placering og flyt
<translation>Justeret til højre side</translation>
</message>
<message>
- <source>Line annotations</source>
+ <source>Line Annotations</source>
<translation>Linjeannotationer</translation>
</message>
<message>
@@ -35607,7 +35591,7 @@ Vil blive anvendt på blanktegn i kommentarer og strenge.</translation>
<translation>Nulstil</translation>
</message>
<message>
- <source>Scanning scope</source>
+ <source>Scanning Scope</source>
<translation>Skanningsområde</translation>
</message>
<message>
diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts
index 2fbbc514c4..3dc80d58d9 100644
--- a/share/qtcreator/translations/qtcreator_de.ts
+++ b/share/qtcreator/translations/qtcreator_de.ts
@@ -110,7 +110,7 @@
</message>
<message>
<source>Frequently used signals</source>
- <translation>Häufig benutzte Signale</translation>
+ <translation>Häufig verwendete Signale</translation>
</message>
<message>
<source>Property changes</source>
@@ -140,7 +140,7 @@
<translation>Erweitert</translation>
</message>
<message>
- <source>Toggles if the smoothing is performed using linear interpolation method. Keeping it unchecked would follow non-smooth method using nearest neighbor. It is mostly applicable on image based items. </source>
+ <source>Toggles if the smoothing is performed using linear interpolation method. Keeping it unchecked would follow non-smooth method using nearest neighbor. It is mostly applicable on image based items.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -7772,11 +7772,11 @@ Exporting assets: %2</source>
</message>
<message>
<source>If you select this radio button, Qt Quick Designer always uses the QML emulation layer (QML Puppet) located at the following path.</source>
- <translation>Wenn Sie diesen Radiobutton auswählen, benutzt der Qt Quick Designer immer die QML-Emulationsschicht (QML Puppet) im folgenden Pfad.</translation>
+ <translation>Wenn Sie diesen Radiobutton auswählen, verwendet der Qt Quick Designer immer die QML-Emulationsschicht (QML Puppet) im folgenden Pfad.</translation>
</message>
<message>
<source>Use fallback QML emulation layer</source>
- <translation>Fallback QML-Emulationsschicht benutzen</translation>
+ <translation>Fallback QML-Emulationsschicht verwenden</translation>
</message>
<message>
<source>Path:</source>
@@ -7840,7 +7840,7 @@ Exporting assets: %2</source>
</message>
<message>
<source>Warn about using .qml files instead of .ui.qml files</source>
- <translation>Bei der Benutzung von .qml-Dateien statt .ui.qml-Dateien warnen</translation>
+ <translation>Bei der Verwendung von .qml-Dateien statt .ui.qml-Dateien warnen</translation>
</message>
<message>
<source>Width:</source>
@@ -7856,7 +7856,7 @@ Exporting assets: %2</source>
</message>
<message>
<source>Use QML emulation layer that is built with the selected Qt</source>
- <translation>Mit dem gewählten Qt erstellte QML-Emulationsschicht benutzen</translation>
+ <translation>Mit dem gewählten Qt erstellte QML-Emulationsschicht verwenden</translation>
</message>
<message>
<source>qsTranslate()</source>
@@ -8393,7 +8393,7 @@ Locked components cannot be modified or selected.</source>
</message>
<message>
<source>Do not show this dialog again</source>
- <translation>Diesen Dialog nicht noch einmal anzeigen</translation>
+ <translation>Diesen Dialog nicht erneut anzeigen</translation>
</message>
<message>
<source>Cancel</source>
@@ -9544,7 +9544,7 @@ Locked components cannot be modified or selected.</source>
</message>
<message>
<source>Edit</source>
- <translation>Editieren</translation>
+ <translation>Bearbeiten</translation>
</message>
<message>
<source>Anchors</source>
@@ -10360,7 +10360,7 @@ Locked components cannot be modified or selected.</source>
</message>
<message>
<source>Retype password:</source>
- <translation>Passwort noch einmal eingeben:</translation>
+ <translation>Passwort erneut eingeben:</translation>
</message>
<message>
<source>Show password</source>
@@ -10495,7 +10495,7 @@ Locked components cannot be modified or selected.</source>
<translation>Pfad des JDK existiert und ist schreibbar.</translation>
</message>
<message>
- <source>Android OpenSSL settings (Optional)</source>
+ <source>Android OpenSSL Settings (Optional)</source>
<translation>OpenSSL-Einstellungen für Android (optional)</translation>
</message>
<message>
@@ -10612,23 +10612,23 @@ Locked components cannot be modified or selected.</source>
</message>
<message>
<source>The selected path does not exist or is not readable.</source>
- <translation type="unfinished"></translation>
+ <translation>Der ausgewählte Pfad existiert nicht oder ist nicht lesbar.</translation>
</message>
<message>
<source>Could not find &quot;%1&quot; in the selected path.</source>
- <translation type="unfinished"></translation>
+ <translation>&quot;%1&quot; konnte im ausgewählten Pfad nicht gefunden werden.</translation>
</message>
<message>
<source>The selected path does not contain a valid JDK. (%1 failed: %2)</source>
- <translation type="unfinished"></translation>
+ <translation>Der ausgewählte Pfad enthält kein gültiges JDK. (%1 ist fehlgeschlagen: %2)</translation>
</message>
<message>
<source>Unexpected output from &quot;%1&quot;: %2</source>
- <translation type="unfinished"></translation>
+ <translation>Unerwartete Ausgabe von &quot;%1&quot;: %2</translation>
</message>
<message>
<source>Unsupported JDK version (needs to be %1): %2 (parsed: %3)</source>
- <translation type="unfinished"></translation>
+ <translation>JDK-Version wird nicht unterstützt (muss %1 sein): %2 (erkannt: %3)</translation>
</message>
<message>
<source>OpenSSL path exists.</source>
@@ -10763,7 +10763,7 @@ in the system&apos;s browser for manual download.</source>
Diese Bibliotheken können mit Ihrer Anwendung weitergegeben werden, falls
diese SSL-Funktionen verwendet. Sie finden eine Checkbox unter &quot;Projekte &gt; Erstellen &gt;
Schritte zum Erstellen &gt; Android-APK erstellen &gt; Zusätzliche Bibliotheken&quot;.
-Falls das automatische Herunterladen scheitert, wird Qt Creator vorschlagen, die URL zum
+Falls das automatische Herunterladen fehlschlägt, wird Qt Creator vorschlagen, die URL zum
manuellen Herunterladen im Browser des System zu öffnen.</translation>
</message>
<message>
@@ -11148,11 +11148,11 @@ Dies kann nicht rückgängig gemacht werden.</translation>
</message>
<message>
<source>Package deploy: Failed to pull &quot;%1&quot; to &quot;%2&quot;.</source>
- <translation>Paket-Deployment: &quot;pull&quot; von &quot;%1&quot; nach &quot;%2&quot; scheiterte.</translation>
+ <translation>Paket-Deployment: &quot;pull&quot; von &quot;%1&quot; nach &quot;%2&quot; ist fehlgeschlagen.</translation>
</message>
<message>
<source>Install failed</source>
- <translation>Installation gescheitert</translation>
+ <translation>Installation fehlgeschlagen</translation>
</message>
<message>
<source>Android package (*.apk)</source>
@@ -11240,17 +11240,17 @@ Das Kit unterstützt &quot;%2&quot;, aber das Gerät verwendet &quot;%3&quot;.</
<source>Deployment failed with the following errors:
</source>
- <translation>Das Deployment ist mit den folgenden Fehlern gescheitert:
+ <translation>Das Deployment ist mit den folgenden Fehlern fehlgeschlagen:
</translation>
</message>
<message>
- <source>
-Uninstalling the installed package may solve the issue.
-Do you want to uninstall the existing package?</source>
- <translation>
-Das installierte Paket zu deinstallieren könnte das Problem lösen.
-Möchten Sie das vorhandene Paket deinstallieren?</translation>
+ <source>Uninstalling the installed package may solve the issue.</source>
+ <translation>Das installierte Paket zu deinstallieren könnte das Problem lösen.</translation>
+ </message>
+ <message>
+ <source>Do you want to uninstall the existing package?</source>
+ <translation>Möchten Sie das vorhandene Paket deinstallieren?</translation>
</message>
<message>
<source>The deployment AVD &quot;%1&quot; cannot be started.</source>
@@ -11365,7 +11365,7 @@ Der vom Kit mindestens benötigte API-Level ist %1.</translation>
<message>
<source>Android package installation failed.
%1</source>
- <translation>Android-Paketinstallation gescheitert.
+ <translation>Android-Paketinstallation fehlgeschlagen.
%1</translation>
</message>
<message>
@@ -11639,7 +11639,7 @@ Breche ausstehende Operationen ab...
</message>
<message>
<source>The operation requires user interaction. Use the &quot;sdkmanager&quot; command-line tool.</source>
- <translation>Die Operation benötigt Benutzereingaben. Benutzen Sie das Kommandozeilenwerkzeug &quot;sdkmanager&quot;.</translation>
+ <translation>Die Operation benötigt Benutzereingaben. Verwenden Sie das Kommandozeilenwerkzeug &quot;sdkmanager&quot;.</translation>
</message>
<message>
<source>License command failed.</source>
@@ -12131,7 +12131,7 @@ Rufen Sie QtAndroid::hideSplashScreen() auf, um einen Startbildschirm zu verstec
</message>
<message>
<source>Select master image to use.</source>
- <translation>Wählen Sie das zu benutzende Hauptbild aus.</translation>
+ <translation>Wählen Sie das zu verwendende Hauptbild aus.</translation>
</message>
<message>
<source>Master image:</source>
@@ -12181,7 +12181,7 @@ Rufen Sie QtAndroid::hideSplashScreen() auf, um einen Startbildschirm zu verstec
<source>An image is used for the splashscreen. Qt Creator manages
splashscreen by using a different method which requires changing
the manifest file by overriding your settings. Allow override?</source>
- <translation>Für den Startbildschirm wird ein Bild benutzt. Qt Creator verwaltet
+ <translation>Für den Startbildschirm wird ein Bild verwendet. Qt Creator verwaltet
Startbildschirme auf andere Weise, was eine Änderung der Manifest-Datei
und das Überschreiben Ihrer Einstellungen erfordert. Das Überschreiben erlauben?</translation>
</message>
@@ -12294,7 +12294,7 @@ und das Überschreiben Ihrer Einstellungen erfordert. Das Überschreiben erlaube
</message>
<message>
<source>Using: %1.</source>
- <translation>Benutze: %1.</translation>
+ <translation>Verwende: %1.</translation>
</message>
<message>
<source>Cannot debug: Only QML and native applications are supported.</source>
@@ -12353,7 +12353,7 @@ und das Überschreiben Ihrer Einstellungen erfordert. Das Überschreiben erlaube
</message>
<message>
<source>Number of worker threads used when scanning for tests.</source>
- <translation>Anzahl der Threads, die zum Suchen nach Tests benutzt werden.</translation>
+ <translation>Anzahl der Threads, die zum Suchen nach Tests verwendet werden.</translation>
</message>
<message>
<source>Omit run configuration warnings</source>
@@ -12365,7 +12365,7 @@ und das Überschreiben Ihrer Einstellungen erfordert. Das Überschreiben erlaube
</message>
<message>
<source>Limit result description:</source>
- <translation>Beschreibung der Resultate begrenzen:</translation>
+ <translation>Beschreibung der Ergebnisse begrenzen:</translation>
</message>
<message>
<source>Limit number of lines shown in test result tooltip and description.</source>
@@ -12397,7 +12397,7 @@ und das Überschreiben Ihrer Einstellungen erfordert. Das Überschreiben erlaube
</message>
<message>
<source>Timeout used when executing each test case.</source>
- <translation>Zeitlimit für jeden Testfall benutzen.</translation>
+ <translation>Zeitlimit, das während der Ausführung für jeden Testfall verwendet wird.</translation>
</message>
<message>
<source>Scan threads:</source>
@@ -12483,7 +12483,7 @@ Warnung: Dies ist eine experimentelle Funktion und könnte dazu führen, dass di
</message>
<message>
<source>Only for unsuccessful test runs</source>
- <translation>Nur bei gescheiterten Tests</translation>
+ <translation>Nur bei fehlgeschlagenen Tests</translation>
</message>
<message>
<source>Automatically run</source>
@@ -12617,7 +12617,7 @@ Warnung: Dies ist eine experimentelle Funktion und könnte dazu führen, dass di
<source>Running tests failed.
%1
Executable: %2</source>
- <translation>Ausführung von Tests gescheitert.
+ <translation>Ausführung von Tests fehlgeschlagen.
%1
Ausführbare Datei: %2</translation>
</message>
@@ -12659,7 +12659,7 @@ Ausführbare Datei: %2</translation>
</message>
<message>
<source>Expected Fail</source>
- <translation>Erwartetes Scheitern</translation>
+ <translation>Erwartetes Fehlschlagen</translation>
</message>
<message>
<source>Unexpected Pass</source>
@@ -12873,7 +12873,7 @@ Dies könnte Probleme während der Ausführung verursachen.
</message>
<message>
<source>Unable to display test results when using CDB.</source>
- <translation>Wenn CDB benutzt wird, können keine Testergebnisse angezeigt werden.</translation>
+ <translation>Wenn CDB verwendet wird, können keine Testergebnisse angezeigt werden.</translation>
</message>
<message>
<source>Build failed. Canceling test run.</source>
@@ -12929,11 +12929,11 @@ Dies könnte Probleme während der Ausführung verursachen.
</message>
<message>
<source>Number of resamples used for statistical bootstrapping.</source>
- <translation>Anzahl der für statistisches Bootstrapping benutzten Resamples.</translation>
+ <translation>Anzahl der für statistisches Bootstrapping verwendeten Resamples.</translation>
</message>
<message>
<source>Confidence interval used for statistical bootstrapping.</source>
- <translation>Für das statistische Bootstrapping benutzte Konfidenzinterval.</translation>
+ <translation>Konfidenzinterval, das für statistisches Bootstrapping verwendet wird.</translation>
</message>
<message>
<source>Benchmark confidence interval</source>
@@ -13108,7 +13108,7 @@ Dies könnte Probleme während der Ausführung verursachen.
<translation>Tests wiederholen</translation>
</message>
<message>
- <source>Run in parallel</source>
+ <source>Run in Parallel</source>
<translation>Parallel ausführen</translation>
</message>
<message>
@@ -13125,7 +13125,7 @@ Dies könnte Probleme während der Ausführung verursachen.
</message>
<message>
<source>A seed of 0 means no randomization. A value of 1 uses the current time, any other value is used as random seed generator.</source>
- <translation>Ein Startwert von 0 bedeutet keine Randomisierung. Ein Wert von 1 benutzt die aktuelle Zeit, jeder andere Wert wird als Startwert für Zufallszahlen benutzt.</translation>
+ <translation>Ein Startwert von 0 bedeutet keine Randomisierung. Ein Wert von 1 verwendet die aktuelle Zeit, jeder andere Wert wird als Startwert für Zufallszahlen verwendet.</translation>
</message>
<message>
<source>Randomize</source>
@@ -13247,7 +13247,7 @@ Weitere Informationen über GTest-Filter finden Sie in der Dokumenation von Goog
</message>
<message>
<source>Uses tick counter when executing benchmarks.</source>
- <translation>Den Tickzähler bei der Benchmarkausführung benutzen.</translation>
+ <translation>Den Tickzähler bei der Benchmarkausführung verwenden.</translation>
</message>
<message>
<source>Tick counter</source>
@@ -13255,7 +13255,7 @@ Weitere Informationen über GTest-Filter finden Sie in der Dokumenation von Goog
</message>
<message>
<source>Uses event counter when executing benchmarks.</source>
- <translation>Ereigniszähler bei der Benchmarkausführung benutzen.</translation>
+ <translation>Ereigniszähler bei der Benchmarkausführung verwenden.</translation>
</message>
<message>
<source>Event counter</source>
@@ -13263,15 +13263,15 @@ Weitere Informationen über GTest-Filter finden Sie in der Dokumenation von Goog
</message>
<message>
<source>Uses Valgrind Callgrind when executing benchmarks (it must be installed).</source>
- <translation>&quot;Valgrind Callgrind&quot; zur Benchmarkausführung benutzen (dazu muss es installiert sein).</translation>
+ <translation>&quot;Valgrind Callgrind&quot; zur Benchmarkausführung verwenden (dazu muss es installiert sein).</translation>
</message>
<message>
<source>Find user-defined locations</source>
- <translation type="unfinished"></translation>
+ <translation>Benutzerdefinierte Positionen finden</translation>
</message>
<message>
<source>Parse messages for the following pattern and use it as location information:&lt;pre&gt;file://filepath:line&lt;/pre&gt;where &quot;:line&quot; is optional.&lt;p&gt;Warning: If the patterns are used in code, the location information for debug messages and other messages might improve,at the risk of some incorrect locations and lower performance.</source>
- <translation type="unfinished"></translation>
+ <translation>Wertet Nachrichten nach den folgenden Mustern aus und verwendet sie als Positionsinformation:&lt;pre&gt;file://dateipfad:zeile&lt;/pre&gt;wobei &quot;:zeile&quot; optional ist.&lt;p&gt;Achtung: Wenn diese Muster im Code verwendet werden, können sich die Positionsinformationen für Debug- und andere Nachrichten verbessern, es besteht aber die Gefahr falscher Positionen und verringerter Leistung.</translation>
</message>
<message>
<source>Callgrind</source>
@@ -13279,7 +13279,7 @@ Weitere Informationen über GTest-Filter finden Sie in der Dokumenation von Goog
</message>
<message>
<source>Uses Perf when executing benchmarks (it must be installed).</source>
- <translation>&quot;Perf&quot; zur Benchmarkausführung benutzen (dazu muss es installiert sein).</translation>
+ <translation>&quot;Perf&quot; zur Benchmarkausführung verwenden (dazu muss es installiert sein).</translation>
</message>
<message>
<source>Perf</source>
@@ -13387,7 +13387,7 @@ Weitere Informationen über GTest-Filter finden Sie in der Dokumenation von Goog
</message>
<message>
<source>Run Test Under Cursor</source>
- <translation>Test unter Cursor ausführen</translation>
+ <translation>Test unter Einfügemarke ausführen</translation>
</message>
<message>
<source>&amp;Run Test</source>
@@ -13636,11 +13636,11 @@ Siehe auch die Einstellungen für Google Test.</translation>
</message>
<message>
<source>Locate Qt Test data tags</source>
- <translation type="unfinished"></translation>
+ <translation>Qt Test Data Tags finden</translation>
</message>
<message>
<source>Locates Qt Test data tags found inside the active project.</source>
- <translation type="unfinished"></translation>
+ <translation>Findet Qt Test Data Tags im aktiven Projekt.</translation>
</message>
</context>
<context>
@@ -14038,7 +14038,7 @@ Wollen Sie &quot;%1&quot; mit der Standardanwendung öffnen?</translation>
</message>
<message>
<source>Use GDB target extended-remote</source>
- <translation>GDB &quot;target extended-remote&quot; benutzen</translation>
+ <translation>GDB &quot;target extended-remote&quot; verwenden</translation>
</message>
<message>
<source>Extended mode:</source>
@@ -14101,13 +14101,13 @@ Wollen Sie &quot;%1&quot; mit der Standardanwendung öffnen?</translation>
<source>GDB compatible provider engine
(used together with the GDB debuggers).</source>
<translation>GDB-kompatible Provider-Engine
-(wird zusammen mit GDB-Debuggern benutzt).</translation>
+(wird zusammen mit GDB-Debuggern verwendet).</translation>
</message>
<message>
<source>UVSC compatible provider engine
(used together with the KEIL uVision).</source>
<translation>UVSC-kompatible Provider-Engine
-(wird zusammen mit KEIL uVision benutzt).</translation>
+(wird zusammen mit KEIL uVision verwendet).</translation>
</message>
<message>
<source>Name</source>
@@ -14127,7 +14127,7 @@ Wollen Sie &quot;%1&quot; mit der Standardanwendung öffnen?</translation>
</message>
<message>
<source>The following providers were already configured:&lt;br&gt;&amp;nbsp;%1&lt;br&gt;They were not configured again.</source>
- <translation>Die folgenden Provider wurden bereits konfiguriert:&lt;br&gt;&amp;nbsp;%1&lt;br&gt;Sie wurden nicht noch einmal konfiguriert.</translation>
+ <translation>Die folgenden Provider wurden bereits konfiguriert:&lt;br&gt;&amp;nbsp;%1&lt;br&gt;Sie wurden nicht erneut konfiguriert.</translation>
</message>
<message>
<source>Add</source>
@@ -14199,7 +14199,7 @@ Wollen Sie &quot;%1&quot; mit der Standardanwendung öffnen?</translation>
</message>
<message>
<source>Do not use EBlink flash cache.</source>
- <translation>EBlink-Flash-Cache nicht benutzen.</translation>
+ <translation>EBlink-Flash-Cache nicht verwenden.</translation>
</message>
<message>
<source>Disable cache:</source>
@@ -14636,15 +14636,15 @@ Lokale Commits werden nicht zum Master-Branch gepusht, bis ein normaler Commit e
</message>
<message>
<source>User</source>
- <translation>Nutzer</translation>
+ <translation>Benutzer</translation>
</message>
<message>
<source>Username to use by default on commit.</source>
- <translation>Nutzername für Commit.</translation>
+ <translation>Benutzername für Commit.</translation>
</message>
<message>
<source>Default username:</source>
- <translation>Vorgabe für Nutzernamen:</translation>
+ <translation>Vorgabe für Benutzernamen:</translation>
</message>
<message>
<source>Email to use by default on commit.</source>
@@ -15559,7 +15559,7 @@ Zum Beispiel bewirkt die Angabe &quot;Revision: 15&quot; dass der Branch auf Rev
</message>
<message>
<source>Enter one CMake &lt;a href=&quot;variable&quot;&gt;variable&lt;/a&gt; per line.&lt;br/&gt;To set or change a variable, use -D&amp;lt;variable&amp;gt;:&amp;lt;type&amp;gt;=&amp;lt;value&amp;gt;.&lt;br/&gt;&amp;lt;type&amp;gt; can have one of the following values: FILEPATH, PATH, BOOL, INTERNAL, or STRING.&lt;br/&gt;To unset a variable, use -U&amp;lt;variable&amp;gt;.&lt;br/&gt;</source>
- <translation>Geben Sie eine CMake-&lt;a href=&quot;variable&quot;&gt;Variable&lt;/a&gt; pro Zeile ein.&lt;br/&gt;Um eine Variable zu setzen oder zu ändern, benutzen Sie -D&amp;lt;Variable&amp;gt;:&amp;lt;Typ&amp;gt;=&amp;lt;Wert&amp;gt;.&lt;br/&gt;&amp;lt;Typ&amp;gt; kann einer der folgenden Werte sein: FILEPATH, PATH, BOOL, INTERNAL oder STRING.&lt;br/&gt;Um eine Variable zurückzusetzen, benutzen Sie -U&amp;lt;Variable&amp;gt;.&lt;br/&gt;</translation>
+ <translation>Geben Sie eine CMake-&lt;a href=&quot;variable&quot;&gt;Variable&lt;/a&gt; pro Zeile ein.&lt;br/&gt;Um eine Variable zu setzen oder zu ändern, verwenden Sie -D&amp;lt;Variable&amp;gt;:&amp;lt;Typ&amp;gt;=&amp;lt;Wert&amp;gt;.&lt;br/&gt;&amp;lt;Typ&amp;gt; kann einer der folgenden Werte sein: FILEPATH, PATH, BOOL, INTERNAL oder STRING.&lt;br/&gt;Um eine Variable zurückzusetzen, verwenden Sie -U&amp;lt;Variable&amp;gt;.&lt;br/&gt;</translation>
</message>
<message>
<source>Re-configure with Initial Parameters</source>
@@ -15967,7 +15967,7 @@ Zum Beispiel bewirkt die Angabe &quot;Revision: 15&quot; dass der Branch auf Rev
</message>
<message>
<source>Show subfolders inside source group folders</source>
- <translation>Unterverzeichnisse in Sourcegruppen anzeigen</translation>
+ <translation>Unterverzeichnisse in Quelltext-Gruppenverzeichnissen anzeigen</translation>
</message>
<message>
<source>Show advanced options by default</source>
@@ -15975,11 +15975,11 @@ Zum Beispiel bewirkt die Angabe &quot;Revision: 15&quot; dass der Branch auf Rev
</message>
<message>
<source>Use junctions for CMake configuration and build operations</source>
- <translation type="unfinished"></translation>
+ <translation>Junctions für die CMake-Konfiguration und das Erstellen verwenden</translation>
</message>
<message>
<source>Create and use junctions for the source and build directories to overcome issues with long paths on Windows.&lt;br&gt;&lt;br&gt;Junctions are stored under &lt;tt&gt;C:\ProgramData\QtCreator\Links&lt;/tt&gt; (overridable via the &lt;tt&gt;QTC_CMAKE_JUNCTIONS_DIR&lt;/tt&gt; environment variable).&lt;br&gt;&lt;br&gt;With &lt;tt&gt;QTC_CMAKE_JUNCTIONS_HASH_LENGTH&lt;/tt&gt;, you can shorten the MD5 hash key length to a value smaller than the default length value of 32.&lt;br&gt;&lt;br&gt;Junctions are used for CMake configure, build and install operations.</source>
- <translation type="unfinished"></translation>
+ <translation>Erstellt und verwendet Junctions für die Quell- und Build-Verzeichnisse, um Probleme mit langen Pfaden auf Windows zu umgehen.&lt;br&gt;&lt;br&gt;Junctions werden unter &lt;tt&gt;C:\ProgramData\QtCreator\Links&lt;/tt&gt; gespeichert (überschreibbar mit der Umgebungsvariable &lt;tt&gt;QTC_CMAKE_JUNCTIONS_DIR&lt;/tt&gt;).&lt;br&gt;&lt;br&gt;Sie können mit der Umgebungsvariable &lt;tt&gt;QTC_CMAKE_JUNCTIONS_HASH_LENGTH&lt;/tt&gt; die Länge des MD5-Hashschlüssels auf einen kleineren Wert als die Voreinstellung 32 verkürzen.&lt;br&gt;&lt;br&gt;Junctions werden für das Konfigurieren mit CMake, das Erstellen und die Installation verwendet.</translation>
</message>
<message>
<source>General</source>
@@ -16119,7 +16119,7 @@ Zum Beispiel bewirkt die Angabe &quot;Revision: 15&quot; dass der Branch auf Rev
</message>
<message>
<source>&lt;Use Default Generator&gt;</source>
- <translation>&lt;Benutze Standardgenerator&gt;</translation>
+ <translation>&lt;Verwende Standardgenerator&gt;</translation>
</message>
<message>
<source>Generator: %1&lt;br&gt;Extra generator: %2</source>
@@ -16147,7 +16147,7 @@ Zum Beispiel bewirkt die Angabe &quot;Revision: 15&quot; dass der Branch auf Rev
</message>
<message>
<source>Enter one CMake &lt;a href=&quot;variable&quot;&gt;variable&lt;/a&gt; per line.&lt;br/&gt;To set a variable, use -D&amp;lt;variable&amp;gt;:&amp;lt;type&amp;gt;=&amp;lt;value&amp;gt;.&lt;br/&gt;&amp;lt;type&amp;gt; can have one of the following values: FILEPATH, PATH, BOOL, INTERNAL, or STRING.</source>
- <translation>Geben Sie eine CMake-&lt;a href=&quot;variable&quot;&gt;Variable&lt;/a&gt; pro Zeile ein.&lt;br/&gt;Um eine Variable zu setzen, benutzen Sie -D&amp;lt;Variable&amp;gt;:&amp;lt;Typ&amp;gt;=&amp;lt;Wert&amp;gt;.&lt;br/&gt;&amp;lt;Typ&amp;gt; kann einer der folgenden Werte sein: FILEPATH, PATH, BOOL, INTERNAL oder STRING.</translation>
+ <translation>Geben Sie eine CMake-&lt;a href=&quot;variable&quot;&gt;Variable&lt;/a&gt; pro Zeile ein.&lt;br/&gt;Um eine Variable zu setzen, verwenden Sie -D&amp;lt;Variable&amp;gt;:&amp;lt;Typ&amp;gt;=&amp;lt;Wert&amp;gt;.&lt;br/&gt;&amp;lt;Typ&amp;gt; kann einer der folgenden Werte sein: FILEPATH, PATH, BOOL, INTERNAL oder STRING.</translation>
</message>
<message>
<source>CMake Configuration</source>
@@ -16942,8 +16942,8 @@ Stellen Sie sicher, dass der Wert der CMAKE_BUILD_TYPE-Variable derselbe wie der
<translation>Aktuelle ClangFormat-Version: %1.</translation>
</message>
<message>
- <source>Warning: </source>
- <translation>Warnung: </translation>
+ <source>Warning:</source>
+ <translation>Warnung:</translation>
</message>
<message>
<source>The current ClangFormat (C++ &gt; Code Style &gt; ClangFormat) settings are not valid. Are you sure you want to apply them?</source>
@@ -16981,7 +16981,7 @@ Das integrierte Codemodell übernimmt das Einrücken.</translation>
</message>
<message>
<source>Use built-in indenter</source>
- <translation>Integriertes Codemodell für das Einrücken benutzen</translation>
+ <translation>Integriertes Codemodell für das Einrücken verwenden</translation>
</message>
<message>
<source>Use global settings</source>
@@ -16989,11 +16989,11 @@ Das integrierte Codemodell übernimmt das Einrücken.</translation>
</message>
<message>
<source>Please note that the current project includes a .clang-format file, which will be used for code indenting and formatting.</source>
- <translation>Beachten Sie, dass das aktuelle Projekt eine .clang-format-Datei enthält, welche für das Einrücken und die Formatierung von Code benutzt werden wird.</translation>
+ <translation>Beachten Sie, dass das aktuelle Projekt eine .clang-format-Datei enthält, welche für das Einrücken und die Formatierung von Code verwendet werden wird.</translation>
</message>
<message>
- <source>ClangFormat settings:</source>
- <translation>Einstellungen für ClangFormat:</translation>
+ <source>ClangFormat Settings</source>
+ <translation>Einstellungen für ClangFormat</translation>
</message>
<message>
<source>Indenting only</source>
@@ -17009,7 +17009,7 @@ Das integrierte Codemodell übernimmt das Einrücken.</translation>
</message>
<message>
<source>When this option is enabled, ClangFormat will use a user-specified configuration from the widget below, instead of the project .clang-format file. You can customize the formatting options for your code by adjusting the settings in the widget. Note that any changes made there will only affect the current configuration, and will not modify the project .clang-format file.</source>
- <translation>Wenn diese Einstellung aktiviert ist, wird statt der .clang-format-Datei des Projekts die benutzerdefinierte Einstellung unten benutzt. Beachten Sie, dass die unten durchgeführten Einstellungen nur die aktuelle Konfiguration beeinflussen und die .clang-format-Datei des Projekts nicht verändert wird.</translation>
+ <translation>Wenn diese Einstellung aktiviert ist, wird statt der .clang-format-Datei des Projekts die benutzerdefinierte Einstellung unten verwendet. Beachten Sie, dass die unten durchgeführten Einstellungen nur die aktuelle Konfiguration beeinflussen und die .clang-format-Datei des Projekts nicht verändert wird.</translation>
</message>
<message>
<source>ClangFormat</source>
@@ -17266,7 +17266,7 @@ Setzen Sie erst eine gültige ausführbare Datei.</translation>
</message>
<message>
<source>Clang-Tidy and Clazy use a customized Clang executable from the Clang project to search for diagnostics.</source>
- <translation>Clang-Tidy und Clazy benutzen eine angepasste Version der Anwendung Clang vom Clang-Projekt, um nach Problemen zu suchen.</translation>
+ <translation>Clang-Tidy und Clazy verwenden eine angepasste Version der Anwendung Clang vom Clang-Projekt, um nach Problemen zu suchen.</translation>
</message>
<message>
<source>Release</source>
@@ -17278,11 +17278,11 @@ Setzen Sie erst eine gültige ausführbare Datei.</translation>
</message>
<message>
<source>You are trying to run the tool &quot;%1&quot; on an application in %2 mode. The tool is designed to be used in Debug mode since enabled assertions can reduce the number of false positives.</source>
- <translation>Sie versuchen das Werkzeug &quot;%1&quot; auf eine Applikation im %2-Modus anzuwenden. Das Werkzeug sollte im Debug-Modus benutzt werden, da eingeschaltete Assertions die Zahl der False-Positives verringern können.</translation>
+ <translation>Sie versuchen das Werkzeug &quot;%1&quot; auf eine Applikation im %2-Modus anzuwenden. Das Werkzeug sollte im Debug-Modus verwendet werden, da eingeschaltete Assertions die Zahl der False-Positives verringern können.</translation>
</message>
<message>
<source>Do you want to continue and run the tool in %1 mode?</source>
- <translation>Wollen Sie fortfahren und das Werkzeug im %1-Modus benutzen?</translation>
+ <translation>Wollen Sie fortfahren und das Werkzeug im %1-Modus verwenden?</translation>
</message>
<message>
<source>Analyze Project with %1...</source>
@@ -17338,7 +17338,7 @@ Setzen Sie erst eine gültige ausführbare Datei.</translation>
</message>
<message>
<source>Failed to start the analyzer.</source>
- <translation>Das Analyse-Werkzeug konnte nicht gestartet werden.</translation>
+ <translation>Das Analysewerkzeug konnte nicht gestartet werden.</translation>
</message>
<message>
<source>All Files</source>
@@ -18261,11 +18261,11 @@ Setzen Sie erst eine gültige ausführbare Datei.</translation>
</message>
<message>
<source>&amp;Username:</source>
- <translation>&amp;Nutzername:</translation>
+ <translation>&amp;Benutzername:</translation>
</message>
<message>
<source>&lt;Username&gt;</source>
- <translation>&lt;Nutzername&gt;</translation>
+ <translation>&lt;Benutzername&gt;</translation>
</message>
<message>
<source>&amp;Description:</source>
@@ -18293,7 +18293,7 @@ Setzen Sie erst eine gültige ausführbare Datei.</translation>
</message>
<message>
<source>Username:</source>
- <translation>Nutzername:</translation>
+ <translation>Benutzername:</translation>
</message>
<message>
<source>Default protocol:</source>
@@ -18331,7 +18331,7 @@ Setzen Sie erst eine gültige ausführbare Datei.</translation>
</message>
<message>
<source>Reset used libraries</source>
- <translation>Benutzte Bibliotheken zurücksetzen</translation>
+ <translation>Verwendete Bibliotheken zurücksetzen</translation>
</message>
<message>
<source>No libraries selected</source>
@@ -18371,7 +18371,7 @@ Setzen Sie erst eine gültige ausführbare Datei.</translation>
</message>
<message>
<source>No source code added yet. Add some using the button below.</source>
- <translation>Es wurde noch kein Quelltext hinzugefügt. Benutzen Sie die Schaltfläche unten, um einen Code-Editor hinzuzufügen.</translation>
+ <translation>Es wurde noch kein Quelltext hinzugefügt. Verwenden Sie die Schaltfläche unten, um einen Code-Editor hinzuzufügen.</translation>
</message>
<message>
<source>Add Source</source>
@@ -18447,7 +18447,7 @@ Setzen Sie erst eine gültige ausführbare Datei.</translation>
</message>
<message>
<source>URL of the Compiler Explorer instance to use.</source>
- <translation>URL der zu benutzenden Compiler Explorer-Instanz.</translation>
+ <translation>URL der zu verwendenden Compiler Explorer-Instanz.</translation>
</message>
</context>
<context>
@@ -18532,7 +18532,7 @@ Ansonsten müssen Sie den Pfad zur Datei %2 aus dem Copilot-Plugin für Neovim a
</message>
<message>
<source>Request Copilot suggestion at the current editor&apos;s cursor position.</source>
- <translation>Fordert Vorschläge für die Cursorposition des aktuellen Editors von Copilot an.</translation>
+ <translation>Fordert Vorschläge für die Einfügemarke des aktuellen Editors von Copilot an.</translation>
</message>
<message>
<source>Show Next Copilot Suggestion</source>
@@ -18580,7 +18580,7 @@ Ansonsten müssen Sie den Pfad zur Datei %2 aus dem Copilot-Plugin für Neovim a
</message>
<message>
<source>Do not ask again. This will disable Copilot for now.</source>
- <translation>Nicht noch einmal nachfragen. Dies deaktiviert Copilot.</translation>
+ <translation>Nicht erneut nachfragen. Dies deaktiviert Copilot.</translation>
</message>
<message>
<source>Enables the Copilot integration.</source>
@@ -18710,7 +18710,7 @@ Ansonsten müssen Sie den Pfad zur Datei %2 aus dem Copilot-Plugin für Neovim a
</message>
<message>
<source>Automatically request suggestions for the current text cursor position after changes to the document.</source>
- <translation>Fordert Vorschläge für die aktuelle Cursorposition nach Änderungen am Dokument automatisch an.</translation>
+ <translation>Fordert Vorschläge für die aktuelle Einfügemarke nach Änderungen am Dokument automatisch an.</translation>
</message>
</context>
<context>
@@ -18845,7 +18845,7 @@ Trotzdem fortfahren?</translation>
</message>
<message>
<source>Edit</source>
- <translation>Editieren</translation>
+ <translation>Bearbeiten</translation>
</message>
<message>
<source>&lt;System Language&gt;</source>
@@ -18861,12 +18861,13 @@ Trotzdem fortfahren?</translation>
</message>
<message>
<source>Override cursors for views</source>
- <translation type="unfinished"></translation>
+ <translation>Mauszeiger für Ansichten überschreiben</translation>
</message>
<message>
<source>Provide cursors for resizing views.
If the system cursors for resizing views are not displayed properly, you can use the cursors provided by %1.</source>
- <translation type="unfinished"></translation>
+ <translation>Verwendet separate Mauszeiger für das Verändern der Größe von Ansichten.
+Wenn die Systemzeiger für das Verändern der Größe von Ansichten nicht korrekt dargestellt werden, können von %1 bereitgestellte Zeiger verwendet werden.</translation>
</message>
<message>
<source>Toolbar style:</source>
@@ -18898,11 +18899,11 @@ If the system cursors for resizing views are not displayed properly, you can use
</message>
<message>
<source>The following environment variables are set and can influence the UI scaling behavior of %1:</source>
- <translation type="unfinished"></translation>
+ <translation>Die folgenden Umgebungsvariablen sind gesetzt und können das Skalierungsverhalten der Benutzeroberfläche von %1 beeinflussen:</translation>
</message>
<message>
<source>Environment influences UI scaling behavior.</source>
- <translation type="unfinished"></translation>
+ <translation>Die Umgebung beeinflusst das Skalierungsverhalten der Benutzeroberfläche.</translation>
</message>
<message>
<source>Text codec for tools:</source>
@@ -18960,7 +18961,7 @@ If the system cursors for resizing views are not displayed properly, you can use
</message>
<message>
<source>Re-enable warnings that were suppressed by selecting &quot;Do Not Show Again&quot; (for example, missing highlighter).</source>
- <translation>Alle Warnungen wieder aktivieren, die durch &quot;Nicht noch einmal anzeigen&quot; unterdrückt wurden (zum Beispiel fehlende Syntaxhervorhebung).</translation>
+ <translation>Alle Warnungen wieder aktivieren, die durch &quot;Nicht erneut anzeigen&quot; unterdrückt wurden (zum Beispiel fehlende Syntaxhervorhebung).</translation>
</message>
<message>
<source>Theme:</source>
@@ -19124,7 +19125,7 @@ If the system cursors for resizing views are not displayed properly, you can use
</message>
<message>
<source>&lt;p&gt;Qt Creator developers can be reached at the Qt Creator mailing list:&lt;/p&gt;%1&lt;p&gt;or the #qt-creator channel on Libera.Chat IRC:&lt;/p&gt;%2&lt;p&gt;Our bug tracker is located at %3.&lt;/p&gt;&lt;p&gt;Please use %4 for bigger chunks of text.&lt;/p&gt;</source>
- <translation>&lt;p&gt;Sie können die Qt Creator-Entwickler auf dem E-Mail-Verteiler&lt;/p&gt;%1&lt;p&gt;oder dem IRC Kanal #qt-creator auf Libera.Chat&lt;/p&gt;%2&lt;p&gt;erreichen. Unseren Bugtracker finden Sie unter %3.&lt;/p&gt;&lt;p&gt;Bitte benutzen Sie %4 für längere Texte.&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;Sie können die Qt Creator-Entwickler auf dem E-Mail-Verteiler&lt;/p&gt;%1&lt;p&gt;oder dem IRC Kanal #qt-creator auf Libera.Chat&lt;/p&gt;%2&lt;p&gt;erreichen. Unseren Bugtracker finden Sie unter %3.&lt;/p&gt;&lt;p&gt;Bitte verwenden Sie %4 für längere Texte.&lt;/p&gt;</translation>
</message>
<message>
<source>Minimize</source>
@@ -19148,7 +19149,7 @@ If the system cursors for resizing views are not displayed properly, you can use
</message>
<message>
<source>This will hide the menu bar completely. You can show it again by typing %1.&lt;br&gt;&lt;br&gt;Or, trigger the &quot;%2&quot; action from the &quot;%3&quot; locator filter (%4).</source>
- <translation type="unfinished"></translation>
+ <translation>Dies versteckt die Menüleiste vollständig. Sie können sie mit der Tastenkombination %1 wieder anzeigen.&lt;br&gt;&lt;br&gt;Oder führen Sie die Aktion &quot;%2&quot; über den Locator-Filter &quot;%3&quot; aus (%4).</translation>
</message>
<message>
<source>Change Log...</source>
@@ -19471,7 +19472,7 @@ If the system cursors for resizing views are not displayed properly, you can use
</message>
<message>
<source>Copy and Close</source>
- <translation type="unfinished"></translation>
+ <translation>Kopieren und schließen</translation>
</message>
<message>
<source>&lt;br/&gt;From revision %1&lt;br/&gt;</source>
@@ -19522,8 +19523,8 @@ If the system cursors for resizing views are not displayed properly, you can use
<translation>QMLJS-Editor</translation>
</message>
<message>
- <source>Qt Designer</source>
- <translation>Qt Designer</translation>
+ <source>Qt Widgets Designer</source>
+ <translation>Qt Widgets Designer</translation>
</message>
<message>
<source>Qt Linguist</source>
@@ -20260,7 +20261,7 @@ konnte nicht unter Versionsverwaltung (%2) gestellt werden
</message>
<message>
<source>Locates files from a custom set of directories. Append &quot;+&lt;number&gt;&quot; or &quot;:&lt;number&gt;&quot; to jump to the given line number. Append another &quot;+&lt;number&gt;&quot; or &quot;:&lt;number&gt;&quot; to jump to the column number as well.</source>
- <translation>Findet Dateien aus vom Benutzer gewählten Pfaden. Fügen Sie &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um zur angegebenen Zeile zu springen. Fügen Sie noch einmal &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um auch zur angegebenen Spalte zu springen.</translation>
+ <translation>Findet Dateien aus vom Benutzer gewählten Pfaden. Fügen Sie &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um zur angegebenen Zeile zu springen. Fügen Sie erneut &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um auch zur angegebenen Spalte zu springen.</translation>
</message>
<message>
<source>Add...</source>
@@ -20349,7 +20350,7 @@ konnte nicht unter Versionsverwaltung (%2) gestellt werden
</message>
<message>
<source>Use re&amp;gular expressions</source>
- <translation>Benutze &amp;reguläre Ausdrücke</translation>
+ <translation>Verwende &amp;reguläre Ausdrücke</translation>
</message>
<message>
<source>Sco&amp;pe:</source>
@@ -20395,11 +20396,11 @@ Um es abzurufen, tippen Sie das Kürzel im Locator, gefolgt von einem Leerzeiche
</message>
<message>
<source>Cannot Create File</source>
- <translation type="unfinished"></translation>
+ <translation>Datei konnte nicht erstellt werden</translation>
</message>
<message>
<source>Cannot create file &quot;%1&quot;.</source>
- <translation type="unfinished"></translation>
+ <translation>Die Datei &quot;%1&quot; konnte nicht erstellt werden.</translation>
</message>
<message>
<source>Create Directory</source>
@@ -20587,7 +20588,7 @@ Um es abzurufen, tippen Sie das Kürzel im Locator, gefolgt von einem Leerzeiche
</message>
<message>
<source>&amp;Search Again</source>
- <translation>Noch einmal &amp;suchen</translation>
+ <translation>Erneut &amp;suchen</translation>
</message>
<message>
<source>Repla&amp;ce with:</source>
@@ -20649,11 +20650,11 @@ Um es abzurufen, tippen Sie das Kürzel im Locator, gefolgt von einem Leerzeiche
</message>
<message>
<source>Show Paths in Relation to Active Project</source>
- <translation type="unfinished"></translation>
+ <translation>Pfade in Bezug auf das aktive Projekt anzeigen</translation>
</message>
<message>
<source>Filter Results</source>
- <translation>Resultate filtern</translation>
+ <translation>Ergebnisse filtern</translation>
</message>
<message>
<source>%1 %2</source>
@@ -20665,7 +20666,7 @@ Um es abzurufen, tippen Sie das Kürzel im Locator, gefolgt von einem Leerzeiche
</message>
<message>
<source>Show Full Paths</source>
- <translation type="unfinished"></translation>
+ <translation>Vollständigen Pfad anzeigen</translation>
</message>
<message>
<source>Search Results</source>
@@ -20735,7 +20736,7 @@ Möchten Sie es beenden?</translation>
</message>
<message>
<source>Include the filter when not using a prefix for searches.</source>
- <translation>Diesen Filter einschließen, wenn kein Präfix benutzt wird.</translation>
+ <translation>Diesen Filter einschließen, wenn kein Präfix verwendet wird.</translation>
</message>
<message>
<source>Prefix:</source>
@@ -20833,11 +20834,11 @@ Möchten Sie es beenden?</translation>
</message>
<message>
<source>Proxy Authentication Required</source>
- <translation type="unfinished"></translation>
+ <translation>Proxy-Authentifizierung erforderlich</translation>
</message>
<message>
<source>Do not ask again.</source>
- <translation type="unfinished"></translation>
+ <translation>Nicht erneut nachfragen.</translation>
</message>
<message>
<source>No themes found in installation.</source>
@@ -20921,7 +20922,7 @@ Möchten Sie es beenden?</translation>
</message>
<message>
<source>Convert string to pure ASCII.</source>
- <translation type="unfinished"></translation>
+ <translation>Zeichenkette in reines ASCII umwandeln.</translation>
</message>
<message>
<source>Create Folder</source>
@@ -20969,7 +20970,7 @@ Sie werden wahrscheinlich auf weitere Probleme mit dieser Instanz von %3 stoßen
</message>
<message>
<source>%1 uses Google Crashpad for collecting crashes and sending them to our backend for processing. Crashpad may capture arbitrary contents from crashed process’ memory, including user sensitive information, URLs, and whatever other content users have trusted %1 with. The collected crash reports are however only used for the sole purpose of fixing bugs.</source>
- <translation>%1 nutzt Google Crashpad, um Absturzberichte zu sammeln und diese zur Verarbeitung an unsere Server zu senden. Crashpad kann beliebige Inhalte des Speichers des abgestürzten Prozesses erfassen. Dies beinhaltet persönliche Daten, URLs und welche Inhalte auch immer der Nutzer %1 anvertraut hat. Die gesammelten Absturzberichte werden allerdings nur zum Zweck der Fehlerbehebung genutzt.</translation>
+ <translation>%1 nutzt Google Crashpad, um Absturzberichte zu sammeln und diese zur Verarbeitung an unsere Server zu senden. Crashpad kann beliebige Inhalte des Speichers des abgestürzten Prozesses erfassen. Dies beinhaltet persönliche Daten, URLs und welche Inhalte auch immer der Benutzer %1 anvertraut hat. Die gesammelten Absturzberichte werden allerdings nur zum Zweck der Fehlerbehebung genutzt.</translation>
</message>
<message>
<source>More information:</source>
@@ -21598,7 +21599,7 @@ provided they were unmodified before the refactoring.</source>
</message>
<message>
<source>Locates files from a global file system index (Spotlight, Locate, Everything). Append &quot;+&lt;number&gt;&quot; or &quot;:&lt;number&gt;&quot; to jump to the given line number. Append another &quot;+&lt;number&gt;&quot; or &quot;:&lt;number&gt;&quot; to jump to the column number as well.</source>
- <translation>Findet Dateien aus einem globalen Dateisystemindex (Spotlight, Locate, Everything). Fügen Sie &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um zur angegebenen Zeile zu springen. Fügen Sie noch einmal &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um auch zur angegebenen Spalte zu springen.</translation>
+ <translation>Findet Dateien aus einem globalen Dateisystemindex (Spotlight, Locate, Everything). Fügen Sie &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um zur angegebenen Zeile zu springen. Fügen Sie erneut &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um auch zur angegebenen Spalte zu springen.</translation>
</message>
<message>
<source>Sort results</source>
@@ -21755,11 +21756,11 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern.</translation>
</message>
<message>
<source>Use &quot;Cmd&quot;, &quot;Opt&quot;, &quot;Ctrl&quot;, and &quot;Shift&quot; for modifier keys. Use &quot;Escape&quot;, &quot;Backspace&quot;, &quot;Delete&quot;, &quot;Insert&quot;, &quot;Home&quot;, and so on, for special keys. Combine individual keys with &quot;+&quot;, and combine multiple shortcuts to a shortcut sequence with &quot;,&quot;. For example, if the user must hold the Ctrl and Shift modifier keys while pressing Escape, and then release and press A, enter &quot;Ctrl+Shift+Escape,A&quot;.</source>
- <translation>Benutzen Sie &quot;Cmd&quot;, &quot;Opt&quot;, &quot;Ctrl&quot;, und &quot;Shift&quot; für Hilfstasten. Benutzen Sie &quot;Escape&quot;, &quot;Backspace&quot;, &quot;Delete&quot;, &quot;Insert&quot;, &quot;Home&quot; und so weiter für Sondertasten. Kombinieren Sie einzelne Tasten mit &quot;+&quot; und kombinieren Sie mehrere Tastenkombinationen mit &quot;,&quot; zu einer Tastenfolge. Wenn der Benutzer etwa die Strg- und Umschalttasten gedrückt halten muss, während er Escape drückt, um danach alle Tasten zu lösen und A zu drücken, geben Sie &quot;Ctrl+Shift+Escape,A&quot; ein.</translation>
+ <translation>Verwenden Sie &quot;Cmd&quot;, &quot;Opt&quot;, &quot;Ctrl&quot;, und &quot;Shift&quot; für Hilfstasten. Verwenden Sie &quot;Escape&quot;, &quot;Backspace&quot;, &quot;Delete&quot;, &quot;Insert&quot;, &quot;Home&quot; und so weiter für Sondertasten. Kombinieren Sie einzelne Tasten mit &quot;+&quot; und kombinieren Sie mehrere Tastenkombinationen mit &quot;,&quot; zu einer Tastenfolge. Wenn der Benutzer etwa die Strg- und Umschalttasten gedrückt halten muss, während er Escape drückt, um danach alle Tasten zu lösen und A zu drücken, geben Sie &quot;Ctrl+Shift+Escape,A&quot; ein.</translation>
</message>
<message>
<source>Use &quot;Ctrl&quot;, &quot;Alt&quot;, &quot;Meta&quot;, and &quot;Shift&quot; for modifier keys. Use &quot;Escape&quot;, &quot;Backspace&quot;, &quot;Delete&quot;, &quot;Insert&quot;, &quot;Home&quot;, and so on, for special keys. Combine individual keys with &quot;+&quot;, and combine multiple shortcuts to a shortcut sequence with &quot;,&quot;. For example, if the user must hold the Ctrl and Shift modifier keys while pressing Escape, and then release and press A, enter &quot;Ctrl+Shift+Escape,A&quot;.</source>
- <translation>Benutzen Sie &quot;Ctrl&quot;, &quot;Alt&quot;, &quot;Meta&quot;, und &quot;Shift&quot; für Hilfstasten. Benutzen Sie &quot;Escape&quot;, &quot;Backspace&quot;, &quot;Delete&quot;, &quot;Insert&quot;, &quot;Home&quot; und so weiter für Sondertasten. Kombinieren Sie einzelne Tasten mit &quot;+&quot; und kombinieren Sie mehrere Tastenkombinationen mit &quot;,&quot; zu einer Tastenfolge. Wenn der Benutzer etwa die Strg- und Umschalttasten gedrückt halten muss, während er Escape drückt, um danach alle Tasten zu lösen und A zu drücken, geben Sie &quot;Ctrl+Shift+Escape,A&quot; ein.</translation>
+ <translation>Verwenden Sie &quot;Ctrl&quot;, &quot;Alt&quot;, &quot;Meta&quot;, und &quot;Shift&quot; für Hilfstasten. Verwenden Sie &quot;Escape&quot;, &quot;Backspace&quot;, &quot;Delete&quot;, &quot;Insert&quot;, &quot;Home&quot; und so weiter für Sondertasten. Kombinieren Sie einzelne Tasten mit &quot;+&quot; und kombinieren Sie mehrere Tastenkombinationen mit &quot;,&quot; zu einer Tastenfolge. Wenn der Benutzer etwa die Strg- und Umschalttasten gedrückt halten muss, während er Escape drückt, um danach alle Tasten zu lösen und A zu drücken, geben Sie &quot;Ctrl+Shift+Escape,A&quot; ein.</translation>
</message>
<message>
<source>Enter key sequence as text</source>
@@ -21823,7 +21824,7 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern.</translation>
</message>
<message>
<source>The plugin will be available to all compatible %1 installations, but only for the current user.</source>
- <translation>Das Plugin wird für alle kompatiblen Installationen von %1 verfügbar sein, aber nur für den aktuellen Nutzer.</translation>
+ <translation>Das Plugin wird für alle kompatiblen Installationen von %1 verfügbar sein, aber nur für den aktuellen Benutzer.</translation>
</message>
<message>
<source>%1 installation</source>
@@ -21831,7 +21832,7 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern.</translation>
</message>
<message>
<source>The plugin will be available only to this %1 installation, but for all users that can access it.</source>
- <translation>Das Plugin wird nur für diese Installation von %1 verfügbar sein, aber für alle Nutzer, die diese Ausführen können.</translation>
+ <translation>Das Plugin wird nur für diese Installation von %1 verfügbar sein, aber für alle Benutzer, die diese Ausführen können.</translation>
</message>
<message>
<source>Summary</source>
@@ -22426,7 +22427,7 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern.</translation>
<translation>#include %1 hinzufügen</translation>
</message>
<message>
- <source>Add forward declaration for %1</source>
+ <source>Add Forward Declaration for %1</source>
<translation>Vorwärtsdeklaration für %1 hinzufügen</translation>
</message>
<message>
@@ -22827,7 +22828,7 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern.</translation>
</message>
<message>
<source>Convert to Stack Variable</source>
- <translation>In Stack-Variable umwandeln</translation>
+ <translation>In Stackvariable umwandeln</translation>
</message>
<message>
<source>Convert to Pointer</source>
@@ -23053,7 +23054,7 @@ ausgerichtet werden würden</translation>
int (*pa)[2] = ...;
&lt;/pre&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Dies bezieht sich nicht auf die Stern- und Referenzsymbole in Zeigern auf / Referenzen zu Funktionen und Feldern, zum Beispiel:
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;Dies bezieht sich nicht auf die Stern- und Referenzsymbole in Zeigern auf / Referenzen zu Funktionen und Arrays, zum Beispiel:
&lt;pre&gt; int (&amp;rf)() = ...;
int (*pf)() = ...;
@@ -23296,7 +23297,7 @@ Diese Präfixe werden zusätzlich zum Dateinamen beim Wechseln zwischen Header-
</message>
<message>
<source>Use type &quot;auto&quot; when creating new variables</source>
- <translation>Typ &quot;auto&quot; beim Erstellen von neuen Variablen benutzen</translation>
+ <translation>Typ &quot;auto&quot; beim Erstellen von neuen Variablen verwenden</translation>
</message>
<message>
<source>Custom Getter Setter Templates</source>
@@ -23348,9 +23349,9 @@ Diese Präfixe werden zusätzlich zum Dateinamen beim Wechseln zwischen Header-
<translation>Normalerweise werden Argumente als konstante Referenz übergeben. Das Argument wird als Wert übergeben, wenn der Typ einer der folgenden ist. Namensräume und Vorlagenargumente werden entfernt. Der wirkliche Typ muss den angegebenen Typ enthalten. Zum Beispiel passt &quot;int&quot; zu &quot;int32_t&quot;, aber nicht zu &quot;vector&lt;int&gt;&quot;. &quot;vector&quot; passt zu &quot;std::pmr::vector&lt;int&gt;&quot;, aber nicht zu &quot;std::optional&lt;vector&lt;int&gt;&gt;&quot;</translation>
</message>
<message>
- <source>Value types:</source>
+ <source>Value Types</source>
<translatorcomment>https://learn.microsoft.com/de-de/cpp/cpp/value-types-modern-cpp</translatorcomment>
- <translation>Werttypen:</translation>
+ <translation>Werttypen</translation>
</message>
<message>
<source>Return non-value types by const reference</source>
@@ -23581,11 +23582,11 @@ z.B. name = &quot;m_test_foo_&quot;:
</message>
<message>
<source>Use Built-in Only</source>
- <translation>Nur integriertes Backend benutzen</translation>
+ <translation>Nur integriertes Backend verwenden</translation>
</message>
<message>
<source>Use Clangd Only</source>
- <translation>Nur Clangd benutzen</translation>
+ <translation>Nur Clangd verwenden</translation>
</message>
<message>
<source>Try Both</source>
@@ -23629,11 +23630,11 @@ z.B. name = &quot;m_test_foo_&quot;:
</message>
<message>
<source>Use built-in preprocessor to show pre-processed files</source>
- <translation>Den integrierten Präprozessor zum Anzeigen von vorverarbeiteten Dateien benutzen</translation>
+ <translation>Den integrierten Präprozessor zum Anzeigen von vorverarbeiteten Dateien verwenden</translation>
</message>
<message>
<source>Uncheck this to invoke the actual compiler to show a pre-processed source file in the editor.</source>
- <translation>Wählen Sie dies ab, um den Compiler zum Anzeigen von vorverarbeiteten Dateien zu benutzen.</translation>
+ <translation>Wählen Sie dies ab, um den Compiler zum Anzeigen von vorverarbeiteten Dateien zu verwenden.</translation>
</message>
<message>
<source>Code Model</source>
@@ -23641,19 +23642,19 @@ z.B. name = &quot;m_test_foo_&quot;:
</message>
<message>
<source>&lt;p&gt;If background indexing is enabled, global symbol searches will yield more accurate results, at the cost of additional CPU load when the project is first opened. The indexing result is persisted in the project&apos;s build directory. If you disable background indexing, a faster, but less accurate, built-in indexer is used instead. The thread priority for building the background index can be adjusted since clangd 15.&lt;/p&gt;&lt;p&gt;Background Priority: Minimum priority, runs on idle CPUs. May leave &apos;performance&apos; cores unused.&lt;/p&gt;&lt;p&gt;Normal Priority: Reduced priority compared to interactive work.&lt;/p&gt;&lt;p&gt;Low Priority: Same priority as other clangd work.&lt;/p&gt;</source>
- <translation>&lt;p&gt;Wenn sie das globale Indizieren aktivieren, liefert die globale Symbolsuche genauere Resultate, es erhöht aber die CPU-Last beim ersten Öffnen von Projekten. Das Resultat der Indizierung wird im Build-Verzeichnis des Projekts gespeichert. Wenn sie das globale Indizieren deaktivieren, wird stattdessen ein schnellerer, aber weniger genauer, integrierter Indexer benutzt. Seit Clangd 15 können Sie die Priorität für die Indizierungs-Threads anpassen.&lt;/p&gt;&lt;p&gt;Hintergrund-Priorität: Niedrigste Priorität, läuft nur auf leerlaufenden CPUs. Kann &quot;Performance&quot;-Kerne ungenutzt lassen.&lt;/p&gt;&lt;p&gt;Normale Priorität: Geringere Priorität im Vergleich zu interaktiven Aktivitäten.&lt;/p&gt;&lt;p&gt;Niedrige Priorität: Dieselbe Priorität wie andere Clangd-Aktivitäten.&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;Wenn Sie das globale Indizieren aktivieren, liefert die globale Symbolsuche genauere Ergebnisse, es erhöht aber die CPU-Last beim ersten Öffnen von Projekten. Das Ergebnis der Indizierung wird im Build-Verzeichnis des Projekts gespeichert. Wenn Sie das globale Indizieren deaktivieren, wird stattdessen ein schnellerer, aber weniger genauer, integrierter Indexer verwendet. Seit Clangd 15 können Sie die Priorität für die Indizierungs-Threads anpassen.&lt;/p&gt;&lt;p&gt;Hintergrund-Priorität: Niedrigste Priorität, läuft nur auf leerlaufenden CPUs. Kann &quot;Performance&quot;-Kerne ungenutzt lassen.&lt;/p&gt;&lt;p&gt;Normale Priorität: Geringere Priorität im Vergleich zu interaktiven Aktivitäten.&lt;/p&gt;&lt;p&gt;Niedrige Priorität: Dieselbe Priorität wie andere Clangd-Aktivitäten.&lt;/p&gt;</translation>
</message>
<message>
<source>&lt;p&gt;The C/C++ backend to use for switching between header and source files.&lt;/p&gt;&lt;p&gt;While the clangd implementation has more capabilities than the built-in code model, it tends to find false positives.&lt;/p&gt;&lt;p&gt;When &quot;Try Both&quot; is selected, clangd is used only if the built-in variant does not find anything.&lt;/p&gt;</source>
- <translation>&lt;p&gt;Bestimmt, welches C/C++-Backend zum Wechseln zwischen Header- und Quelldatei benutzt wird.&lt;/p&gt;&lt;p&gt;Die Clangd-Implementation hat mehr Fähigkeiten, aber auch einige Fehler, die nicht in der integrierten Variante vorhanden sind.&lt;/p&gt;&lt;p&gt;Wenn &quot;Beide versuchen&quot; ausgewählt ist, wird Clangd nur benutzt, wenn die integrierte Variant nichts findet.&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;Bestimmt, welches C/C++-Backend zum Wechseln zwischen Header- und Quelldatei verwendet wird.&lt;/p&gt;&lt;p&gt;Die Clangd-Implementation hat mehr Fähigkeiten, aber auch einige Fehler, die nicht in der integrierten Variante vorhanden sind.&lt;/p&gt;&lt;p&gt;Wenn &quot;Beide versuchen&quot; ausgewählt ist, wird Clangd nur verwendet, wenn die integrierte Variant nichts findet.&lt;/p&gt;</translation>
</message>
<message>
<source>&lt;p&gt;Which model clangd should use to rank possible completions.&lt;/p&gt;&lt;p&gt;This determines the order of candidates in the combo box when doing code completion.&lt;/p&gt;&lt;p&gt;The &quot;%1&quot; model used by default results from (pre-trained) machine learning and provides superior results on average.&lt;/p&gt;&lt;p&gt;If you feel that its suggestions stray too much from your expectations for your code base, you can try switching to the hand-crafted &quot;%2&quot; model.&lt;/p&gt;</source>
- <translation>&lt;p&gt;Das Modell, das Clangd für die Rangfolge der möglichen Vervollständigungen benutzen soll.&lt;/p&gt;&lt;p&gt;Dies bestimmt die Reihenfolge der Kandidaten im Drop-Down-Menü der Code-Vervollständigung.&lt;/p&gt;&lt;p&gt;Das voreingestellte Modell &quot;%1&quot; wurde durch maschinelles Lernen trainiert und bietet im Schnitt die besten Ergebnisse.&lt;/p&gt;&lt;p&gt;Falls dies für Ihren Code zu sehr von Ihren Erwartungen abweicht, können Sie auf das manuell erstellte Modell &quot;%2&quot; umstellen.&lt;p&gt;</translation>
+ <translation>&lt;p&gt;Das Modell, das Clangd für die Rangfolge der möglichen Vervollständigungen verwenden soll.&lt;/p&gt;&lt;p&gt;Dies bestimmt die Reihenfolge der Kandidaten im Drop-Down-Menü der Code-Vervollständigung.&lt;/p&gt;&lt;p&gt;Das voreingestellte Modell &quot;%1&quot; wurde durch maschinelles Lernen trainiert und bietet im Schnitt die besten Ergebnisse.&lt;/p&gt;&lt;p&gt;Falls dies für Ihren Code zu sehr von Ihren Erwartungen abweicht, können Sie auf das manuell erstellte Modell &quot;%2&quot; umstellen.&lt;p&gt;</translation>
</message>
<message>
<source>Number of worker threads used by clangd. Background indexing also uses this many worker threads.</source>
- <translation>Anzahl der Threads, die von Clangd benutzt werden. Die globale Indizierung nutzt auch diese Anzahl Threads.</translation>
+ <translation>Anzahl der Threads, die von Clangd verwendet werden. Die globale Indizierung nutzt auch diese Anzahl Threads.</translation>
</message>
<message>
<source>Controls whether clangd may insert header files as part of symbol completion.</source>
@@ -23663,7 +23664,7 @@ z.B. name = &quot;m_test_foo_&quot;:
<source>Defines the amount of time %1 waits before sending document changes to the server.
If the document changes again while waiting, this timeout resets.</source>
<translation>Bestimmt die Zeit, die %1 vor dem Senden von Dokumentänderungen an den Server wartet.
-Falls sich das Dokument innerhalb dieser Zeit wieder ändert, wird erneut die volle Zeit gewartet.</translation>
+Falls sich das Dokument innerhalb dieser Zeit erneut ändert, wird nochmal die volle Zeit gewartet.</translation>
</message>
<message>
<source>Files greater than this will not be opened as documents in clangd.
@@ -23673,11 +23674,11 @@ Das integrierte Codemodell übernimmt Syntaxhervorhebung, Code-Vervollständigun
</message>
<message>
<source>The maximum number of completion results returned by clangd.</source>
- <translation>Die maximale Anzahl Resultate die von Clangd für die Code-Vervollständigung zurück gegeben werden.</translation>
+ <translation>Die maximale Anzahl Ergebnisse, die von Clangd für die Code-Vervollständigung zurückgegeben werden.</translation>
</message>
<message>
<source>Use clangd</source>
- <translation>Clangd benutzen</translation>
+ <translation>Clangd verwenden</translation>
</message>
<message>
<source>Insert header files on completion</source>
@@ -23693,7 +23694,7 @@ Das integrierte Codemodell übernimmt Syntaxhervorhebung, Code-Vervollständigun
</message>
<message>
<source>Completion results:</source>
- <translation>Anzahl der Resultate der Code-Vervollständigung:</translation>
+ <translation>Anzahl der Ergebnisse der Code-Vervollständigung:</translation>
</message>
<message>
<source>No limit</source>
@@ -23724,7 +23725,7 @@ Das integrierte Codemodell übernimmt Syntaxhervorhebung, Code-Vervollständigun
<translation>Zeitabstand für das Aktualisieren von Dokumenten:</translation>
</message>
<message>
- <source>Sessions with a single clangd instance</source>
+ <source>Sessions with a Single Clangd Instance</source>
<translation>Sitzungen mit einer einzigen Clangd-Instanz</translation>
</message>
<message>
@@ -23972,7 +23973,7 @@ Ziehen Sie Eintrage mit der Maus, um die Reihenfolge der Parameter zu ändern.</
</message>
<message>
<source>Quick Fix settings are saved in a file. Existing settings file &quot;%1&quot; found. Should this file be used or a new one be created?</source>
- <translation>Einstellungen für Quick Fixes werden in einer Datei gespeichert. Es wurde eine existierende Einstellungs-Datei &quot;%1&quot; gefunden. Soll diese Datei benutzt, oder eine neue Datei erstellt werden?</translation>
+ <translation>Einstellungen für Quick Fixes werden in einer Datei gespeichert. Es wurde eine existierende Einstellungs-Datei &quot;%1&quot; gefunden. Soll diese Datei verwendet oder eine neue Datei erstellt werden?</translation>
</message>
<message>
<source>Switch Back to Global Settings</source>
@@ -23980,7 +23981,7 @@ Ziehen Sie Eintrage mit der Maus, um die Reihenfolge der Parameter zu ändern.</
</message>
<message>
<source>Use Existing</source>
- <translation>Existierende benutzen</translation>
+ <translation>Existierende verwenden</translation>
</message>
<message>
<source>Create New</source>
@@ -23988,7 +23989,7 @@ Ziehen Sie Eintrage mit der Maus, um die Reihenfolge der Parameter zu ändern.</
</message>
<message>
<source>Custom settings are saved in a file. If you use the global settings, you can delete that file.</source>
- <translation>Benutzerdefinierte Einstellungen werden in einer Datei gespeichert. Wenn Sie die globalen Einstellungen benutzen, können Sie diese Datei löschen.</translation>
+ <translation>Benutzerdefinierte Einstellungen werden in einer Datei gespeichert. Wenn Sie die globalen Einstellungen verwenden, können Sie diese Datei löschen.</translation>
</message>
<message>
<source>Delete Custom Settings File</source>
@@ -24065,7 +24066,7 @@ Flags: %3</translation>
</message>
<message>
<source>Locates files that are included by C++ files of any open project. Append &quot;+&lt;number&gt;&quot; or &quot;:&lt;number&gt;&quot; to jump to the given line number. Append another &quot;+&lt;number&gt;&quot; or &quot;:&lt;number&gt;&quot; to jump to the column number as well.</source>
- <translation>Findet alle Dateien die von allen C++-Dateien aller Projekte eingebunden werden. Fügen Sie &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um zur angegebenen Zeile zu springen. Fügen Sie noch einmal &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um auch zur angegebenen Spalte zu springen.</translation>
+ <translation>Findet alle Dateien die von allen C++-Dateien aller Projekte eingebunden werden. Fügen Sie &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um zur angegebenen Zeile zu springen. Fügen Sie erneut &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um auch zur angegebenen Spalte zu springen.</translation>
</message>
<message>
<source>collecting overrides...</source>
@@ -24144,7 +24145,7 @@ Flags: %3</translation>
</message>
<message>
<source>Can find missing includes but makes checking slower. Use only when needed.</source>
- <translation>Kann fehlende Includes finden, verlangsamt aber die Prüfung. Benutzen Sie dies nur, wenn es nötig ist.</translation>
+ <translation>Kann fehlende Includes finden, verlangsamt aber die Prüfung. Verwenden Sie dies nur, wenn es nötig ist.</translation>
</message>
<message>
<source>Like C++ standard and language.</source>
@@ -24231,7 +24232,7 @@ Flags: %3</translation>
</message>
<message>
<source>Stack Level %1</source>
- <translation>Stack-Level %1</translation>
+ <translation>Stacklevel %1</translation>
</message>
<message>
<source>Value</source>
@@ -24352,7 +24353,7 @@ Flags: %3</translation>
<message>
<source>The trace contains threads with stack depth &gt; 512.
Do you want to display them anyway?</source>
- <translation>Die Trace-Daten enthalten Threads mit einer Stack-Tiefe größer als 512.
+ <translation>Die Trace-Daten enthalten Threads mit einer Stacktiefe größer als 512.
Möchten Sie die Daten trotzdem anzeigen?</translation>
</message>
<message>
@@ -24919,7 +24920,7 @@ Möchten Sie die Daten trotzdem anzeigen?</translation>
</message>
<message>
<source>Configure Symbol paths that are used to locate debug symbol files.</source>
- <translation>Symbolpfade konfigurieren, die benutzt werden, um Debug-Symboldateien zu finden.</translation>
+ <translation>Symbolpfade konfigurieren, die verwendet werden, um Debug-Symboldateien zu finden.</translation>
</message>
<message>
<source>Log Time Stamps</source>
@@ -24979,7 +24980,7 @@ Möchten Sie die Daten trotzdem anzeigen?</translation>
</message>
<message>
<source>Displays the objectName property of QObject based items. Note that this can negatively impact debugger performance even if no QObjects are present.</source>
- <translation>Zeigt die objectName-Eigenschaft von QObject basierten Elementen an. Dies kann die Debugger-Geschwindigkeit verschlechtern, selbst wenn keine QObjects benutzt werden.</translation>
+ <translation>Zeigt die objectName-Eigenschaft von QObject basierten Elementen an. Dies kann die Debugger-Geschwindigkeit verschlechtern, selbst wenn keine QObjects verwendet werden.</translation>
</message>
<message>
<source>Sort Members of Classes and Structs Alphabetically</source>
@@ -24991,7 +24992,7 @@ Möchten Sie die Daten trotzdem anzeigen?</translation>
</message>
<message>
<source>Use Debugging Helpers</source>
- <translation>Ausgabe-Hilfsbibliothek benutzen</translation>
+ <translation>Ausgabe-Hilfsbibliothek verwenden</translation>
</message>
<message>
<source>Use code model</source>
@@ -24999,7 +25000,7 @@ Möchten Sie die Daten trotzdem anzeigen?</translation>
</message>
<message>
<source>Selecting this causes the C++ Code Model being asked for variable scope information. This might result in slightly faster debugger operation but may fail for optimized code.</source>
- <translation>Benutzt das Codemodell, um Informationen bezüglich des Gültigkeitsbereiches von Variablen zu erhalten. Dies kann eine etwas schnellere Anzeige der Werte bewirken, aber bei optimiertem Code auch fehlschlagen.</translation>
+ <translation>Verwendet das Codemodell, um Informationen bezüglich des Gültigkeitsbereiches von Variablen zu erhalten. Dies kann eine etwas schnellere Anzeige der Werte bewirken, aber bei optimiertem Code auch fehlschlagen.</translation>
</message>
<message>
<source>Displays names of QThread based threads.</source>
@@ -25059,7 +25060,7 @@ Möchten Sie die Daten trotzdem anzeigen?</translation>
</message>
<message>
<source>Use Tooltips in Stack View when Debugging</source>
- <translation>Tooltips für Stack-Anzeige beim Debuggen</translation>
+ <translation>Tooltips für Stackanzeige beim Debuggen</translation>
</message>
<message>
<source>Skip Known Frames</source>
@@ -25083,7 +25084,7 @@ Möchten Sie die Daten trotzdem anzeigen?</translation>
</message>
<message>
<source>Use tooltips in main editor when debugging</source>
- <translation>Tooltips im Haupt-Editor beim Debuggen benutzen</translation>
+ <translation>Tooltips im Haupt-Editor beim Debuggen verwenden</translation>
</message>
<message>
<source>Configure Debugger...</source>
@@ -25197,7 +25198,7 @@ Sie haben die Wahl zu warten oder das Debuggen abzubrechen.</numerusform>
</message>
<message>
<source>Retrieving data for stack view thread %1...</source>
- <translation>Daten der Stack-Anzeige für Thread %1 werden empfangen...</translation>
+ <translation>Daten der Stackanzeige für Thread %1 werden empfangen...</translation>
</message>
<message>
<source>Application started.</source>
@@ -25297,7 +25298,7 @@ Sie haben die Wahl zu warten oder das Debuggen abzubrechen.</numerusform>
</message>
<message>
<source>Retrieving data for stack view...</source>
- <translation>Daten der Stack-Anzeige werden empfangen...</translation>
+ <translation>Daten der Stackanzeige werden empfangen...</translation>
</message>
<message>
<source>The gdb process failed to start.</source>
@@ -25523,12 +25524,12 @@ was generated. In such situations the breakpoint is shifted to the
next source code line for which code was actually generated.
This option reflects such temporary change by moving the breakpoint
markers in the source code editor.</source>
- <translation>Nicht alle Quellcode-Zeilen bewirken die Erzeugung von ausführbarem Code. Wenn man dort einen Haltepunkt setzt, verhält er sich so, als ob er auf die nächste Zeile gesetzt worden wäre. Das Aktivieren der Einstellung &apos;Positionen der Haltepunkte korrigieren&apos; bewirkt, dass der Haltepunkt-Marker in so einem Fall auf die Stelle des resultierenden Haltepunkts verschoben wird.</translation>
+ <translation>Nicht alle Quelltext-Zeilen bewirken die Erzeugung von ausführbarem Code. Wenn man dort einen Haltepunkt setzt, verhält er sich so, als ob er auf die nächste Zeile gesetzt worden wäre. Das Aktivieren der Einstellung &apos;Positionen der Haltepunkte korrigieren&apos; bewirkt, dass der Haltepunkt-Marker in so einem Fall auf die Stelle des resultierenden Haltepunkts verschoben wird.</translation>
</message>
<message>
<source>Allows or inhibits reading the user&apos;s default
.gdbinit file on debugger startup.</source>
- <translation>Gestattet oder unterdrückt das Lesen der Vorgabe-.gdbinit-Datei des Nutzers beim Starten des Debuggers.</translation>
+ <translation>Gestattet oder unterdrückt das Lesen der Vorgabe-.gdbinit-Datei des Benutzers beim Starten des Debuggers.</translation>
</message>
<message>
<source>Load system GDB pretty printers</source>
@@ -25560,7 +25561,7 @@ markers in the source code editor.</source>
</message>
<message>
<source>Uses the default GDB pretty printers installed in your system or linked to the libraries your application uses.</source>
- <translation>Verwendet die GDB-Pretty-Printers, die im System installiert sind oder gegen die Bibliotheken gelinkt sind, die die Anwendung benutzt.</translation>
+ <translation>Verwendet die GDB-Pretty-Printers, die im System installiert sind oder gegen die Bibliotheken gelinkt sind, die die Anwendung verwendet.</translation>
</message>
<message>
<source>The options below give access to advanced&lt;br&gt;or experimental functions of GDB.&lt;p&gt;Enabling them may negatively impact&lt;br&gt;your debugging experience.</source>
@@ -25764,11 +25765,11 @@ markers in the source code editor.</source>
</message>
<message>
<source>Memory at Frame #%1 (%2) 0x%3</source>
- <translation>Speicher bei Stack-Frame #%1 (%2) 0x%3</translation>
+ <translation>Speicher bei Stackframe #%1 (%2) 0x%3</translation>
</message>
<message>
<source>Frame #%1 (%2)</source>
- <translation>Stack-Frame #%1 (%2)</translation>
+ <translation>Stackframe #%1 (%2)</translation>
</message>
<message>
<source>Open Disassembler at 0x%1</source>
@@ -25832,15 +25833,15 @@ markers in the source code editor.</source>
</message>
<message>
<source>Sources for this frame are available.&lt;br&gt;Double-click on the file name to open an editor.</source>
- <translation>Für diesen Stack-Frame ist Quellcode vorhanden&lt;br&gt;Doppelklicken Sie auf den Dateinamen, um einen Editor zu öffnen.</translation>
+ <translation>Für diesen Stackframe ist Quelltext vorhanden&lt;br&gt;Doppelklicken Sie auf den Dateinamen, um einen Editor zu öffnen.</translation>
</message>
<message>
<source>Binary debug information is not accessible for this frame. This either means the core was not compiled with debug information, or the debug information is not accessible.</source>
- <translation>Für diesen Stack-Frame ist keine binäre Debuginformation verfügbar. Entweder stammt die Core-Datei von einer ohne Debuginformation erstellten Anwendung oder es kann nicht auf die Debuginformation zugegriffen werden.</translation>
+ <translation>Für diesen Stackframe ist keine binäre Debuginformation verfügbar. Entweder stammt die Core-Datei von einer ohne Debuginformation erstellten Anwendung oder es kann nicht auf die Debuginformation zugegriffen werden.</translation>
</message>
<message>
<source>Binary debug information is accessible for this frame. However, matching sources have not been found.</source>
- <translation>Für diesen Stack-Frame ist binäre Debuginformation verfügbar. Es konnte aber kein passender Quellcode gefunden werden.</translation>
+ <translation>Für diesen Stackframe ist binäre Debuginformation verfügbar. Es konnte aber kein passender Quelltext gefunden werden.</translation>
</message>
<message>
<source>Note that most distributions ship debug information in separate packages.</source>
@@ -26075,7 +26076,7 @@ markers in the source code editor.</source>
</message>
<message>
<source>Cannot Display Stack Layout</source>
- <translation>Das Stack-Layout kann nicht angezeigt werden</translation>
+ <translation>Das Stacklayout kann nicht angezeigt werden</translation>
</message>
<message>
<source>Could not determine a suitable address range.</source>
@@ -26203,7 +26204,7 @@ markers in the source code editor.</source>
</message>
<message>
<source>Open Memory View Showing Stack Layout</source>
- <translation>Speicheranzeige an Adresse des Stack-Frames öffnen</translation>
+ <translation>Speicheranzeige an Adresse des Stackframes öffnen</translation>
</message>
<message>
<source>Open Memory Editor at Object&apos;s Address (0x%1)</source>
@@ -26223,7 +26224,7 @@ markers in the source code editor.</source>
</message>
<message>
<source>Open Memory Editor Showing Stack Layout</source>
- <translation>Speichereditor an Adresse des Stack-Frames öffnen</translation>
+ <translation>Speichereditor an Adresse des Stackframes öffnen</translation>
</message>
<message>
<source>Open Memory Editor...</source>
@@ -26380,8 +26381,8 @@ markers in the source code editor.</source>
<message numerus="yes">
<source>Array of %n items</source>
<translation>
- <numerusform>Feld aus einem Element</numerusform>
- <numerusform>Feld aus %n Elementen</numerusform>
+ <numerusform>Array aus einem Element</numerusform>
+ <numerusform>Array aus %n Elementen</numerusform>
</translation>
</message>
<message>
@@ -26470,7 +26471,7 @@ If you have updated %2 via Maintenance Tool, you may need to rerun the Tool and
If you build %2 from sources and want to use a CDB executable with another bitness than your %2 build, you will need to build a separate CDB extension with the same bitness as the CDB you want to use.</source>
<translation>Interner Fehler: Die Erweiterung %1 wurde nicht gefunden.
Wenn Sie %2 mit dem Maintenance Tool aktualisiert haben, müssen Sie dieses vielleicht erneut ausführen, &quot;Komponenten hinzufügen oder entfernen&quot; auswählen und die Komponente Qt &gt; Tools &gt; Qt Creator CDB Debugger Support auswählen.
-Wenn Sie %2 aus den Quelltexten erstellen und eine ausführbare CDB-Datei mit einer anderen Architektur (32 Bit, 64 Bit) verwenden wollen als %2, müssen Sie eine separate CDB-Erweiterung mit der gleichen Architektur wie diese CDB-Datei erstellen.</translation>
+Wenn Sie %2 aus dem Quelltext erstellen und eine ausführbare CDB-Datei mit einer anderen Architektur (32 Bit, 64 Bit) verwenden wollen als %2, müssen Sie eine separate CDB-Erweiterung mit der gleichen Architektur wie diese CDB-Datei erstellen.</translation>
</message>
<message>
<source>Trace point %1 in thread %2 triggered.</source>
@@ -26587,14 +26588,14 @@ Installieren Sie das Paket &quot;Qt Debug Information Files&quot; für diese Qt-
You may be asked to share the contents of this log when reporting bugs related to debugger operation. In this case, make sure your submission does not contain data you do not want to or you are not allowed to share.
</source>
- <translation>Hinweis: Dieses Log enhält möglicherweise vertrauliche Informationen über Ihren Computer, Umgebungsvariablen, Speicherinhalte der untersuchten Prozesse oder weiteres. Es wird von %1 nie über das Internet übertragen und nur auf der Festplatte gespeichert, wenn Sie die entsprechende Option aus dem Kontextmenü aufrufen, oder durch Abläufe, die das Debugger-Plugin von %1 nicht beeinflussen kann, bespielsweise Auslagerungsdateien or andere Plugins, die Sie vielleicht benutzen.
+ <translation>Hinweis: Dieses Log enhält möglicherweise vertrauliche Informationen über Ihren Computer, Umgebungsvariablen, Speicherinhalte der untersuchten Prozesse oder weiteres. Es wird von %1 nie über das Internet übertragen und nur auf der Festplatte gespeichert, wenn Sie die entsprechende Option aus dem Kontextmenü aufrufen, oder durch Abläufe, die das Debugger-Plugin von %1 nicht beeinflussen kann, bespielsweise Auslagerungsdateien or andere Plugins, die Sie vielleicht verwenden.
Sie werden möglicherweise gebeten, den Inhalt dieses Logs mitzuteilen, wenn Sie über Fehlfunktionen des Debugger berichten. In diesem Fall achten Sie darauf, dass Ihre Einsendung nur Daten enthält, die Sie weitergeben wollen und dürfen.
</translation>
</message>
<message>
<source>User commands are not accepted in the current state.</source>
- <translation>Die Eingabe von Nutzerkommandos ist in diesem Zustand nicht möglich.</translation>
+ <translation>Die Eingabe von Benutzerkommandos ist in diesem Zustand nicht möglich.</translation>
</message>
<message>
<source>Log File</source>
@@ -27010,7 +27011,7 @@ Sie werden möglicherweise gebeten, den Inhalt dieses Logs mitzuteilen, wenn Sie
<source>Could not connect to the in-process QML debugger.
Do you want to retry?</source>
<translation>Konnte keine Verbindung zur Debuggerkomponente im Prozess herstellen.
-Soll es noch einmal versucht werden?</translation>
+Soll es erneut versucht werden?</translation>
</message>
<message>
<source>Starting %1</source>
@@ -27018,7 +27019,7 @@ Soll es noch einmal versucht werden?</translation>
</message>
<message>
<source>Cannot evaluate %1 in current stack frame.</source>
- <translation>%1 kann im aktuellen Stack-Frame nicht ausgewertet werden.</translation>
+ <translation>%1 kann im aktuellen Stackframe nicht ausgewertet werden.</translation>
</message>
<message>
<source>Context:</source>
@@ -27030,7 +27031,7 @@ Soll es noch einmal versucht werden?</translation>
</message>
<message>
<source>QML Debugger: Connection failed.</source>
- <translation>QML-Debugger: Verbindung gescheitert.</translation>
+ <translation>QML-Debugger: Verbindung fehlgeschlagen.</translation>
</message>
<message>
<source>JS Source for %1</source>
@@ -27082,7 +27083,7 @@ Soll es noch einmal versucht werden?</translation>
</message>
<message>
<source>&lt;p&gt;Add a mapping for Qt&apos;s source folders when using an unpatched version of Qt.</source>
- <translation>&lt;p&gt;Fügt eine Umsetzung für die Qt-Quellen hinzu, wenn eine nicht gepatchte Version von Qt benutzt wird.</translation>
+ <translation>&lt;p&gt;Fügt eine Umsetzung für die Qt-Quellen hinzu, wenn eine nicht gepatchte Version von Qt verwendet wird.</translation>
</message>
<message>
<source>&lt;p&gt;The source path contained in the debug information of the executable as reported by the debugger</source>
@@ -27098,7 +27099,7 @@ Soll es noch einmal versucht werden?</translation>
</message>
<message>
<source>&lt;p&gt;Mappings of source file folders to be used in the debugger can be entered here.&lt;/p&gt;&lt;p&gt;This is useful when using a copy of the source tree at a location different from the one at which the modules where built, for example, while doing remote debugging.&lt;/p&gt;&lt;p&gt;If source is specified as a regular expression by starting it with an open parenthesis, the paths in the ELF are matched with the regular expression to automatically determine the source path.&lt;/p&gt;&lt;p&gt;Example: &lt;b&gt;(/home/.*/Project)/KnownSubDir -&gt; D:\Project&lt;/b&gt; will substitute ELF built by any user to your local project directory.&lt;/p&gt;</source>
- <translation>&lt;p&gt;Hier können Zuordnungen für die beim Debuggen benutzten Quelldateien festgelegt werden.&lt;/p&gt;&lt;p&gt;Das ist nützlich, wenn eine lokale Kopie des Quelldateibaums verwendet wird, der sich von der beim Erstellen der Module verwendeten unterscheidet, zum Beispiel beim Remote-Debuggen.&lt;/p&gt;&lt;p&gt;Wenn die Zuordnung durch eine öffnende Klammer am Anfang als regulärer Ausdruck angegeben wird, werden die passenden Pfade im ELF verwendet um den Quellpfad automatisch zu bestimmen.&lt;/p&gt;&lt;p&gt;Beispiel: &lt;b&gt;(/home/.*/Projekt)/BekanntesUnterverzeichnis -&gt; D:\Projekt&lt;/b&gt; wird ein von einem beliebigen Benutzer erstelltes ELF in Ihr lokales Projektverzeichnis umleiten.&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;Hier können Zuordnungen für die beim Debuggen verwendeten Quelldateien festgelegt werden.&lt;/p&gt;&lt;p&gt;Das ist nützlich, wenn eine lokale Kopie des Quelldateibaums verwendet wird, der sich von der beim Erstellen der Module verwendeten unterscheidet, zum Beispiel beim Remote-Debuggen.&lt;/p&gt;&lt;p&gt;Wenn die Zuordnung durch eine öffnende Klammer am Anfang als regulärer Ausdruck angegeben wird, werden die passenden Pfade im ELF verwendet um den Quellpfad automatisch zu bestimmen.&lt;/p&gt;&lt;p&gt;Beispiel: &lt;b&gt;(/home/.*/Projekt)/BekanntesUnterverzeichnis -&gt; D:\Projekt&lt;/b&gt; wird ein von einem beliebigen Benutzer erstelltes ELF in Ihr lokales Projektverzeichnis umleiten.&lt;/p&gt;</translation>
</message>
<message>
<source>&amp;Target path:</source>
@@ -27150,7 +27151,7 @@ Soll es noch einmal versucht werden?</translation>
</message>
<message>
<source>&amp;Username:</source>
- <translation>&amp;Nutzername:</translation>
+ <translation>&amp;Benutzername:</translation>
</message>
<message>
<source>&amp;Password:</source>
@@ -27391,7 +27392,7 @@ Einzelschritte in das Modul und das Setzen von Haltepunkten nach Datei und Zeile
</message>
<message>
<source>Base path for external debug information and debug sources. If empty, $SYSROOT/usr/lib/debug will be chosen.</source>
- <translation>Basispfad für Debuginformationen und Quellen. Als Vorgabe wird $SYSROOT/usr/lib/debug benutzt.</translation>
+ <translation>Basispfad für Debuginformationen und Quellen. Als Vorgabe wird $SYSROOT/usr/lib/debug verwendet.</translation>
</message>
<message>
<source>&amp;Kit:</source>
@@ -27465,7 +27466,7 @@ Sie können hier eine andere Verbindung wählen, beispielsweise eine serielle Ve
</message>
<message>
<source>Use additional startup commands.</source>
- <translation>Benutze zusätzliche Kommandos beim Start.</translation>
+ <translation>Verwende zusätzliche Kommandos beim Start.</translation>
</message>
<message>
<source>C++ debugger:</source>
@@ -27537,7 +27538,7 @@ Sie können hier eine andere Verbindung wählen, beispielsweise eine serielle Ve
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The debugger is not configured to use the public Microsoft Symbol Server.&lt;br/&gt;This is recommended for retrieval of the symbols of the operating system libraries.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-style:italic;&quot;&gt;Note:&lt;/span&gt; It is recommended, that if you use the Microsoft Symbol Server, to also use a local symbol cache.&lt;br/&gt;A fast internet connection is required for this to work smoothly,&lt;br/&gt;and a delay might occur when connecting for the first time and caching the symbols.&lt;/p&gt;&lt;p&gt;What would you like to set up?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Der Debugger ist nicht zur Benutzung des öffentlichen Microsoft Symbol Servers eingerichtet.&lt;br/&gt;Dies wird zur Anzeige der Symbole der Betriebssystem-Bibliotheken empfohlen.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-style:italic;&quot;&gt;Hinweis:&lt;/span&gt; Bei der Verwendung des Microsoft Symbol Servers wird zusätzlich die Benutzung eines lokalen Zwischenspeichers für Symbole empfohlen.&lt;br/&gt;Allerdings ist dabei eine schnelle Internetverbindung für flüssiges Arbeiten erforderlich&lt;br/&gt;und bei der ersten Verbindung zum Zwischenspeichern der Symbole können Verzögerungen auftreten.&lt;/p&gt;&lt;p&gt;Was möchten Sie einrichten?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Der Debugger ist nicht zur Verwendung des öffentlichen Microsoft Symbol Servers eingerichtet.&lt;br/&gt;Dies wird zur Anzeige der Symbole der Betriebssystem-Bibliotheken empfohlen.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-style:italic;&quot;&gt;Hinweis:&lt;/span&gt; Bei der Verwendung des Microsoft Symbol Servers wird zusätzlich der Einsatz eines lokalen Zwischenspeichers für Symbole empfohlen.&lt;br/&gt;Allerdings ist dabei eine schnelle Internetverbindung für flüssiges Arbeiten erforderlich&lt;br/&gt;und bei der ersten Verbindung zum Zwischenspeichern der Symbole können Verzögerungen auftreten.&lt;/p&gt;&lt;p&gt;Was möchten Sie einrichten?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>Set up Symbol Paths</source>
@@ -27663,11 +27664,11 @@ Sie können hier eine andere Verbindung wählen, beispielsweise eine serielle Ve
</message>
<message>
<source>Reopen dialog when application finishes</source>
- <translation>Dialog nach Beendigung der Anwendung wieder öffnen</translation>
+ <translation>Dialog nach Beendigung der Anwendung erneut öffnen</translation>
</message>
<message>
<source>Reopens this dialog when application finishes.</source>
- <translation>Öffnet den Dialog nach Beendigung der Anwendung wieder.</translation>
+ <translation>Öffnet den Dialog nach Beendigung der Anwendung erneut.</translation>
</message>
<message>
<source>Continue on attach</source>
@@ -27711,7 +27712,7 @@ Sie können hier eine andere Verbindung wählen, beispielsweise eine serielle Ve
</message>
<message>
<source>The debugging helpers are used to produce a nice display of objects of certain types like QString or std::map in the &amp;quot;Locals&amp;quot; and &amp;quot;Expressions&amp;quot; views.</source>
- <translation>Die Ausgabe-Hilfsbibliothek wird benutzt um bestimmte Datentypen wie QString oder std::map in &amp;quot;Lokale Variablen&amp;quot; und &amp;quot;Ausdrücke&amp;quot; ansprechend anzuzeigen.</translation>
+ <translation>Die Ausgabe-Hilfsbibliothek wird verwendet um bestimmte Datentypen wie QString oder std::map in &amp;quot;Lokale Variablen&amp;quot; und &amp;quot;Ausdrücke&amp;quot; ansprechend anzuzeigen.</translation>
</message>
<message>
<source>Extra Debugging Helper</source>
@@ -28033,7 +28034,7 @@ Bitte wählen Sie einen 64-bit-Debugger in den Kit-Einstellungen für dieses Kit
</message>
<message>
<source>Reverse-execution history exhausted. Going forward again.</source>
- <translation>Keine weiteren rückwärts ausführbaren Schritte vorhanden. Führe sie wieder vorwärts aus.</translation>
+ <translation>Keine weiteren rückwärts ausführbaren Schritte vorhanden. Führe sie erneut vorwärts aus.</translation>
</message>
<message>
<source>Attempting to interrupt.</source>
@@ -28050,7 +28051,7 @@ Bitte wählen Sie einen 64-bit-Debugger in den Kit-Einstellungen für dieses Kit
</message>
<message>
<source>This debugger cannot handle user input.</source>
- <translation>Dieser Debugger kann keine Nutzereingaben verarbeiten.</translation>
+ <translation>Dieser Debugger kann keine Benutzereingaben verarbeiten.</translation>
</message>
<message>
<source>Stopped: &quot;%1&quot;.</source>
@@ -28180,7 +28181,7 @@ Für dieses Binärformat wären GDB oder LLDB besser als Debugger geeignet.</tra
</message>
<message>
<source>Reverse-execution recording failed.</source>
- <translation>Aufzeichnung für Rückwärtsausführung gescheitert.</translation>
+ <translation>Aufzeichnung für Rückwärtsausführung fehlgeschlagen.</translation>
</message>
<message>
<source>Found.</source>
@@ -28483,7 +28484,7 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl
</message>
<message>
<source>Use alternating row colors in debug views</source>
- <translation>Alternierende Farben für Zeilen in Debug-Ansichten benutzen</translation>
+ <translation>Alternierende Farben für Zeilen in Debug-Ansichten verwenden</translation>
</message>
<message>
<source>Changes the font size in the debugger views when the font size in the main editor changes.</source>
@@ -28495,7 +28496,7 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl
</message>
<message>
<source>Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting &apos;Adjust Breakpoint Locations&apos; shifts the red breakpoint markers in such cases to the location of the true breakpoint.</source>
- <translation>Nicht aus allen Quellcode-Zeilen wird ausführbarer Code erzeugt. Wenn man dort einen Haltepunkt setzt, verhält er sich so, als ob er auf die nächste Zeile gesetzt worden wäre, aus der Maschinencode erzeugt wurde. Das Aktivieren der Einstellung &apos;Positionen der Haltepunkte korrigieren&apos; bewirkt, dass der Haltepunkt-Marker in so einem Fall an die Stelle des resultierenden Haltepunkts verschoben wird.</translation>
+ <translation>Nicht aus allen Quelltext-Zeilen wird ausführbarer Code erzeugt. Wenn man dort einen Haltepunkt setzt, verhält er sich so, als ob er auf die nächste Zeile gesetzt worden wäre, aus der Maschinencode erzeugt wurde. Das Aktivieren der Einstellung &apos;Positionen der Haltepunkte korrigieren&apos; bewirkt, dass der Haltepunkt-Marker in so einem Fall an die Stelle des resultierenden Haltepunkts verschoben wird.</translation>
</message>
<message>
<source>Stopping and stepping in the debugger will automatically open views associated with the current location.</source>
@@ -28531,7 +28532,7 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl
</message>
<message>
<source>Use annotations in main editor when debugging</source>
- <translation>Annotationen im Haupt-Editor beim Debuggen benutzen</translation>
+ <translation>Annotationen im Haupt-Editor beim Debuggen verwenden</translation>
</message>
<message>
<source>Shows simple variable values as annotations in the main editor during debugging.</source>
@@ -28619,7 +28620,7 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl
</message>
<message>
<source>Maximum stack depth:</source>
- <translation>Maximale Stack-Tiefe:</translation>
+ <translation>Maximale Stacktiefe:</translation>
</message>
<message>
<source>&lt;unlimited&gt;</source>
@@ -28976,8 +28977,8 @@ Rebuilding the project might help.</source>
Versuchen Sie, das Projekt neu zu erstellen.</translation>
</message>
<message>
- <source>Qt Designer Form Class</source>
- <translation>Qt-Designer-Formularklasse</translation>
+ <source>Qt Widgets Designer Form Class</source>
+ <translation>Qt-Widgets-Designer-Formularklasse</translation>
</message>
<message>
<source>Class Details</source>
@@ -29008,8 +29009,8 @@ Versuchen Sie, das Projekt neu zu erstellen.</translation>
<translation>Shift+F4</translation>
</message>
<message>
- <source>Creates a Qt Designer form along with a matching class (C++ header and source file) for implementation purposes. You can add the form and class to an existing Qt Widget Project.</source>
- <translation>Erstellt ein Qt-Designer-Formular mit zugehörigem Klassenrumpf (bestehend aus C++-Header- und -Quelldatei) für Implementierungszwecke. Sie können Formular und Klasse zu einem existierenden Qt-Widget-Projekt hinzufügen.</translation>
+ <source>Creates a Qt Widgets Designer form along with a matching class (C++ header and source file) for implementation purposes. You can add the form and class to an existing Qt Widget Project.</source>
+ <translation>Erstellt ein Qt-Widgets-Designer-Formular mit zugehörigem Klassenrumpf (bestehend aus C++-Header- und -Quelldatei) für Implementierungszwecke. Sie können Formular und Klasse zu einem existierenden Qt-Widget-Projekt hinzufügen.</translation>
</message>
<message>
<source>Choose a Form Template</source>
@@ -29160,8 +29161,8 @@ Versuchen Sie, das Projekt neu zu erstellen.</translation>
<translation>Alt+Shift+R</translation>
</message>
<message>
- <source>About Qt Designer Plugins...</source>
- <translation>Über Qt Designer-Plugins...</translation>
+ <source>About Qt Widgets Designer Plugins...</source>
+ <translation>Über Qt Widgets Designer-Plugins...</translation>
</message>
<message>
<source>Preview in</source>
@@ -29730,7 +29731,7 @@ Versuchen Sie, das Projekt neu zu erstellen.</translation>
</message>
<message>
<source>Exchange Cursor and Mark</source>
- <translation>Textmarke und Markierung austauschen</translation>
+ <translation>Einfügemarke und Markierung austauschen</translation>
</message>
<message>
<source>Copy</source>
@@ -29868,7 +29869,7 @@ Versuchen Sie, das Projekt neu zu erstellen.</translation>
</message>
<message>
<source>Plugin Details of %1</source>
- <translation type="unfinished">Beschreibung zu %1</translation>
+ <translation>Beschreibung zu %1</translation>
</message>
<message>
<source>Group:</source>
@@ -30044,11 +30045,11 @@ Grund: %3</translation>
</message>
<message>
<source>Value for key &quot;%1&quot; is not an array of objects</source>
- <translation>Wert des Schlüssels &quot;%1&quot; ist kein Feld von Objekten</translation>
+ <translation>Wert des Schlüssels &quot;%1&quot; ist kein Array von Objekten</translation>
</message>
<message>
<source>Value for key &quot;%1&quot; is not a string and not an array of strings</source>
- <translation>Wert des Schlüssels &quot;%1&quot; ist keine Zeichenkette und auch kein Feld von Zeichenketten</translation>
+ <translation>Wert des Schlüssels &quot;%1&quot; ist keine Zeichenkette und auch kein Array von Zeichenketten</translation>
</message>
<message>
<source>Value &quot;%2&quot; for key &quot;%1&quot; has invalid format</source>
@@ -30137,7 +30138,7 @@ Grund: %3</translation>
<message>
<source>%1 (deprecated)</source>
<extracomment>%1 is a plugin name</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1 (veraltet)</translation>
</message>
<message>
<source>%1 (experimental)</source>
@@ -30212,7 +30213,7 @@ zu deaktivieren, deaktiviert auch die folgenden Plugins:
</message>
<message>
<source>Details</source>
- <translation type="unfinished">Details</translation>
+ <translation>Details</translation>
</message>
<message>
<source>The following plugins have errors and cannot be loaded:</source>
@@ -30228,7 +30229,7 @@ zu deaktivieren, deaktiviert auch die folgenden Plugins:
</message>
<message>
<source>Multiple versions of the same plugin have been found.</source>
- <translation type="unfinished"></translation>
+ <translation>Es wurden mehrere Versionen des gleichen Plugins gefunden.</translation>
</message>
<message>
<source>%1 &gt; About Plugins</source>
@@ -30259,7 +30260,7 @@ zu deaktivieren, deaktiviert auch die folgenden Plugins:
<name>QtC::FakeVim</name>
<message>
<source>Use FakeVim</source>
- <translation>FakeVim benutzen</translation>
+ <translation>FakeVim verwenden</translation>
</message>
<message>
<source>Read .vimrc from location:</source>
@@ -30347,7 +30348,7 @@ zu deaktivieren, deaktiviert auch die folgenden Plugins:
</message>
<message>
<source>Use system encoding for :source</source>
- <translation>System-Zeichenkodierung für :source benutzen</translation>
+ <translation>System-Zeichenkodierung für :source verwenden</translation>
</message>
<message>
<source>Scroll offset:</source>
@@ -30387,7 +30388,7 @@ zu deaktivieren, deaktiviert auch die folgenden Plugins:
</message>
<message>
<source>Use Vim-style Editing</source>
- <translation>Vim benutzen</translation>
+ <translation>Vim verwenden</translation>
</message>
<message>
<source>Mark &quot;%1&quot; not set.</source>
@@ -30412,11 +30413,11 @@ zu deaktivieren, deaktiviert auch die folgenden Plugins:
<message>
<source>Type Control-Shift-Y, Control-Shift-Y to quit FakeVim mode.</source>
<translatorcomment>These are the names of the actual keys on my german Apple keyboard https://support.apple.com/de-de/HT201236</translatorcomment>
- <translation>Benutzen sie Control-Umschalt-Y, Control-Umschalt-Y, um den FakeVim-Modus zu verlassen.</translation>
+ <translation>Verwenden sie Control-Umschalt-Y, Control-Umschalt-Y, um den FakeVim-Modus zu verlassen.</translation>
</message>
<message>
<source>Type Alt-Y, Alt-Y to quit FakeVim mode.</source>
- <translation>Benutzen Sie Alt-Y, Alt-Y, um den FakeVim-Modus zu verlassen.</translation>
+ <translation>Verwenden Sie Alt-Y, Alt-Y, um den FakeVim-Modus zu verlassen.</translation>
</message>
<message>
<source>Unknown option:</source>
@@ -30674,7 +30675,7 @@ zu deaktivieren, deaktiviert auch die folgenden Plugins:
</message>
<message>
<source>SSL/TLS client identity key to use if requested by the server.</source>
- <translation>SSL/TLS Client Identity Key, der benutzt werden soll, wenn der Server diesen anfordert.</translation>
+ <translation>Der SSL/TLS Client Identity Key, der auf Anforderung des Servers verwendet werden soll.</translation>
</message>
<message>
<source>Disable auto-sync</source>
@@ -30690,7 +30691,7 @@ zu deaktivieren, deaktiviert auch die folgenden Plugins:
</message>
<message>
<source>User:</source>
- <translation>Nutzer:</translation>
+ <translation>Benutzer:</translation>
</message>
<message>
<source>Repository Settings</source>
@@ -31102,7 +31103,7 @@ zu deaktivieren, deaktiviert auch die folgenden Plugins:
</message>
<message>
<source>User</source>
- <translation>Nutzer</translation>
+ <translation>Benutzer</translation>
</message>
<message>
<source>Miscellaneous</source>
@@ -31161,7 +31162,7 @@ zu deaktivieren, deaktiviert auch die folgenden Plugins:
</message>
<message>
<source>Imports existing projects that do not use qmake, CMake, Qbs, Meson, or Autotools. This allows you to use %1 as a code editor.</source>
- <translation>Importiert bereits existierende Projekte, die weder qmake, CMake, Qbs, Meson oder Autotools verwenden. Dadurch kann %1 als Code-Editor benutzt werden.</translation>
+ <translation>Importiert bereits existierende Projekte, die weder qmake, CMake, Qbs, Meson oder Autotools verwenden. Dadurch kann %1 als Code-Editor verwendet werden.</translation>
</message>
<message>
<source>Project Name and Location</source>
@@ -31340,7 +31341,7 @@ Jetzt Commit ausführen?</translation>
</message>
<message>
<source>Rebase, merge or am is in progress. Finish or abort it and then try again.</source>
- <translation>Es ist eine Rebase-, Merge- oder am-Operation aktiv. Bitte beenden oder brechen Sie sie ab und versuchen Sie es noch einmal.</translation>
+ <translation>Es ist eine Rebase-, Merge- oder am-Operation aktiv. Bitte beenden oder brechen Sie sie ab und versuchen Sie es erneut.</translation>
</message>
<message>
<source>Stash local changes and pop when %1 finishes.</source>
@@ -32359,7 +32360,7 @@ Möchten Sie ihn beenden?</translation>
</message>
<message>
<source>&amp;User:</source>
- <translation>&amp;Nutzer:</translation>
+ <translation>&amp;Benutzer:</translation>
</message>
<message>
<source>&amp;ssh:</source>
@@ -32403,7 +32404,7 @@ nicht konfiguriert ist.</translation>
</message>
<message>
<source>Invalid Gerrit configuration. Host, user and ssh binary are mandatory.</source>
- <translation>Ungültige Gerrit-Konfiguration. Host, Nutzer und ausführbare SSH-Datei müssen angegeben werden.</translation>
+ <translation>Ungültige Gerrit-Konfiguration. Host, Benutzer und ausführbare SSH-Datei müssen angegeben werden.</translation>
</message>
<message>
<source>Git is not available.</source>
@@ -32789,8 +32790,8 @@ Leer lassen, um das Dateisystem zu durchsuchen.</translation>
<message numerus="yes">
<source>Include branches and tags that have not been active for %n days.</source>
<translation>
- <numerusform>Branches und Tags einschließen, die seit einem Tag nicht benutzt wurden.</numerusform>
- <numerusform>Branches und Tags einschließen, die seit %n Tagen nicht benutzt wurden.</numerusform>
+ <numerusform>Branches und Tags einschließen, die seit einem Tag nicht verwendet wurden.</numerusform>
+ <numerusform>Branches und Tags einschließen, die seit %n Tagen nicht verwendet wurden.</numerusform>
</translation>
</message>
<message>
@@ -33501,7 +33502,7 @@ Hinweis: Dies macht Sie anfällig für Man-in-the-middle-Angriffe.</translation>
</message>
<message>
<source>Using project access token.</source>
- <translation>Benutze das Zugriffstoken des Projekts.</translation>
+ <translation>Verwende das Zugriffstoken des Projekts.</translation>
</message>
<message>
<source>Logged in as %1</source>
@@ -34089,7 +34090,7 @@ Hinweis: Dies macht Sie anfällig für Man-in-the-middle-Angriffe.</translation>
</message>
<message>
<source>Open in Edit Mode</source>
- <translation>Im Editieren-Modus öffnen</translation>
+ <translation>Im Bearbeiten-Modus öffnen</translation>
</message>
<message>
<source>Open in New Page</source>
@@ -34485,8 +34486,8 @@ Möchten Sie sie überschreiben?</translation>
<translation>Geben Sie die entsprechenden Argumente für das Erstellkommando ein.</translation>
</message>
<message>
- <source>Make sure the build command&apos;s multi-job parameter value is large enough (such as -j200 for the JOM or Make build tools)</source>
- <translation>Stellen Sie sicher, dass der Wert für die Anzahl paralleler Jobs im Erstellkommando groß genug ist (wie zum Beispiel -j200 für JOM oder Make)</translation>
+ <source>Make sure the build command&apos;s multi-job parameter value is large enough (such as -j200 for the JOM or Make build tools).</source>
+ <translation>Stellen Sie sicher, dass der Wert für die Anzahl paralleler Jobs im Erstellkommando groß genug ist (wie zum Beispiel -j200 für JOM oder Make).</translation>
</message>
<message>
<source>Keep original jobs number:</source>
@@ -34506,7 +34507,7 @@ Möchten Sie sie überschreiben?</translation>
</message>
<message>
<source>Defines how Automatic Interception Interface should handle the various processes involved in a distributed job. It is not necessary for &quot;Visual Studio&quot; or &quot;Make and Build tools&quot; builds, but can be used to provide configuration options if those builds use additional processes that are not included in those packages. It is required to configure distributable processes in &quot;Dev Tools&quot; builds.</source>
- <translation>Bestimmt, wie das Automatic Interception Interface die in einem verteilten Job involvierten Prozesse behandelt. Benötigt, um verteilte Prozesse in Kompilierungen mit &quot;Dev Tools&quot; zu konfigurieren. Nicht für Kompilierungen mit &quot;Visual Studio&quot; oder &quot;Make and Build tools&quot; benötigt, kann aber zur Konfiguration zusätzlicher Prozesse benutzt werden, die nicht in diesen Paketen enthalten sind.</translation>
+ <translation>Bestimmt, wie das Automatic Interception Interface die in einem verteilten Job involvierten Prozesse behandelt. Benötigt, um verteilte Prozesse in Kompilierungen mit &quot;Dev Tools&quot; zu konfigurieren. Nicht für Kompilierungen mit &quot;Visual Studio&quot; oder &quot;Make and Build tools&quot; benötigt, kann aber zur Konfiguration zusätzlicher Prozesse verwendet werden, die nicht in diesen Paketen enthalten sind.</translation>
</message>
<message>
<source>Avoid local task execution:</source>
@@ -34518,7 +34519,7 @@ Möchten Sie sie überschreiben?</translation>
</message>
<message>
<source>Determines the maximum number of CPU cores that can be used in a build, regardless of the number of available Agents. It takes into account both local and remote cores, even if the Avoid Task Execution on Local Machine option is selected.</source>
- <translation>Bestimmt unabhängig von der Anzahl verfügbarer Agents die maximale Anzahl CPU-Kerne, die beim Erstellen benutzt werden. Berücksichtigt sowohl lokale als auch entfernte Kerne, auch wenn die Option &quot;Lokales Ausführen von Aufgaben vermeiden&quot; ausgewählt ist.</translation>
+ <translation>Bestimmt unabhängig von der Anzahl verfügbarer Agents die maximale Anzahl CPU-Kerne, die beim Erstellen verwendet werden. Berücksichtigt sowohl lokale als auch entfernte Kerne, auch wenn die Option &quot;Lokales Ausführen von Aufgaben vermeiden&quot; ausgewählt ist.</translation>
</message>
<message>
<source>Maximum CPUs to utilize in the build:</source>
@@ -34550,7 +34551,7 @@ Möchten Sie sie überschreiben?</translation>
</message>
<message>
<source>Specifies a custom header line which will be displayed in the beginning of the build output text. This title will also be used for the Build History and Build Monitor displays.</source>
- <translation>Gibt eine benutzerdefinierte Kopfzeile an, die vor der Ausgabe der Kompilierung angezeigt wird. Dieser Titel wird auch für die Anzeigen &quot;Build History&quot; und &quot;Build Monitor&quot; benutzt.</translation>
+ <translation>Gibt eine benutzerdefinierte Kopfzeile an, die vor der Ausgabe der Kompilierung angezeigt wird. Dieser Titel wird auch für die Anzeigen &quot;Build History&quot; und &quot;Build Monitor&quot; verwendet.</translation>
</message>
<message>
<source>Save IncrediBuild monitor file:</source>
@@ -34558,7 +34559,7 @@ Möchten Sie sie überschreiben?</translation>
</message>
<message>
<source>Writes a copy of the build progress file (.ib_mon) to the specified location. If only a folder name is given, a generated GUID will serve as the file name. The full path of the saved Build Monitor will be written to the end of the build output.</source>
- <translation>Schreibt eine Kopie der Monitor-Datei (.ib_mon) an den angegebenen Ort. Wenn nur ein Verzeichnisname angegeben ist, wird eine generierte GUID als Dateiname benutzt. Der vollständige Pfad der gespeicherten Monitor-Datei wird am Ende der Ausgabe der Kompilierung angezeigt.</translation>
+ <translation>Schreibt eine Kopie der Monitor-Datei (.ib_mon) an den angegebenen Ort. Wenn nur ein Verzeichnisname angegeben ist, wird eine generierte GUID als Dateiname verwendet. Der vollständige Pfad der gespeicherten Monitor-Datei wird am Ende der Ausgabe der Kompilierung angezeigt.</translation>
</message>
<message>
<source>Suppress STDOUT:</source>
@@ -34582,7 +34583,7 @@ Möchten Sie sie überschreiben?</translation>
</message>
<message>
<source>Shows, for each file built, the command-line used by IncrediBuild to build the file.</source>
- <translation>Zeigt für jede Datei die Kommandozeile, die von IncrediBuild zum Erstellen der Datei benutzt wird.</translation>
+ <translation>Zeigt für jede Datei die Kommandozeile, die von IncrediBuild zum Erstellen der Datei verwendet wird.</translation>
</message>
<message>
<source>Show Agents in output:</source>
@@ -34590,7 +34591,7 @@ Möchten Sie sie überschreiben?</translation>
</message>
<message>
<source>Shows the Agent used to build each file.</source>
- <translation>Zeigt für jede Datei den Agent, der zum Erstellen der Datei benutzt wird.</translation>
+ <translation>Zeigt für jede Datei den Agent, der zum Erstellen der Datei verwendet wird.</translation>
</message>
<message>
<source>Show Time in output:</source>
@@ -34605,16 +34606,16 @@ Möchten Sie sie überschreiben?</translation>
<translation>IncrediBuilds Kopfzeile in der Ausgabe verstecken:</translation>
</message>
<message>
- <source>Suppresses IncrediBuild&apos;s header in the build output</source>
- <translation>Unterdrückt die Kopfzeile von IncrediBuild in der Ausgabe der Kompilierung</translation>
+ <source>Suppresses IncrediBuild&apos;s header in the build output.</source>
+ <translation>Unterdrückt die Kopfzeile von IncrediBuild in der Ausgabe der Kompilierung.</translation>
</message>
<message>
<source>Internal IncrediBuild logging level:</source>
<translation>Stufe der internen IncrediBuild-Protokollierung:</translation>
</message>
<message>
- <source>Overrides the internal Incredibuild logging level for this build. Does not affect output or any user accessible logging. Used mainly to troubleshoot issues with the help of IncrediBuild support</source>
- <translation>Überschreibt die Stufe der internen Protokollierung von IncrediBuild für diese Kompilierung. Beeinflusst weder die Ausgabe noch die dem Benutzer zugängliche Protokollierung. Wird hauptsächlich zur Fehlerbehebung mit Hilfe des Supports von IncrediBuild benutzt</translation>
+ <source>Overrides the internal Incredibuild logging level for this build. Does not affect output or any user accessible logging. Used mainly to troubleshoot issues with the help of IncrediBuild support.</source>
+ <translation>Überschreibt die Stufe der internen Protokollierung von IncrediBuild für diese Kompilierung. Beeinflusst weder die Ausgabe noch die dem Benutzer zugängliche Protokollierung. Wird hauptsächlich zur Fehlerbehebung mit Hilfe des Supports von IncrediBuild verwendet.</translation>
</message>
<message>
<source>Miscellaneous</source>
@@ -34633,16 +34634,16 @@ Möchten Sie sie überschreiben?</translation>
<translation>Bei Fehler anhalten:</translation>
</message>
<message>
- <source>When specified, the execution will stop as soon as an error is encountered. This is the default behavior in &quot;Visual Studio&quot; builds, but not the default for &quot;Make and Build tools&quot; or &quot;Dev Tools&quot; builds</source>
- <translation>Wenn angegeben, wird die Ausführung angehalten sobald ein Fehler auftritt. Dies ist das voreingestellte Verhalten bei Kompilierungen mit &quot;Visual Studio&quot;, aber nicht für Kompilierungen mit &quot;Make and Build tools&quot; oder &quot;Dev Tools&quot;</translation>
+ <source>When specified, the execution will stop as soon as an error is encountered. This is the default behavior in &quot;Visual Studio&quot; builds, but not the default for &quot;Make and Build tools&quot; or &quot;Dev Tools&quot; builds.</source>
+ <translation>Wenn angegeben, wird die Ausführung angehalten sobald ein Fehler auftritt. Dies ist das voreingestellte Verhalten bei Kompilierungen mit &quot;Visual Studio&quot;, aber nicht für Kompilierungen mit &quot;Make and Build tools&quot; oder &quot;Dev Tools&quot;.</translation>
</message>
<message>
<source>Additional Arguments:</source>
<translation>Zusätzliche Argumente:</translation>
</message>
<message>
- <source>Add additional buildconsole arguments manually. The value of this field will be concatenated to the final buildconsole command line</source>
- <translation>Fügt zusätzliche Argumente für buildconsole manuell hinzu. Der Inhalt dieses Eingabefelds wird an die finale Kommandozeile für buildconsole angefügt</translation>
+ <source>Add additional buildconsole arguments manually. The value of this field will be concatenated to the final buildconsole command line.</source>
+ <translation>Fügt zusätzliche Argumente für buildconsole manuell hinzu. Der Inhalt dieses Eingabefelds wird an die finale Kommandozeile für buildconsole angefügt.</translation>
</message>
<message>
<source>Open Build Monitor:</source>
@@ -34666,11 +34667,11 @@ Möchten Sie sie überschreiben?</translation>
</message>
<message>
<source>Force remote:</source>
- <translation>&quot;--force-remote&quot; benutzen:</translation>
+ <translation>&quot;--force-remote&quot; verwenden:</translation>
</message>
<message>
<source>Alternate tasks preference:</source>
- <translation>&quot;--alternate&quot; benutzen:</translation>
+ <translation>&quot;--alternate&quot; verwenden:</translation>
</message>
<message>
<source>CMake</source>
@@ -34782,7 +34783,7 @@ Möchten Sie sie überschreiben?</translation>
</message>
<message>
<source>The provisioning profile &quot;%1&quot; (%2) used to sign the application does not cover the device %3 (%4). Deployment to it will fail.</source>
- <translation>Das zum Signieren der Anwendung verwendete Provisioning-Profil &quot;%1&quot; (%2) deckt das Gerät %3 (%4) nicht ab. Deployment auf dieses wird scheitern.</translation>
+ <translation>Das zum Signieren der Anwendung verwendete Provisioning-Profil &quot;%1&quot; (%2) deckt das Gerät %3 (%4) nicht ab. Deployment auf dieses wird fehlschlagen.</translation>
</message>
<message>
<source>Deploy to iOS device</source>
@@ -34880,7 +34881,7 @@ Möchten Sie sie überschreiben?</translation>
</message>
<message>
<source>To use this device you need to enable developer mode on it.</source>
- <translation>Um dieses Gerät zu benutzen, müssen Sie darauf den Entwicklungsmodus aktivieren.</translation>
+ <translation>Um dieses Gerät zu verwenden, müssen Sie darauf den Entwicklungsmodus aktivieren.</translation>
</message>
<message>
<source>%1 is not connected. Select %2?</source>
@@ -34912,11 +34913,11 @@ Möchten Sie sie überschreiben?</translation>
</message>
<message>
<source>Application install on simulator failed. Simulator not running.</source>
- <translation>Die Installation der Anwendung im Simulator ist gescheitert. Der Simulator läuft nicht.</translation>
+ <translation>Die Installation der Anwendung im Simulator ist fehlgeschlagen. Der Simulator läuft nicht.</translation>
</message>
<message>
<source>Application launch on simulator failed. Invalid bundle path %1</source>
- <translation>Der Start der Anwendung im Simulator ist gescheitert. Der Bundle-Pfad %1 ist ungültig</translation>
+ <translation>Der Start der Anwendung im Simulator ist fehlgeschlagen. Der Bundle-Pfad %1 ist ungültig</translation>
</message>
<message>
<source>Application launch on simulator failed. Simulator not running. %1</source>
@@ -34924,7 +34925,7 @@ Möchten Sie sie überschreiben?</translation>
</message>
<message>
<source>Application install on simulator failed. %1</source>
- <translation>Die Installation der Anwendung im Simulator ist gescheitert. %1</translation>
+ <translation>Die Installation der Anwendung im Simulator ist fehlgeschlagen. %1</translation>
</message>
<message>
<source>Cannot capture console output from %1. Error redirecting output to %2.*</source>
@@ -34936,7 +34937,7 @@ Möchten Sie sie überschreiben?</translation>
</message>
<message>
<source>Application launch on simulator failed. %1</source>
- <translation>Der Start der Anwendung im Simulator ist gescheitert. %1</translation>
+ <translation>Der Start der Anwendung im Simulator ist fehlgeschlagen. %1</translation>
</message>
<message>
<source>Invalid simulator response. Device Id mismatch. Device Id = %1 Response Id = %2</source>
@@ -35282,7 +35283,7 @@ Ablaufdatum: %3</translation>
</message>
<message>
<source>Using default development team and provisioning profile.</source>
- <translation>Die Vorgaben für Entwicklerteam und Provisioning-Profil werden benutzt.</translation>
+ <translation>Die Vorgaben für Entwicklerteam und Provisioning-Profil werden verwendet.</translation>
</message>
<message>
<source>Development team: %1 (%2)</source>
@@ -35294,7 +35295,7 @@ Ablaufdatum: %3</translation>
</message>
<message>
<source>%1 not configured. Use Xcode and Apple developer account to configure the provisioning profiles and teams.</source>
- <translation>%1 sind nicht konfiguriert. Benutzen Sie Xcode und Ihr Apple-Entwicklerkonto, um die Provisioning-Profile und Teams zu konfigurieren.</translation>
+ <translation>%1 sind nicht konfiguriert. Verwenden Sie Xcode und Ihr Apple-Entwicklerkonto, um die Provisioning-Profile und Teams zu konfigurieren.</translation>
</message>
<message>
<source>Development teams</source>
@@ -35565,7 +35566,7 @@ Beispiel: *.cpp%1*.h</translation>
<source>Additional JSON configuration sent to all running language servers for this project.
See the documentation of the specific language server for valid settings.</source>
<translation>Zusätzliche JSON-Konfiguration, die an alle laufenden Language Server für dieses Projekt gesendet wird.
-Für gültige Einstellungen schauen Sie in die Dokumentation des benutzten Language Servers.</translation>
+Für gültige Einstellungen schauen Sie in die Dokumentation des verwendeten Language Servers.</translation>
</message>
<message>
<source>&amp;Add</source>
@@ -36491,15 +36492,15 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des benutzten Langu
</message>
<message>
<source>User</source>
- <translation>Nutzer</translation>
+ <translation>Benutzer</translation>
</message>
<message>
<source>Username to use by default on commit.</source>
- <translation>Nutzername für Commit.</translation>
+ <translation>Benutzername für Commit.</translation>
</message>
<message>
<source>Default username:</source>
- <translation>Vorgabe für Nutzernamen:</translation>
+ <translation>Vorgabe für Benutzernamen:</translation>
</message>
<message>
<source>Email to use by default on commit.</source>
@@ -36539,7 +36540,7 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des benutzten Langu
</message>
<message>
<source>Prompt for credentials</source>
- <translation>Nutzerdaten abfragen</translation>
+ <translation>Benutzerdaten abfragen</translation>
</message>
<message>
<source>For example: &quot;https://[user[:pass]@]host[:port]/[path]&quot;.</source>
@@ -37033,7 +37034,7 @@ Dies ist hilfreich, wenn das Build-Verzeichnis beschädigt ist oder das Projekt
</message>
<message>
<source>Edit Element Properties</source>
- <translation>Elementeigenschaften editieren</translation>
+ <translation>Elementeigenschaften bearbeiten</translation>
</message>
<message>
<source>Shift+Return</source>
@@ -37041,7 +37042,7 @@ Dies ist hilfreich, wenn das Build-Verzeichnis beschädigt ist oder das Projekt
</message>
<message>
<source>Edit Item on Diagram</source>
- <translation>Element auf Diagramm editieren</translation>
+ <translation>Element auf Diagramm bearbeiten</translation>
</message>
<message>
<source>Return</source>
@@ -37346,7 +37347,7 @@ Dies ist hilfreich, wenn das Build-Verzeichnis beschädigt ist oder das Projekt
<name>QtC::PerfProfiler</name>
<message>
<source>Stack snapshot size (kB):</source>
- <translation>Größe des Stack-Abbilds (kB):</translation>
+ <translation>Größe des Stackabbilds (kB):</translation>
</message>
<message>
<source>Call graph mode:</source>
@@ -37963,7 +37964,7 @@ Weitere Erklärungen sind möglicherweise in &quot;Ausgabe der Anwendung&quot; z
</message>
<message>
<source>Edit File</source>
- <translation>Datei zum Editieren anfordern</translation>
+ <translation>Datei zum Bearbeiten anfordern</translation>
</message>
<message>
<source>Add</source>
@@ -38315,15 +38316,15 @@ Weitere Erklärungen sind möglicherweise in &quot;Ausgabe der Anwendung&quot; z
</message>
<message>
<source>P4 client:</source>
- <translation>P4 Client:</translation>
+ <translation>P4-Client:</translation>
</message>
<message>
<source>P4 user:</source>
- <translation>P4 Nutzer:</translation>
+ <translation>P4-Benutzer:</translation>
</message>
<message>
<source>P4 port:</source>
- <translation>P4 Port-Nummer:</translation>
+ <translation>P4-Port:</translation>
</message>
<message>
<source>Environment Variables</source>
@@ -38343,7 +38344,7 @@ Weitere Erklärungen sind möglicherweise in &quot;Ausgabe der Anwendung&quot; z
</message>
<message>
<source>User:</source>
- <translation>Nutzer:</translation>
+ <translation>Benutzer:</translation>
</message>
<message>
<source>No executable specified</source>
@@ -38600,7 +38601,7 @@ Weitere Erklärungen sind möglicherweise in &quot;Ausgabe der Anwendung&quot; z
</message>
<message>
<source>Locates files of all open projects. Append &quot;+&lt;number&gt;&quot; or &quot;:&lt;number&gt;&quot; to jump to the given line number. Append another &quot;+&lt;number&gt;&quot; or &quot;:&lt;number&gt;&quot; to jump to the column number as well.</source>
- <translation>Findet Dateien in allen geöffneten Projekten. Fügen Sie &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um zur angegebenen Zeile zu springen. Fügen Sie noch einmal &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um auch zur angegebenen Spalte zu springen.</translation>
+ <translation>Findet Dateien in allen geöffneten Projekten. Fügen Sie &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um zur angegebenen Zeile zu springen. Fügen Sie erneut &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um auch zur angegebenen Spalte zu springen.</translation>
</message>
<message>
<source>All Projects</source>
@@ -38700,7 +38701,7 @@ Außer: %2
</message>
<message>
<source>Locates files from the current document&apos;s project. Append &quot;+&lt;number&gt;&quot; or &quot;:&lt;number&gt;&quot; to jump to the given line number. Append another &quot;+&lt;number&gt;&quot; or &quot;:&lt;number&gt;&quot; to jump to the column number as well.</source>
- <translation>Findet Dateien im Projekt des aktuellen Dokuments. Fügen Sie &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um zur angegebenen Zeile zu springen. Fügen Sie noch einmal &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um auch zur angegebenen Spalte zu springen.</translation>
+ <translation>Findet Dateien im Projekt des aktuellen Dokuments. Fügen Sie &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um zur angegebenen Zeile zu springen. Fügen Sie erneut &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um auch zur angegebenen Spalte zu springen.</translation>
</message>
<message>
<source>Project &quot;%1&quot;</source>
@@ -38763,7 +38764,7 @@ konnte dem Projekt &quot;%2&quot; nicht hinzugefügt werden.</translation>
</message>
<message>
<source>Hide Source and Header Groups</source>
- <translation>Source- und Headergruppen ausblenden</translation>
+ <translation>Quelltext- und Header-Gruppenverzeichnisse ausblenden</translation>
</message>
<message>
<source>Synchronize with Editor</source>
@@ -39334,7 +39335,7 @@ Bitte versuchen Sie es erneut.</translation>
</message>
<message>
<source>Expand</source>
- <translation>Erweitern</translation>
+ <translation>Aufklappen</translation>
</message>
<message>
<source>Ctrl+T</source>
@@ -39450,7 +39451,7 @@ Bitte versuchen Sie es erneut.</translation>
</message>
<message>
<source>Locates files from all project directories. Append &quot;+&lt;number&gt;&quot; or &quot;:&lt;number&gt;&quot; to jump to the given line number. Append another &quot;+&lt;number&gt;&quot; or &quot;:&lt;number&gt;&quot; to jump to the column number as well.</source>
- <translation>Findet Dateien in allen Projektverzeichnissen. Fügen Sie &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um zur angegebenen Zeile zu springen. Fügen Sie noch einmal &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um auch zur angegebenen Spalte zu springen.</translation>
+ <translation>Findet Dateien in allen Projektverzeichnissen. Fügen Sie &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um zur angegebenen Zeile zu springen. Fügen Sie erneut &quot;+&lt;Zahl&gt;&quot; oder &quot;:&lt;Zahl&gt;&quot; an, um auch zur angegebenen Spalte zu springen.</translation>
</message>
<message>
<source>Run Run Configuration</source>
@@ -39462,11 +39463,11 @@ Bitte versuchen Sie es erneut.</translation>
</message>
<message>
<source>Debug Run Configuration</source>
- <translation type="unfinished"></translation>
+ <translation>Ausführungskonfiguration debuggen</translation>
</message>
<message>
<source>Starts debugging a run configuration of the active project.</source>
- <translation type="unfinished"></translation>
+ <translation>Startet das Debuggen einer Ausführungskonfiguration des aktiven Projekts.</translation>
</message>
<message>
<source>Switch Run Configuration</source>
@@ -40108,7 +40109,7 @@ The name of the build configuration created by default for a generic project.</e
</message>
<message>
<source>Remote process did not finish in time. Connectivity lost?</source>
- <translation type="unfinished"></translation>
+ <translation>Der entfernte Prozess wurde nicht rechtzeitig beendet. Verbindung verloren?</translation>
</message>
<message>
<source>Starting %1...</source>
@@ -40248,11 +40249,11 @@ Aktivieren Sie dies, wenn Sie 32bit-x86-Binärdateien erstellen wollen, ohne ein
</message>
<message>
<source>The following compiler was already configured:&lt;br&gt;&amp;nbsp;%1&lt;br&gt;It was not configured again.</source>
- <translation>Der folgende Compiler ist bereits konfiguriert:&lt;br&gt;&amp;nbsp;%1&lt;br&gt;Er wurde nicht noch einmal konfiguriert.</translation>
+ <translation>Der folgende Compiler ist bereits konfiguriert:&lt;br&gt;&amp;nbsp;%1&lt;br&gt;Er wurde nicht erneut konfiguriert.</translation>
</message>
<message>
<source>The following compilers were already configured:&lt;br&gt;&amp;nbsp;%1&lt;br&gt;They were not configured again.</source>
- <translation>Die folgenden Compiler wurden bereits konfiguriert:&lt;br&gt;&amp;nbsp;%1&lt;br&gt;Sie wurden nicht noch einmal konfiguriert.</translation>
+ <translation>Die folgenden Compiler wurden bereits konfiguriert:&lt;br&gt;&amp;nbsp;%1&lt;br&gt;Sie wurden nicht erneut konfiguriert.</translation>
</message>
<message>
<source>Clone of %1</source>
@@ -40587,7 +40588,7 @@ Aktivieren Sie dies, wenn Sie 32bit-x86-Binärdateien erstellen wollen, ohne ein
</message>
<message>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The name of the kit suitable for generating directory names. This value is used for the variable &lt;i&gt;%1&lt;/i&gt;, which for example determines the name of the shadow build directory.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Der Name des Kits, der zum Erzeugen von Verzeichnisnamen geeignet ist. Dieser Wert wird für die Variable &lt;i&gt;%1&lt;/i&gt; benutzt, die zum Beispiel den Namen des Shadow-Build-Verzeichnisses bestimmt.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Der Name des Kits, der zum Erzeugen von Verzeichnisnamen geeignet ist. Dieser Wert wird für die Variable &lt;i&gt;%1&lt;/i&gt; verwendet, die zum Beispiel den Namen des Shadow-Build-Verzeichnisses bestimmt.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>File system name:</source>
@@ -40871,7 +40872,7 @@ Aktivieren Sie dies, wenn Sie 32bit-x86-Binärdateien erstellen wollen, ohne ein
<message>
<source>The process cannot access the file because it is being used by another process.
Please close all running instances of your application before starting a build.</source>
- <translation>Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess benutzt wird.
+ <translation>Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.
Bitte schließen Sie alle laufenden Instanzen Ihrer Anwendung vor dem Erstellen.</translation>
</message>
<message>
@@ -41051,11 +41052,11 @@ Bitte schließen Sie alle laufenden Instanzen Ihrer Anwendung vor dem Erstellen.
</message>
<message>
<source>File Generation Failed</source>
- <translation>Dateierzeugung gescheitert</translation>
+ <translation>Dateierzeugung fehlgeschlagen</translation>
</message>
<message>
<source>The wizard failed to generate files.&lt;br&gt;The error message was: &quot;%1&quot;.</source>
- <translation>Der Wizard scheiterte beim Erzeugen von Dateien.&lt;br&gt;Die Fehlermeldung war: &quot;%1&quot;.</translation>
+ <translation>Der Wizard konnte Dateien nicht erzeugen.&lt;br&gt;Die Fehlermeldung war: &quot;%1&quot;.</translation>
</message>
<message>
<source>Failed to Overwrite Files</source>
@@ -41075,7 +41076,7 @@ Bitte schließen Sie alle laufenden Instanzen Ihrer Anwendung vor dem Erstellen.
</message>
<message>
<source>Failed to Polish Files</source>
- <translation>&quot;Polish&quot; von Dateien gescheitert</translation>
+ <translation>&quot;Polish&quot; von Dateien fehlgeschlagen</translation>
</message>
<message>
<source>Failed to Open Files</source>
@@ -41284,10 +41285,10 @@ Bitte schließen Sie alle laufenden Instanzen Ihrer Anwendung vor dem Erstellen.
<translation>Pfad</translation>
</message>
<message>
- <source>Creates a widget-based Qt application that contains a Qt Designer-based main window and C++ source and header files to implement the application logic.
+ <source>Creates a widget-based Qt application that contains a Qt Widgets Designer-based main window and C++ source and header files to implement the application logic.
Preselects a desktop Qt for building the application if available.</source>
- <translation>Erstellt eine Widget-basierte Qt-Anwendung mit einem Qt Designer-basierten Hauptfenster und C++-Quell- und Headerdateien zur Implementierung der Applikationslogik.
+ <translation>Erstellt eine Widget-basierte Qt-Anwendung mit einem Qt Widgets Designer-basierten Hauptfenster und C++-Quell- und Headerdateien zur Implementierung der Applikationslogik.
Wählt eine für Desktop-Entwicklung geeignete Qt-Version aus, sofern verfügbar.</translation>
</message>
@@ -41317,7 +41318,7 @@ Wählt eine für Desktop-Entwicklung geeignete Qt-Version aus, sofern verfügbar
Use this &quot;compat&quot; version if you want to use other build systems than CMake or Qt versions lower than 6.</source>
<translation>Erstellt eine Qt Quick-Anwendung, die ein leeres Fenster enthält.
-Nutzen Sie diese &quot;Kompatibilitätsversion&quot;, falls Sie andere Buildsysteme als CMake oder frühere Qt-Versionen als Qt 6 benutzen wollen.</translation>
+Nutzen Sie diese &quot;Kompatibilitätsversion&quot;, falls Sie andere Buildsysteme als CMake oder frühere Qt-Versionen als Qt 6 verwenden wollen.</translation>
</message>
<message>
<source>Qt Quick Application (compat)</source>
@@ -41380,11 +41381,11 @@ Wahlweise können Sie ein Projekt erstellen, das in Qt Design Studio geöffnet w
<translation>Formularvorlage</translation>
</message>
<message>
- <source>Creates a Qt Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic.</source>
- <translation>Erstellt ein Qt-Designer-Formular, das Sie zu einem Qt Widget-Projekt hinzufügen können. Dies ist nützlich, wenn Sie bereits eine Klasse für die Anwendungslogik haben.</translation>
+ <source>Creates a Qt Widgets Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic.</source>
+ <translation>Erstellt ein Qt-Widgets-Designer-Formular, das Sie zu einem Qt Widget-Projekt hinzufügen können. Dies ist nützlich, wenn Sie bereits eine Klasse für die Anwendungslogik haben.</translation>
</message>
<message>
- <source>Qt Designer Form</source>
+ <source>Qt Widgets Designer Form</source>
<translation>Qt-Designer-Formular</translation>
</message>
<message>
@@ -41451,7 +41452,7 @@ Wahlweise können Sie ein Projekt erstellen, das in Qt Design Studio geöffnet w
<source>You must tell Qt Creator which test framework is used inside the project.
You should not mix multiple test frameworks in a project.</source>
- <translation>Sie müssen Qt Creator mitteilen, welches Test-Framework im Projekt benutzt wird.
+ <translation>Sie müssen Qt Creator mitteilen, welches Test-Framework im Projekt verwendet wird.
Sie sollten nicht mehrere Test-Frameworks im selben Projekt mischen.</translation>
</message>
@@ -41823,7 +41824,7 @@ Sie sollten nicht mehrere Test-Frameworks im selben Projekt mischen.</translatio
</message>
<message>
<source>Specify basic information about the classes for which you want to generate skeleton source code files.</source>
- <translation>Geben Sie Informationen bezüglich der Klassen ein, für die Sie Quelltexte generieren wollen.</translation>
+ <translation>Geben Sie Informationen bezüglich der Klassen ein, für die Sie Quelltext generieren wollen.</translation>
</message>
<message>
<source>Fully qualified name, including namespaces</source>
@@ -41898,8 +41899,8 @@ Sie sollten nicht mehrere Test-Frameworks im selben Projekt mischen.</translatio
<translation>Leeres Fenster</translation>
</message>
<message>
- <source>Creates a Qt for Python application that includes a Qt Designer-based widget (ui file). Requires .ui to Python conversion.</source>
- <translation>Erstellt eine Qt for Python-Anwendung, die ein Qt Designer-basiertes Widget (ui-Datei) enthält. Erfordert Umwandlung von .ui nach Python.</translation>
+ <source>Creates a Qt for Python application that includes a Qt Widgets Designer-based widget (ui file). Requires .ui to Python conversion.</source>
+ <translation>Erstellt eine Qt for Python-Anwendung, die ein Qt Widgets Designer-basiertes Widget (ui-Datei) enthält. Erfordert Umwandlung von .ui nach Python.</translation>
</message>
<message>
<source>Window UI</source>
@@ -41915,7 +41916,7 @@ Sie sollten nicht mehrere Test-Frameworks im selben Projekt mischen.</translatio
</message>
<message>
<source>Include QQuickItem</source>
- <translation type="unfinished"></translation>
+ <translation>QQuickItem einbinden</translation>
</message>
<message>
<source>Qt 6.2</source>
@@ -42047,7 +42048,7 @@ Sie sollten nicht mehrere Test-Frameworks im selben Projekt mischen.</translatio
</message>
<message>
<source>The minimum version of Qt you want to build the application for</source>
- <translation>Die niedrigste Qt-Version, die Sie zum Bauen der Anwendung benutzen wollen</translation>
+ <translation>Die niedrigste Qt-Version, die Sie zum Bauen der Anwendung verwenden wollen</translation>
</message>
<message>
<source>This wizard creates a simple unit test project using Boost.</source>
@@ -42143,23 +42144,23 @@ Sie sollten nicht mehrere Test-Frameworks im selben Projekt mischen.</translatio
</message>
<message>
<source>Creates a translation file that you can add to a Qt project.</source>
- <translation type="unfinished"></translation>
+ <translation>Erzeugt eine Übersetzungsdatei, die Sie zu einem Qt-Projekt hinzufügen können.</translation>
</message>
<message>
<source>Qt Translation File</source>
- <translation type="unfinished"></translation>
+ <translation>Qt Übersetzungsdatei</translation>
</message>
<message>
<source>2.x</source>
- <translation type="unfinished"></translation>
+ <translation>2.x</translation>
</message>
<message>
<source>3.x</source>
- <translation type="unfinished"></translation>
+ <translation>3.x</translation>
</message>
<message>
<source>Catch2 version:</source>
- <translation type="unfinished"></translation>
+ <translation>Catch2-Version:</translation>
</message>
<message>
<source>Creates a CMake-based test project for which a code snippet can be entered.</source>
@@ -42650,45 +42651,32 @@ Sie sollten nicht mehrere Test-Frameworks im selben Projekt mischen.</translatio
<translation>Page mit typeId &quot;%1&quot; hat ungültigen &quot;index&quot;.</translation>
</message>
<message>
- <source>Path &quot;%1&quot; does not exist when checking Json wizard search paths.
-</source>
- <translation>Pfad &quot;%1&quot; existiert nicht in Json-Wizard Suchpfaden.
-</translation>
+ <source>Path &quot;%1&quot; does not exist when checking JSON wizard search paths.</source>
+ <translation>Pfad &quot;%1&quot; existiert nicht in JSON-Wizard Suchpfaden.</translation>
</message>
<message>
- <source>Checking &quot;%1&quot; for %2.
-</source>
- <translation>Prüfe &quot;%1&quot; für %2.
-</translation>
+ <source>Checking &quot;%1&quot; for %2.</source>
+ <translation>Prüfe &quot;%1&quot; für %2.</translation>
</message>
<message>
- <source>* Failed to parse &quot;%1&quot;:%2:%3: %4
-</source>
- <translation>* Konnte &quot;%1&quot; nicht auswerten: %2:%3: %4
-</translation>
+ <source>* Failed to parse &quot;%1&quot;:%2:%3: %4</source>
+ <translation>* Konnte &quot;%1&quot; nicht auswerten: %2:%3: %4</translation>
</message>
<message>
- <source>* Did not find a JSON object in &quot;%1&quot;.
-</source>
- <translation>* Kein JSON-Objekt in &quot;%1&quot; gefunden.
-</translation>
+ <source>* Did not find a JSON object in &quot;%1&quot;.</source>
+ <translation>* Kein JSON-Objekt in &quot;%1&quot; gefunden.</translation>
</message>
<message>
- <source>* Configuration found and parsed.
-</source>
- <translation>* Konfiguration gefunden und ausgewertet.
-</translation>
+ <source>* Configuration found and parsed.</source>
+ <translation>* Konfiguration gefunden und ausgewertet.</translation>
</message>
<message>
- <source>* Version %1 not supported.
-</source>
- <translation>* Version %1 nicht unterstützt.
-</translation>
+ <source>* Version %1 not supported.</source>
+ <translation>* Version %1 nicht unterstützt.</translation>
</message>
<message>
- <source>* Failed to create: %1
-</source>
- <translation type="unfinished"></translation>
+ <source>* Failed to create: %1</source>
+ <translation>* Erstellen fehlgeschlagen: %1</translation>
</message>
<message>
<source>The platform selected for the wizard.</source>
@@ -42719,10 +42707,8 @@ Sie sollten nicht mehrere Test-Frameworks im selben Projekt mischen.</translatio
<translation>Bilddatei &quot;%1&quot; nicht gefunden.</translation>
</message>
<message>
- <source>JsonWizard: &quot;%1&quot; not found
-</source>
- <translation>JsonWizard: &quot;%1&quot; nicht gefunden
-</translation>
+ <source>JsonWizard: &quot;%1&quot; not found.</source>
+ <translation>JsonWizard: &quot;%1&quot; nicht gefunden.</translation>
</message>
<message>
<source>key not found.</source>
@@ -42820,7 +42806,7 @@ Sie sollten nicht mehrere Test-Frameworks im selben Projekt mischen.</translatio
</message>
<message>
<source>Project &quot;%1&quot; was configured for kit &quot;%2&quot; with id %3, which does not exist anymore. You can create a new kit or copy the steps of the vanished kit to another kit in %4 mode.</source>
- <translation type="unfinished"></translation>
+ <translation>Das Projekt &quot;%1&quot; wurde für das Kit &quot;%2&quot; mit ID %3 konfiguriert, das nicht mehr existiert. Sie können im %4-Modus ein neues Kit erstellen oder die Schritte des verschwundenen Kits in ein anderes Kit kopieren.</translation>
</message>
<message>
<source>Could not find any qml_*.qm file at &quot;%1&quot;</source>
@@ -43072,40 +43058,40 @@ Sie werden erhalten.</numerusform>
</message>
<message>
<source>The project was configured for kits that no longer exist. Select one of the following options in the context menu to restore the project&apos;s settings:</source>
- <translation type="unfinished"></translation>
+ <translation>Das Projekt wurde für Kits konfiguriert, die nicht mehr existieren. Wählen Sie eine der folgenden Optionen aus dem Kontextmenü, um die Projekteinstellungen wiederherzustellen:</translation>
</message>
<message>
<source>Create a new kit with the same name for the same device type, with the original build, deploy, and run steps. Other kit settings are not restored.</source>
- <translation type="unfinished"></translation>
+ <translation>Erstelle ein neues Kit mit demselben Namen und für denselben Gerätetyp mit den ursprünglichen Schritten zum Erstellen, Deployment und Ausführen. Andere Einstellungen des Kits werden nicht wiederhergestellt.</translation>
</message>
<message>
<source>Copy the build, deploy, and run steps to another kit.</source>
- <translation type="unfinished"></translation>
+ <translation>Kopiere die Schritte zum Erstellen, Deployment und Ausführen in ein anderes Kit.</translation>
</message>
<message>
<source>%1 (%2)</source>
<extracomment>vanished target display role: vanished target name (device type name)</extracomment>
- <translation type="unfinished">%1 (%2)</translation>
+ <translation>%1 (%2)</translation>
</message>
<message>
<source>Create a New Kit</source>
- <translation type="unfinished"></translation>
+ <translation>Ein neues Kit erstellen</translation>
</message>
<message>
<source>Copy Steps to Another Kit</source>
- <translation type="unfinished"></translation>
+ <translation>Schritte in ein anderes Kit kopieren</translation>
</message>
<message>
<source>Remove Vanished Target &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
+ <translation>Verschwundenes Ziel &quot;%1&quot; entfernen</translation>
</message>
<message>
<source>Remove All Vanished Targets</source>
- <translation type="unfinished"></translation>
+ <translation>Alle verschwundenen Ziele entfernen</translation>
</message>
<message>
<source>Vanished Targets</source>
- <translation type="unfinished"></translation>
+ <translation>Verschwundene Ziele</translation>
</message>
<message>
<source>Project Settings</source>
@@ -43338,7 +43324,7 @@ Was soll %1 tun?</translation>
</message>
<message>
<source>A version control operation failed for the following files. Please check your repository.</source>
- <translation>Für die folgenden Dateien ist eine Versionskontroll-Operation gescheitert. Bitte prüfen Sie Ihr Repository.</translation>
+ <translation>Für die folgenden Dateien ist eine Versionskontroll-Operation fehlgeschlagen. Bitte prüfen Sie Ihr Repository.</translation>
</message>
<message>
<source>Failure Updating Project</source>
@@ -43442,15 +43428,15 @@ Was soll %1 tun?</translation>
</message>
<message>
<source>Overriding &lt;code&gt;MAKEFLAGS&lt;/code&gt; environment variable.</source>
- <translation type="unfinished"></translation>
+ <translation>Überschreibe die &lt;code&gt;MAKEFLAGS&lt;/code&gt; Umgebungsvariable.</translation>
</message>
<message>
<source>&lt;code&gt;MAKEFLAGS&lt;/code&gt; specifies a conflicting job count.</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;code&gt;MAKEFLAGS&lt;/code&gt; gibt eine zu den Einstellungen widersprüchliche Anzahl Jobs an.</translation>
</message>
<message>
<source>No conflict with &lt;code&gt;MAKEFLAGS&lt;/code&gt; environment variable.</source>
- <translation type="unfinished"></translation>
+ <translation>Kein Konflikt mit der &lt;code&gt;MAKEFLAGS&lt;/code&gt; Umgebungsvariable.</translation>
</message>
<message>
<source>Enable connection sharing:</source>
@@ -43560,11 +43546,11 @@ Was soll %1 tun?</translation>
</message>
<message>
<source>Build directory contains potentially problematic character &quot;%1&quot;.</source>
- <translation type="unfinished"></translation>
+ <translation>Das Build-Verzeichnis enthält das möglicherweise problematische Zeichen &quot;%1&quot;.</translation>
</message>
<message>
- <source> This warning can be suppressed &lt;a href=&quot;dummy&quot;&gt;here&lt;/a&gt;.</source>
- <translation type="unfinished"></translation>
+ <source>This warning can be suppressed &lt;a href=&quot;dummy&quot;&gt;here&lt;/a&gt;.</source>
+ <translation>Diese Warnung kann &lt;a href=&quot;dummy&quot;&gt;hier&lt;/a&gt; unterdrückt werden.</translation>
</message>
<message>
<source>The project is currently being parsed.</source>
@@ -43740,11 +43726,11 @@ Was soll %1 tun?</translation>
</message>
<message>
<source>Either switches MSVC to English or keeps the language and just forces UTF-8 output (may vary depending on the used MSVC compiler).</source>
- <translation>Stellt MSVC entweder auf Englisch um oder behält die Sprache bei und erzwingt UTF-8-Ausgabe (abhängig vom benutzen MSVC-Compiler).</translation>
+ <translation>Stellt MSVC entweder auf Englisch um oder behält die Sprache bei und erzwingt UTF-8-Ausgabe (abhängig vom verwendeten MSVC-Compiler).</translation>
</message>
<message>
<source>Additional build environment settings when using this kit.</source>
- <translation>Zusätzliche Build-Umgebungseinstellungen bei Benutzung dieses Kits.</translation>
+ <translation>Zusätzliche Build-Umgebungseinstellungen bei Verwendung dieses Kits.</translation>
</message>
<message>
<source>The environment setting value is invalid.</source>
@@ -43804,7 +43790,7 @@ Was soll %1 tun?</translation>
</message>
<message>
<source>Use parsers from kit:</source>
- <translation>Parser vom Kit benutzen:</translation>
+ <translation>Parser vom Kit verwenden:</translation>
</message>
<message>
<source>Cannot Parse</source>
@@ -43877,11 +43863,11 @@ Was soll %1 tun?</translation>
</message>
<message>
<source>Warn against build directories with spaces or non-ASCII characters</source>
- <translation type="unfinished"></translation>
+ <translation>Warne vor Build-Verzeichnissen mit Leerzeichen oder nicht-ASCII-Zeichen</translation>
</message>
<message>
<source>Some legacy build tools do not deal well with paths that contain &quot;special&quot; characters such as spaces, potentially resulting in spurious build errors.&lt;p&gt;Uncheck this option if you do not work with such tools.</source>
- <translation type="unfinished"></translation>
+ <translation>Einige ältere Erstellwerkzeuge kommen nicht gut mit Verzeichnissen zurecht, die &quot;spezielle&quot; Zeichen wie Leerzeichen enthalten. Dies kann zu Fehlern beim Erstellen führen.&lt;p&gt;Wählen Sie diese Option ab, wenn Sie nicht mit solchen Werkzeugen arbeiten.</translation>
</message>
<message>
<source>Do Not Build Anything</source>
@@ -43929,11 +43915,11 @@ Was soll %1 tun?</translation>
</message>
<message>
<source>Environment changes to apply to run configurations, but not build configurations.</source>
- <translation type="unfinished"></translation>
+ <translation>Änderungen der Umgebung, die auf Ausführungskonfigurationen, aber nicht auf Build-Konfigurationen angewendet werden sollen.</translation>
</message>
<message>
<source>Application environment:</source>
- <translation type="unfinished"></translation>
+ <translation>Anwendungsumgebung:</translation>
</message>
<message>
<source>Projects Directory</source>
@@ -44049,7 +44035,7 @@ Was soll %1 tun?</translation>
</message>
<message>
<source>Use Project Default</source>
- <translation>Projekt-Vorgabe benutzen</translation>
+ <translation>Projekt-Vorgabe verwenden</translation>
</message>
<message>
<source>Default build directory:</source>
@@ -44061,7 +44047,7 @@ Was soll %1 tun?</translation>
</message>
<message>
<source>Use qmlcachegen:</source>
- <translation>qmlcachegen benutzen:</translation>
+ <translation>qmlcachegen verwenden:</translation>
</message>
<message>
<source>Default Build Properties</source>
@@ -44128,7 +44114,7 @@ Was soll %1 tun?</translation>
</message>
<message>
<source>If available, use a different margin. For example, the ColumnLimit from the ClangFormat plugin.</source>
- <translation>Benutzt unterschiedlichen Rand abhängig vom Kontext, falls verfügbar. Zum Beispiel das ColumnLimit vom ClangFormat Plugin.</translation>
+ <translation>Verwendet unterschiedlichen Rand abhängig vom Kontext, falls verfügbar. Zum Beispiel das ColumnLimit vom ClangFormat Plugin.</translation>
</message>
<message>
<source>Files in All Project Directories</source>
@@ -44193,7 +44179,7 @@ fails because Clang does not understand the target architecture.</source>
</message>
<message>
<source>User requested stop. Shutting down...</source>
- <translation>Abbruch auf Nutzeranforderung...</translation>
+ <translation>Abbruch auf Benutzeranforderung...</translation>
</message>
<message>
<source>Cannot run: No command given.</source>
@@ -44217,7 +44203,7 @@ fails because Clang does not understand the target architecture.</source>
</message>
<message>
<source>Imports existing projects that do not use qmake, CMake, Qbs, Meson, or Autotools.&lt;p&gt;This creates a project file that allows you to use %1 as a code editor and as a launcher for debugging and analyzing tools. If you want to build the project, you might need to edit the generated project file.</source>
- <translation>Importiert ein existierendes Projekt, dass nicht qmake, CMake, Qbs, Meson oder Autotools benutzt.&lt;p&gt;Dies erstellt eine Projektdatei, die Ihnen erlaubt, %1 als Code-Editor und zum Starten des Debuggers und von Analysewerkzeugen zu benutzen. Wenn Sie das Projekt bauen wollen, müssen Sie die generierte Datei möglicherweise anpassen.</translation>
+ <translation>Importiert ein existierendes Projekt, dass nicht qmake, CMake, Qbs, Meson oder Autotools verwendet.&lt;p&gt;Dies erstellt eine Projektdatei, die Ihnen erlaubt, %1 als Code-Editor und zum Starten des Debuggers und von Analysewerkzeugen zu verwenden. Wenn Sie das Projekt bauen wollen, müssen Sie die generierte Datei möglicherweise anpassen.</translation>
</message>
<message>
<source>Unknown build system &quot;%1&quot;</source>
@@ -44359,7 +44345,7 @@ fails because Clang does not understand the target architecture.</source>
</message>
<message>
<source>Use Python Language Server</source>
- <translation>Python Language Server benutzen</translation>
+ <translation>Python Language Server verwenden</translation>
</message>
<message>
<source>For a complete list of available options, consult the [Python LSP Server configuration documentation](%1).</source>
@@ -44407,7 +44393,7 @@ fails because Clang does not understand the target architecture.</source>
</message>
<message>
<source>You can install PySide from PyPi (Community OSS version) or from your Qt installation location, if you are using the Qt Installer and have a commercial license.</source>
- <translation>Sie können PySide von PyPI (Community OSS-Version) oder, falls Sie den Qt-Installer benutzen und eine kommerzielle Lizenz besitzen, von Ihrer Qt-Installation installieren.</translation>
+ <translation>Sie können PySide von PyPI (Community OSS-Version) oder, falls Sie den Qt-Installer verwenden und eine kommerzielle Lizenz besitzen, von Ihrer Qt-Installation installieren.</translation>
</message>
<message>
<source>Select which version to install:</source>
@@ -44556,7 +44542,7 @@ fails because Clang does not understand the target architecture.</source>
</message>
<message>
<source>An item of Python wizard page data expects a &quot;trKey&quot; field containing the UI visible string for that Python version and a &quot;value&quot; field containing an object with a &quot;PySideVersion&quot; field used for import statements in the Python files.</source>
- <translation>Ein Eintrag in den &quot;items&quot; im Feld &quot;data&quot; einer Python-Assistenzseite erwartet ein Feld &quot;trKey&quot;, das den Anzeigenamen für diese Python-Version enthält, und ein Feld &quot;value&quot;, das ein Objekt mit einem Feld &quot;PySideVersion&quot; enthält, das für import-Anweisungen in den Python-Dateien benutzt wird.</translation>
+ <translation>Ein Eintrag in den &quot;items&quot; im Feld &quot;data&quot; einer Python-Assistenzseite erwartet ein Feld &quot;trKey&quot;, das den Anzeigenamen für diese Python-Version enthält, und ein Feld &quot;value&quot;, das ein Objekt mit einem Feld &quot;PySideVersion&quot; enthält, das für import-Anweisungen in den Python-Dateien verwendet wird.</translation>
</message>
<message>
<source>PySide version:</source>
@@ -44572,7 +44558,7 @@ fails because Clang does not understand the target architecture.</source>
</message>
<message>
<source>The interpreter used for Python based projects.</source>
- <translation>Der für Python-basierte Projekte benutzte Interpreter.</translation>
+ <translation>Der für Python-basierte Projekte verwendete Interpreter.</translation>
</message>
<message>
<source>No Python setup.</source>
@@ -44588,7 +44574,7 @@ fails because Clang does not understand the target architecture.</source>
</message>
<message>
<source>Python &quot;%1&quot; does not contain a usable pip. pip is needed to install Python packages from the Python Package Index, like PySide and the Python language server. To use any of that functionality ensure that pip is installed for that Python.</source>
- <translation>Python &quot;%1&quot; enthält kein verwendbares pip. pip wird für das Installieren von Python-Paketen wie PySide und dem Python Language Server vom Python Package Index benötigt. Um diese Funktionen benutzen zu können, stellen Sie sicher, dass pip für dieses Python installiert ist.</translation>
+ <translation>Python &quot;%1&quot; enthält kein verwendbares pip. pip wird für das Installieren von Python-Paketen wie PySide und dem Python Language Server vom Python Package Index benötigt. Um diese Funktionen verwenden zu können, stellen Sie sicher, dass pip für dieses Python installiert ist.</translation>
</message>
<message>
<source>Python &quot;%1&quot; does not contain a usable venv. venv is the recommended way to isolate a development environment for a project from the globally installed Python.</source>
@@ -44603,8 +44589,8 @@ fails because Clang does not understand the target architecture.</source>
<translation>Pfad zum Python-Interpreter</translation>
</message>
<message>
- <source>No Python interpreter set for kit &quot;%1&quot;</source>
- <translation>Kein Python-Interpreter für das Kit &quot;%1&quot; eingerichtet</translation>
+ <source>No Python interpreter set for kit &quot;%1&quot;.</source>
+ <translation>Kein Python-Interpreter für das Kit &quot;%1&quot; eingerichtet.</translation>
</message>
</context>
<context>
@@ -44898,7 +44884,7 @@ fails because Clang does not understand the target architecture.</source>
<message>
<source>Use %1 settings directory for Qbs</source>
<extracomment>%1 == &quot;Qt Creator&quot; or &quot;Qt Design Studio&quot;</extracomment>
- <translation>Das Verzeichnis für Einstellungen von %1 auch für Qbs benutzen</translation>
+ <translation>Das Verzeichnis für Einstellungen von %1 auch für Qbs verwenden</translation>
</message>
<message>
<source>Path to qbs executable:</source>
@@ -44975,7 +44961,7 @@ Die betroffenen Dateien sind:
</message>
<message>
<source>Qbs Editor</source>
- <translation type="unfinished"></translation>
+ <translation>Qbs-Editor</translation>
</message>
</context>
<context>
@@ -45540,15 +45526,15 @@ Weder der Pfad zur Bibliothek noch der Pfad zu den Headerdateien wird zur .pro-D
</message>
<message>
<source>Qt Custom Designer Widget</source>
- <translation>Benutzerdefiniertes Widget für Qt Designer</translation>
+ <translation>Benutzerdefiniertes Widget für Qt Widgets Designer</translation>
</message>
<message>
<source>Creates a Qt Custom Designer Widget or a Custom Widget Collection.</source>
- <translation>Erstellt ein oder mehrere benutzerdefinierte Widgets für Qt Designer.</translation>
+ <translation>Erstellt ein oder mehrere benutzerdefinierte Widgets für Qt Widgets Designer.</translation>
</message>
<message>
- <source>This wizard generates a Qt Designer Custom Widget or a Qt Designer Custom Widget Collection project.</source>
- <translation>Dieser Assistent erstellt ein Projekt mit einem oder mehreren benutzerdefinierten Widgets für Qt Designer.</translation>
+ <source>This wizard generates a Qt Widgets Designer Custom Widget or a Qt Widgets Designer Custom Widget Collection project.</source>
+ <translation>Dieser Assistent erstellt ein Projekt mit einem oder mehreren benutzerdefinierten Widgets für Qt Widgets Designer.</translation>
</message>
<message>
<source>Creating multiple widget libraries (%1, %2) in one project (%3) is not supported.</source>
@@ -45567,8 +45553,8 @@ Weder der Pfad zur Bibliothek noch der Pfad zu den Headerdateien wird zur .pro-D
<translation>Die Anwendung &quot;%1&quot; konnte nicht gefunden werden.</translation>
</message>
<message>
- <source>Qt Designer is not responding (%1).</source>
- <translation>Qt Designer antwortet nicht (%1).</translation>
+ <source>Qt Widgets Designer is not responding (%1).</source>
+ <translation>Qt Widgets Designer antwortet nicht (%1).</translation>
</message>
<message>
<source>Unable to create server socket: %1</source>
@@ -45974,7 +45960,7 @@ Bitte aktualisieren Sie Ihr Kit (%3) oder wählen Sie eine mkspec für qmake, di
</message>
<message>
<source>Checking this option avoids unwanted side effects, but may result in inexact parsing results.</source>
- <translation>Diese Einstellung verhindert ungewollte Nebeneffekte, kann aber zu ungenauen Resultaten beim Auswerten führen.</translation>
+ <translation>Diese Einstellung verhindert ungewollte Nebeneffekte, kann aber zu ungenauen Ergebnissen beim Auswerten führen.</translation>
</message>
<message>
<source>Qmake</source>
@@ -46023,7 +46009,7 @@ Bitte aktualisieren Sie Ihr Kit (%3) oder wählen Sie eine mkspec für qmake, di
</message>
<message>
<source>Debug connection failed.</source>
- <translation>Debug-Verbindung gescheitert.</translation>
+ <translation>Debug-Verbindung fehlgeschlagen.</translation>
</message>
</context>
<context>
@@ -46259,9 +46245,9 @@ For qmlRegister... calls, make sure that you define the Module URI as a string l
Import-Verzeichnisse:
%2
-Für qmake-Projekte benutzen Sie die Variable QML_IMPORT_PATH, um Importpfade hinzuzufügen.
+Für qmake-Projekte verwenden Sie die Variable QML_IMPORT_PATH, um Importpfade hinzuzufügen.
Für Qbs-Projekte geben Sie eine qmlImportPaths-Eigenschaft in Ihrem Produkt an, um Importpfade hinzuzufügen.
-Für qmlproject-Projekte benutzen Sie die importPaths-Eigenschaft, um Importpfade hinzuzufügen.
+Für qmlproject-Projekte verwenden Sie die importPaths-Eigenschaft, um Importpfade hinzuzufügen.
Für CMake-Projekte stellen Sie sicher, dass die Variable QML_IMPORT_PATH in CMakeCache.txt steht.
Für qmlRegister...-Aufrufe stellen Sie sicher, dass Sie den Modul-URI als Zeichenkettenliteral definieren.
</translation>
@@ -46286,9 +46272,9 @@ For CMake projects, make sure QML_IMPORT_PATH variable is in CMakeCache.txt.
Importpfade:
%3
-Für qmake-Projekte benutzen Sie die Variable QML_IMPORT_PATH, um Importpfade hinzuzufügen.
+Für qmake-Projekte verwenden Sie die Variable QML_IMPORT_PATH, um Importpfade hinzuzufügen.
Für Qbs-Projekte geben Sie eine qmlImportPaths-Eigenschaft in Ihrem Produkt an, um Importpfade hinzuzufügen.
-Für qmlproject-Projekte benutzen Sie die Eigenschaft importPaths, um Importpfade hinzuzufügen.
+Für qmlproject-Projekte verwenden Sie die Eigenschaft importPaths, um Importpfade hinzuzufügen.
Für CMake-Projekte stellen Sie sicher, dass die Variable QML_IMPORT_PATH in CMakeCache.txt steht.
</translation>
</message>
@@ -46386,11 +46372,11 @@ Für CMake-Projekte stellen Sie sicher, dass die Variable QML_IMPORT_PATH in CMa
</message>
<message>
<source>Expected array of strings after colon.</source>
- <translation>Nach dem Doppelpunkt wird ein Feld von Zeichenketten erwartet.</translation>
+ <translation>Nach dem Doppelpunkt wird ein Array von Zeichenketten erwartet.</translation>
</message>
<message>
<source>Expected array literal with only string literal members.</source>
- <translation>Es wird ein nur aus Zeichenketten bestehendes Feldliteral erwartet.</translation>
+ <translation>Es wird ein nur aus Zeichenketten bestehendes Arrayliteral erwartet.</translation>
</message>
<message>
<source>Expected string literal to contain &apos;Package/Name major.minor&apos; or &apos;Name major.minor&apos;.</source>
@@ -46398,11 +46384,11 @@ Für CMake-Projekte stellen Sie sicher, dass die Variable QML_IMPORT_PATH in CMa
</message>
<message>
<source>Expected array of numbers after colon.</source>
- <translation>Nach dem Doppelpunkt wird ein aus Zahlen bestehendes Feld erwartet.</translation>
+ <translation>Nach dem Doppelpunkt wird ein aus Zahlen bestehendes Array erwartet.</translation>
</message>
<message>
<source>Expected array literal with only number literal members.</source>
- <translation>Es wird ein nur aus Zahlenliteralen bestehendes Feldliteral erwartet.</translation>
+ <translation>Es wird ein nur aus Zahlenliteralen bestehendes Arrayliteral erwartet.</translation>
</message>
<message>
<source>Meta object revision without matching export.</source>
@@ -46714,7 +46700,7 @@ Weitere Informationen finden Sie auf der Dokumentationsseite &quot;Checking Code
</message>
<message>
<source>var &quot;%1&quot; is used before its declaration.</source>
- <translation>Variable &quot;%1&quot; wird vor Deklaration benutzt.</translation>
+ <translation>Variable &quot;%1&quot; wird vor Deklaration verwendet.</translation>
</message>
<message>
<source>&quot;%1&quot; already is a var.</source>
@@ -46726,7 +46712,7 @@ Weitere Informationen finden Sie auf der Dokumentationsseite &quot;Checking Code
</message>
<message>
<source>Function &quot;%1&quot; is used before its declaration.</source>
- <translation>Funktion &quot;%1&quot; wird vor ihrer Deklaration benutzt.</translation>
+ <translation>Funktion &quot;%1&quot; wird vor ihrer Deklaration verwendet.</translation>
</message>
<message>
<source>Could not resolve the prototype &quot;%1&quot; of &quot;%2&quot;.</source>
@@ -46754,7 +46740,7 @@ Weitere Informationen finden Sie auf der Dokumentationsseite &quot;Checking Code
</message>
<message>
<source>Array value expected.</source>
- <translation>Feld erwartet.</translation>
+ <translation>Array erwartet.</translation>
</message>
<message>
<source>%1 value expected.</source>
@@ -46790,7 +46776,7 @@ Weitere Informationen finden Sie auf der Dokumentationsseite &quot;Checking Code
</message>
<message>
<source>%1 elements expected in array value.</source>
- <translation>Das Feld benötigt %1 Werte.</translation>
+ <translation>Das Array benötigt %1 Werte.</translation>
</message>
<message>
<source>Parsing QML Files</source>
@@ -47039,7 +47025,7 @@ Sie können eine Annotation &quot;// @uri My.Module.Uri&quot; hinzufügen, um de
</message>
<message>
<source>Use custom command instead of built-in formatter</source>
- <translation>Benutzerdefiniertes Kommando anstatt des integrierten Formatierers benutzen</translation>
+ <translation>Benutzerdefiniertes Kommando anstatt des integrierten Formatierers verwenden</translation>
</message>
<message>
<source>Command:</source>
@@ -47071,7 +47057,7 @@ Sie können eine Annotation &quot;// @uri My.Module.Uri&quot; hinzufügen, um de
</message>
<message>
<source>Use customized static analyzer</source>
- <translation>Angepasste statische Analyse benutzen</translation>
+ <translation>Angepasste statische Analyse verwenden</translation>
</message>
<message>
<source>Enabled</source>
@@ -47119,11 +47105,11 @@ Sie können eine Annotation &quot;// @uri My.Module.Uri&quot; hinzufügen, um de
</message>
<message>
<source>Use QML Language Server advanced features (renaming, find usages and co.) (EXPERIMENTAL!)</source>
- <translation>Fortgeschrittene Funktionen vom QML Language Server benutzen (umbenennen, Verweise finden und weiteres) (EXPERIMENTELL!)</translation>
+ <translation>Fortgeschrittene Funktionen vom QML Language Server verwenden (umbenennen, Verweise finden und weiteres) (EXPERIMENTELL!)</translation>
</message>
<message>
<source>Use QML Language Server from latest Qt version</source>
- <translation>QML Language Server der neuesten Qt-Version benutzen</translation>
+ <translation>QML Language Server der neuesten Qt-Version verwenden</translation>
</message>
<message>
<source>Features</source>
@@ -47311,7 +47297,7 @@ Sie können eine Annotation &quot;// @uri My.Module.Uri&quot; hinzufügen, um de
<source>Could not connect to the in-process QML profiler within %1 s.
Do you want to retry and wait %2 s?</source>
<translation>Innerhalb von %1 s konnte keine Verbindung zum QML-Profiler im Prozess hergestellt werden.
-Wollen Sie es noch einmal versuchen und %2 s warten?</translation>
+Wollen Sie es erneut versuchen und %2 s warten?</translation>
</message>
<message>
<source>%1 s</source>
@@ -48821,7 +48807,7 @@ wirklich löschen?</translation>
</message>
<message>
<source> (on %1)</source>
- <translation type="unfinished"></translation>
+ <translation> (auf %1)</translation>
</message>
<message>
<source>Qt version is not properly installed, please run make install</source>
@@ -49297,7 +49283,7 @@ wirklich löschen?</translation>
</message>
<message>
<source>The Qt library to use for all projects using this kit.&lt;br&gt;A Qt version is required for qmake-based projects and optional when using other build systems.</source>
- <translation>Die für alle Projekte, die dieses Kit verwenden, zu benutzende Qt-Bibliothek.&lt;br&gt;Für qmake-basierende Projekte ist diese Angabe erforderlich, für andere Build-Systeme optional.</translation>
+ <translation>Die zu verwendende Qt-Bibliothek für alle Projekte, die dieses Kit verwenden.&lt;br&gt;Für qmake-basierende Projekte ist diese Angabe erforderlich, für andere Build-Systeme optional.</translation>
</message>
<message>
<source>None</source>
@@ -49333,11 +49319,11 @@ wirklich löschen?</translation>
</message>
<message>
<source>Select a language for which a corresponding translation (.ts) file will be generated for you.</source>
- <translation type="unfinished"></translation>
+ <translation>Wählen Sie eine Sprache, für die eine Übersetzungsdatei (.ts) erstellt werden soll.</translation>
</message>
<message>
<source>If you plan to provide translations for your project&apos;s user interface via the Qt Linguist tool, select a language here. A corresponding translation (.ts) file will be generated for you.</source>
- <translation type="unfinished"></translation>
+ <translation>Wenn Sie planen, mit Qt Linguist Übersetzungen der Benutzeroberfläche Ihres Projekts anzubieten, wählen Sie hier eine Sprache. Eine entsprechende Übersetzungsdatei (.ts) wird dann für Sie erstellt.</translation>
</message>
<message>
<source>&lt;none&gt;</source>
@@ -49573,16 +49559,15 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
</message>
<message>
<source>Connecting to device...</source>
- <translation type="unfinished"></translation>
+ <translation>Verbinde zu Gerät...</translation>
</message>
<message>
- <source>Connected. Now doing extended checks.
-</source>
- <translation type="unfinished"></translation>
+ <source>Connected. Now doing extended checks.</source>
+ <translation>Verbunden. Führe erweiterte Überprüfungen aus.</translation>
</message>
<message>
<source>Basic connectivity test failed, device is considered unusable.</source>
- <translation type="unfinished"></translation>
+ <translation>Grundlegender Verbindungstest ist fehlgeschlagen, das Gerät wird als unbrauchbar eingestuft.</translation>
</message>
<message>
<source>Device replied to echo with unexpected contents: &quot;%1&quot;</source>
@@ -49622,7 +49607,7 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
</message>
<message>
<source>&quot;%1&quot; will be used for deployment, because &quot;%2&quot; and &quot;%3&quot; are not available.</source>
- <translation>&quot;%1&quot; wird für das Deployment benutzt, da &quot;%2&quot; und &quot;%3&quot; nicht verfügbar sind.</translation>
+ <translation>&quot;%1&quot; wird für das Deployment verwendet, da &quot;%2&quot; und &quot;%3&quot; nicht verfügbar sind.</translation>
</message>
<message>
<source>Checking if required commands are available...</source>
@@ -49766,7 +49751,7 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
</message>
<message>
<source>The username to log into the device:</source>
- <translation>Nutzername für Geräte-Login:</translation>
+ <translation>Benutzername für Geräte-Login:</translation>
</message>
<message>
<source>Authentication type:</source>
@@ -49807,7 +49792,7 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
</message>
<message>
<source>&amp;Username:</source>
- <translation>&amp;Nutzername:</translation>
+ <translation>&amp;Benutzername:</translation>
</message>
<message>
<source>QML runtime executable:</source>
@@ -49886,7 +49871,7 @@ Zusätzlich wird die Verbindung zum Gerät getestet.</translation>
<source>Cannot establish SSH connection.
Control process failed to start.</source>
<translation>SSH-Verbindung kann nicht hergestellt werden.
-Der Kontrollprozess konnte nicht gestartet werden.</translation>
+Der Steuerprozess konnte nicht gestartet werden.</translation>
</message>
<message>
<source>SSH connection failure.</source>
@@ -49898,11 +49883,11 @@ Der Kontrollprozess konnte nicht gestartet werden.</translation>
</message>
<message>
<source>Device is disconnected.</source>
- <translation type="unfinished"></translation>
+ <translation>Gerät ist nicht verbunden.</translation>
</message>
<message>
<source>Can&apos;t send control signal to the %1 device. The device might have been disconnected.</source>
- <translation type="unfinished"></translation>
+ <translation>Senden des Steuersignals zum Gerät %1 ist fehlgeschlagen. Das Gerät ist möglicherweise nicht verbunden.</translation>
</message>
<message>
<source>Remote Linux</source>
@@ -49914,15 +49899,15 @@ Der Kontrollprozess konnte nicht gestartet werden.</translation>
</message>
<message>
<source>Establishing initial connection to device &quot;%1&quot;. This might take a moment.</source>
- <translation type="unfinished"></translation>
+ <translation>Stelle die erste Verbindung zum Gerät &quot;%1&quot; her. Dies kann einen Moment dauern.</translation>
</message>
<message>
<source>Device &quot;%1&quot; is currently marked as disconnected.</source>
- <translation type="unfinished"></translation>
+ <translation>Das Gerät &quot;%1&quot; ist zur Zeit als nicht verbunden markiert.</translation>
</message>
<message>
<source>The device was not available when trying to connect previously.&lt;br&gt;No further connection attempts will be made until the device is manually reset by running a successful connection test via the &lt;a href=&quot;dummy&quot;&gt;settings page&lt;/a&gt;.</source>
- <translation type="unfinished"></translation>
+ <translation>Das Gerät war bei einem vorherigen Verbindungsversuch nicht erreichbar.&lt;br&gt;Es werden keine weiteren Verbindungsversuche unternommen, bis das Gerät manuell über einen erfolgreichen Verbindungstest in den &lt;a href=&quot;dummy&quot;&gt;Einstellungen&lt;/a&gt; zurückgesetzt wurde.</translation>
</message>
<message>
<source>Failed: %1</source>
@@ -49930,7 +49915,7 @@ Der Kontrollprozess konnte nicht gestartet werden.</translation>
</message>
<message>
<source>Device is considered unconnected. Re-run device test to reset state.</source>
- <translation type="unfinished"></translation>
+ <translation>Das Gerät ist als nicht verbunden eingestuft. Führen Sie die Gerätetests erneut aus, um die Einstufung zurückzusetzen.</translation>
</message>
<message>
<source>Remote Linux Device</source>
@@ -50068,19 +50053,19 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e
</message>
<message>
<source>Use sftp if available. Otherwise use default transfer.</source>
- <translation>Benutze SFTP, sofern verfügbar. Sonst Standardmethode verwenden.</translation>
+ <translation>Verwende SFTP, sofern verfügbar. Sonst verwende Standardmethode.</translation>
</message>
<message>
<source>Use default transfer. This might be slow.</source>
- <translation>Benutze Standardmethode. Dies könnte langsam sein.</translation>
+ <translation>Verwende Standardmethode. Dies könnte langsam sein.</translation>
</message>
<message>
- <source>Unknown error occurred while trying to create remote directories</source>
- <translation>Beim Erstellen von entfernten Verzeichnissen ist ein unbekannter Fehler aufgetreten</translation>
+ <source>Unknown error occurred while trying to create remote directories.</source>
+ <translation>Beim Erstellen von entfernten Verzeichnissen ist ein unbekannter Fehler aufgetreten.</translation>
</message>
<message>
<source>Transfer method was downgraded from &quot;%1&quot; to &quot;%2&quot;. If this is unexpected, please re-test device &quot;%3&quot;.</source>
- <translation type="unfinished"></translation>
+ <translation>Die Übertragungsmethode wurde von &quot;%1&quot; auf &quot;%2&quot; zurückgestuft. Falls dies unerwartet auftritt, führen Sie bitte die Gerätetests für &quot;%3&quot; erneut aus.</translation>
</message>
<message>
<source>rsync failed to start: %1</source>
@@ -50092,7 +50077,7 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e
</message>
<message>
<source>rsync failed with exit code %1.</source>
- <translation>rsync scheiterte mit dem Rückgabewert %1.</translation>
+ <translation>rsync ist mit dem Rückgabewert %1 fehlgeschlagen.</translation>
</message>
<message>
<source>Deploy files</source>
@@ -50104,7 +50089,7 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e
</message>
<message>
<source>Use rsync or sftp if available, but prefer rsync. Otherwise use default transfer.</source>
- <translation type="unfinished"></translation>
+ <translation>Verwende rsync oder sftp, sofern verfügbar, bevorzuge aber rsync. Sonst verwende Standardmethode.</translation>
</message>
<message>
<source>rsync is only supported for transfers between different devices.</source>
@@ -50633,7 +50618,7 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e
</message>
<message>
<source>Last used colors</source>
- <translation>Zuletzt benutzte Farben</translation>
+ <translation>Zuletzt verwendete Farben</translation>
</message>
<message>
<source>Create New Color Theme</source>
@@ -50717,7 +50702,7 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e
</message>
<message>
<source>SCXML Generation Failed</source>
- <translation>SCXML-Erzeugung gescheitert</translation>
+ <translation>SCXML-Erzeugung fehlgeschlagen</translation>
</message>
<message>
<source>Loading document...</source>
@@ -50761,7 +50746,7 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e
</message>
<message>
<source>Export Failed</source>
- <translation>Export gescheitert</translation>
+ <translation>Export fehlgeschlagen</translation>
</message>
<message>
<source>Could not export to image.</source>
@@ -50773,7 +50758,7 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e
</message>
<message>
<source>Saving Failed</source>
- <translation>Speichern gescheitert</translation>
+ <translation>Speichern fehlgeschlagen</translation>
</message>
<message>
<source>Could not save the screenshot.</source>
@@ -51410,7 +51395,7 @@ Zeile: %4, Spalte: %5
</message>
<message>
<source>The Symbolic Name &lt;span style=&apos;white-space: nowrap&apos;&gt;&quot;%1&quot;&lt;/span&gt; you want to remove is used in Multi Property Names. Select the action to apply to references in these Multi Property Names.</source>
- <translation>Der symbolische Name &lt;span style=&apos;white-space: nowrap&apos;&gt;&quot;%1&quot;&lt;/span&gt;, den Sie entfernen wollen, wird in Multi-Property-Namen benutzt. Wählen Sie die Aktion, die Sie auf Referenzen in diesen Multi-Property-Namen anwenden wollen.</translation>
+ <translation>Der symbolische Name &lt;span style=&apos;white-space: nowrap&apos;&gt;&quot;%1&quot;&lt;/span&gt;, den Sie entfernen wollen, wird in Multi-Property-Namen verwendet. Wählen Sie die Aktion, die Sie auf Referenzen in diesen Multi-Property-Namen anwenden wollen.</translation>
</message>
<message>
<source>Failed to write &quot;%1&quot;</source>
@@ -51474,7 +51459,7 @@ Zeile: %4, Spalte: %5
</message>
<message>
<source>The properties of the Multi Property Name associated with the selected Symbolic Name. (use \\ for a literal \ in the value)</source>
- <translation>Die Eigenschaften des Multi-Property-Namens, der mit dem ausgewählten symbolischen Namen assoziiert ist. (Benutzen Sie \\ für ein \-Literal im Wert)</translation>
+ <translation>Die Eigenschaften des Multi-Property-Namens, der mit dem ausgewählten symbolischen Namen assoziiert ist. (Verwenden Sie \\ für ein \-Literal im Wert)</translation>
</message>
<message>
<source>The Hierarchical Name associated with the selected Symbolic Name.</source>
@@ -51695,19 +51680,19 @@ Testfall &quot;%2&quot; wird nicht aufgezeichnet.</translation>
</message>
<message>
<source>Do you really want to delete &quot;%1&quot; permanently?</source>
- <translation type="unfinished"></translation>
+ <translation>Möchten Sie &quot;%1&quot; wirklich endgültig löschen?</translation>
</message>
<message>
<source>Remove Shared File</source>
- <translation type="unfinished"></translation>
+ <translation>Gemeinsame Datei löschen</translation>
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">Abbrechen</translation>
+ <translation>Abbrechen</translation>
</message>
<message>
<source>Failed to remove &quot;%1&quot;.</source>
- <translation type="unfinished"></translation>
+ <translation>&quot;%1&quot; konnte nicht gelöscht werden.</translation>
</message>
<message>
<source>Remove &quot;%1&quot; from the list of shared folders?</source>
@@ -52139,7 +52124,7 @@ Warten Sie, bis er beendet ist, und versuchen Sie es dann erneut.</translation>
</message>
<message>
<source>Invalid Squish settings. Configure Squish installation path inside Preferences... &gt; Squish &gt; General to use this wizard.</source>
- <translation>Ungültige Squish-Einstellungen. Stellen Sie in Einstellungen... &gt; Squish &gt; Allgemein den Squish-Installationspfad ein, um diesen Assistenten zu benutzen.</translation>
+ <translation>Ungültige Squish-Einstellungen. Stellen Sie in Einstellungen... &gt; Squish &gt; Allgemein den Squish-Installationspfad ein, um diesen Assistenten zu verwenden.</translation>
</message>
<message>
<source>Available languages:</source>
@@ -52493,7 +52478,7 @@ Die Datei &quot;%1&quot; konnte nicht geöffnet werden.</translation>
</message>
<message>
<source>The color used for %1.</source>
- <translation>Die für &quot;%1&quot; benutzte Farbe.</translation>
+ <translation>Die für &quot;%1&quot; verwendete Farbe.</translation>
</message>
<message>
<source>Failed to open file.</source>
@@ -52517,11 +52502,11 @@ Die Datei &quot;%1&quot; konnte nicht geöffnet werden.</translation>
</message>
<message>
<source>Use internal terminal</source>
- <translation>Integriertes Terminal benutzen</translation>
+ <translation>Integriertes Terminal verwenden</translation>
</message>
<message>
<source>Uses the internal terminal when &quot;Run In Terminal&quot; is enabled and for &quot;Open Terminal here&quot;.</source>
- <translation>Benutzt das integrierte Terminal, wenn &quot;Im Terminal ausführen&quot; aktiviert ist und für &quot;Terminalfenster hier öffnen&quot;.</translation>
+ <translation>Verwendet das integrierte Terminal, wenn &quot;Im Terminal ausführen&quot; aktiviert ist und für &quot;Terminalfenster hier öffnen&quot;.</translation>
</message>
<message>
<source>Family:</source>
@@ -52529,7 +52514,7 @@ Die Datei &quot;%1&quot; konnte nicht geöffnet werden.</translation>
</message>
<message>
<source>The font family used in the terminal.</source>
- <translation>Der Name der Zeichensatz-Familie, die im Terminal benutzt wird.</translation>
+ <translation>Der Name der Zeichensatz-Familie, die im Terminal verwendet wird.</translation>
</message>
<message>
<source>Size:</source>
@@ -52537,15 +52522,15 @@ Die Datei &quot;%1&quot; konnte nicht geöffnet werden.</translation>
</message>
<message>
<source>The font size used in the terminal (in points).</source>
- <translation>Die Größe des Zeichensatzes, der im Terminal benutzt wird (in Punkten).</translation>
+ <translation>Die Größe des Zeichensatzes, der im Terminal verwendet wird (in Punkten).</translation>
</message>
<message>
<source>Allow blinking cursor</source>
- <translation>Blinkenden Cursor erlauben</translation>
+ <translation>Blinkende Einfügemarke erlauben</translation>
</message>
<message>
<source>Allow the cursor to blink.</source>
- <translation>Erlaubt dem Cursor zu blinken.</translation>
+ <translation>Erlaubt der Einfügemarke zu blinken.</translation>
</message>
<message>
<source>Shell path:</source>
@@ -52656,12 +52641,12 @@ Die Datei &quot;%1&quot; konnte nicht geöffnet werden.</translation>
<translation>&quot;%1&quot; ist nicht ausführbar.</translation>
</message>
<message>
- <source>Terminal process exited with code %1</source>
- <translation>Der Terminalprozess wurde mit dem Rückgabewert %1 beendet</translation>
+ <source>Terminal process exited with code %1.</source>
+ <translation>Der Terminalprozess wurde mit dem Rückgabewert %1 beendet.</translation>
</message>
<message>
- <source>Process exited with code: %1</source>
- <translation>Prozess wurde mit dem Rückgabewert %1 beendet</translation>
+ <source>Process exited with code: %1.</source>
+ <translation>Prozess wurde mit dem Rückgabewert %1 beendet.</translation>
</message>
<message>
<source>Copy</source>
@@ -52673,7 +52658,7 @@ Die Datei &quot;%1&quot; konnte nicht geöffnet werden.</translation>
</message>
<message>
<source>Select All</source>
- <translation type="unfinished"></translation>
+ <translation>Alles auswählen</translation>
</message>
<message>
<source>Clear Selection</source>
@@ -52685,11 +52670,11 @@ Die Datei &quot;%1&quot; konnte nicht geöffnet werden.</translation>
</message>
<message>
<source>Move Cursor Word Left</source>
- <translation>Cursor ein Wort nach links bewegen</translation>
+ <translation>Einfügemarke ein Wort nach links bewegen</translation>
</message>
<message>
<source>Move Cursor Word Right</source>
- <translation>Cursor ein Wort nach rechts bewegen</translation>
+ <translation>Einfügemarke ein Wort nach rechts bewegen</translation>
</message>
<message>
<source>Close Terminal</source>
@@ -53167,11 +53152,11 @@ Werte kleiner als 100% können überlappende und falsch ausgerichtete Darstellun
</message>
<message>
<source>Line number of the text cursor position in current document (starts with 1).</source>
- <translation>Zeilennummer der Cursorposition des aktuellen Dokuments (beginnend bei 1).</translation>
+ <translation>Zeilennummer der Einfügemarke des aktuellen Dokuments (beginnend bei 1).</translation>
</message>
<message>
<source>Column number of the text cursor position in current document (starts with 0).</source>
- <translation>Spaltennummer der Cursorposition des aktuellen Dokuments (beginnend bei 0).</translation>
+ <translation>Spaltennummer der Einfügemarke des aktuellen Dokuments (beginnend bei 0).</translation>
</message>
<message>
<source>Number of lines visible in current document.</source>
@@ -53244,7 +53229,7 @@ Werte kleiner als 100% können überlappende und falsch ausgerichtete Darstellun
</message>
<message>
<source>Cannot create user snippet directory %1</source>
- <translation>Das Snippet-Verzeichnis des Nutzers konnte nicht erstellt werden: %1</translation>
+ <translation>Das Snippet-Verzeichnis des Benutzers konnte nicht erstellt werden: %1</translation>
</message>
<message>
<source>Remove</source>
@@ -53645,7 +53630,7 @@ Gibt an, wie sich die Rücktaste bezüglich Einrückung verhält.
</message>
<message>
<source>Center &amp;cursor on scroll</source>
- <translation>Cursor beim Scrollen in der &amp;Mitte halten</translation>
+ <translation>Einfügemarke beim Scrollen in der &amp;Mitte halten</translation>
</message>
<message>
<source>Enable text &amp;wrapping</source>
@@ -53689,7 +53674,7 @@ Gibt an, wie sich die Rücktaste bezüglich Einrückung verhält.
</message>
<message>
<source>If available, use a different margin. For example, the ColumnLimit from the ClangFormat plugin.</source>
- <translation>Benutzt einen anderen Rand, falls verfügbar. Zum Beispiel das ColumnLimit vom ClangFormat Plugin.</translation>
+ <translation>Verwendet einen anderen Rand, falls verfügbar. Zum Beispiel das ColumnLimit vom ClangFormat Plugin.</translation>
</message>
<message>
<source>Animate navigation within file</source>
@@ -53724,7 +53709,7 @@ Gibt an, wie sich die Rücktaste bezüglich Einrückung verhält.
<translation>Rechtsbündig</translation>
</message>
<message>
- <source>Line annotations</source>
+ <source>Line Annotations</source>
<translation>Zeilenannotationen</translation>
</message>
<message>
@@ -53891,7 +53876,7 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen.
&lt;/pre&gt;
&lt;/li&gt;
-&lt;li&gt;Normale Einrückung: Benutze Tabulatoren oder Leerzeichen entsprechend obiger Konfiguration.
+&lt;li&gt;Normale Einrückung: Verwende Tabulatoren oder Leerzeichen entsprechend obiger Konfiguration.
&lt;pre&gt;
(tab)int i = foo(a, b
(tab)(tab)(tab) c, d);
@@ -53909,7 +53894,7 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen.
</message>
<message>
<source>With Regular Indent</source>
- <translation>Benutze normale Einrückung</translation>
+ <translation>Verwende normale Einrückung</translation>
</message>
<message>
<source>The text editor indentation setting is used for non-code files only. See the C++ and Qt Quick coding style settings to configure indentation for code files.</source>
@@ -54658,7 +54643,7 @@ Drücken Sie zusätzlich die Umschalttaste, wird ein Escape-Zeichen an der aktue
<translation>Zeichenketten automatisch teilen</translation>
</message>
<message>
- <source>&amp;Automatically insert matching characters</source>
+ <source>&amp;Automatically Insert Matching Characters</source>
<translation>&amp;Passende Zeichen automatisch einfügen</translation>
</message>
<message>
@@ -54740,10 +54725,10 @@ Drücken Sie zusätzlich die Umschalttaste, wird ein Escape-Zeichen an der aktue
<message>
<source>Doxygen allows &quot;@&quot; and &quot;\&quot; to start commands.
By default, &quot;@&quot; is used if the surrounding comment starts with &quot;/**&quot; or &quot;///&quot;, and &quot;\&quot; is used
-if the comment starts with &quot;/*!&quot; or &quot;//!</source>
+if the comment starts with &quot;/*!&quot; or &quot;//!&quot;.</source>
<translation>Doxygen erlaubt es, Befehle mit &quot;@&quot; und &quot;\&quot; zu beginnen.
Die Vorgabe ist, mit &quot;@&quot; zu beginnen, wenn der umgebende Kommentar mit &quot;/**&quot; oder &quot;///&quot; anfängt,
-und &quot;\&quot; zu benutzen, wenn der Kommentar mit &quot;/*!&quot; oder &quot;//!&quot;.</translation>
+und &quot;\&quot; zu verwenden, wenn der Kommentar mit &quot;/*!&quot; oder &quot;//!&quot;.</translation>
</message>
<message>
<source>Generate brief description</source>
@@ -54819,7 +54804,7 @@ Wird auf Zeichen angewendet, sofern keine andere Regel zutrifft.</translation>
<source>Highlighted search results inside the editor.
Used to mark read accesses to C++ symbols.</source>
<translation>Hervorgehobene Suchergebnisse im Editor.
-Wird benutzt, um Lesezugriffe eines C++-Symbols zu markieren.</translation>
+Wird verwendet, um Lesezugriffe eines C++-Symbols zu markieren.</translation>
</message>
<message>
<source>Search Result (Alternative 2)</source>
@@ -54829,7 +54814,7 @@ Wird benutzt, um Lesezugriffe eines C++-Symbols zu markieren.</translation>
<source>Highlighted search results inside the editor.
Used to mark write accesses to C++ symbols.</source>
<translation>Hervorgehobene Suchergebnisse im Editor.
-Wird benutzt, um Schreibzugriffe eines C++-Symbols zu markieren.</translation>
+Wird verwendet, um Schreibzugriffe eines C++-Symbols zu markieren.</translation>
</message>
<message>
<source>Search Result Containing function</source>
@@ -54839,7 +54824,7 @@ Wird benutzt, um Schreibzugriffe eines C++-Symbols zu markieren.</translation>
<source>Highlighted search results inside the editor.
Used to mark containing function of the symbol usage.</source>
<translation>Hervorgehobene Suchergebnisse im Editor.
-Wird benutzt um die Funktion zu markieren, die ein gesuchtes Symbol benutzt.</translation>
+Wird verwendet um die Funktion zu markieren, die ein gesuchtes Symbol verwendet.</translation>
</message>
<message>
<source>Search Scope</source>
@@ -54897,7 +54882,7 @@ Wird benutzt um die Funktion zu markieren, die ein gesuchtes Symbol benutzt.</tr
<source>Occurrences of the symbol under the cursor.
(Only the background will be applied.)</source>
<translation>Vorkommen des unter der Einfügemarke befindlichen Symbols.
-(Nur der Hintergrund wird benutzt.)</translation>
+(Nur der Hintergrund wird verwendet.)</translation>
</message>
<message>
<source>Unused Occurrence</source>
@@ -55139,7 +55124,7 @@ Wird benutzt um die Funktion zu markieren, die ein gesuchtes Symbol benutzt.</tr
<source>Non user-defined language operators.
To style user-defined operators, use Overloaded Operator.</source>
<translation>Nicht benutzerdefinierte Sprachoperatoren.
-Um den Stil von benutzerdefinierten Operatoren festzulegen, benutzen Sie &quot;Überladene Operatoren&quot;.</translation>
+Um den Stil von benutzerdefinierten Operatoren festzulegen, verwenden Sie &quot;Überladene Operatoren&quot;.</translation>
</message>
<message>
<source>Preprocessor</source>
@@ -55697,7 +55682,7 @@ Außer Leerzeichen innerhalb von Kommentaren und Zeichenketten.</translation>
<translation>Zurücksetzen</translation>
</message>
<message>
- <source>Scanning scope</source>
+ <source>Scanning Scope</source>
<translation>Suchbereich</translation>
</message>
<message>
@@ -56030,11 +56015,11 @@ Die Trace-Daten sind verloren.</translation>
<name>QtC::Utils</name>
<message>
<source>Do not &amp;ask again</source>
- <translation>Nicht noch einmal nach&amp;fragen</translation>
+ <translation>Nicht erneut nach&amp;fragen</translation>
</message>
<message>
<source>Do not &amp;show again</source>
- <translation>Nicht noch einmal an&amp;zeigen</translation>
+ <translation>Nicht erneut an&amp;zeigen</translation>
</message>
<message>
<source>The class name must not contain namespace delimiters.</source>
@@ -56353,7 +56338,7 @@ Die Trace-Daten sind verloren.</translation>
</message>
<message>
<source>The command &quot;%1&quot; was canceled after %2 ms.</source>
- <translation type="unfinished"></translation>
+ <translation>Das Kommando &quot;%1&quot; wurde nach %2 ms abgebrochen.</translation>
</message>
<message>
<source>Invalid command</source>
@@ -56397,7 +56382,7 @@ Die Trace-Daten sind verloren.</translation>
</message>
<message>
<source>Failed to start terminal process. The stub exited before the inferior was started.</source>
- <translation type="unfinished"></translation>
+ <translation>Der Terminalprozess konnte nicht gestartet werden. Der Kontrollprozess wurde beendet, bevor der Unterprozess gestartet werden konnte.</translation>
</message>
<message>
<source>Cannot set permissions on temporary directory &quot;%1&quot;: %2</source>
@@ -56437,7 +56422,7 @@ Die Trace-Daten sind verloren.</translation>
</message>
<message>
<source>Refusing to remove the standard directory &quot;%1&quot;.</source>
- <translation type="unfinished"></translation>
+ <translation>Das Standardverzeichnis &quot;%1&quot; kann nicht entfernt werden.</translation>
</message>
<message>
<source>Refusing to remove root directory.</source>
@@ -56445,7 +56430,7 @@ Die Trace-Daten sind verloren.</translation>
</message>
<message>
<source>Refusing to remove your home directory.</source>
- <translation>Das Nutzerverzeichnis (Home) kann nicht entfernt werden.</translation>
+ <translation>Das Benutzerverzeichnis (Home) kann nicht entfernt werden.</translation>
</message>
<message>
<source>Failed to remove directory &quot;%1&quot;.</source>
@@ -56496,7 +56481,7 @@ Die Trace-Daten sind verloren.</translation>
</message>
<message>
<source>Device is not connected</source>
- <translation type="unfinished"></translation>
+ <translation>Gerät ist nicht verbunden</translation>
</message>
<message>
<source>Failed reading file &quot;%1&quot;: %2</source>
@@ -56552,7 +56537,7 @@ Die Trace-Daten sind verloren.</translation>
</message>
<message>
<source>Cannot create temporary file %1: %2</source>
- <translation type="unfinished"></translation>
+ <translation>Die temporäre Datei &quot;%1&quot; konnte nicht erstellt werden: %2</translation>
</message>
<message>
<source>Overwrite File?</source>
@@ -56721,7 +56706,7 @@ Die Trace-Daten sind verloren.</translation>
</message>
<message>
<source>&lt;p&gt;No valid settings file could be found.&lt;/p&gt;&lt;p&gt;All settings files found in directory &quot;%1&quot; were unsuitable for the current version of %2, for instance because they were written by an incompatible version of %2, or because a different settings path was used.&lt;/p&gt;</source>
- <translation>&lt;p&gt;Es konnte keine gültige Einstellungsdatei gefunden werden.&lt;/p&gt;&lt;p&gt;Alle im Verzeichnis &quot;%1&quot; gefundenen Einstellungsdateien sind für die aktuelle Version von %2 ungeeignet, zum Beispiel weil sie von einer inkompatiblen Version von %2 geschrieben wurden oder weil ein anderes Einstellungsverzeichnis benutzt wurde.&lt;/p&gt;</translation>
+ <translation>&lt;p&gt;Es konnte keine gültige Einstellungsdatei gefunden werden.&lt;/p&gt;&lt;p&gt;Alle im Verzeichnis &quot;%1&quot; gefundenen Einstellungsdateien sind für die aktuelle Version von %2 ungeeignet, zum Beispiel weil sie von einer inkompatiblen Version von %2 geschrieben wurden oder weil ein anderes Einstellungsverzeichnis verwendet wurde.&lt;/p&gt;</translation>
</message>
<message>
<source>&lt;p&gt;No valid settings file could be found.&lt;/p&gt;&lt;p&gt;All settings files found in directory &quot;%1&quot; were either too new or too old to be read.&lt;/p&gt;</source>
@@ -56796,9 +56781,9 @@ Existing variables can be referenced in a VALUE with ${OTHER}.
To clear a variable, put its name on a line with nothing else on it.
To disable a variable, prefix the line with &quot;#&quot;.</source>
<translation>Geben Sie eine Umgebungsvariable pro Zeile ein.
-Um eine Variable zu setzen oder zu ändern, benutzen Sie VARIABLE=WERT.
-Um einen Wert an eine Variable anzufügen, benutzen Sie VARIABLE+=WERT.
-Um einen Wert einer Variable voranzustellen, benutzen Sie VARIABLE=+WERT.
+Um eine Variable zu setzen oder zu ändern, verwenden Sie VARIABLE=WERT.
+Um einen Wert an eine Variable anzufügen, verwenden Sie VARIABLE+=WERT.
+Um einen Wert einer Variable voranzustellen, verwenden Sie VARIABLE=+WERT.
Existierende Variablen können in einem WERT mit ${ANDERE} verwendet werden.
Um eine Variable zu leeren, schreiben Sie nichts als ihren Namen in eine Zeile.
Um eine Variable zu deaktivieren, stellen Sie der Zeile &quot;#&quot; voran.</translation>
@@ -56896,7 +56881,7 @@ Um eine Variable zu deaktivieren, stellen Sie der Zeile &quot;#&quot; voran.</tr
</message>
<message>
<source>Do Not Show Again</source>
- <translation>Nicht noch einmal anzeigen</translation>
+ <translation>Nicht erneut anzeigen</translation>
</message>
<message>
<source>Close</source>
@@ -57119,7 +57104,7 @@ in &quot;%2&quot; aus.
</message>
<message>
<source>User:</source>
- <translation>Nutzer:</translation>
+ <translation>Benutzer:</translation>
</message>
<message>
<source>Password:</source>
@@ -57282,7 +57267,7 @@ in &quot;%2&quot; aus.
</message>
<message>
<source>Backtrace frame count:</source>
- <translation>Stack-Frames:</translation>
+ <translation>Stackframes:</translation>
</message>
<message>
<source>Suppression files:</source>
@@ -57570,7 +57555,7 @@ Mit Cache-Simulation werden weitere Ereigniszähler aktiviert:
</message>
<message>
<source>Use of Uninitialized Memory</source>
- <translation>Benutzung von nicht initialisiertem Speicher</translation>
+ <translation>Verwendung von nicht initialisiertem Speicher</translation>
</message>
<message>
<source>Show issues originating outside currently opened projects.</source>
@@ -57614,7 +57599,7 @@ Mit Cache-Simulation werden weitere Ereigniszähler aktiviert:
</message>
<message>
<source>Valgrind Analyze Memory uses the Memcheck tool to find memory leaks.</source>
- <translation>Die Speicheranalyse von Valgrind benutzt das Programm &quot;memcheck&quot;, um Speicherlecks zu finden.</translation>
+ <translation>Die Speicheranalyse von Valgrind verwendet das Programm &quot;memcheck&quot;, um Speicherlecks zu finden.</translation>
</message>
<message>
<source>Valgrind Memory Analyzer</source>
@@ -57627,7 +57612,7 @@ Mit Cache-Simulation werden weitere Ereigniszähler aktiviert:
<message>
<source>Valgrind Analyze Memory with GDB uses the Memcheck tool to find memory leaks.
When a problem is detected, the application is interrupted and can be debugged.</source>
- <translation>Die Speicheranalyse mit Valgrind und GDB benutzt das Programm &quot;memcheck&quot;, um Speicherlecks zu finden.
+ <translation>Die Speicheranalyse mit Valgrind und GDB verwendet das Programm &quot;memcheck&quot;, um Speicherlecks zu finden.
Wird ein Problem gefunden, dann wird die Anwendung angehalten und kann untersucht werden.</translation>
</message>
<message>
@@ -57839,7 +57824,7 @@ Wird ein Problem gefunden, dann wird die Anwendung angehalten und kann untersuch
</message>
<message>
<source>Go back one step in history. This will select the previously selected item.</source>
- <translation>Gehe einen Schritt im Verlauf zurück. Das vorher ausgewählte Element wird wieder ausgewählt.</translation>
+ <translation>Gehe einen Schritt im Verlauf zurück. Das vorher ausgewählte Element wird erneut ausgewählt.</translation>
</message>
<message>
<source>Go forward one step in history.</source>
@@ -58804,17 +58789,17 @@ Check settings or ensure Valgrind is installed and available in PATH.</source>
</message>
<message>
<source>User/&amp;alias configuration file:</source>
- <translation>Nutzer/&amp;Alias-Konfigurationsdatei:</translation>
+ <translation>Benutzer/&amp;Alias-Konfigurationsdatei:</translation>
</message>
<message>
<source>A file listing nicknames in a 4-column mailmap format:
&apos;name &lt;email&gt; alias &lt;email&gt;&apos;.</source>
- <translation>Eine Datei, die Nutzernamen in einem vierspaltigen Format (mailmap) enthält:
+ <translation>Eine Datei, die Benutzernamen in einem vierspaltigen Format (mailmap) enthält:
&apos;Name &lt;E-Mail&gt; Alias &lt;E-Mail&gt;&apos;.</translation>
</message>
<message>
<source>User &amp;fields configuration file:</source>
- <translation>Nutzer&amp;feld-Konfigurationsdatei:</translation>
+ <translation>Benutzer&amp;feld-Konfigurationsdatei:</translation>
</message>
<message>
<source>A simple file containing lines with field names like &quot;Reviewed-By:&quot; which will be added below the submit editor.</source>
@@ -58930,7 +58915,7 @@ should a repository require SSH-authentication (see documentation on SSH and the
<message>
<source>The activated version %1 is not supported by %2. Activate version %3 or higher.</source>
<translatorcomment>%1=sdkVersion, %2=QtC-Version, %3=minVersion</translatorcomment>
- <translation>Die aktivierte Version %1 wird von %2 nicht unterstützt. Benutzen Sie Version %3 oder höher.</translation>
+ <translation>Die aktivierte Version %1 wird von %2 nicht unterstützt. Verwenden Sie Version %3 oder höher.</translation>
</message>
<message>
<source>Activated version: %1</source>
@@ -58991,7 +58976,7 @@ should a repository require SSH-authentication (see documentation on SSH and the
</message>
<message>
<source>Welcome to %1</source>
- <translation type="unfinished"></translation>
+ <translation>Willkommen bei %1</translation>
</message>
<message>
<source>Create Project...</source>
@@ -59003,7 +58988,7 @@ should a repository require SSH-authentication (see documentation on SSH and the
</message>
<message>
<source>Explore more</source>
- <translation type="unfinished"></translation>
+ <translation>Erfahre mehr</translation>
</message>
<message>
<source>Get Started</source>
@@ -59031,7 +59016,7 @@ should a repository require SSH-authentication (see documentation on SSH and the
</message>
<message>
<source>Would you like to take a quick UI tour? This tour highlights important user interface elements and shows how they are used. To take the tour later, select Help &gt; UI Tour.</source>
- <translation>Wollen Sie sich kurz die Oberfläche vorführen lassen? Dabei wird gezeigt, wo die wichtigsten Bedienelemente sind und wie man sie benutzt. Sie können die Vorführung auch später über &quot;Hilfe&quot; &gt; &quot;Oberfläche vorführen&quot; starten.</translation>
+ <translation>Wollen Sie sich kurz die Oberfläche vorführen lassen? Dabei wird gezeigt, wo die wichtigsten Bedienelemente sind und wie man sie verwendet. Sie können die Vorführung auch später über &quot;Hilfe&quot; &gt; &quot;Oberfläche vorführen&quot; starten.</translation>
</message>
<message>
<source>Take UI Tour</source>
@@ -59047,7 +59032,7 @@ should a repository require SSH-authentication (see documentation on SSH and the
</message>
<message>
<source>&lt;p style=&quot;margin-top: 30px&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;padding-right: 20px&quot;&gt;Welcome:&lt;/td&gt;&lt;td&gt;Open examples, tutorials, and recent sessions and projects.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Edit:&lt;/td&gt;&lt;td&gt;Work with code and navigate your project.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Design:&lt;/td&gt;&lt;td&gt;Visually edit Widget-based user interfaces, state charts and UML models.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Debug:&lt;/td&gt;&lt;td&gt;Analyze your application with a debugger or other analyzers.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Projects:&lt;/td&gt;&lt;td&gt;Manage project settings.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Help:&lt;/td&gt;&lt;td&gt;Browse the help database.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
- <translation>&lt;p style=&quot;margin-top: 30px&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;padding-right: 20px&quot;&gt;Willkommen:&lt;/td&gt;&lt;td&gt;Öffnen Sie Beispiele, Anleitungen, sowie kürzlich verwendete Sitzungen und Projekte.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Editieren:&lt;/td&gt;&lt;td&gt;Arbeiten Sie am Quelltext und navigieren Sie im Projekt.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Design:&lt;/td&gt;&lt;td&gt;Bearbeiten Sie Oberflächendesigns für Qt Widgets, State Charts und UML-Modelle.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Debug:&lt;/td&gt;&lt;td&gt;Analysieren Sie Ihre Anwendung mit einem Debugger oder anderen Werkzeugen.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Projekte:&lt;/td&gt;&lt;td&gt;Verwalten Sie Projekteinstellungen.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Hilfe:&lt;/td&gt;&lt;td&gt;Durchsuchen Sie die Hilfedatenbank.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
+ <translation>&lt;p style=&quot;margin-top: 30px&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;padding-right: 20px&quot;&gt;Willkommen:&lt;/td&gt;&lt;td&gt;Öffnen Sie Beispiele, Anleitungen, sowie kürzlich verwendete Sitzungen und Projekte.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bearbeiten:&lt;/td&gt;&lt;td&gt;Arbeiten Sie am Quelltext und navigieren Sie im Projekt.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Design:&lt;/td&gt;&lt;td&gt;Bearbeiten Sie Oberflächendesigns für Qt Widgets, State Charts und UML-Modelle.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Debug:&lt;/td&gt;&lt;td&gt;Analysieren Sie Ihre Anwendung mit einem Debugger oder anderen Werkzeugen.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Projekte:&lt;/td&gt;&lt;td&gt;Verwalten Sie Projekteinstellungen.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Hilfe:&lt;/td&gt;&lt;td&gt;Durchsuchen Sie die Hilfedatenbank.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
</message>
<message>
<source>Kit Selector</source>
@@ -61495,7 +61480,7 @@ This is used for calculating the total implicit size.</source>
</message>
<message>
<source>Auto scroll</source>
- <translation>Automatisch rollen</translation>
+ <translation>Automatisch scrollen</translation>
</message>
<message>
<source>Toggles if the text scrolls when it exceeds its boundary.</source>
diff --git a/share/qtcreator/translations/qtcreator_es.ts b/share/qtcreator/translations/qtcreator_es.ts
index 623ffc7e0a..d9de9393a9 100644
--- a/share/qtcreator/translations/qtcreator_es.ts
+++ b/share/qtcreator/translations/qtcreator_es.ts
@@ -3777,8 +3777,8 @@ Es recomendado usar gdb 6.7 o posterior.</translation>
<translation type="obsolete">Editor de signals/slots</translation>
</message>
<message>
- <source>Qt Designer Form Class</source>
- <translation>Clase del formulario Qt Designer</translation>
+ <source>Qt Widgets Designer Form Class</source>
+ <translation>Clase del formulario Qt Widgets Designer</translation>
</message>
<message>
<source>%1 - Error</source>
@@ -3825,20 +3825,20 @@ Es recomendado usar gdb 6.7 o posterior.</translation>
<translation></translation>
</message>
<message>
- <source>Qt Designer Form</source>
+ <source>Qt Widgets Designer Form</source>
<translation>Diseñador de formularios de Qt</translation>
</message>
<message>
- <source>Creates a Qt Designer form file (.ui).</source>
- <translation>Crea un archivo de formulario de Qt Designer (.ui).</translation>
+ <source>Creates a Qt Widgets Designer form file (.ui).</source>
+ <translation>Crea un archivo de formulario de Qt Widgets Designer (.ui).</translation>
</message>
<message>
- <source>Creates a Qt Designer form file (.ui) with a matching class.</source>
- <translation>Crea un archivo de formulario de Qt Designer (.ui) para una clase.</translation>
+ <source>Creates a Qt Widgets Designer form file (.ui) with a matching class.</source>
+ <translation>Crea un archivo de formulario de Qt Widgets Designer (.ui) para una clase.</translation>
</message>
<message>
- <source>Qt Designer Form Class</source>
- <translation>Clase del formulario de Qt Designer</translation>
+ <source>Qt Widgets Designer Form Class</source>
+ <translation>Clase del formulario de Qt Widgets Designer</translation>
</message>
<message>
<source>Object inspector</source>
@@ -3953,8 +3953,8 @@ Es recomendado usar gdb 6.7 o posterior.</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>About Qt Designer plugins....</source>
- <translation>Acerca de los plugins de Qt Designer...</translation>
+ <source>About Qt Widgets Designer plugins....</source>
+ <translation>Acerca de los plugins de Qt Widgets Designer...</translation>
</message>
<message>
<source>Preview in</source>
@@ -3989,8 +3989,8 @@ Es recomendado usar gdb 6.7 o posterior.</translation>
<translation>Imposible escribir a %1: %2</translation>
</message>
<message>
- <source>Qt Designer Form</source>
- <translation>Formulario de Qt Designer</translation>
+ <source>Qt Widgets Designer Form</source>
+ <translation>Formulario de Qt Widgets Designer</translation>
</message>
<message>
<source>The class definition of &apos;%1&apos; could not be found in %2.</source>
@@ -7459,8 +7459,8 @@ al control de versiones (%2)?</translation>
<translation>Este asistente genera un proyecto de aplicación Qt4 para consola. La aplicación es derivada de QCoreApplication y no provee interfaz gráfica de usuario.</translation>
</message>
<message>
- <source>Qt Designer is not responding (%1).</source>
- <translation>Qt Designer no está respondiendo (%1).</translation>
+ <source>Qt Widgets Designer is not responding (%1).</source>
+ <translation>Qt Widgets Designer no está respondiendo (%1).</translation>
</message>
<message>
<source>Unable to create server socket: %1</source>
diff --git a/share/qtcreator/translations/qtcreator_fr.ts b/share/qtcreator/translations/qtcreator_fr.ts
index 8e802d897c..ff5318759a 100644
--- a/share/qtcreator/translations/qtcreator_fr.ts
+++ b/share/qtcreator/translations/qtcreator_fr.ts
@@ -152,8 +152,8 @@
<translation>Lissage</translation>
</message>
<message>
- <source>Toggles if the smoothing is performed using linear interpolation method. Keeping it unchecked would follow non-smooth method using nearest neighbor. It is mostly applicable on image based items. </source>
- <translation>Active/désactive l&apos;utilisation de l&apos;interpolation linéaire pour le lissage. Lorsque décoché, la méthode du plus proche voisin sera utilisée. Cela s&apos;applique principalement aux éléments images. </translation>
+ <source>Toggles if the smoothing is performed using linear interpolation method. Keeping it unchecked would follow non-smooth method using nearest neighbor. It is mostly applicable on image based items.</source>
+ <translation>Active/désactive l&apos;utilisation de l&apos;interpolation linéaire pour le lissage. Lorsque décoché, la méthode du plus proche voisin sera utilisée. Cela s&apos;applique principalement aux éléments images.</translation>
</message>
<message>
<source>Antialiasing</source>
@@ -10730,7 +10730,7 @@ dans le navigateur système pour un téléchargement manuel.</translation>
<translation>Liste des NDK Android&#xa0;:</translation>
</message>
<message>
- <source>Android OpenSSL settings (Optional)</source>
+ <source>Android OpenSSL Settings (Optional)</source>
<translation>Paramètres Android d&apos;OpenSSL (optionnel)</translation>
</message>
<message>
@@ -11066,12 +11066,12 @@ Le kit supporte «&#xa0;%2&#xa0;», mais le périphérique utilise «&#xa0;%3&#x
</translation>
</message>
<message>
- <source>
-Uninstalling the installed package may solve the issue.
-Do you want to uninstall the existing package?</source>
- <translation>
-La désinstallation du paquet installé peut résoudre le problème.
-Voulez-vous désinstaller le paquet existant&#xa0;?</translation>
+ <source>Uninstalling the installed package may solve the issue.</source>
+ <translation>La désinstallation du paquet installé peut résoudre le problème.</translation>
+ </message>
+ <message>
+ <source>Do you want to uninstall the existing package?</source>
+ <translation>Voulez-vous désinstaller le paquet existant&#xa0;?</translation>
</message>
<message>
<source>Install failed</source>
@@ -12712,7 +12712,7 @@ Exécutable&#xa0;: %2</translation>
<translation>Répétition des tests</translation>
</message>
<message>
- <source>Run in parallel</source>
+ <source>Run in Parallel</source>
<translation>Exécuter en parallèle</translation>
</message>
<message>
@@ -20440,8 +20440,8 @@ To do this, you type this shortcut and a space in the Locator entry field, and t
<translation>Éditeur QMLJS</translation>
</message>
<message>
- <source>Qt Designer</source>
- <translation>Qt Designer</translation>
+ <source>Qt Widgets Designer</source>
+ <translation>Qt Widgets Designer</translation>
</message>
<message>
<source>Qt Linguist</source>
@@ -22228,7 +22228,7 @@ Le modèle de code intégré gèrera le surlignage, la complétion, etc.</transl
<translation>Seuil de mise à jour du document :</translation>
</message>
<message>
- <source>Sessions with a single clangd instance</source>
+ <source>Sessions with a Single Clangd Instance</source>
<translation>Sessions avec une seule instance de clangd</translation>
</message>
<message>
@@ -22450,7 +22450,7 @@ devraient être gérés par le même processus clangd, ajoutez-les ici.</transla
<translation>Convertir en Camel Case</translation>
</message>
<message>
- <source>Add forward declaration for %1</source>
+ <source>Add Forward Declaration for %1</source>
<translation>Ajouter la déclaration préalable pour %1</translation>
</message>
<message>
@@ -22982,8 +22982,8 @@ p.ex. nom = «&#xa0;m_test_toto_&#xa0;» :
<translation>Modèles de getters et setters personnalisés</translation>
</message>
<message>
- <source>Value types:</source>
- <translation>Types de valeur :</translation>
+ <source>Value Types</source>
+ <translation>Types de valeur</translation>
</message>
<message>
<source>Projects only</source>
@@ -28811,8 +28811,8 @@ L’accès au module ou la mise en place de points d’arrêt par fichier et par
<translation>Éditeur d’interface graphique</translation>
</message>
<message>
- <source>Qt Designer Form Class</source>
- <translation>Classe d’interface graphique Qt Designer</translation>
+ <source>Qt Widgets Designer Form Class</source>
+ <translation>Classe d’interface graphique Qt Widgets Designer</translation>
</message>
<message>
<source>Form Template</source>
@@ -28835,12 +28835,12 @@ L’accès au module ou la mise en place de points d’arrêt par fichier et par
<translation>Sélectionner un nom de classe</translation>
</message>
<message>
- <source>Creates a Qt Designer form along with a matching class (C++ header and source file) for implementation purposes. You can add the form and class to an existing Qt Widget Project.</source>
- <translation>Crée un formulaire Qt Designer avec une classe correspondante (en-tête C++ et fichier source) pour implémentation. Vous pouvez ajouter le formulaire et la classe à un projet Qt Widget existant.</translation>
+ <source>Creates a Qt Widgets Designer form along with a matching class (C++ header and source file) for implementation purposes. You can add the form and class to an existing Qt Widget Project.</source>
+ <translation>Crée un formulaire Qt Widgets Designer avec une classe correspondante (en-tête C++ et fichier source) pour implémentation. Vous pouvez ajouter le formulaire et la classe à un projet Qt Widget existant.</translation>
</message>
<message>
<source>Widget Box</source>
- <translatorcomment>this translation must coherent with the translation of Qt Designer</translatorcomment>
+ <translatorcomment>this translation must coherent with the translation of Qt Widgets Designer</translatorcomment>
<translation>Boite de widget</translation>
</message>
<message>
@@ -28937,8 +28937,8 @@ L’accès au module ou la mise en place de points d’arrêt par fichier et par
<translation>Maj+F4</translation>
</message>
<message>
- <source>About Qt Designer Plugins...</source>
- <translation>À propos des greffons de Qt Designer…</translation>
+ <source>About Qt Widgets Designer Plugins...</source>
+ <translation>À propos des greffons de Qt Widgets Designer…</translation>
</message>
<message>
<source>Signals &amp;&amp; Slots Editor</source>
@@ -34341,8 +34341,8 @@ Souhaitez-vous les écraser&#xa0;?</translation>
<translation>Entrez les arguments appropriés pour votre commande de construction.</translation>
</message>
<message>
- <source>Make sure the build command&apos;s multi-job parameter value is large enough (such as -j200 for the JOM or Make build tools)</source>
- <translation>Assurez vous que le paramètre multi-job de la commande de construction est assez grande (telle que -j200 pour les outils de compilation comme JOM ou Make)</translation>
+ <source>Make sure the build command&apos;s multi-job parameter value is large enough (such as -j200 for the JOM or Make build tools).</source>
+ <translation>Assurez vous que le paramètre multi-job de la commande de construction est assez grande (telle que -j200 pour les outils de compilation comme JOM ou Make).</translation>
</message>
<message>
<source>Keep original jobs number:</source>
@@ -34461,16 +34461,16 @@ Souhaitez-vous les écraser&#xa0;?</translation>
<translation>Cacher l&apos;entête IncrediBuild dans la sortie&#xa0;:</translation>
</message>
<message>
- <source>Suppresses IncrediBuild&apos;s header in the build output</source>
- <translation>Supprimer l&apos;entête d&apos;IncrediBuild de la sortie de construction</translation>
+ <source>Suppresses IncrediBuild&apos;s header in the build output.</source>
+ <translation>Supprimer l&apos;entête d&apos;IncrediBuild de la sortie de construction.</translation>
</message>
<message>
<source>Internal IncrediBuild logging level:</source>
<translation>Niveau de journalisation interne d&apos;IncrediBuild&#xa0;:</translation>
</message>
<message>
- <source>Overrides the internal Incredibuild logging level for this build. Does not affect output or any user accessible logging. Used mainly to troubleshoot issues with the help of IncrediBuild support</source>
- <translation>Écrase le niveau interne de journalisation d&apos;IncrediBuild pour cette construction. N&apos;affecte pas la sortie ou un quelconque journal accessible par l&apos;utilisateur. Utilisé principalement pour comprendre les problèmes avec l&apos;aide du support d&apos;IncrediBuild</translation>
+ <source>Overrides the internal Incredibuild logging level for this build. Does not affect output or any user accessible logging. Used mainly to troubleshoot issues with the help of IncrediBuild support.</source>
+ <translation>Écrase le niveau interne de journalisation d&apos;IncrediBuild pour cette construction. N&apos;affecte pas la sortie ou un quelconque journal accessible par l&apos;utilisateur. Utilisé principalement pour comprendre les problèmes avec l&apos;aide du support d&apos;IncrediBuild.</translation>
</message>
<message>
<source>Miscellaneous</source>
@@ -34489,16 +34489,16 @@ Souhaitez-vous les écraser&#xa0;?</translation>
<translation>Arrêter en cas d&apos;erreur&#xa0;:</translation>
</message>
<message>
- <source>When specified, the execution will stop as soon as an error is encountered. This is the default behavior in &quot;Visual Studio&quot; builds, but not the default for &quot;Make and Build tools&quot; or &quot;Dev Tools&quot; builds</source>
- <translation>Lorsque spécifié, l&apos;exécution s&apos;arrête dès qu&apos;une erreur est rencontrée. C&apos;est le comportement par défaut dans les constructions «&#xa0;Visual Studio&#xa0;», mais ce n&apos;est pas le cas pour les constructions avec «&#xa0;Make et les outils de compilation&#xa0;» ou les «&#xa0;outils de développeur&#xa0;»</translation>
+ <source>When specified, the execution will stop as soon as an error is encountered. This is the default behavior in &quot;Visual Studio&quot; builds, but not the default for &quot;Make and Build tools&quot; or &quot;Dev Tools&quot; builds.</source>
+ <translation>Lorsque spécifié, l&apos;exécution s&apos;arrête dès qu&apos;une erreur est rencontrée. C&apos;est le comportement par défaut dans les constructions «&#xa0;Visual Studio&#xa0;», mais ce n&apos;est pas le cas pour les constructions avec «&#xa0;Make et les outils de compilation&#xa0;» ou les «&#xa0;outils de développeur&#xa0;».</translation>
</message>
<message>
<source>Additional Arguments:</source>
<translation>Arguments supplémentaires&#xa0;:</translation>
</message>
<message>
- <source>Add additional buildconsole arguments manually. The value of this field will be concatenated to the final buildconsole command line</source>
- <translation>Ajouter manuellement des arguments pour buildconsole. La valeur de ce champ est concaténé à la ligne de commande finale de buildconsole</translation>
+ <source>Add additional buildconsole arguments manually. The value of this field will be concatenated to the final buildconsole command line.</source>
+ <translation>Ajouter manuellement des arguments pour buildconsole. La valeur de ce champ est concaténé à la ligne de commande finale de buildconsole.</translation>
</message>
<message>
<source>Open Build Monitor:</source>
@@ -40386,8 +40386,8 @@ Présélectionne un Qt optimisé pour le bureau pour compiler l&apos;application
<translation>Définir l&apos;interpréteur Python</translation>
</message>
<message>
- <source>Creates a Qt for Python application that includes a Qt Designer-based widget (ui file). Requires .ui to Python conversion.</source>
- <translation>Génère une application Qt pour Python qui inclût un widget basé sur Qt Designer (fichier ui). Nécessite une conversion de .ui vers Python.</translation>
+ <source>Creates a Qt for Python application that includes a Qt Widgets Designer-based widget (ui file). Requires .ui to Python conversion.</source>
+ <translation>Génère une application Qt pour Python qui inclût un widget basé sur Qt Widgets Designer (fichier ui). Nécessite une conversion de .ui vers Python.</translation>
</message>
<message>
<source>Creates a Qt Quick UI project for previewing and prototyping designs.
@@ -40910,10 +40910,10 @@ Utilisez cette version «&#xa0;de compatibilité&#xa0;» si vous souhaitez utili
<translation>Application Qt Quick (compatibilité)</translation>
</message>
<message>
- <source>Creates a widget-based Qt application that contains a Qt Designer-based main window and C++ source and header files to implement the application logic.
+ <source>Creates a widget-based Qt application that contains a Qt Widgets Designer-based main window and C++ source and header files to implement the application logic.
Preselects a desktop Qt for building the application if available.</source>
- <translation>Génère une application basée sur les widgets qui contient une fenêtre principale basée sur Qt Designer et un ensemble de fichiers d&apos;entêtes et de sources C++ pour implémenter la logique de l&apos;application.
+ <translation>Génère une application basée sur les widgets qui contient une fenêtre principale basée sur Qt Widgets Designer et un ensemble de fichiers d&apos;entêtes et de sources C++ pour implémenter la logique de l&apos;application.
Sélectionne un Qt optimisé pour bureaux pour compiler l&apos;application, si disponible.</translation>
</message>
@@ -41254,12 +41254,12 @@ Sélectionne un Qt optimisé pour bureaux pour compiler l&apos;application, si d
<translation>Modèle d’interface graphique</translation>
</message>
<message>
- <source>Creates a Qt Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic.</source>
- <translation>Crée un formulaire Qt Designer que l’on peut ajouter à un projet Qt Widget. Ceci est utile si vous utilisez déjà une classe pour la logique métier de l’interface.</translation>
+ <source>Creates a Qt Widgets Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic.</source>
+ <translation>Crée un formulaire Qt Widgets Designer que l’on peut ajouter à un projet Qt Widget. Ceci est utile si vous utilisez déjà une classe pour la logique métier de l’interface.</translation>
</message>
<message>
- <source>Qt Designer Form</source>
- <translation>Interface graphique Qt Designer</translation>
+ <source>Qt Widgets Designer Form</source>
+ <translation>Interface graphique Qt Widgets Designer</translation>
</message>
<message>
<source>Creates a source file that you can add to a C/C++ project.</source>
@@ -43130,8 +43130,8 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u
<translation>Le répertoire de compilation contient des caractères potentiellement problématiques «&#xa0;%1&#xa0;».</translation>
</message>
<message>
- <source> This warning can be suppressed &lt;a href=&quot;dummy&quot;&gt;here&lt;/a&gt;.</source>
- <translation> Cet avertissement peut être supprimé &lt;a href=&quot;dummy&quot;&gt;ici&lt;/a&gt;.</translation>
+ <source>This warning can be suppressed &lt;a href=&quot;dummy&quot;&gt;here&lt;/a&gt;.</source>
+ <translation>Cet avertissement peut être supprimé &lt;a href=&quot;dummy&quot;&gt;ici&lt;/a&gt;.</translation>
</message>
<message>
<source>Separate debug info:</source>
@@ -43548,39 +43548,28 @@ au projet «&#xa0;%2&#xa0;».</translation>
<translation>Le typeId «&#xa0;%1&#xa0;» du générateur est inconnu. Les typesIds pris en charge sont : «&#xa0;%2&#xa0;».</translation>
</message>
<message>
- <source>Path &quot;%1&quot; does not exist when checking Json wizard search paths.
-</source>
- <translation>Le chemin «&#xa0;%1&#xa0;» n’existe pas lors de la vérification des chemins de recherche de l’assistant Json.</translation>
+ <source>Path &quot;%1&quot; does not exist when checking JSON wizard search paths.</source>
+ <translation>Le chemin «&#xa0;%1&#xa0;» n’existe pas lors de la vérification des chemins de recherche de l’assistant JSON.</translation>
</message>
<message>
- <source>Checking &quot;%1&quot; for %2.
-</source>
- <translation>Vérification de «&#xa0;%1&#xa0;» pour %2.
-</translation>
+ <source>Checking &quot;%1&quot; for %2.</source>
+ <translation>Vérification de «&#xa0;%1&#xa0;» pour %2.</translation>
</message>
<message>
- <source>* Failed to parse &quot;%1&quot;:%2:%3: %4
-</source>
- <translation>* Échec de l’analyse de «&#xa0;%1&#xa0;»:%2:%3 : %4
-</translation>
+ <source>* Failed to parse &quot;%1&quot;:%2:%3: %4</source>
+ <translation>* Échec de l’analyse de «&#xa0;%1&#xa0;»:%2:%3 : %4</translation>
</message>
<message>
- <source>* Did not find a JSON object in &quot;%1&quot;.
-</source>
- <translation>* N’a pas trouvé d’objet JSON dans «&#xa0;%1&#xa0;».
-</translation>
+ <source>* Did not find a JSON object in &quot;%1&quot;.</source>
+ <translation>* N’a pas trouvé d’objet JSON dans «&#xa0;%1&#xa0;».</translation>
</message>
<message>
- <source>* Configuration found and parsed.
-</source>
- <translation>* La configuration a été trouvée et analysée.
-</translation>
+ <source>* Configuration found and parsed.</source>
+ <translation>* La configuration a été trouvée et analysée.</translation>
</message>
<message>
- <source>JsonWizard: &quot;%1&quot; not found
-</source>
- <translation>Assistant Json : «&#xa0;%1&#xa0;» introuvable
-</translation>
+ <source>JsonWizard: &quot;%1&quot; not found</source>
+ <translation>Assistant Json : «&#xa0;%1&#xa0;» introuvable.</translation>
</message>
<message>
<source>Page is not an object.</source>
@@ -43599,16 +43588,12 @@ au projet «&#xa0;%2&#xa0;».</translation>
<translation>La page avec le typeId «&#xa0;%1&#xa0;» a un «&#xa0;index&#xa0;» invalide.</translation>
</message>
<message>
- <source>* Version %1 not supported.
-</source>
- <translation>* La version %1 n’est pas prise en charge.
-</translation>
+ <source>* Version %1 not supported.</source>
+ <translation>* La version %1 n’est pas prise en charge.</translation>
</message>
<message>
- <source>* Failed to create: %1
-</source>
- <translation>* Impossible de créer&#xa0;: %1
-</translation>
+ <source>* Failed to create: %1</source>
+ <translation>* Impossible de créer&#xa0;: %1</translation>
</message>
<message>
<source>key not found.</source>
@@ -44461,8 +44446,8 @@ Ces fichiers sont préservés.</numerusform>
<translation>Chemin de l&apos;interpréteur Python</translation>
</message>
<message>
- <source>No Python interpreter set for kit &quot;%1&quot;</source>
- <translation>Aucun interpréteur Python n&apos;est défini pour le kit «&#xa0;%1&#xa0;»</translation>
+ <source>No Python interpreter set for kit &quot;%1&quot;.</source>
+ <translation>Aucun interpréteur Python n&apos;est défini pour le kit «&#xa0;%1&#xa0;».</translation>
</message>
</context>
<context>
@@ -45047,8 +45032,8 @@ Les fichiers affectés sont :
<context>
<name>QtC::QmakeProjectManager</name>
<message>
- <source>Qt Designer is not responding (%1).</source>
- <translation>Qt Designer ne répond pas (%1).</translation>
+ <source>Qt Widgets Designer is not responding (%1).</source>
+ <translation>Qt Widgets Designer ne répond pas (%1).</translation>
</message>
<message>
<source>Unable to create server socket: %1</source>
@@ -45419,9 +45404,9 @@ Les fichiers affectés sont :
<translation>Crée un widget personnalisé ou une collection de widgets personnalisés pour Qt4 Designer.</translation>
</message>
<message>
- <source>This wizard generates a Qt Designer Custom Widget or a Qt Designer Custom Widget Collection project.</source>
- <translatorcomment>lourd ? &quot;contenant un widget ou une collection de widgets, personnalisé pour Qt Designer&quot; ?</translatorcomment>
- <translation>Cet assistant génère un projet contenant un widget ou une collection de widgets personnalisés pour Qt Designer.</translation>
+ <source>This wizard generates a Qt Widgets Designer Custom Widget or a Qt Widgets Designer Custom Widget Collection project.</source>
+ <translatorcomment>lourd ? &quot;contenant un widget ou une collection de widgets, personnalisé pour Qt Widgets Designer&quot; ?</translatorcomment>
+ <translation>Cet assistant génère un projet contenant un widget ou une collection de widgets personnalisés pour Qt Widgets Designer.</translation>
</message>
<message>
<source>Custom Widgets</source>
@@ -49563,10 +49548,8 @@ Le processus de contrôle n&apos;a pas pu démarrer.</translation>
<translation>Connexion au périphérique…</translation>
</message>
<message>
- <source>Connected. Now doing extended checks.
-</source>
- <translation>Connecté. Exécution des tests étendus.
-</translation>
+ <source>Connected. Now doing extended checks.</source>
+ <translation>Connecté. Exécution des tests étendus.</translation>
</message>
<message>
<source>Basic connectivity test failed, device is considered unusable.</source>
@@ -49893,8 +49876,8 @@ Le processus de contrôle n&apos;a pas pu démarrer.</translation>
<translation>Utiliser le transfert par défaut. Cela peut être lent.</translation>
</message>
<message>
- <source>Unknown error occurred while trying to create remote directories</source>
- <translation>Une erreur inconnue s&apos;est produite lors de la création des répertoires distants</translation>
+ <source>Unknown error occurred while trying to create remote directories.</source>
+ <translation>Une erreur inconnue s&apos;est produite lors de la création des répertoires distants.</translation>
</message>
<message>
<source>Transfer method was downgraded from &quot;%1&quot; to &quot;%2&quot;. If this is unexpected, please re-test device &quot;%3&quot;.</source>
@@ -52415,12 +52398,12 @@ Impossible d&apos;ouvrir le fichier «&#xa0;%1&#xa0;».</translation>
<translation>«&#xa0;%1&#xa0;» n&apos;est pas un exécutable.</translation>
</message>
<message>
- <source>Terminal process exited with code %1</source>
- <translation>Le processus du terminal s&apos;est terminé avec le code %1</translation>
+ <source>Terminal process exited with code %1.</source>
+ <translation>Le processus du terminal s&apos;est terminé avec le code %1.</translation>
</message>
<message>
- <source>Process exited with code: %1</source>
- <translation>Le processus s&apos;est terminé avec le code&#xa0;: %1</translation>
+ <source>Process exited with code: %1.</source>
+ <translation>Le processus s&apos;est terminé avec le code&#xa0;: %1.</translation>
</message>
<message>
<source>Copy</source>
@@ -52708,10 +52691,10 @@ En outre, Maj+Entrée insère un caractère d’échappement à la position du c
<message>
<source>Doxygen allows &quot;@&quot; and &quot;\&quot; to start commands.
By default, &quot;@&quot; is used if the surrounding comment starts with &quot;/**&quot; or &quot;///&quot;, and &quot;\&quot; is used
-if the comment starts with &quot;/*!&quot; or &quot;//!</source>
+if the comment starts with &quot;/*!&quot; or &quot;//!&quot;.</source>
<translation>Doxygen permet d&apos;utiliser «&#xa0;@&#xa0;» et «&#xa0;\&#xa0;» pour démarrer une commande.
Par défaut, «&#xa0;@&#xa0;» est utilisé si le commentaire l&apos;englobant commence avec «&#xa0;/**&#xa0;» ou «&#xa0;///&#xa0;» et «&#xa0;\&#xa0;» est utilisé
-si le commentaire débute avec «&#xa0;/*!&#xa0;» ou «&#xa0;//!&#xa0;»</translation>
+si le commentaire débute avec «&#xa0;/*!&#xa0;» ou «&#xa0;//!&#xa0;».</translation>
</message>
<message>
<source>Documentation Comments</source>
@@ -52734,7 +52717,7 @@ si le commentaire débute avec «&#xa0;/*!&#xa0;» ou «&#xa0;//!&#xa0;»</trans
<translation>À la demande</translation>
</message>
<message>
- <source>&amp;Automatically insert matching characters</source>
+ <source>&amp;Automatically Insert Matching Characters</source>
<translation>Insérer &amp;automatiquement les caractères correspondants</translation>
</message>
<message>
@@ -54991,7 +54974,7 @@ francis : en effet, une erreur de ma part --&gt; validé.</translatorcomment>
<translation>Entre les lignes</translation>
</message>
<message>
- <source>Line annotations</source>
+ <source>Line Annotations</source>
<translation>Annotations de ligne</translation>
</message>
<message>
@@ -55434,7 +55417,7 @@ Influence l’indentation des lignes de continuation.
<translation>Scanner le sous-projet actuel</translation>
</message>
<message>
- <source>Scanning scope</source>
+ <source>Scanning Scope</source>
<translation>Portée de la recherche</translation>
</message>
<message>
diff --git a/share/qtcreator/translations/qtcreator_hr.ts b/share/qtcreator/translations/qtcreator_hr.ts
index 6d69f112ad..acd2770cab 100644
--- a/share/qtcreator/translations/qtcreator_hr.ts
+++ b/share/qtcreator/translations/qtcreator_hr.ts
@@ -8025,7 +8025,7 @@ In addition, Shift+Enter inserts an escape character at the cursor position and
<translation>Automatski rastavi znakovne nizove</translation>
</message>
<message>
- <source>&amp;Automatically insert matching characters</source>
+ <source>&amp;Automatically Insert Matching Characters</source>
<translation>&amp;Automatski umetni poklapajuće znakove</translation>
</message>
<message>
@@ -8193,7 +8193,7 @@ In addition, Shift+Enter inserts an escape character at the cursor position and
<translation>Označi promjene u &amp;tekstu</translation>
</message>
<message>
- <source>Line annotations</source>
+ <source>Line Annotations</source>
<translation>Napomene za retke</translation>
</message>
<message>
@@ -8443,7 +8443,7 @@ Utječe na uvlačenje neprekinutih redaka.
<translation>Resetiraj</translation>
</message>
<message>
- <source>Scanning scope</source>
+ <source>Scanning Scope</source>
<translation>Raspon pretrage</translation>
</message>
<message>
@@ -13221,9 +13221,11 @@ The minimum API level required by the kit is %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>
-Uninstalling the installed package may solve the issue.
-Do you want to uninstall the existing package?</source>
+ <source>Uninstalling the installed package may solve the issue.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to uninstall the existing package?</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -15304,8 +15306,8 @@ Check the test environment.</source>
<translation>Python uređivač</translation>
</message>
<message>
- <source>Qt Designer</source>
- <translation>Qt Designer</translation>
+ <source>Qt Widgets Designer</source>
+ <translation>Qt Widgets Designer</translation>
</message>
<message>
<source>Qt Linguist</source>
@@ -20900,8 +20902,8 @@ Rebuilding the project might help.</source>
<translation>Alt+Shift+R</translation>
</message>
<message>
- <source>About Qt Designer Plugins...</source>
- <translation>O Qt Designer dodacima …</translation>
+ <source>About Qt Widgets Designer Plugins...</source>
+ <translation>O Qt Widgets Designer dodacima …</translation>
</message>
<message>
<source>Preview in</source>
@@ -27563,43 +27565,35 @@ to project &quot;%2&quot;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Path &quot;%1&quot; does not exist when checking Json wizard search paths.
-</source>
+ <source>Path &quot;%1&quot; does not exist when checking JSON wizard search paths.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Checking &quot;%1&quot; for %2.
-</source>
+ <source>Checking &quot;%1&quot; for %2.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>* Failed to parse &quot;%1&quot;:%2:%3: %4
-</source>
+ <source>* Failed to parse &quot;%1&quot;:%2:%3: %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>* Did not find a JSON object in &quot;%1&quot;.
-</source>
+ <source>* Did not find a JSON object in &quot;%1&quot;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>* Configuration found and parsed.
-</source>
+ <source>* Configuration found and parsed.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>* Version %1 not supported.
-</source>
+ <source>* Version %1 not supported.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>* Failed to create: %1
-</source>
+ <source>* Failed to create: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>JsonWizard: &quot;%1&quot; not found
-</source>
+ <source>JsonWizard: &quot;%1&quot; not found.</source>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/share/qtcreator/translations/qtcreator_hu.ts b/share/qtcreator/translations/qtcreator_hu.ts
index 9f29949c84..23c59c4d41 100644
--- a/share/qtcreator/translations/qtcreator_hu.ts
+++ b/share/qtcreator/translations/qtcreator_hu.ts
@@ -5235,8 +5235,8 @@ A projekt újraépítése talán segít.</translation>
<translation>Qt modulnevek használata az #include irányelvekben</translation>
</message>
<message>
- <source>Qt Designer Form Class</source>
- <translation>Qt Designer forma osztály</translation>
+ <source>Qt Widgets Designer Form Class</source>
+ <translation>Qt Widgets Designer forma osztály</translation>
</message>
<message>
<source>Choose a class name</source>
@@ -5259,16 +5259,16 @@ A projekt újraépítése talán segít.</translation>
<translation>Qt</translation>
</message>
<message>
- <source>Qt Designer Form</source>
- <translation>Qt Designer forma</translation>
+ <source>Qt Widgets Designer Form</source>
+ <translation>Qt Widgets Designer forma</translation>
</message>
<message>
- <source>Creates a Qt Designer form file (.ui).</source>
- <translation>Qt Designer forma fájl (.ui) létrehozása.</translation>
+ <source>Creates a Qt Widgets Designer form file (.ui).</source>
+ <translation>Qt Widgets Designer forma fájl (.ui) létrehozása.</translation>
</message>
<message>
- <source>Creates a Qt Designer form file (.ui) with a matching class.</source>
- <translation>Qt Designer forma fájl(.ui) létrehozása illeszkedő osztályokkal.</translation>
+ <source>Creates a Qt Widgets Designer form file (.ui) with a matching class.</source>
+ <translation>Qt Widgets Designer forma fájl(.ui) létrehozása illeszkedő osztályokkal.</translation>
</message>
<message>
<source>Widget Box</source>
@@ -5371,8 +5371,8 @@ A projekt újraépítése talán segít.</translation>
<translation>Ctrl+Alt+R</translation>
</message>
<message>
- <source>About Qt Designer plugins....</source>
- <translation>Névjegy a Qt Designer beépülő moduljairól...</translation>
+ <source>About Qt Widgets Designer plugins....</source>
+ <translation>Névjegy a Qt Widgets Designer beépülő moduljairól...</translation>
</message>
<message>
<source>Preview in</source>
@@ -8651,8 +8651,8 @@ SOURCES *= .../ide/main/bin/dumper/dumper.cpp(new line)
<translation>CVS feltöltési sablon</translation>
</message>
<message>
- <source>Qt Designer file</source>
- <translation>Qt Designer fájl</translation>
+ <source>Qt Widgets Designer file</source>
+ <translation>Qt Widgets Designer fájl</translation>
</message>
<message>
<source>Generic Qt Creator Project file</source>
@@ -12834,8 +12834,8 @@ p, li { white-space: pre-wrap; }
<translation>Ez a varázsló egy Qt4 Designer szokásos Widget-t vagy Qt4 Designer szokásos Widget gyűjtemény projektet generál.</translation>
</message>
<message>
- <source>Qt Designer is not responding (%1).</source>
- <translation>A Qt Designer nem válaszol (%1).</translation>
+ <source>Qt Widgets Designer is not responding (%1).</source>
+ <translation>A Qt Widgets Designer nem válaszol (%1).</translation>
</message>
<message>
<source>Unable to create server socket: %1</source>
diff --git a/share/qtcreator/translations/qtcreator_it.ts b/share/qtcreator/translations/qtcreator_it.ts
index 549bf8f77b..211f409955 100644
--- a/share/qtcreator/translations/qtcreator_it.ts
+++ b/share/qtcreator/translations/qtcreator_it.ts
@@ -3652,8 +3652,8 @@ L&apos;utilizzo di gdb 6.7 o successivi è fortemente consigliato.</translation>
<translation type="obsolete">Editor di segnali e slot</translation>
</message>
<message>
- <source>Qt Designer Form Class</source>
- <translation>Classe Form di Qt Designer</translation>
+ <source>Qt Widgets Designer Form Class</source>
+ <translation>Classe Form di Qt Widgets Designer</translation>
</message>
<message>
<source>Choose a class name</source>
@@ -3700,16 +3700,16 @@ L&apos;utilizzo di gdb 6.7 o successivi è fortemente consigliato.</translation>
<translation>Qt</translation>
</message>
<message>
- <source>Qt Designer Form</source>
- <translation>Form di Qt Designer</translation>
+ <source>Qt Widgets Designer Form</source>
+ <translation>Form di Qt Widgets Designer</translation>
</message>
<message>
- <source>Creates a Qt Designer form file (.ui).</source>
- <translation>Crea un file form Qt Designer (.ui).</translation>
+ <source>Creates a Qt Widgets Designer form file (.ui).</source>
+ <translation>Crea un file form Qt Widgets Designer (.ui).</translation>
</message>
<message>
- <source>Creates a Qt Designer form file (.ui) with a matching class.</source>
- <translation>Crea un file form Qt Designer (.ui) e la relativa classe.</translation>
+ <source>Creates a Qt Widgets Designer form file (.ui) with a matching class.</source>
+ <translation>Crea un file form Qt Widgets Designer (.ui) e la relativa classe.</translation>
</message>
<message>
<source>Designer widgetbox</source>
@@ -3824,8 +3824,8 @@ L&apos;utilizzo di gdb 6.7 o successivi è fortemente consigliato.</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>About Qt Designer plugins....</source>
- <translation>Informazioni sui plugin Qt Designer...</translation>
+ <source>About Qt Widgets Designer plugins....</source>
+ <translation>Informazioni sui plugin Qt Widgets Designer...</translation>
</message>
<message>
<source>Preview in</source>
@@ -7309,8 +7309,8 @@ al VCS (%2)?</translation>
<translation>Questa procedura guidata genera un progetto per applicazione console Qt4. L&apos;applicazione deriva da QCoreApplication e non include una GUI.</translation>
</message>
<message>
- <source>Qt Designer is not responding (%1).</source>
- <translation>Qt Designer non risponde (%1).</translation>
+ <source>Qt Widgets Designer is not responding (%1).</source>
+ <translation>Qt Widgets Designer non risponde (%1).</translation>
</message>
<message>
<source>Unable to create server socket: %1</source>
diff --git a/share/qtcreator/translations/qtcreator_ja.ts b/share/qtcreator/translations/qtcreator_ja.ts
index 71665c23d5..22f040580f 100644
--- a/share/qtcreator/translations/qtcreator_ja.ts
+++ b/share/qtcreator/translations/qtcreator_ja.ts
@@ -785,7 +785,7 @@
<translation>SDK のセットアップ</translation>
</message>
<message>
- <source>Android OpenSSL settings (Optional)</source>
+ <source>Android OpenSSL Settings (Optional)</source>
<translation>Android OpenSSL の設定 (オプション)</translation>
</message>
<message>
@@ -1895,7 +1895,7 @@ In addition, Shift+Enter inserts an escape character at the cursor position and
<translation>文字列を自動的に分割する</translation>
</message>
<message>
- <source>&amp;Automatically insert matching characters</source>
+ <source>&amp;Automatically Insert Matching Characters</source>
<translation>マッチング文字を自動的に挿入する(&amp;A)</translation>
</message>
<message>
@@ -6322,7 +6322,7 @@ Backspace キーが押された時のインデントの動作を指定します
<translation>ファイル内のナビゲーションをアニメーション化する</translation>
</message>
<message>
- <source>Line annotations</source>
+ <source>Line Annotations</source>
<translation>ラインアノテーション</translation>
</message>
<message>
@@ -6678,7 +6678,7 @@ Influences the indentation of continuation lines.
<translation>リセット</translation>
</message>
<message>
- <source>Scanning scope</source>
+ <source>Scanning Scope</source>
<translation>スキャンする範囲</translation>
</message>
<message>
@@ -10949,12 +10949,12 @@ with a password, which you can enter below.</source>
</translation>
</message>
<message>
- <source>
-Uninstalling the installed package may solve the issue.
-Do you want to uninstall the existing package?</source>
- <translation>
-インストールされているパッケージをアンインストールすると、問題が解決する場合があります。
-既存のパッケージをアンインストールしますか?</translation>
+ <source>Uninstalling the installed package may solve the issue.</source>
+ <translation>インストールされているパッケージをアンインストールすると、問題が解決する場合があります。</translation>
+ </message>
+ <message>
+ <source>Do you want to uninstall the existing package?</source>
+ <translation>既存のパッケージをアンインストールしますか?</translation>
</message>
<message>
<source>Package deploy: Running command &quot;%1&quot;.</source>
@@ -12152,8 +12152,8 @@ in the system&apos;s browser for manual download.</source>
<translation>Python エディタ</translation>
</message>
<message>
- <source>Qt Designer</source>
- <translation>Qt Designer</translation>
+ <source>Qt Widgets Designer</source>
+ <translation>Qt Widgets Designer</translation>
</message>
<message>
<source>Qt Linguist</source>
@@ -14319,7 +14319,7 @@ to version control (%2)
<translation>#include %1 を追加</translation>
</message>
<message>
- <source>Add forward declaration for %1</source>
+ <source>Add Forward Declaration for %1</source>
<translation>%1 の前方宣言を追加する</translation>
</message>
<message>
@@ -18978,8 +18978,8 @@ Rebuilding the project might help.</source>
プロジェクトのリビルドをお奨めします。</translation>
</message>
<message>
- <source>Qt Designer Form Class</source>
- <translation>Qt Designer フォームクラス</translation>
+ <source>Qt Widgets Designer Form Class</source>
+ <translation>Qt Widgets Designer フォームクラス</translation>
</message>
<message>
<source>Switch Source/Form</source>
@@ -18994,8 +18994,8 @@ Rebuilding the project might help.</source>
<translation>Shift+F4</translation>
</message>
<message>
- <source>Creates a Qt Designer form along with a matching class (C++ header and source file) for implementation purposes. You can add the form and class to an existing Qt Widget Project.</source>
- <translation>既存の Qt ウィジェットプロジェクトに追加可能な Qt Designer フォームとそれに対応したクラス (C++ ヘッダとソースファイル) を作成します。</translation>
+ <source>Creates a Qt Widgets Designer form along with a matching class (C++ header and source file) for implementation purposes. You can add the form and class to an existing Qt Widget Project.</source>
+ <translation>既存の Qt ウィジェットプロジェクトに追加可能な Qt Widgets Designer フォームとそれに対応したクラス (C++ ヘッダとソースファイル) を作成します。</translation>
</message>
<message>
<source>Choose a Form Template</source>
@@ -25088,8 +25088,8 @@ Neither the path to the library nor the path to its includes is added to the .pr
<translation>Qt カスタム Designer ウィジェットかカスタムウィジェットコレクションを作成します。</translation>
</message>
<message>
- <source>This wizard generates a Qt Designer Custom Widget or a Qt Designer Custom Widget Collection project.</source>
- <translation>このウィザードは Qt Designer カスタムウィジェットあるいは Qt Designer カスタムウィジェットコレクションプロジェクトを生成します。</translation>
+ <source>This wizard generates a Qt Widgets Designer Custom Widget or a Qt Widgets Designer Custom Widget Collection project.</source>
+ <translation>このウィザードは Qt Widgets Designer カスタムウィジェットあるいは Qt Widgets Designer カスタムウィジェットコレクションプロジェクトを生成します。</translation>
</message>
<message>
<source>Creating multiple widget libraries (%1, %2) in one project (%3) is not supported.</source>
@@ -25140,8 +25140,8 @@ Neither the path to the library nor the path to its includes is added to the .pr
<translation>アプリケーション &quot;%1&quot; が見つかりませんでした。</translation>
</message>
<message>
- <source>Qt Designer is not responding (%1).</source>
- <translation>Qt Designer が無応答です(%1)。</translation>
+ <source>Qt Widgets Designer is not responding (%1).</source>
+ <translation>Qt Widgets Designer が無応答です(%1)。</translation>
</message>
<message>
<source>Unable to create server socket: %1</source>
@@ -25612,10 +25612,10 @@ Neither the path to the library nor the path to its includes is added to the .pr
<translation>Qt ウィジェットアプリケーション</translation>
</message>
<message>
- <source>Creates a Qt application for the desktop. Includes a Qt Designer-based main window.
+ <source>Creates a Qt application for the desktop. Includes a Qt Widgets Designer-based main window.
Preselects a desktop Qt for building the application if available.</source>
- <translation>Qt Designer ベースのメインウィンドウを持つデスクトップ用 Qt アプリケーションを作成します。
+ <translation>Qt Widgets Designer ベースのメインウィンドウを持つデスクトップ用 Qt アプリケーションを作成します。
デスクトップ用 Qt が存在する場合、アプリケーションのビルド用に選択します。</translation>
</message>
@@ -37181,8 +37181,8 @@ Affected are breakpoints %1</source>
<translation>Alt+Shift+R</translation>
</message>
<message>
- <source>About Qt Designer Plugins...</source>
- <translation>Qt Designer プラグインについて...</translation>
+ <source>About Qt Widgets Designer Plugins...</source>
+ <translation>Qt Widgets Designer プラグインについて...</translation>
</message>
<message>
<source>Preview in</source>
@@ -37506,12 +37506,12 @@ Affected are breakpoints %1</source>
<translation>フォームテンプレート</translation>
</message>
<message>
- <source>Creates a Qt Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic.</source>
- <translation>Qt ウィジェットプロジェクトに追加可能な Qt Designer フォームを作成します。これは既に UI ビジネスロジックを実装したクラスを持っている場合に役立ちます。</translation>
+ <source>Creates a Qt Widgets Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic.</source>
+ <translation>Qt ウィジェットプロジェクトに追加可能な Qt Widgets Designer フォームを作成します。これは既に UI ビジネスロジックを実装したクラスを持っている場合に役立ちます。</translation>
</message>
<message>
- <source>Qt Designer Form</source>
- <translation>Qt Designer フォーム</translation>
+ <source>Qt Widgets Designer Form</source>
+ <translation>Qt Widgets Designer フォーム</translation>
</message>
<message>
<source>Creates a Java file with boilerplate code.</source>
@@ -39137,40 +39137,28 @@ Would you like to overwrite it?</source>
<translation>typeId が &quot;%1&quot; のページの &quot;index&quot; が無効です。</translation>
</message>
<message>
- <source>Path &quot;%1&quot; does not exist when checking Json wizard search paths.
-</source>
- <translation>Json ウィザードの検索パスを確認しましたが、パス &quot;%1&quot; は存在しません。
-</translation>
+ <source>Path &quot;%1&quot; does not exist when checking JSON wizard search paths.</source>
+ <translation>JSON ウィザードの検索パスを確認しましたが、パス &quot;%1&quot; は存在しません。</translation>
</message>
<message>
- <source>Checking &quot;%1&quot; for %2.
-</source>
- <translation>%2 向けに &quot;%1&quot; を確認しています。
-</translation>
+ <source>Checking &quot;%1&quot; for %2.</source>
+ <translation>%2 向けに &quot;%1&quot; を確認しています。</translation>
</message>
<message>
- <source>* Failed to parse &quot;%1&quot;:%2:%3: %4
-</source>
- <translation>・&quot;%1&quot; の解析に失敗しました:%2:%3: %4
-</translation>
+ <source>* Failed to parse &quot;%1&quot;:%2:%3: %4</source>
+ <translation>・&quot;%1&quot; の解析に失敗しました:%2:%3: %4</translation>
</message>
<message>
- <source>* Did not find a JSON object in &quot;%1&quot;.
-</source>
- <translation>・&quot;%1&quot; に JSON オブジェクトが見つかりませんでした。
-</translation>
+ <source>* Did not find a JSON object in &quot;%1&quot;.</source>
+ <translation>・&quot;%1&quot; に JSON オブジェクトが見つかりませんでした。</translation>
</message>
<message>
- <source>* Configuration found and parsed.
-</source>
- <translation>・設定が見つかり、解析しました。
-</translation>
+ <source>* Configuration found and parsed.</source>
+ <translation>・設定が見つかり、解析しました。</translation>
</message>
<message>
- <source>* Version %1 not supported.
-</source>
- <translation>・バージョン %1 には未対応です。
-</translation>
+ <source>* Version %1 not supported.</source>
+ <translation>・バージョン %1 には未対応です。</translation>
</message>
<message>
<source>The platform selected for the wizard.</source>
@@ -39201,16 +39189,12 @@ Would you like to overwrite it?</source>
<translation>画像ファイル &quot;%1&quot; が見つかりません。</translation>
</message>
<message>
- <source>* Failed to create: %1
-</source>
- <translation>・作成に失敗しました: %1
-</translation>
+ <source>* Failed to create: %1</source>
+ <translation>・作成に失敗しました: %1</translation>
</message>
<message>
- <source>JsonWizard: &quot;%1&quot; not found
-</source>
- <translation>JsonWizard: &quot;%1&quot; が見つかりません
-</translation>
+ <source>JsonWizard: &quot;%1&quot; not found.</source>
+ <translation>JsonWizard: &quot;%1&quot; が見つかりません。</translation>
</message>
<message>
<source>key not found.</source>
diff --git a/share/qtcreator/translations/qtcreator_pl.ts b/share/qtcreator/translations/qtcreator_pl.ts
index a59ebcb424..00278fb998 100644
--- a/share/qtcreator/translations/qtcreator_pl.ts
+++ b/share/qtcreator/translations/qtcreator_pl.ts
@@ -151,7 +151,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Toggles if the smoothing is performed using linear interpolation method. Keeping it unchecked would follow non-smooth method using nearest neighbor. It is mostly applicable on image based items. </source>
+ <source>Toggles if the smoothing is performed using linear interpolation method. Keeping it unchecked would follow non-smooth method using nearest neighbor. It is mostly applicable on image based items.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -9917,7 +9917,7 @@ in the system&apos;s browser for manual download.</source>
<translation>Lista Android NDK:</translation>
</message>
<message>
- <source>Android OpenSSL settings (Optional)</source>
+ <source>Android OpenSSL Settings (Optional)</source>
<translation>Ustawienia Android OpenSSL (opcjonalne)</translation>
</message>
<message>
@@ -10692,12 +10692,12 @@ The kit supports &quot;%2&quot;, but the device uses &quot;%3&quot;.</source>
<translation>Błąd instalacji, przyczyna nieznana.</translation>
</message>
<message>
- <source>
-Uninstalling the installed package may solve the issue.
-Do you want to uninstall the existing package?</source>
- <translation>
-Deinstalacja uprzednio zainstalowanego pakietu może rozwiązać problem.
-Czy zdeinstalować istniejący pakiet?</translation>
+ <source>Uninstalling the installed package may solve the issue.</source>
+ <translation>Deinstalacja uprzednio zainstalowanego pakietu może rozwiązać problem.</translation>
+ </message>
+ <message>
+ <source>Do you want to uninstall the existing package?</source>
+ <translation>Czy zdeinstalować istniejący pakiet?</translation>
</message>
<message>
<source>The deployment AVD &quot;%1&quot; cannot be started.</source>
@@ -12496,7 +12496,7 @@ See also Google Test settings.</source>
<translation>Powtarzanie testów</translation>
</message>
<message>
- <source>Run in parallel</source>
+ <source>Run in Parallel</source>
<translation>Uruchomianie równoległe</translation>
</message>
<message>
@@ -15958,8 +15958,8 @@ tylko przez wbudowane narzędzie.</translation>
<translation>Użyj globalnych ustawień</translation>
</message>
<message>
- <source>ClangFormat settings:</source>
- <translation>Ustawienia ClangFormat:</translation>
+ <source>ClangFormat Settings</source>
+ <translation>Ustawienia ClangFormat</translation>
</message>
<message>
<source>Indenting only</source>
@@ -17866,8 +17866,8 @@ Otherwise you need to specify the path to the %2 file from the Copilot neovim pl
<translation>Edytor QMLJS</translation>
</message>
<message>
- <source>Qt Designer</source>
- <translation>Qt Designer</translation>
+ <source>Qt Widgets Designer</source>
+ <translation>Qt Widgets Designer</translation>
</message>
<message>
<source>Qt Linguist</source>
@@ -21384,7 +21384,7 @@ The built-in code model will handle highlighting, completion and so on.</source>
<translation>Próg uaktualniania dokumentu:</translation>
</message>
<message>
- <source>Sessions with a single clangd instance</source>
+ <source>Sessions with a Single Clangd Instance</source>
<translation>Sesje z pojedynczą instancją clangd</translation>
</message>
<message>
@@ -21537,7 +21537,7 @@ managed by the same clangd process, add them here.</source>
<translation>Skonwertuj do pliku binarnego</translation>
</message>
<message>
- <source>Add forward declaration for %1</source>
+ <source>Add Forward Declaration for %1</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -22069,8 +22069,8 @@ e.g. name = &quot;m_test_foo_&quot;:
<translation>Własne szablony pobieraczy i ustawiaczy</translation>
</message>
<message>
- <source>Value types:</source>
- <translation>Typy wartości:</translation>
+ <source>Value Types</source>
+ <translation>Typy wartości</translation>
</message>
<message>
<source>Projects only</source>
@@ -27865,8 +27865,8 @@ Please select a 64 bit Debugger in the kit settings for this kit.</source>
<translation>Podaj nazwę klasy</translation>
</message>
<message>
- <source>Qt Designer Form Class</source>
- <translation>Klasa formularza Qt Designer</translation>
+ <source>Qt Widgets Designer Form Class</source>
+ <translation>Klasa formularza Qt Widgets Designer</translation>
</message>
<message>
<source>Designer</source>
@@ -27901,8 +27901,8 @@ Spróbuj ponownie przebudować projekt.</translation>
<translation>Shift+F4</translation>
</message>
<message>
- <source>Creates a Qt Designer form along with a matching class (C++ header and source file) for implementation purposes. You can add the form and class to an existing Qt Widget Project.</source>
- <translation>Tworzy formularz Qt Designera wraz z klasą implementującą (plik nagłówkowy i źródłowy C++). Utworzony formularz i klasę można dodać do istniejącego projektu Qt Widget.</translation>
+ <source>Creates a Qt Widgets Designer form along with a matching class (C++ header and source file) for implementation purposes. You can add the form and class to an existing Qt Widget Project.</source>
+ <translation>Tworzy formularz Qt Widgets Designera wraz z klasą implementującą (plik nagłówkowy i źródłowy C++). Utworzony formularz i klasę można dodać do istniejącego projektu Qt Widget.</translation>
</message>
<message>
<source>Choose a Form Template</source>
@@ -28053,8 +28053,8 @@ Przebudowanie projektu może pomóc w ich odnalezieniu.</translation>
<translation>Alt+Shift+R</translation>
</message>
<message>
- <source>About Qt Designer Plugins...</source>
- <translation>Informacje o wtyczkach Qt Designera...</translation>
+ <source>About Qt Widgets Designer Plugins...</source>
+ <translation>Informacje o wtyczkach Qt Widgets Designera...</translation>
</message>
<message>
<source>Preview in</source>
@@ -33297,7 +33297,7 @@ Czy nadpisać je?</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Make sure the build command&apos;s multi-job parameter value is large enough (such as -j200 for the JOM or Make build tools)</source>
+ <source>Make sure the build command&apos;s multi-job parameter value is large enough (such as -j200 for the JOM or Make build tools).</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -33425,7 +33425,7 @@ Czy nadpisać je?</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Suppresses IncrediBuild&apos;s header in the build output</source>
+ <source>Suppresses IncrediBuild&apos;s header in the build output.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -33433,7 +33433,7 @@ Czy nadpisać je?</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Overrides the internal Incredibuild logging level for this build. Does not affect output or any user accessible logging. Used mainly to troubleshoot issues with the help of IncrediBuild support</source>
+ <source>Overrides the internal Incredibuild logging level for this build. Does not affect output or any user accessible logging. Used mainly to troubleshoot issues with the help of IncrediBuild support.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -33449,7 +33449,7 @@ Czy nadpisać je?</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>When specified, the execution will stop as soon as an error is encountered. This is the default behavior in &quot;Visual Studio&quot; builds, but not the default for &quot;Make and Build tools&quot; or &quot;Dev Tools&quot; builds</source>
+ <source>When specified, the execution will stop as soon as an error is encountered. This is the default behavior in &quot;Visual Studio&quot; builds, but not the default for &quot;Make and Build tools&quot; or &quot;Dev Tools&quot; builds.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -33457,7 +33457,7 @@ Czy nadpisać je?</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Add additional buildconsole arguments manually. The value of this field will be concatenated to the final buildconsole command line</source>
+ <source>Add additional buildconsole arguments manually. The value of this field will be concatenated to the final buildconsole command line.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -40741,10 +40741,10 @@ You can select an option to create a project that you can open in Qt Design Stud
<translation>Informacje o klasie</translation>
</message>
<message>
- <source>Creates a widget-based Qt application that contains a Qt Designer-based main window and C++ source and header files to implement the application logic.
+ <source>Creates a widget-based Qt application that contains a Qt Widgets Designer-based main window and C++ source and header files to implement the application logic.
Preselects a desktop Qt for building the application if available.</source>
- <translation>Tworzy aplikację Qt bazującą na widżetach, zawierającą główne okno do edycji w Qt Designerze wraz z plikami: źródłowym oraz nagłówkowym C++, przeznaczonymi do zaimplementowania logiki aplikacji.
+ <translation>Tworzy aplikację Qt bazującą na widżetach, zawierającą główne okno do edycji w Qt Widgets Designerze wraz z plikami: źródłowym oraz nagłówkowym C++, przeznaczonymi do zaimplementowania logiki aplikacji.
Wstępnie wybiera platformę desktopową Qt do budowania aplikacji, jeśli jest ona dostępna.</translation>
</message>
@@ -41115,12 +41115,12 @@ You should not mix multiple test frameworks in a project.</source>
<translation>Szablon formularza</translation>
</message>
<message>
- <source>Creates a Qt Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic.</source>
- <translation>Tworzy formularz Qt Designer, który można dodać do projektu typu Qt Widget. Jest to przydatne w sytuacji, kiedy istnieje już klasa zarządzająca logiką UI.</translation>
+ <source>Creates a Qt Widgets Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic.</source>
+ <translation>Tworzy formularz Qt Widgets Designer, który można dodać do projektu typu Qt Widget. Jest to przydatne w sytuacji, kiedy istnieje już klasa zarządzająca logiką UI.</translation>
</message>
<message>
- <source>Qt Designer Form</source>
- <translation>Formularz Qt Designer</translation>
+ <source>Qt Widgets Designer Form</source>
+ <translation>Formularz Qt Widgets Designer</translation>
</message>
<message>
<source>Creates a Java file with boilerplate code.</source>
@@ -41748,40 +41748,28 @@ To develop a full application, create a Qt Quick Application project instead.</s
<translation>Strona z typeid &quot;%1&quot; posiada niepoprawny &quot;index&quot;.</translation>
</message>
<message>
- <source>Path &quot;%1&quot; does not exist when checking Json wizard search paths.
-</source>
- <translation>Ścieżka &quot;%1&quot; nie istnieje podczas sprawdzania ścieżek poszukiwań kreatora Json.
-</translation>
+ <source>Path &quot;%1&quot; does not exist when checking JSON wizard search paths.</source>
+ <translation>Ścieżka &quot;%1&quot; nie istnieje podczas sprawdzania ścieżek poszukiwań kreatora JSON.</translation>
</message>
<message>
- <source>Checking &quot;%1&quot; for %2.
-</source>
- <translation>Sprawdzanie &quot;%1&quot; dla &quot;%2&quot;.
-</translation>
+ <source>Checking &quot;%1&quot; for %2.</source>
+ <translation>Sprawdzanie &quot;%1&quot; dla &quot;%2&quot;.</translation>
</message>
<message>
- <source>* Failed to parse &quot;%1&quot;:%2:%3: %4
-</source>
- <translation>* Nie można sparsować &quot;%1&quot;:%2:%3: %4
-</translation>
+ <source>* Failed to parse &quot;%1&quot;:%2:%3: %4</source>
+ <translation>* Nie można sparsować &quot;%1&quot;:%2:%3: %4</translation>
</message>
<message>
- <source>* Did not find a JSON object in &quot;%1&quot;.
-</source>
- <translation>* Nie odnaleziono obiektu JSON w &quot;%1&quot;.
-</translation>
+ <source>* Did not find a JSON object in &quot;%1&quot;.</source>
+ <translation>* Nie odnaleziono obiektu JSON w &quot;%1&quot;.</translation>
</message>
<message>
- <source>* Configuration found and parsed.
-</source>
- <translation>* Konfiguracja odnaleziona i przeparsowana.
-</translation>
+ <source>* Configuration found and parsed.</source>
+ <translation>* Konfiguracja odnaleziona i przeparsowana.</translation>
</message>
<message>
- <source>* Version %1 not supported.
-</source>
- <translation>* Wersja %1 nieobsługiwana.
-</translation>
+ <source>* Version %1 not supported.</source>
+ <translation>* Wersja %1 nieobsługiwana.</translation>
</message>
<message>
<source>The platform selected for the wizard.</source>
@@ -41812,10 +41800,8 @@ To develop a full application, create a Qt Quick Application project instead.</s
<translation>Brak pliku graficznego &quot;%1&quot;.</translation>
</message>
<message>
- <source>JsonWizard: &quot;%1&quot; not found
-</source>
- <translation>JsonWizard: Nie znaleziono &quot;%1&quot;
-</translation>
+ <source>JsonWizard: &quot;%1&quot; not found.</source>
+ <translation>JsonWizard: Nie znaleziono &quot;%1&quot;.</translation>
</message>
<message>
<source>key not found.</source>
@@ -43972,15 +43958,15 @@ The affected files are:
</message>
<message>
<source>Qt Custom Designer Widget</source>
- <translation>Własny widżet Qt Designera</translation>
+ <translation>Własny widżet Qt Widgets Designera</translation>
</message>
<message>
<source>Creates a Qt Custom Designer Widget or a Custom Widget Collection.</source>
- <translation>Tworzy własny widżet Qt Designera lub kolekcję własnych widżetów.</translation>
+ <translation>Tworzy własny widżet Qt Widgets Designera lub kolekcję własnych widżetów.</translation>
</message>
<message>
- <source>This wizard generates a Qt Designer Custom Widget or a Qt Designer Custom Widget Collection project.</source>
- <translation>Ten kreator generuje projekt własnego widżetu Qt Designera lub projekt kolekcji własnych widżetów Qt4 Designera.</translation>
+ <source>This wizard generates a Qt Widgets Designer Custom Widget or a Qt Widgets Designer Custom Widget Collection project.</source>
+ <translation>Ten kreator generuje projekt własnego widżetu Qt Widgets Designera lub projekt kolekcji własnych widżetów Qt4 Widget Designera.</translation>
</message>
<message>
<source>Creating multiple widget libraries (%1, %2) in one project (%3) is not supported.</source>
@@ -43999,8 +43985,8 @@ The affected files are:
<translation>Nie można odnaleźć aplikacji &quot;%1&quot;.</translation>
</message>
<message>
- <source>Qt Designer is not responding (%1).</source>
- <translation>Qt Designer nie odpowiada (%1).</translation>
+ <source>Qt Widgets Designer is not responding (%1).</source>
+ <translation>Qt Widgets Designer nie odpowiada (%1).</translation>
</message>
<message>
<source>Unable to create server socket: %1</source>
@@ -48594,7 +48580,7 @@ Błąd uruchamiania procesu kontrolnego.</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Unknown error occurred while trying to create remote directories</source>
+ <source>Unknown error occurred while trying to create remote directories.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -51127,11 +51113,11 @@ Nie można otworzyć pliku &quot;%1&quot;.</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Terminal process exited with code %1</source>
+ <source>Terminal process exited with code %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Process exited with code: %1</source>
+ <source>Process exited with code: %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -52785,7 +52771,7 @@ Ustala, jak klawisz &quot;Backspace&quot; reaguje na wcięcia.
<translation>Pomiędzy liniami</translation>
</message>
<message>
- <source>Line annotations</source>
+ <source>Line Annotations</source>
<translation>Adnotacje linii</translation>
</message>
<message>
@@ -53763,7 +53749,7 @@ po naciśnięciu klawisza Enter</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>&amp;Automatically insert matching characters</source>
+ <source>&amp;Automatically Insert Matching Characters</source>
<translation>&amp;Automatyczne wstawianie znaków</translation>
</message>
<message>
@@ -53843,7 +53829,7 @@ po naciśnięciu klawisza backspace</translation>
<message>
<source>Doxygen allows &quot;@&quot; and &quot;\&quot; to start commands.
By default, &quot;@&quot; is used if the surrounding comment starts with &quot;/**&quot; or &quot;///&quot;, and &quot;\&quot; is used
-if the comment starts with &quot;/*!&quot; or &quot;//!</source>
+if the comment starts with &quot;/*!&quot; or &quot;//!&quot;.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -54158,7 +54144,7 @@ if the comment starts with &quot;/*!&quot; or &quot;//!</source>
<translation>Zresetuj</translation>
</message>
<message>
- <source>Scanning scope</source>
+ <source>Scanning Scope</source>
<translation>Zakres skanowania</translation>
</message>
<message>
diff --git a/share/qtcreator/translations/qtcreator_ru.ts b/share/qtcreator/translations/qtcreator_ru.ts
index ac9a564f8b..7f57fe4f12 100644
--- a/share/qtcreator/translations/qtcreator_ru.ts
+++ b/share/qtcreator/translations/qtcreator_ru.ts
@@ -933,12 +933,12 @@ The files in the Android package source directory are copied to the build direct
</translation>
</message>
<message>
- <source>
-Uninstalling the installed package may solve the issue.
-Do you want to uninstall the existing package?</source>
- <translation>
-Удаление установленного пакета может решить проблему.
-Желаете его удалить?</translation>
+ <source>Uninstalling the installed package may solve the issue.</source>
+ <translation>Удаление установленного пакета может решить проблему.</translation>
+ </message>
+ <message>
+ <source>Do you want to uninstall the existing package?</source>
+ <translation>Желаете его удалить?</translation>
</message>
<message>
<source>Pulling files necessary for debugging.</source>
@@ -2169,7 +2169,7 @@ To hide a sticky splash screen, invoke QtAndroid::hideSplashScreen().</source>
<translation>Настроить SDK</translation>
</message>
<message>
- <source>Android OpenSSL settings (Optional)</source>
+ <source>Android OpenSSL Settings (Optional)</source>
<translation>Настройки Android OpenSSL (опционально)</translation>
</message>
<message>
@@ -11815,7 +11815,7 @@ Flags: %3</source>
<translation>Добавить #include %1</translation>
</message>
<message>
- <source>Add forward declaration for %1</source>
+ <source>Add Forward Declaration for %1</source>
<translation>Добавление предъобъявления %1</translation>
</message>
<message>
@@ -16950,8 +16950,8 @@ Rebuilding the project might help.</source>
Пересборка проекта может помочь.</translation>
</message>
<message>
- <source>Qt Designer Form Class</source>
- <translation>Класс формы Qt Designer</translation>
+ <source>Qt Widgets Designer Form Class</source>
+ <translation>Класс формы Qt Widgets Designer</translation>
</message>
<message>
<source>Class Details</source>
@@ -16982,7 +16982,7 @@ Rebuilding the project might help.</source>
<translation>Shift+F4</translation>
</message>
<message>
- <source>Creates a Qt Designer form along with a matching class (C++ header and source file) for implementation purposes. You can add the form and class to an existing Qt Widget Project.</source>
+ <source>Creates a Qt Widgets Designer form along with a matching class (C++ header and source file) for implementation purposes. You can add the form and class to an existing Qt Widget Project.</source>
<translation>Создание формы дизайнера Qt и соответствующего класса (исходный и заголовочный файлы C++) для реализации. Их можно будет добавить к существующему проекту Qt Widget.</translation>
</message>
<message>
@@ -18681,8 +18681,8 @@ when they are not required, which will improve performance in most cases.</sourc
<translation>Alt+Shift+R</translation>
</message>
<message>
- <source>About Qt Designer Plugins...</source>
- <translation>О модулях Qt Designer...</translation>
+ <source>About Qt Widgets Designer Plugins...</source>
+ <translation>О модулях Qt Widgets Designer...</translation>
</message>
<message>
<source>Preview in</source>
@@ -22415,8 +22415,8 @@ Would you like to overwrite them?</source>
<translation>Максимальное количество ЦП для сборки:</translation>
</message>
<message>
- <source>When specified, the execution will stop as soon as an error is encountered. This is the default behavior in &apos;Visual Studio&apos; builds, but not the default for &apos;Make and Build tools&apos; or &apos;Dev Tools&apos; builds</source>
- <translation>Включение остановки выполнения при возникновении ошибки. Это поведение по умолчанию в сборках «Visual Studio», но не по умолчанию для сборок «Make and Build tools» или «Dev Tools»</translation>
+ <source>When specified, the execution will stop as soon as an error is encountered. This is the default behavior in &apos;Visual Studio&apos; builds, but not the default for &apos;Make and Build tools&apos; or &apos;Dev Tools&apos; builds.</source>
+ <translation>Включение остановки выполнения при возникновении ошибки. Это поведение по умолчанию в сборках «Visual Studio», но не по умолчанию для сборок «Make and Build tools» или «Dev Tools».</translation>
</message>
<message>
<source>Stop On Errors</source>
@@ -22467,7 +22467,7 @@ Would you like to overwrite them?</source>
<translation type="unfinished">Помощник запуска:</translation>
</message>
<message>
- <source>Add additional buildconsole arguments manually. The value of this field will be concatenated to the final buildconsole command line</source>
+ <source>Add additional buildconsole arguments manually. The value of this field will be concatenated to the final buildconsole command line.</source>
<translation>Дополнительные параметры buildconsole. Значение поля будет добавлено к итоговой командной строке buildconsole.</translation>
</message>
<message>
@@ -22495,7 +22495,7 @@ Would you like to overwrite them?</source>
<translation>Исходное число задач</translation>
</message>
<message>
- <source>Overrides the internal Incredibuild logging level for this build. Does not affect output or any user accessible logging. Used mainly to troubleshoot issues with the help of IncrediBuild support</source>
+ <source>Overrides the internal Incredibuild logging level for this build. Does not affect output or any user accessible logging. Used mainly to troubleshoot issues with the help of IncrediBuild support.</source>
<translation>Меняет для этой сборки уровень ведения внутреннего журнала Incredibuild. Не влияет на вывод или любые доступные пользователю журналы. В основном используется для устранения проблем через службу поддержки IncrediBuild.</translation>
</message>
<message>
@@ -25534,8 +25534,8 @@ If set to false, the target will be moved straight to the current mouse position
<translation>Редактор QMLJS</translation>
</message>
<message>
- <source>Qt Designer</source>
- <translation>Qt Designer</translation>
+ <source>Qt Widgets Designer</source>
+ <translation>Qt Widgets Designer</translation>
</message>
<message>
<source>Qt Linguist</source>
@@ -29867,12 +29867,12 @@ Enable this if you plan to create 32-bit x86 binaries without using a dedicated
<translation>Шаблон формы</translation>
</message>
<message>
- <source>Creates a Qt Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic.</source>
- <translation>Создание формы Qt Designer, которую можно добавить в проект Qt Widget. Имеет смысл, если у вас уже есть класс с бизнес-логикой.</translation>
+ <source>Creates a Qt Widgets Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic.</source>
+ <translation>Создание формы Qt Widgets Designer, которую можно добавить в проект Qt Widget. Имеет смысл, если у вас уже есть класс с бизнес-логикой.</translation>
</message>
<message>
- <source>Qt Designer Form</source>
- <translation>Форма Qt Designer</translation>
+ <source>Qt Widgets Designer Form</source>
+ <translation>Форма Qt Widgets Designer</translation>
</message>
<message>
<source>Creates a Java file with boilerplate code.</source>
@@ -30627,7 +30627,7 @@ Use this only if you are prototyping. You cannot create a full application with
<translation>Информация о классе</translation>
</message>
<message>
- <source>Creates a Qt application for the desktop. Includes a Qt Designer-based main window.
+ <source>Creates a Qt application for the desktop. Includes a Qt Widgets Designer-based main window.
Preselects a desktop Qt for building the application if available.</source>
<translation>Создание приложения Qt для настольных компьютеров. Включает основное окно в виде формы дизайнера Qt.
@@ -30707,8 +30707,8 @@ Preselects a desktop Qt for building the application if available.</source>
<translation>Qt для Python - Приложение Qt Quick - Пустое</translation>
</message>
<message>
- <source>Creates a Qt for Python application that includes a Qt Designer-based widget (ui file)</source>
- <translation>Создание приложения на Qt для Python, включающее виджет Qt Designer (файл ui)</translation>
+ <source>Creates a Qt for Python application that includes a Qt Widgets Designer-based widget (ui file)</source>
+ <translation>Создание приложения на Qt для Python, включающее виджет Qt Widgets Designer (файл ui)</translation>
</message>
<message>
<source>Qt for Python - Window (UI file)</source>
@@ -30999,40 +30999,28 @@ Preselects a desktop Qt for building the application if available.</source>
<translation>У страницы с typeId «%1» неверный «index».</translation>
</message>
<message>
- <source>Path &quot;%1&quot; does not exist when checking Json wizard search paths.
-</source>
- <translation>При проверке путей мастера Json: путь «%1» не существует.
-</translation>
+ <source>Path &quot;%1&quot; does not exist when checking JSON wizard search paths.</source>
+ <translation>При проверке путей мастера JSON: путь «%1» не существует.</translation>
</message>
<message>
- <source>Checking &quot;%1&quot; for %2.
-</source>
- <translation>Проверяется «%1» у %2.
-</translation>
+ <source>Checking &quot;%1&quot; for %2.</source>
+ <translation>Проверяется «%1» у %2.</translation>
</message>
<message>
- <source>* Failed to parse &quot;%1&quot;:%2:%3: %4
-</source>
- <translation>* Не удалось разобрать «%1»:%2:%3: %4
-</translation>
+ <source>* Failed to parse &quot;%1&quot;:%2:%3: %4</source>
+ <translation>* Не удалось разобрать «%1»:%2:%3: %4</translation>
</message>
<message>
- <source>* Did not find a JSON object in &quot;%1&quot;.
-</source>
- <translation>* Объект JSON не был найден в «%1».
-</translation>
+ <source>* Did not find a JSON object in &quot;%1&quot;.</source>
+ <translation>* Объект JSON не был найден в «%1».</translation>
</message>
<message>
- <source>* Configuration found and parsed.
-</source>
- <translation>* Конфигурация обнаружена и разобрана.
-</translation>
+ <source>* Configuration found and parsed.</source>
+ <translation>* Конфигурация обнаружена и разобрана.</translation>
</message>
<message>
- <source>* Version %1 not supported.
-</source>
- <translation>* Версия %1 не поддерживается.
-</translation>
+ <source>* Version %1 not supported.</source>
+ <translation>* Версия %1 не поддерживается.</translation>
</message>
<message>
<source>The platform selected for the wizard.</source>
@@ -31063,16 +31051,12 @@ Preselects a desktop Qt for building the application if available.</source>
<translation>Файл изображения «%1» не найден.</translation>
</message>
<message>
- <source>* Failed to create: %1
-</source>
- <translation>* Не удалось создать: %1
-</translation>
+ <source>* Failed to create: %1</source>
+ <translation>* Не удалось создать: %1</translation>
</message>
<message>
- <source>JsonWizard: &quot;%1&quot; not found
-</source>
- <translation>JsonWizard: «%1» не найден
-</translation>
+ <source>JsonWizard: &quot;%1&quot; not found.</source>
+ <translation>JsonWizard: «%1» не найден.</translation>
</message>
<message>
<source>key not found.</source>
@@ -33673,19 +33657,19 @@ Please update your kit (%3) or choose a mkspec for qmake that matches your targe
</message>
<message>
<source>Qt Custom Designer Widget</source>
- <translation>Пользовательский виджет Qt Designer</translation>
+ <translation>Пользовательский виджет Qt Widgets Designer</translation>
</message>
<message>
<source>Creates a Qt Custom Designer Widget or a Custom Widget Collection.</source>
- <translation>Создание пользовательского виджета Qt Designer или набора пользовательских виджетов.</translation>
+ <translation>Создание пользовательского виджета Qt Widgets Designer или набора пользовательских виджетов.</translation>
</message>
<message>
- <source>This wizard generates a Qt Designer Custom Widget or a Qt Designer Custom Widget Collection project.</source>
- <translation>Этот мастер создаст пользовательский виджет или набор пользовательских виджетов для Qt Designer.</translation>
+ <source>This wizard generates a Qt Widgets Designer Custom Widget or a Qt Widgets Designer Custom Widget Collection project.</source>
+ <translation>Этот мастер создаст пользовательский виджет или набор пользовательских виджетов для Qt Widgets Designer.</translation>
</message>
<message>
- <source>Qt Designer is not responding (%1).</source>
- <translation>Qt Designer не отвечает (%1).</translation>
+ <source>Qt Widgets Designer is not responding (%1).</source>
+ <translation>Qt Widgets Designer не отвечает (%1).</translation>
</message>
<message>
<source>Unable to create server socket: %1</source>
@@ -35227,7 +35211,7 @@ Neither the path to the library nor the path to its includes is added to the .pr
</message>
<message>
<source>Warn about unsupported features of Qt Quick Designer in the code editor</source>
- <translation>Предупреждать о неподдерживаемых особенностях Qt Designer в редакторе кода</translation>
+ <translation>Предупреждать о неподдерживаемых особенностях Qt Quick Designer в редакторе кода</translation>
</message>
<message>
<source>Debugging</source>
@@ -43141,7 +43125,7 @@ In addition, Shift+Enter inserts an escape character at the cursor position and
<translation>Автоматически разделять строки</translation>
</message>
<message>
- <source>&amp;Automatically insert matching characters</source>
+ <source>&amp;Automatically Insert Matching Characters</source>
<translation>&amp;Автоматически вставлять парные символы</translation>
</message>
<message>
@@ -43325,7 +43309,7 @@ In addition, Shift+Enter inserts an escape character at the cursor position and
<translation>Прижать к правому краю</translation>
</message>
<message>
- <source>Line annotations</source>
+ <source>Line Annotations</source>
<translation>Построчная аннотация</translation>
</message>
<message>
@@ -45147,7 +45131,7 @@ The trace data is lost.</source>
<translation>Сбросить</translation>
</message>
<message>
- <source>Scanning scope</source>
+ <source>Scanning Scope</source>
<translation>Область поиска</translation>
</message>
<message>
diff --git a/share/qtcreator/translations/qtcreator_sl.ts b/share/qtcreator/translations/qtcreator_sl.ts
index e5b3b87b02..837f8267de 100644
--- a/share/qtcreator/translations/qtcreator_sl.ts
+++ b/share/qtcreator/translations/qtcreator_sl.ts
@@ -3532,8 +3532,8 @@ Morda lahko pomaga ponovna gradnja projekta.</translation>
<translation type="obsolete">Urejevalnik XML</translation>
</message>
<message>
- <source>Qt Designer Form Class</source>
- <translation>Razred obrazca Qt Designer</translation>
+ <source>Qt Widgets Designer Form Class</source>
+ <translation>Razred obrazca Qt Widgets Designer</translation>
</message>
<message>
<source>Form Template</source>
@@ -3560,8 +3560,8 @@ Morda lahko pomaga ponovna gradnja projekta.</translation>
<translation type="obsolete">Nastavitve …</translation>
</message>
<message>
- <source>Qt Designer Form</source>
- <translation>Obrazec Qt Designer</translation>
+ <source>Qt Widgets Designer Form</source>
+ <translation>Obrazec Qt Widgets Designer</translation>
</message>
<message>
<source>Creates a Qt Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic.</source>
@@ -3676,8 +3676,8 @@ Morda lahko pomaga ponovna gradnja projekta.</translation>
<translation>Urejevalnik signalov in rež</translation>
</message>
<message>
- <source>About Qt Designer plugins....</source>
- <translation>O vstavkih za Qt Designer …</translation>
+ <source>About Qt Widgets Designer plugins....</source>
+ <translation>O vstavkih za Qt Widgets Designer …</translation>
</message>
<message>
<source>Preview in</source>
@@ -7757,14 +7757,6 @@ Preselects a desktop Qt for building the application if available.</source>
<translation>oznakaTežave</translation>
</message>
<message>
- <source>Error: </source>
- <translation type="obsolete">Napaka: </translation>
- </message>
- <message>
- <source>Warning: </source>
- <translation type="obsolete">Opozorilo: </translation>
- </message>
- <message>
<source>Configuration name:</source>
<translation type="obsolete">Ime nastavitev:</translation>
</message>
@@ -10733,8 +10725,8 @@ Za uporabo v polje Iskalnika vtipkajte to bližnjico in presledek ter nato iskan
<translation>Urejevalniku QMLJS</translation>
</message>
<message>
- <source>Qt Designer</source>
- <translation>Qt Designerju</translation>
+ <source>Qt Widgets Designer</source>
+ <translation>Qt Widgets Designerju</translation>
</message>
<message>
<source>Qt Linguist</source>
@@ -11579,15 +11571,15 @@ Razlog: %2</translation>
</message>
<message>
<source>Qt Custom Designer Widget</source>
- <translation>Gradnik za Qt Designer po meri</translation>
+ <translation>Gradnik za Qt Widgets Designer po meri</translation>
</message>
<message>
<source>Creates a Qt Custom Designer Widget or a Custom Widget Collection.</source>
- <translation>Ustvari gradnik za Qt Designer po meri ali pa zbirko gradnikov po meri</translation>
+ <translation>Ustvari gradnik za Qt Widgets Designer po meri ali pa zbirko gradnikov po meri</translation>
</message>
<message>
<source>This wizard generates a Qt4 Designer Custom Widget or a Qt4 Designer Custom Widget Collection project.</source>
- <translation>Ta čarovnik ustvari projekt gradnika po meri za Qt Designer ali pa projekt zbirke gradnikov po meri za Qt Designer.</translation>
+ <translation>Ta čarovnik ustvari projekt gradnika po meri za Qt Widgets Designer ali pa projekt zbirke gradnikov po meri za Qt Widgets Designer.</translation>
</message>
<message>
<source>Custom Widgets</source>
@@ -11618,8 +11610,8 @@ Razlog: %2</translation>
<translation>Programa »%1« ni bilo moč najti.</translation>
</message>
<message>
- <source>Qt Designer is not responding (%1).</source>
- <translation>Qt Designer se ne odziva (%1).</translation>
+ <source>Qt Widgets Designer is not responding (%1).</source>
+ <translation>Qt Widgets Designer se ne odziva (%1).</translation>
</message>
<message>
<source>Unable to create server socket: %1</source>
@@ -16012,8 +16004,8 @@ Projekte programov QML izvede pregledovalnik QML in jih ni potrebno zgraditi.</t
<translation>Predloga pošiljanja za CVS</translation>
</message>
<message>
- <source>Qt Designer file</source>
- <translation>Datoteka za Qt Designer</translation>
+ <source>Qt Widgets Designer file</source>
+ <translation>Datoteka za Qt Widgets Designer</translation>
</message>
<message>
<source>Generic Qt Creator Project file</source>
diff --git a/share/qtcreator/translations/qtcreator_uk.ts b/share/qtcreator/translations/qtcreator_uk.ts
index 432f5ab3a2..d3da748f62 100644
--- a/share/qtcreator/translations/qtcreator_uk.ts
+++ b/share/qtcreator/translations/qtcreator_uk.ts
@@ -3153,7 +3153,7 @@ to version control (%2)
<translation type="vanished">Автоматично вставляти крапки з комами, закриваючі квадратні, круглі, фігурні дужки та лапки, коли необхідно.</translation>
</message>
<message>
- <source>&amp;Automatically insert matching characters</source>
+ <source>&amp;Automatically Insert Matching Characters</source>
<translation>&amp;Автоматично вставляти парні символи</translation>
</message>
<message>
@@ -6843,8 +6843,8 @@ Rebuilding the project might help.</source>
<translation type="vanished">Додавати версію Qt в #ifdef для імен модулів</translation>
</message>
<message>
- <source>Qt Designer Form Class</source>
- <translation>Клас форми Qt Designer</translation>
+ <source>Qt Widgets Designer Form Class</source>
+ <translation>Клас форми Qt Widgets Designer</translation>
</message>
<message>
<source>Choose a Class Name</source>
@@ -6883,8 +6883,8 @@ Rebuilding the project might help.</source>
<translation type="vanished">Створює форму Qt Designer, яку ви можете додати до проекту Qt Widget. Це корисно, якщо ви вже маєте існуючий клас для бізнес-логіки UI.</translation>
</message>
<message>
- <source>Creates a Qt Designer form along with a matching class (C++ header and source file) for implementation purposes. You can add the form and class to an existing Qt Widget Project.</source>
- <translation>Створює форму Qt Designer разом з відповідним класом (файли заголовку та коду C++) з метою реалізації.. Ви можете додати форму та клас до існуючого проекту Qt Widget.</translation>
+ <source>Creates a Qt Widgets Designer form along with a matching class (C++ header and source file) for implementation purposes. You can add the form and class to an existing Qt Widget Project.</source>
+ <translation>Створює форму Qt Widgets Designer разом з відповідним класом (файли заголовку та коду C++) з метою реалізації.. Ви можете додати форму та клас до існуючого проекту Qt Widget.</translation>
</message>
<message>
<source>Location</source>
@@ -11142,8 +11142,8 @@ Ids must begin with a lowercase letter.</source>
<translation>Редактор QMLJS</translation>
</message>
<message>
- <source>Qt Designer</source>
- <translation>Qt Designer</translation>
+ <source>Qt Widgets Designer</source>
+ <translation>Qt Widgets Designer</translation>
</message>
<message>
<source>Qt Linguist</source>
@@ -15626,19 +15626,19 @@ Preselects a desktop Qt for building the application if available.</source>
</message>
<message>
<source>Qt Custom Designer Widget</source>
- <translation>Користувацький віджет Qt Designer</translation>
+ <translation>Користувацький віджет Qt Widgets Designer</translation>
</message>
<message>
<source>Creates a Qt Custom Designer Widget or a Custom Widget Collection.</source>
- <translation>Створює користувацький віджет Qt Designer або колекцію користувацьких віджетів.</translation>
+ <translation>Створює користувацький віджет Qt Widgets Designer або колекцію користувацьких віджетів.</translation>
</message>
<message>
- <source>This wizard generates a Qt Designer Custom Widget or a Qt Designer Custom Widget Collection project.</source>
- <translation>Цей майстер генерує проект користувацького віджета Qt Designer або колекції користувацьких віджетів Qt Designer.</translation>
+ <source>This wizard generates a Qt Widgets Designer Custom Widget or a Qt Widgets Designer Custom Widget Collection project.</source>
+ <translation>Цей майстер генерує проект користувацького віджета Qt Widgets Designer або колекції користувацьких віджетів Qt Widgets Designer.</translation>
</message>
<message>
- <source>Qt Designer is not responding (%1).</source>
- <translation>Qt Designer не відповідає (%1).</translation>
+ <source>Qt Widgets Designer is not responding (%1).</source>
+ <translation>Qt Widgets Designer не відповідає (%1).</translation>
</message>
<message>
<source>Unable to create server socket: %1</source>
@@ -15717,10 +15717,10 @@ Preselects a desktop Qt for building the application if available.</source>
<translation>Програма Qt Widgets</translation>
</message>
<message>
- <source>Creates a Qt application for the desktop. Includes a Qt Designer-based main window.
+ <source>Creates a Qt application for the desktop. Includes a Qt Widgets Designer-based main window.
Preselects a desktop Qt for building the application if available.</source>
- <translation>Створює програму Qt для стаціонарного комп&apos;ютера. Включає головне вікно на основі Qt Designer.
+ <translation>Створює програму Qt для стаціонарного комп&apos;ютера. Включає головне вікно на основі Qt Widgets Designer.
Обирає Qt для стільниці для збірки програми, якщо доступно.</translation>
</message>
@@ -21894,7 +21894,7 @@ Influences the indentation of continuation lines.
<translation>Скинути</translation>
</message>
<message>
- <source>Scanning scope</source>
+ <source>Scanning Scope</source>
<translation>Область пошуку</translation>
</message>
<message>
@@ -37378,8 +37378,8 @@ The statements may not contain &apos;{&apos; nor &apos;}&apos; characters.</sour
<translation>Alt+Shift+R</translation>
</message>
<message>
- <source>About Qt Designer Plugins...</source>
- <translation>Про додатки Qt Designer....</translation>
+ <source>About Qt Widgets Designer Plugins...</source>
+ <translation>Про додатки Qt Widgets Designer....</translation>
</message>
<message>
<source>Preview in</source>
@@ -37719,12 +37719,12 @@ The statements may not contain &apos;{&apos; nor &apos;}&apos; characters.</sour
<translation>Шаблон форми</translation>
</message>
<message>
- <source>Creates a Qt Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic.</source>
- <translation>Створює форму Qt Designer, яку ви можете додати до проекту Qt Widget. Це корисно, якщо ви вже маєте існуючий клас для бізнес-логіки UI.</translation>
+ <source>Creates a Qt Widgets Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic.</source>
+ <translation>Створює форму Qt Widgets Designer, яку ви можете додати до проекту Qt Widget. Це корисно, якщо ви вже маєте існуючий клас для бізнес-логіки UI.</translation>
</message>
<message>
- <source>Qt Designer Form</source>
- <translation>Форма Qt Designer</translation>
+ <source>Qt Widgets Designer Form</source>
+ <translation>Форма Qt Widgets Designer</translation>
</message>
<message>
<source>Creates a Java file with boilerplate code.</source>
@@ -38747,40 +38747,28 @@ Preselects a desktop Qt for building the application if available.</source>
<translation>Сторінка з &quot;%1&quot; має неправильний &quot;index&quot;.</translation>
</message>
<message>
- <source>Path &quot;%1&quot; does not exist when checking Json wizard search paths.
-</source>
- <translation>Перевірка шляхів пошуків майстра Json: шлях &quot;%1&quot; не існує.
-</translation>
+ <source>Path &quot;%1&quot; does not exist when checking JSON wizard search paths.</source>
+ <translation>Перевірка шляхів пошуків майстра JSON: шлях &quot;%1&quot; не існує.</translation>
</message>
<message>
- <source>Checking &quot;%1&quot; for %2.
-</source>
- <translation>Перевірка &quot;%1&quot; для %2.
-</translation>
+ <source>Checking &quot;%1&quot; for %2.</source>
+ <translation>Перевірка &quot;%1&quot; для %2.</translation>
</message>
<message>
- <source>* Failed to parse &quot;%1&quot;:%2:%3: %4
-</source>
- <translation>* Збій розбору &quot;%1&quot;:%2:%3: %4
-</translation>
+ <source>* Failed to parse &quot;%1&quot;:%2:%3: %4</source>
+ <translation>* Збій розбору &quot;%1&quot;:%2:%3: %4</translation>
</message>
<message>
- <source>* Did not find a JSON object in &quot;%1&quot;.
-</source>
- <translation>* Не знайдено об&apos;єкт JSON в &quot;%1&quot;.
-</translation>
+ <source>* Did not find a JSON object in &quot;%1&quot;.</source>
+ <translation>* Не знайдено об&apos;єкт JSON в &quot;%1&quot;.</translation>
</message>
<message>
- <source>* Configuration found and parsed.
-</source>
- <translation>* Конфігурацію знайдено та розібрано.
-</translation>
+ <source>* Configuration found and parsed.</source>
+ <translation>* Конфігурацію знайдено та розібрано.</translation>
</message>
<message>
- <source>* Version %1 not supported.
-</source>
- <translation>* Версія %1 не підтримується.
-</translation>
+ <source>* Version %1 not supported.</source>
+ <translation>* Версія %1 не підтримується.</translation>
</message>
<message>
<source>The platform selected for the wizard.</source>
@@ -38817,16 +38805,12 @@ Preselects a desktop Qt for building the application if available.</source>
</translation>
</message>
<message>
- <source>* Failed to create: %1
-</source>
- <translation>* Збій створення: %1
-</translation>
+ <source>* Failed to create: %1</source>
+ <translation>* Збій створення: %1</translation>
</message>
<message>
- <source>JsonWizard: &quot;%1&quot; not found
-</source>
- <translation>JsonWizard: &quot;%1&quot; не знайдено
-</translation>
+ <source>JsonWizard: &quot;%1&quot; not found.</source>
+ <translation>JsonWizard: &quot;%1&quot; не знайдено.</translation>
</message>
<message>
<source>key not found.</source>
diff --git a/share/qtcreator/translations/qtcreator_zh_CN.ts b/share/qtcreator/translations/qtcreator_zh_CN.ts
index 7526f78c96..66a622a425 100644
--- a/share/qtcreator/translations/qtcreator_zh_CN.ts
+++ b/share/qtcreator/translations/qtcreator_zh_CN.ts
@@ -787,12 +787,12 @@ The kit supports &quot;%2&quot;, but the device uses &quot;%3&quot;.</source>
</translation>
</message>
<message>
- <source>
-Uninstalling the installed package may solve the issue.
-Do you want to uninstall the existing package?</source>
- <translation>
-卸载已安装的包可能解决这个问题。
-你想卸载已经存在的包吗?</translation>
+ <source>Uninstalling the installed package may solve the issue.</source>
+ <translation>卸载已安装的包可能解决这个问题。</translation>
+ </message>
+ <message>
+ <source>Do you want to uninstall the existing package?</source>
+ <translation>你想卸载已经存在的包吗?</translation>
</message>
<message>
<source>Install failed</source>
@@ -1900,7 +1900,7 @@ in the system&apos;s browser for manual download.</source>
<translation>安卓 NDK 列表:</translation>
</message>
<message>
- <source>Android OpenSSL settings (Optional)</source>
+ <source>Android OpenSSL Settings (Optional)</source>
<translation>安卓 OpenSSL 设置(可选)</translation>
</message>
<message>
@@ -2714,7 +2714,7 @@ Executable: %2</source>
<translation>重复测试</translation>
</message>
<message>
- <source>Run in parallel</source>
+ <source>Run in Parallel</source>
<translation>并行运行</translation>
</message>
<message>
@@ -11600,7 +11600,7 @@ The built-in code model will handle highlighting, completion and so on.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sessions with a single clangd instance</source>
+ <source>Sessions with a Single Clangd Instance</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -12511,7 +12511,7 @@ Flags: %3</source>
<translation type="unfinished">添加#include %1</translation>
</message>
<message>
- <source>Add forward declaration for %1</source>
+ <source>Add Forward Declaration for %1</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -12767,7 +12767,7 @@ Flags: %3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Value types:</source>
+ <source>Value Types:</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -22584,7 +22584,7 @@ Would you like to overwrite them?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Make sure the build command&apos;s multi-job parameter value is large enough (such as -j200 for the JOM or Make build tools)</source>
+ <source>Make sure the build command&apos;s multi-job parameter value is large enough (such as -j200 for the JOM or Make build tools).</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -22704,7 +22704,7 @@ Would you like to overwrite them?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Suppresses IncrediBuild&apos;s header in the build output</source>
+ <source>Suppresses IncrediBuild&apos;s header in the build output.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -22712,7 +22712,7 @@ Would you like to overwrite them?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Overrides the internal Incredibuild logging level for this build. Does not affect output or any user accessible logging. Used mainly to troubleshoot issues with the help of IncrediBuild support</source>
+ <source>Overrides the internal Incredibuild logging level for this build. Does not affect output or any user accessible logging. Used mainly to troubleshoot issues with the help of IncrediBuild support.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -22732,7 +22732,7 @@ Would you like to overwrite them?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>When specified, the execution will stop as soon as an error is encountered. This is the default behavior in &quot;Visual Studio&quot; builds, but not the default for &quot;Make and Build tools&quot; or &quot;Dev Tools&quot; builds</source>
+ <source>When specified, the execution will stop as soon as an error is encountered. This is the default behavior in &quot;Visual Studio&quot; builds, but not the default for &quot;Make and Build tools&quot; or &quot;Dev Tools&quot; builds.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -22740,7 +22740,7 @@ Would you like to overwrite them?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Add additional buildconsole arguments manually. The value of this field will be concatenated to the final buildconsole command line</source>
+ <source>Add additional buildconsole arguments manually. The value of this field will be concatenated to the final buildconsole command line.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -28771,33 +28771,27 @@ Enable this if you plan to create 32-bit x86 binaries without using a dedicated
<translation type="unfinished"></translation>
</message>
<message>
- <source>Path &quot;%1&quot; does not exist when checking Json wizard search paths.
-</source>
+ <source>Path &quot;%1&quot; does not exist when checking JSON wizard search paths.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Checking &quot;%1&quot; for %2.
-</source>
+ <source>Checking &quot;%1&quot; for %2.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>* Failed to parse &quot;%1&quot;:%2:%3: %4
-</source>
+ <source>* Failed to parse &quot;%1&quot;:%2:%3: %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>* Did not find a JSON object in &quot;%1&quot;.
-</source>
+ <source>* Did not find a JSON object in &quot;%1&quot;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>* Configuration found and parsed.
-</source>
+ <source>* Configuration found and parsed.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>JsonWizard: &quot;%1&quot; not found
-</source>
+ <source>JsonWizard: &quot;%1&quot; not found.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -28817,8 +28811,7 @@ Enable this if you plan to create 32-bit x86 binaries without using a dedicated
<translation type="unfinished"></translation>
</message>
<message>
- <source>* Version %1 not supported.
-</source>
+ <source>* Version %1 not supported.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -42598,7 +42591,7 @@ Specifies how backspace interacts with indentation.
<translation type="unfinished"></translation>
</message>
<message>
- <source>Line annotations</source>
+ <source>Line Annotations</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -42985,7 +42978,7 @@ In addition, Shift+Enter inserts an escape character at the cursor position and
<translation type="unfinished"></translation>
</message>
<message>
- <source>&amp;Automatically insert matching characters</source>
+ <source>&amp;Automatically Insert Matching Characters</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -44781,7 +44774,7 @@ Will not be applied to whitespace in comments and strings.</source>
<translation>重置</translation>
</message>
<message>
- <source>Scanning scope</source>
+ <source>Scanning Scope</source>
<translation>扫描范围</translation>
</message>
<message>
diff --git a/share/qtcreator/translations/qtcreator_zh_TW.ts b/share/qtcreator/translations/qtcreator_zh_TW.ts
index d21d4d9bca..7b5f5cfba8 100644
--- a/share/qtcreator/translations/qtcreator_zh_TW.ts
+++ b/share/qtcreator/translations/qtcreator_zh_TW.ts
@@ -1715,7 +1715,7 @@
<translation>在適當的時候自動插入分號、結束的括號、大括號與引號等等。</translation>
</message>
<message>
- <source>&amp;Automatically insert matching characters</source>
+ <source>&amp;Automatically Insert Matching Characters</source>
<translation>自動插入對應的字元(&amp;A)</translation>
</message>
<message>
@@ -25376,7 +25376,7 @@ Influences the indentation of continuation lines.
<translation>重置</translation>
</message>
<message>
- <source>Scanning scope</source>
+ <source>Scanning Scope</source>
<translation>掃描範圍</translation>
</message>
<message>
diff --git a/share/share.qbs b/share/share.qbs
index a2114dad2d..2a1c8d8fce 100644
--- a/share/share.qbs
+++ b/share/share.qbs
@@ -16,6 +16,7 @@ Product {
"debugger/**/*",
"designer/**/*",
"glsl/**/*",
+ "jsonschemas/**/*",
"modeleditor/**/*",
"qml/**/*",
"qmldesigner/**/*",