Merge remote-tracking branch 'origin/9.0'

Change-Id: I231d35f492713f317773b79478b5f7fb97a4fe50
This commit is contained in:
Orgad Shaneh
2022-11-28 15:42:40 +02:00
31 changed files with 315 additions and 235 deletions

View File

@@ -7,7 +7,7 @@ on:
- 'doc/**' - 'doc/**'
env: env:
QT_VERSION: 6.4.1 QT_VERSION: 6.4.0
CLANG_VERSION: 15.0.0 CLANG_VERSION: 15.0.0
ELFUTILS_VERSION: 0.175 ELFUTILS_VERSION: 0.175
CMAKE_VERSION: 3.21.1 CMAKE_VERSION: 3.21.1

View File

@@ -64,6 +64,7 @@ function(create_python_xy PythonExe PythonZipFilePath)
set(ENV{PYTHONOPTIMIZE} "2") set(ENV{PYTHONOPTIMIZE} "2")
execute_process( execute_process(
COMMAND "${PythonExe}" -OO -m compileall "${CMAKE_CURRENT_BINARY_DIR}/python-lib" -b COMMAND "${PythonExe}" -OO -m compileall "${CMAKE_CURRENT_BINARY_DIR}/python-lib" -b
${QTC_COMMAND_ERROR_IS_FATAL}
) )
file(GLOB_RECURSE python_lib_files "${CMAKE_CURRENT_BINARY_DIR}/python-lib/*.py") file(GLOB_RECURSE python_lib_files "${CMAKE_CURRENT_BINARY_DIR}/python-lib/*.py")
@@ -75,5 +76,6 @@ function(create_python_xy PythonExe PythonZipFilePath)
execute_process( execute_process(
COMMAND ${CMAKE_COMMAND} -E tar cf "${PythonZipFilePath}" . --format=zip COMMAND ${CMAKE_COMMAND} -E tar cf "${PythonZipFilePath}" . --format=zip
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/python-lib/" WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/python-lib/"
${QTC_COMMAND_ERROR_IS_FATAL}
) )
endfunction() endfunction()

View File

@@ -778,14 +778,14 @@ function(add_qtc_executable name)
set(_code "${_code} set(_code "${_code}
execute_process(COMMAND \"${CMAKE_INSTALL_NAME_TOOL}\" execute_process(COMMAND \"${CMAKE_INSTALL_NAME_TOOL}\"
-delete_rpath \"${_rpath}\" -delete_rpath \"${_rpath}\"
\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${_EXECUTABLE_FILE_PATH}\")" \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${_EXECUTABLE_FILE_PATH}\" ${QTC_COMMAND_ERROR_IS_FATAL})"
) )
endforeach() endforeach()
foreach(_rpath ${install_rpath}) foreach(_rpath ${install_rpath})
set(_code "${_code} set(_code "${_code}
execute_process(COMMAND \"${CMAKE_INSTALL_NAME_TOOL}\" execute_process(COMMAND \"${CMAKE_INSTALL_NAME_TOOL}\"
-add_rpath \"${_rpath}\" -add_rpath \"${_rpath}\"
\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${_EXECUTABLE_FILE_PATH}\")" \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${_EXECUTABLE_FILE_PATH}\" ${QTC_COMMAND_ERROR_IS_FATAL})"
) )
endforeach() endforeach()
install(CODE "${_code}") install(CODE "${_code}")

View File

@@ -1,3 +1,7 @@
if (CMAKE_VERSION GREATER_EQUAL 3.19)
set(QTC_COMMAND_ERROR_IS_FATAL COMMAND_ERROR_IS_FATAL ANY)
endif()
if (CMAKE_VERSION VERSION_LESS 3.18) if (CMAKE_VERSION VERSION_LESS 3.18)
if (CMAKE_CXX_COMPILER_ID STREQUAL GNU) if (CMAKE_CXX_COMPILER_ID STREQUAL GNU)
set(BUILD_WITH_PCH OFF CACHE BOOL "" FORCE) set(BUILD_WITH_PCH OFF CACHE BOOL "" FORCE)

View File

@@ -22,7 +22,8 @@ function(qt5_query_qmake)
TIMEOUT 10 TIMEOUT 10
RESULT_VARIABLE _qmake_result RESULT_VARIABLE _qmake_result
OUTPUT_VARIABLE _qmake_stdout OUTPUT_VARIABLE _qmake_stdout
OUTPUT_STRIP_TRAILING_WHITESPACE) OUTPUT_STRIP_TRAILING_WHITESPACE
${QTC_COMMAND_ERROR_IS_FATAL})
if (NOT "${_qmake_result}" STREQUAL "0") if (NOT "${_qmake_result}" STREQUAL "0")
message(FATAL_ERROR "Qmake did not execute successfully: ${_qmake_result}.") message(FATAL_ERROR "Qmake did not execute successfully: ${_qmake_result}.")

View File

@@ -47,6 +47,7 @@ function(setup_dependencies_component)
\"\${_ide_app_target}\" \"\${_ide_app_target}\"
\"${_qmake_binary}\" \"${_qmake_binary}\"
COMMAND_ECHO STDOUT COMMAND_ECHO STDOUT
\${QTC_COMMAND_ERROR_IS_FATAL}
) )
" "
COMPONENT Dependencies COMPONENT Dependencies

View File

@@ -10,7 +10,7 @@ instructions:
variableValue: http://master.qt.io/development_releases/prebuilt/libclang/libclang-release_15.0.0-based variableValue: http://master.qt.io/development_releases/prebuilt/libclang/libclang-release_15.0.0-based
- type: EnvironmentVariable - type: EnvironmentVariable
variableName: QTC_QT_BASE_URL variableName: QTC_QT_BASE_URL
variableValue: "http://ci-files02-hki.intra.qt.io/packages/jenkins/archive/qt/6.4/6.4.1-released/Qt" variableValue: "http://ci-files02-hki.intra.qt.io/packages/jenkins/archive/qt/6.4/6.4.0-released/Qt"
- type: EnvironmentVariable - type: EnvironmentVariable
variableName: QTC_QT_MODULES variableName: QTC_QT_MODULES
variableValue: "qt5compat qtbase qtdeclarative qtimageformats qtquick3d qtquickcontrols2 qtquicktimeline qtserialport qtshadertools qtsvg qttools qttranslations qtwebengine" variableValue: "qt5compat qtbase qtdeclarative qtimageformats qtquick3d qtquickcontrols2 qtquicktimeline qtserialport qtshadertools qtsvg qttools qttranslations qtwebengine"

View File

@@ -120,7 +120,8 @@ Projects
* Turned `Package manager auto setup` off by default * Turned `Package manager auto setup` off by default
* Added support for CMake configure and build presets, including conditions and * Added support for CMake configure and build presets, including conditions and
toolchain files (QTCREATORBUG-24555) toolchain files (QTCREATORBUG-24555)
([CMake Documentation](https://cmake.org/cmake/help/v3.21/manual/cmake-presets.7.html)) ([Documentation](https://doc.qt.io/qtcreator/creator-build-settings-cmake.html#cmake-presets),
[CMake Documentation](https://cmake.org/cmake/help/v3.21/manual/cmake-presets.7.html))
* Added option for changing environment for configure step * Added option for changing environment for configure step
* Added option for hiding subfolders in source groups (QTCREATORBUG-27432) * Added option for hiding subfolders in source groups (QTCREATORBUG-27432)
* Added support for `Build File` also from header files (QTCREATORBUG-26164) * Added support for `Build File` also from header files (QTCREATORBUG-26164)
@@ -187,7 +188,7 @@ Test Integration
---------------- ----------------
* Added support for Squish * Added support for Squish
([Documentation](https://doc-snapshots.qt.io/qtcreator-9.0/creator-squish.html)) ([Documentation](https://doc.qt.io/qtcreator/creator-squish.html))
* Catch 2 * Catch 2
* Fixed handling of exceptions (QTCREATORBUG-28131) * Fixed handling of exceptions (QTCREATORBUG-28131)
* Fixed crash (QTCREATORBUG-28269) * Fixed crash (QTCREATORBUG-28269)

View File

@@ -65,7 +65,9 @@
To visualize whitespace in the editor, select \uicontrol Edit > To visualize whitespace in the editor, select \uicontrol Edit >
\uicontrol Preferences > \uicontrol {Text Editor} > \uicontrol Display > \uicontrol Preferences > \uicontrol {Text Editor} > \uicontrol Display >
\uicontrol {Visualize whitespace}. To visualize indentation, select \uicontrol {Visualize whitespace}. To visualize indentation, select
\uicontrol {Visualize Indent}. \uicontrol {Visualize Indent}. To adjust the color of the visualization,
change the value of the Visual Whitespace setting of the editor color scheme
in \uicontrol {Font & Colors}.
\image qtcreator-options-text-editor-display.png "Text Editor Display preferences" \image qtcreator-options-text-editor-display.png "Text Editor Display preferences"

View File

@@ -81,7 +81,7 @@
\uicontrol {File System} view is displayed in the \l{Working with Sidebars} \uicontrol {File System} view is displayed in the \l{Working with Sidebars}
{sidebar}. It has a toolbar with additional options. {sidebar}. It has a toolbar with additional options.
\image qtcreator-filesystem-view.png "File System view in the sidebar" \image qtcreator-filesystem-view.webp "File System view in the sidebar"
\else \else
The toolbar in the \uicontrol {File System} view contains additional The toolbar in the \uicontrol {File System} view contains additional
options. options.

View File

@@ -90,7 +90,8 @@
\image webinardemo-qb-fastblur.png "Settings for exporting blurEffect layer" \image webinardemo-qb-fastblur.png "Settings for exporting blurEffect layer"
We want to apply the \l {FastBlur} effect to the \e smallPopup UI control. We want to apply the \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-fastblur.html}
{Fast Blur} effect to the \e smallPopup UI control.
In the artboard, we have a \e blurEffect layer that we want to export as a In the artboard, we have a \e blurEffect layer that we want to export as a
\e FastBlurItem component. In the \uicontrol Component field, we enter \e FastBlurItem component. In the \uicontrol Component field, we enter
\e FastBlurItem. \e FastBlurItem.

View File

@@ -78,7 +78,7 @@
\li Description \li Description
\row \row
\li \inlineimage icons/blend-mode-16px.png \li \inlineimage icons/blend-mode-16px.png
\li \l [QML] {Blend} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-blend.html}{Blend}
\li \li
\li Merges two source components by using a blend mode. \li Merges two source components by using a blend mode.
@@ -88,28 +88,34 @@
is subtracted from the source and written over it. is subtracted from the source and written over it.
For a list of possible \uicontrol Mode values and examples of their For a list of possible \uicontrol Mode values and examples of their
use, see \l{Blend::mode}{Blend.mode}. use, see
\l{https://doc.qt.io/qt-5/qml-qtgraphicaleffects-blend.html#mode-prop}
{Blend.mode}.
\row \row
\li \inlineimage icons/brightness-contrast-16px.png \li \inlineimage icons/brightness-contrast-16px.png
\li \l {BrightnessContrast}{Brightness Contrast} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-brightnesscontrast.html}
{Brightness Contrast}
\li \inlineimage ok.png \li \inlineimage ok.png
\li Adjusts \uicontrol Brightness and \uicontrol Contrast. \li Adjusts \uicontrol Brightness and \uicontrol Contrast.
\row \row
\li \inlineimage icons/colourize-16px.png \li \inlineimage icons/colourize-16px.png
\li \l {ColorOverlay}{Color Overlay} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-coloroverlay.html}
{Color Overlay}
\li \inlineimage ok.png \li \inlineimage ok.png
\li Alters the colors of the source component by applying an \li Alters the colors of the source component by applying an
\uicontrol {Overlay color}. You can use the color picker \uicontrol {Overlay color}. You can use the color picker
to \l{Picking Colors}{select the color}. to \l{Picking Colors}{select the color}.
\row \row
\li \inlineimage icons/colourize-16px.png \li \inlineimage icons/colourize-16px.png
\li \l Colorize \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-colorize.html}
{Colorize}
\li \inlineimage ok.png \li \inlineimage ok.png
\li Sets the color in the HSL color space by specifying \uicontrol Hue, \li Sets the color in the HSL color space by specifying \uicontrol Hue,
\uicontrol Lightness, and \uicontrol Saturation values. \uicontrol Lightness, and \uicontrol Saturation values.
\row \row
\li \inlineimage icons/desaturation-16px.png \li \inlineimage icons/desaturation-16px.png
\li \l {Desaturate}{Desaturation} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-desaturate.html}
{Desaturation}
\li \inlineimage ok.png \li \inlineimage ok.png
\li Reduces the saturation of the colors by the value set in the \li Reduces the saturation of the colors by the value set in the
\uicontrol Desaturation field. The value ranges from \c 0.0 \uicontrol Desaturation field. The value ranges from \c 0.0
@@ -118,7 +124,8 @@
of the source component. of the source component.
\row \row
\li \inlineimage icons/directional-blur-16px.png \li \inlineimage icons/directional-blur-16px.png
\li \l {DirectionalBlur}{Directional Blur} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-directionalblur.html}
{Directional Blur}
\li \inlineimage ok.png \li \inlineimage ok.png
\li Applies a blur effect to the specified direction. The value of the \li Applies a blur effect to the specified direction. The value of the
\uicontrol Angle field defines the direction of the blur. This \uicontrol Angle field defines the direction of the blur. This
@@ -135,7 +142,8 @@
more samples are needed to preserve high visual quality. more samples are needed to preserve high visual quality.
\row \row
\li \inlineimage icons/displace-16px.png \li \inlineimage icons/displace-16px.png
\li \l Displace \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-displace.html}
{Displace}
\li \inlineimage ok.png \li \inlineimage ok.png
\li Moves the pixels of the source component according to the displacement \li Moves the pixels of the source component according to the displacement
map specified in the \uicontrol {Displacement source} field. map specified in the \uicontrol {Displacement source} field.
@@ -148,7 +156,8 @@
maximum shift. maximum shift.
\row \row
\li \inlineimage icons/drop-shadow-16px.png \li \inlineimage icons/drop-shadow-16px.png
\li \l {DropShadow}{Drop Shadow} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-dropshadow.html}
{Drop Shadow}
\li \inlineimage ok.png \li \inlineimage ok.png
\li Generates a soft shadow behind the source component using a \li Generates a soft shadow behind the source component using a
gaussian blur. This effect blurs the alpha channel of the input and gaussian blur. This effect blurs the alpha channel of the input and
@@ -170,7 +179,8 @@
FPS on high-end graphics hardware. FPS on high-end graphics hardware.
\row \row
\li \inlineimage icons/fast-blur-16px.png \li \inlineimage icons/fast-blur-16px.png
\li \l {FastBlur}{Fast Blur} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-fastblur.html}
{Fast Blur}
\li \inlineimage ok.png \li \inlineimage ok.png
\li Applies a fast blur effect to one or more source components. \li Applies a fast blur effect to one or more source components.
\uicontrol {Fast Blur} offers lower blur quality than \uicontrol {Fast Blur} offers lower blur quality than
@@ -188,7 +198,8 @@
to provide good rendering performance. to provide good rendering performance.
\row \row
\li \inlineimage icons/gamma-adjust-16px.png \li \inlineimage icons/gamma-adjust-16px.png
\li \l [QML] {GammaAdjust}{Gamma Adjust} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-gammaadjust.html}
{Gamma Adjust}
\li \inlineimage ok.png \li \inlineimage ok.png
\li Alters the luminance of the source component. This effect is applied \li Alters the luminance of the source component. This effect is applied
to each pixel according to the curve that is pre-defined as a to each pixel according to the curve that is pre-defined as a
@@ -196,7 +207,8 @@
field is used as the reciprocal scaling exponent. field is used as the reciprocal scaling exponent.
\row \row
\li \inlineimage icons/gaussian-blur-16px.png \li \inlineimage icons/gaussian-blur-16px.png
\li \l [QML] {GaussianBlur}{Gaussian Blur} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-gaussianblur.html}
{Gaussian Blur}
\li \li
\li Applies a gaussian blur effect to one or more source components. \li Applies a gaussian blur effect to one or more source components.
The effect softens the image by blurring it with an algorithm that The effect softens the image by blurring it with an algorithm that
@@ -218,7 +230,7 @@
the radius. the radius.
\row \row
\li \inlineimage icons/glow-16px.png \li \inlineimage icons/glow-16px.png
\li \l [QML] {Glow} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-glow.html}{Glow}
\li \inlineimage ok.png \li \inlineimage ok.png
\li Generates a halo-like glow around the source component. This effect \li Generates a halo-like glow around the source component. This effect
blurs the alpha channel of the source and colorizes it with blurs the alpha channel of the source and colorizes it with
@@ -229,7 +241,8 @@
glow can be changed using the value of the \uicontrol Spread field. glow can be changed using the value of the \uicontrol Spread field.
\row \row
\li \inlineimage icons/hue-saturation-16px.png \li \inlineimage icons/hue-saturation-16px.png
\li \l {HueSaturation}{Hue Saturation} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-huesaturation.html}
{Hue Saturation}
\li \inlineimage ok.png \li \inlineimage ok.png
\li Alters the source component colors in the HSL color space. \li Alters the source component colors in the HSL color space.
This effect is similar to the \uicontrol Colorize effect, but This effect is similar to the \uicontrol Colorize effect, but
@@ -239,7 +252,8 @@
setting them. setting them.
\row \row
\li \inlineimage icons/inner-shadow-16px.png \li \inlineimage icons/inner-shadow-16px.png
\li \l {InnerShadow}{Inner Shadow} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-innershadow.html}
{Inner Shadow}
\li \li
\li Generates a colorized and blurred shadow inside the source using \li Generates a colorized and blurred shadow inside the source using
the color that you specify in the \uicontrol {Inner shadow color} the color that you specify in the \uicontrol {Inner shadow color}
@@ -261,7 +275,8 @@
check box. check box.
\row \row
\li \inlineimage icons/levels-16px.png \li \inlineimage icons/levels-16px.png
\li \l {LevelAdjust}{Level Adjust} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-leveladjust.html}
{Level Adjust}
\li \inlineimage ok.png \li \inlineimage ok.png
\li Adjusts color levels in the RGBA color space. This effect adjusts \li Adjusts color levels in the RGBA color space. This effect adjusts
the source component colors separately for each color channel. Source the source component colors separately for each color channel. Source
@@ -291,7 +306,8 @@
value of the \uicontrol Minimum output field. value of the \uicontrol Minimum output field.
\row \row
\li \inlineimage icons/mask-blur-16px.png \li \inlineimage icons/mask-blur-16px.png
\li \l {MaskedBlur}{Masked Blur} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-maskedblur.html}
{Masked Blur}
\li \li
\li Softens the image by blurring it. The intensity of the blur can be \li Softens the image by blurring it. The intensity of the blur can be
controlled for each pixel by specifying a \uicontrol {Mask source}, controlled for each pixel by specifying a \uicontrol {Mask source},
@@ -306,7 +322,8 @@
samples produce better quality, but are slower to render. samples produce better quality, but are slower to render.
\row \row
\li \inlineimage icons/opacity-mask-16px.png \li \inlineimage icons/opacity-mask-16px.png
\li \l {OpacityMask}{Opacity Mask} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-opacitymask.html}
{Opacity Mask}
\li \inlineimage ok.png \li \inlineimage ok.png
\li Masks the source component with another component specified in the \li Masks the source component with another component specified in the
\uicontrol {Mask source} field. The mask component gets rendered into an \uicontrol {Mask source} field. The mask component gets rendered into an
@@ -321,7 +338,8 @@
with the mask alpha: \c {As * Am}. with the mask alpha: \c {As * Am}.
\row \row
\li \inlineimage icons/radial-blur-16px.png \li \inlineimage icons/radial-blur-16px.png
\li \l {RadialBlur}{Radial Blur} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-radialblur.html}
{Radial Blur}
\li \li
\li Applies a directional blur effect in a circular direction around the \li Applies a directional blur effect in a circular direction around the
component's center point. This effect makes the source component appear component's center point. This effect makes the source component appear
@@ -336,7 +354,8 @@
samples are needed to preserve high visual quality. samples are needed to preserve high visual quality.
\row \row
\li \inlineimage icons/recursive-blur-16px.png \li \inlineimage icons/recursive-blur-16px.png
\li \l {RecursiveBlur}{Recursive Blur} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-recursiveblur.html}
{Recursive Blur}
\li \li
\li Blurs repeatedly, providing a strong blur effect. This effect \li Blurs repeatedly, providing a strong blur effect. This effect
softens the image by blurring it with an algorithm that uses a softens the image by blurring it with an algorithm that uses a
@@ -352,7 +371,8 @@
but the result is produced asynchronously and takes more time. but the result is produced asynchronously and takes more time.
\row \row
\li \inlineimage icons/threshold-16px.png \li \inlineimage icons/threshold-16px.png
\li \l {ThresholdMask}{Threshold Mask} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-thresholdmask.html}
{Threshold Mask}
\li \inlineimage ok.png \li \inlineimage ok.png
\li Masks the source component with another component specified by \li Masks the source component with another component specified by
\uicontrol {Mask source}. The value of the \uicontrol Spread \uicontrol {Mask source}. The value of the \uicontrol Spread
@@ -363,7 +383,8 @@
opaque mask pixels by adding interpolated values between them. opaque mask pixels by adding interpolated values between them.
\row \row
\li \inlineimage icons/zoom-blur-16px.png \li \inlineimage icons/zoom-blur-16px.png
\li \l {ZoomBlur}{Zoom Blur} \li \l {https://doc.qt.io/qt-5/qml-qtgraphicaleffects-zoomblur.html}
{Zoom Blur}
\li \li
\li Applies a directional blur effect towards source component's \li Applies a directional blur effect towards source component's
center point. This effect makes the source component appear to be center point. This effect makes the source component appear to be

View File

@@ -392,7 +392,8 @@
Typically, this component should be a shader effect with a source texture Typically, this component should be a shader effect with a source texture
specified. You can use the effects in \uicontrol Components > specified. You can use the effects in \uicontrol Components >
\uicontrol {Qt Quick Studio Effects} that are based on the components in the \uicontrol {Qt Quick Studio Effects} that are based on the components in the
\l {Qt Graphical Effects} module. \l {https://doc.qt.io/qt-5/qtgraphicaleffects-index.html}
{Qt Graphical Effects} module.
To enable the component to pass the layer's offscreen surface to the effect To enable the component to pass the layer's offscreen surface to the effect
correctly, the \uicontrol {Sampler name} field is set to the source correctly, the \uicontrol {Sampler name} field is set to the source

View File

@@ -42519,22 +42519,22 @@ Are you sure?</source>
</message> </message>
<message> <message>
<source>[Source: %1]</source> <source>[Source: %1]</source>
<translation type="unfinished"></translation> <translation>[Quelle: %1]</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ClangCodeModel</name> <name>ClangCodeModel</name>
<message> <message>
<source>Component</source> <source>Component</source>
<translation type="unfinished">Komponente</translation> <translation>Komponente</translation>
</message> </message>
<message> <message>
<source>Total Memory</source> <source>Total Memory</source>
<translation type="unfinished"></translation> <translation>Gesamtspeicher</translation>
</message> </message>
<message> <message>
<source>Update</source> <source>Update</source>
<translation type="unfinished">Aktualisieren</translation> <translation>Aktualisieren</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -42590,7 +42590,7 @@ Ausgabe:
</message> </message>
<message> <message>
<source>Documentation:</source> <source>Documentation:</source>
<translation type="unfinished"></translation> <translation>Dokumentation:</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -42616,11 +42616,11 @@ Ausgabe:
</message> </message>
<message> <message>
<source>Filter for This Diagnostic Kind</source> <source>Filter for This Diagnostic Kind</source>
<translation>Nach dieser Art von Einträgen filtern</translation> <translation>Nach dieser Art von Meldungen filtern</translation>
</message> </message>
<message> <message>
<source>Filter out This Diagnostic Kind</source> <source>Filter out This Diagnostic Kind</source>
<translation>Diese Art von Einträgen herausfiltern</translation> <translation>Diese Art von Meldungen herausfiltern</translation>
</message> </message>
<message> <message>
<source>Web Page</source> <source>Web Page</source>
@@ -42628,19 +42628,19 @@ Ausgabe:
</message> </message>
<message> <message>
<source>Suppress Selected Diagnostics</source> <source>Suppress Selected Diagnostics</source>
<translation type="unfinished"></translation> <translation>Ausgewählte Meldungen unterdrücken</translation>
</message> </message>
<message> <message>
<source>Suppress This Diagnostic</source> <source>Suppress This Diagnostic</source>
<translation>Diese Art von Einträgen nicht anzeigen</translation> <translation>Diese Art von Meldungen nicht anzeigen</translation>
</message> </message>
<message> <message>
<source>Disable These Checks</source> <source>Disable These Checks</source>
<translation type="unfinished"></translation> <translation>Diese Checks deaktivieren</translation>
</message> </message>
<message> <message>
<source>Disable This Check</source> <source>Disable This Check</source>
<translation type="unfinished"></translation> <translation>Diesen Check deaktivieren</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -43132,7 +43132,7 @@ Was soll %1 tun?</translation>
<name>ClangFormat::ClangFormatConfigWidget</name> <name>ClangFormat::ClangFormatConfigWidget</name>
<message> <message>
<source>Clang-Format Style</source> <source>Clang-Format Style</source>
<translation type="unfinished"></translation> <translation>Clang-Format-Stil</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -43150,7 +43150,7 @@ Was soll %1 tun?</translation>
</message> </message>
<message> <message>
<source>The ClangFormat plugin has been built against an unmodified Clang. You might experience formatting glitches in certain circumstances. See https://code.qt.io/cgit/qt-creator/qt-creator.git/tree/README.md for more information.</source> <source>The ClangFormat plugin has been built against an unmodified Clang. You might experience formatting glitches in certain circumstances. See https://code.qt.io/cgit/qt-creator/qt-creator.git/tree/README.md for more information.</source>
<translation type="unfinished"></translation> <translation>Das ClangFormat-Plugin wurde gegen ein unmodifiziertes Clang gebaut. Unter Umständen werden Sie Mängel beim Formatieren feststellen. Unter https://code.qt.io/cgit/qt-creator/qt-creator.git/tree/README.md können Sie mehr erfahren.</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -44729,11 +44729,11 @@ You might find further explanations in the Application Output view.</source>
</message> </message>
<message> <message>
<source>Filters</source> <source>Filters</source>
<translation type="unfinished">Filter</translation> <translation>Filter</translation>
</message> </message>
<message> <message>
<source>Reset Topic Filter</source> <source>Reset Topic Filter</source>
<translation type="unfinished"></translation> <translation>Themenfilter zurücksetzen</translation>
</message> </message>
<message> <message>
<source>Checks</source> <source>Checks</source>
@@ -44746,7 +44746,8 @@ You might find further explanations in the Application Output view.</source>
<message> <message>
<source>Could not query the supported checks from the clazy-standalone executable. <source>Could not query the supported checks from the clazy-standalone executable.
Set a valid executable first.</source> Set a valid executable first.</source>
<translation type="unfinished"></translation> <translation>Konnte die von clazy-standalone unterstützten Überprüfungen nicht abfragen.
Setzen Sie erst eine gültige ausführbare Datei.</translation>
</message> </message>
<message> <message>
<source>Enable lower levels automatically</source> <source>Enable lower levels automatically</source>
@@ -44761,19 +44762,19 @@ Set a valid executable first.</source>
</message> </message>
<message> <message>
<source>Select All</source> <source>Select All</source>
<translation type="unfinished"></translation> <translation>Alle auswählen</translation>
</message> </message>
<message> <message>
<source>Select All with Fixits</source> <source>Select All with Fixits</source>
<translation type="unfinished"></translation> <translation>Alle mit Korrekturen auswählen</translation>
</message> </message>
<message> <message>
<source>Clear Selection</source> <source>Clear Selection</source>
<translation type="unfinished"></translation> <translation>Auswahl löschen</translation>
</message> </message>
<message> <message>
<source>Select the diagnostics to display.</source> <source>Select the diagnostics to display.</source>
<translation type="unfinished"></translation> <translation>Wählen Sie die anzuzeigenden Meldungen.</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -44784,11 +44785,11 @@ Set a valid executable first.</source>
</message> </message>
<message> <message>
<source>Analyze open files</source> <source>Analyze open files</source>
<translation type="unfinished"></translation> <translation>Offene Dateien analysieren</translation>
</message> </message>
<message> <message>
<source>Run Options</source> <source>Run Options</source>
<translation type="unfinished"></translation> <translation>Ausführungseinstellungen</translation>
</message> </message>
<message> <message>
<source>Parallel jobs:</source> <source>Parallel jobs:</source>
@@ -44812,7 +44813,8 @@ Set a valid executable first.</source>
<message> <message>
<source>Could not query the supported checks from the clang-tidy executable. <source>Could not query the supported checks from the clang-tidy executable.
Set a valid executable first.</source> Set a valid executable first.</source>
<translation type="unfinished"></translation> <translation>Konnte die von clang-tidy unterstützten Überprüfungen nicht abfragen.
Setzen Sie erst eine gültige ausführbare Datei.</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -45701,11 +45703,11 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern.</translation>
<name>ClangTools::Internal::ClangTool</name> <name>ClangTools::Internal::ClangTool</name>
<message> <message>
<source>Analyze Project...</source> <source>Analyze Project...</source>
<translation type="unfinished"></translation> <translation>Projekt analysieren...</translation>
</message> </message>
<message> <message>
<source>Analyze Current File</source> <source>Analyze Current File</source>
<translation type="unfinished"></translation> <translation>Aktuelle Datei analysieren</translation>
</message> </message>
<message> <message>
<source>Go to previous diagnostic.</source> <source>Go to previous diagnostic.</source>
@@ -45717,7 +45719,7 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern.</translation>
</message> </message>
<message> <message>
<source>Load diagnostics from YAML files exported with &quot;-export-fixes&quot;.</source> <source>Load diagnostics from YAML files exported with &quot;-export-fixes&quot;.</source>
<translation type="unfinished"></translation> <translation>Meldungen, die mit &quot;-export-fixes&quot; exportiert wurden, aus YAML-Datei laden.</translation>
</message> </message>
<message> <message>
<source>Clear</source> <source>Clear</source>
@@ -45725,11 +45727,11 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern.</translation>
</message> </message>
<message> <message>
<source>Expand All</source> <source>Expand All</source>
<translation type="unfinished"></translation> <translation>Alle aufklappen</translation>
</message> </message>
<message> <message>
<source>Collapse All</source> <source>Collapse All</source>
<translation type="unfinished"></translation> <translation>Alle einklappen</translation>
</message> </message>
<message> <message>
<source>Filter Diagnostics</source> <source>Filter Diagnostics</source>
@@ -45773,119 +45775,119 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern.</translation>
</message> </message>
<message> <message>
<source>Cannot analyze current file: No files open.</source> <source>Cannot analyze current file: No files open.</source>
<translation type="unfinished"></translation> <translation>Kann aktuelle Datei nicht analysieren: Keine Dateien geöffnet.</translation>
</message> </message>
<message> <message>
<source>Cannot analyze current file: &quot;%1&quot; is not a known source file.</source> <source>Cannot analyze current file: &quot;%1&quot; is not a known source file.</source>
<translation type="unfinished"></translation> <translation>Kann aktuelle Datei nicht analysieren: &quot;%1&quot; ist keine bekannte Quelldatei.</translation>
</message> </message>
<message> <message>
<source>Select YAML Files with Diagnostics</source> <source>Select YAML Files with Diagnostics</source>
<translation type="unfinished"></translation> <translation>Wählen Sie YAML-Datei mit Meldungen</translation>
</message> </message>
<message> <message>
<source>YAML Files (*.yml *.yaml);;All Files (*)</source> <source>YAML Files (*.yml *.yaml);;All Files (*)</source>
<translation type="unfinished"></translation> <translation>YAML-Dateien (*.yml *.yaml);;Alle Dateien (*)</translation>
</message> </message>
<message> <message>
<source>Error Loading Diagnostics</source> <source>Error Loading Diagnostics</source>
<translation type="unfinished"></translation> <translation>Fehler beim Laden der Meldungen</translation>
</message> </message>
<message> <message>
<source>Set a valid Clang-Tidy executable.</source> <source>Set a valid Clang-Tidy executable.</source>
<translation type="unfinished"></translation> <translation>Wählen Sie eine gültige ausführbare Datei für Clang-Tidy.</translation>
</message> </message>
<message> <message>
<source>Set a valid Clazy-Standalone executable.</source> <source>Set a valid Clazy-Standalone executable.</source>
<translation type="unfinished"></translation> <translation>Wählen Sie eine gültige ausführbare Datei für Clazy-Standalone.</translation>
</message> </message>
<message> <message>
<source>Project &quot;%1&quot; is not a C/C++ project.</source> <source>Project &quot;%1&quot; is not a C/C++ project.</source>
<translation type="unfinished"></translation> <translation>Das Projekt &quot;%1&quot; ist kein C/C++-Projekt.</translation>
</message> </message>
<message> <message>
<source>Open a C/C++ project to start analyzing.</source> <source>Open a C/C++ project to start analyzing.</source>
<translation type="unfinished"></translation> <translation>Öffnen Sie ein C/C++-Projekt, um mit der Analyse zu beginnen.</translation>
</message> </message>
<message> <message>
<source>Failed to build the project.</source> <source>Failed to build the project.</source>
<translation type="unfinished"></translation> <translation>Das Projekt konnte nicht erstellt werden.</translation>
</message> </message>
<message> <message>
<source>Failed to start the analyzer.</source> <source>Failed to start the analyzer.</source>
<translation type="unfinished"></translation> <translation>Das Analyse-Werkzeug konnte nicht gestartet werden.</translation>
</message> </message>
<message> <message>
<source>All Files</source> <source>All Files</source>
<translation type="unfinished"></translation> <translation>Alle Dateien</translation>
</message> </message>
<message> <message>
<source>Opened Files</source> <source>Opened Files</source>
<translation type="unfinished"></translation> <translation>Geöffnete Dateien</translation>
</message> </message>
<message> <message>
<source>Edited Files</source> <source>Edited Files</source>
<translation type="unfinished"></translation> <translation>Bearbeitete Dateien</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<source>Failed to analyze %n file(s).</source> <source>Failed to analyze %n file(s).</source>
<translation type="unfinished"> <translation>
<numerusform></numerusform> <numerusform>Eine Datei konnte nicht analysiert werden.</numerusform>
<numerusform></numerusform> <numerusform>%n Dateien konnten nicht analysiert werden.</numerusform>
</translation> </translation>
</message> </message>
<message> <message>
<source>Analyzing...</source> <source>Analyzing...</source>
<translation type="unfinished"></translation> <translation>Analysiere...</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<source>Analyzing... %1 of %n file(s) processed.</source> <source>Analyzing... %1 of %n file(s) processed.</source>
<translation type="unfinished"> <translation>
<numerusform></numerusform> <numerusform>Analysiere... %1 von einer Datei verarbeitet.</numerusform>
<numerusform></numerusform> <numerusform>Analysiere... %1 von %n Dateien verarbeitet.</numerusform>
</translation> </translation>
</message> </message>
<message> <message>
<source>Analysis stopped by user.</source> <source>Analysis stopped by user.</source>
<translation type="unfinished"></translation> <translation>Analyse durch den Benutzer gestoppt.</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<source>Finished processing %n file(s).</source> <source>Finished processing %n file(s).</source>
<translation type="unfinished"> <translation>
<numerusform></numerusform> <numerusform>Verarbeitung einer Datei abgeschlossen.</numerusform>
<numerusform></numerusform> <numerusform>Verarbeitung von %n Dateien abgeschlossen.</numerusform>
</translation> </translation>
</message> </message>
<message> <message>
<source>Diagnostics imported.</source> <source>Diagnostics imported.</source>
<translation type="unfinished"></translation> <translation>Meldungen importiert.</translation>
</message> </message>
<message> <message>
<source>%1 diagnostics. %2 fixits, %3 selected.</source> <source>%1 diagnostics. %2 fixits, %3 selected.</source>
<translation type="unfinished"></translation> <translation>%1 Meldung(en). %2 Korrektur(en), %3 ausgewählt.</translation>
</message> </message>
<message> <message>
<source>No diagnostics.</source> <source>No diagnostics.</source>
<translation type="unfinished"></translation> <translation>Keine Meldungen.</translation>
</message> </message>
<message> <message>
<source>In general, the project should be built before starting the analysis to ensure that the code to analyze is valid.&lt;br/&gt;&lt;br/&gt;Building the project might also run code generators that update the source files as necessary.</source> <source>In general, the project should be built before starting the analysis to ensure that the code to analyze is valid.&lt;br/&gt;&lt;br/&gt;Building the project might also run code generators that update the source files as necessary.</source>
<translation type="unfinished"></translation> <translation>Im Allgemeinen sollte das Projekt vor der Analyse gebaut werden, um sicherzustellen, dass der zu analysierende Code gültig ist.&lt;br/&gt;&lt;br/&gt;Beim Erstellen des Projekts werden möglicherweise auch Code-Generatoren ausgeführt, die Quelldateien nach Bedarf aktualisieren.</translation>
</message> </message>
<message> <message>
<source>Info About Build the Project Before Analysis</source> <source>Info About Build the Project Before Analysis</source>
<translation type="unfinished"></translation> <translation>Information über das Erstellen des Projekts vor der Analyse</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ClangTools::Internal::ClangToolRunWorker</name> <name>ClangTools::Internal::ClangToolRunWorker</name>
<message> <message>
<source>Failed to build the project.</source> <source>Failed to build the project.</source>
<translation type="unfinished"></translation> <translation>Das Projekt konnte nicht erstellt werden.</translation>
</message> </message>
<message> <message>
<source>No code model data available for project.</source> <source>No code model data available for project.</source>
<translation type="unfinished"></translation> <translation>Für das Projekt sind keine Codemodell-Daten vorhanden.</translation>
</message> </message>
<message> <message>
<source>The project configuration changed since the start of the %1. Please re-run with current configuration.</source> <source>The project configuration changed since the start of the %1. Please re-run with current configuration.</source>
@@ -45893,11 +45895,11 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern.</translation>
</message> </message>
<message> <message>
<source>Failed to create temporary directory: %1.</source> <source>Failed to create temporary directory: %1.</source>
<translation type="unfinished"></translation> <translation>Das temporäre Verzeichnis konnte nicht erstellt werden: %1.</translation>
</message> </message>
<message> <message>
<source>Running %1 on %2 with configuration &quot;%3&quot;.</source> <source>Running %1 on %2 with configuration &quot;%3&quot;.</source>
<translation type="unfinished"></translation> <translation>Führe %1 auf %2 mit der Konfiguration &quot;%3&quot; aus.</translation>
</message> </message>
<message> <message>
<source>Analyzing</source> <source>Analyzing</source>
@@ -45905,11 +45907,11 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern.</translation>
</message> </message>
<message> <message>
<source>Analyzing &quot;%1&quot; [%2].</source> <source>Analyzing &quot;%1&quot; [%2].</source>
<translation type="unfinished"></translation> <translation>Analysiere &quot;%1&quot; [%2].</translation>
</message> </message>
<message> <message>
<source>Failed to start runner &quot;%1&quot;.</source> <source>Failed to start runner &quot;%1&quot;.</source>
<translation type="unfinished"></translation> <translation>Das Werkzeug &quot;%1&quot; konnte nicht gestartet werden.</translation>
</message> </message>
<message> <message>
<source>Failed to analyze &quot;%1&quot;: %2</source> <source>Failed to analyze &quot;%1&quot;: %2</source>
@@ -45917,14 +45919,14 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern.</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<source>Error: Failed to analyze %n files.</source> <source>Error: Failed to analyze %n files.</source>
<translation type="unfinished"> <translation>
<numerusform></numerusform> <numerusform>Fehler: Eine Datei konnte nicht analysiert werden.</numerusform>
<numerusform></numerusform> <numerusform>Fehler: %n Dateien konnten nicht analysiert werden.</numerusform>
</translation> </translation>
</message> </message>
<message> <message>
<source>Note: You might need to build the project to generate or update source files. To build automatically, enable &quot;Build the project before analysis&quot;.</source> <source>Note: You might need to build the project to generate or update source files. To build automatically, enable &quot;Build the project before analysis&quot;.</source>
<translation type="unfinished"></translation> <translation>Hinweis: Möglicherweise müssen Sie das Projekt erstellen, um Quelldateien zu generieren oder aktualisieren. Aktivieren Sie &quot;Projekt vor der Analyse erstellen&quot;, um das Projekt automatisch zu erstellen.</translation>
</message> </message>
<message> <message>
<source>%1 finished: Processed %2 files successfully, %3 failed.</source> <source>%1 finished: Processed %2 files successfully, %3 failed.</source>
@@ -45973,11 +45975,11 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern.</translation>
</message> </message>
<message> <message>
<source>Clang-Tidy Checks</source> <source>Clang-Tidy Checks</source>
<translation type="unfinished"></translation> <translation>Clang-Tidy Checks</translation>
</message> </message>
<message> <message>
<source>Clazy Checks</source> <source>Clazy Checks</source>
<translation type="unfinished"></translation> <translation>Clazy Checks</translation>
</message> </message>
<message> <message>
<source>Edit Checks as String...</source> <source>Edit Checks as String...</source>
@@ -52413,43 +52415,43 @@ in &quot;%2&quot; aus.
<name>ClangCodeModel::Internal::ClangdClient</name> <name>ClangCodeModel::Internal::ClangdClient</name>
<message> <message>
<source>clangd</source> <source>clangd</source>
<translation type="unfinished"></translation> <translation>clangd</translation>
</message> </message>
<message> <message>
<source>Indexing %1 with clangd</source> <source>Indexing %1 with clangd</source>
<translation type="unfinished"></translation> <translation>Indiziere %1 mit clangd</translation>
</message> </message>
<message> <message>
<source>Indexing session with clangd</source> <source>Indexing session with clangd</source>
<translation type="unfinished"></translation> <translation>Indiziere Sitzung mit clangd</translation>
</message> </message>
<message> <message>
<source>Memory Usage</source> <source>Memory Usage</source>
<translation type="unfinished">Speicherverbrauch</translation> <translation>Speicherverbrauch</translation>
</message> </message>
<message> <message>
<source>Location: %1</source> <source>Location: %1</source>
<extracomment>Parent folder for proposed #include completion</extracomment> <extracomment>Parent folder for proposed #include completion</extracomment>
<translation type="unfinished">Pfad: %1</translation> <translation>Pfad: %1</translation>
</message> </message>
<message> <message>
<source>collecting overrides ...</source> <source>collecting overrides ...</source>
<translation type="unfinished"></translation> <translation>Suche überschriebene Methoden ...</translation>
</message> </message>
<message> <message>
<source>&lt;base declaration&gt;</source> <source>&lt;base declaration&gt;</source>
<translation type="unfinished"></translation> <translation>&lt;Basisdeklaration&gt;</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ClangCodeModel::Internal::ClangdFindReferences</name> <name>ClangCodeModel::Internal::ClangdFindReferences</name>
<message> <message>
<source>C++ Usages:</source> <source>C++ Usages:</source>
<translation type="unfinished"></translation> <translation>C++ Referenzen:</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<source>Re&amp;name %n files</source> <source>Re&amp;name %n files</source>
<translation type="unfinished"> <translation>
<numerusform>Eine Datei umbe&amp;nennen</numerusform> <numerusform>Eine Datei umbe&amp;nennen</numerusform>
<numerusform>%n Dateien umbe&amp;nennen</numerusform> <numerusform>%n Dateien umbe&amp;nennen</numerusform>
</translation> </translation>
@@ -52457,7 +52459,7 @@ in &quot;%2&quot; aus.
<message> <message>
<source>Files: <source>Files:
%1</source> %1</source>
<translation type="unfinished">Dateien: <translation>Dateien:
%1</translation> %1</translation>
</message> </message>
</context> </context>
@@ -52465,233 +52467,234 @@ in &quot;%2&quot; aus.
<name>ClangCodeModel::Internal::ClangModelManagerSupport</name> <name>ClangCodeModel::Internal::ClangModelManagerSupport</name>
<message> <message>
<source>The use of clangd for the C/C++ code model was disabled, because it is likely that its memory requirements would be higher than what your system can handle.</source> <source>The use of clangd for the C/C++ code model was disabled, because it is likely that its memory requirements would be higher than what your system can handle.</source>
<translation type="unfinished"></translation> <translation>Clangd wurde für das C/C++-Codemodell deaktiviert, da dessen Speicheranforderung wahrscheinlich die Leistungsfähigkeit Ihres Systems übersteigt.</translation>
</message> </message>
<message> <message>
<source>With clangd enabled, Qt Creator fully supports modern C++ when highlighting code, completing symbols and so on.&lt;br&gt;This comes at a higher cost in terms of CPU load and memory usage compared to the built-in code model, which therefore might be the better choice on older machines and/or with legacy code.&lt;br&gt;You can enable/disable and fine-tune clangd &lt;a href=&quot;dummy&quot;&gt;here&lt;/a&gt;.</source> <source>With clangd enabled, Qt Creator fully supports modern C++ when highlighting code, completing symbols and so on.&lt;br&gt;This comes at a higher cost in terms of CPU load and memory usage compared to the built-in code model, which therefore might be the better choice on older machines and/or with legacy code.&lt;br&gt;You can enable/disable and fine-tune clangd &lt;a href=&quot;dummy&quot;&gt;here&lt;/a&gt;.</source>
<translation type="unfinished"></translation> <translation>Wenn Clangd aktiviert ist, unterstützt Qt Creator semantische Hervorhebung, Symbolvervollständigung und so weiter für Code, der modernes C++ nutzt.&lt;br/&gt;Das wirkt sich nachteilig auf CPU-Last und Speicherverbrauch im Vergleich zum eingebauten Codemodell aus, das deshalb eine bessere Wahl für ältere Maschinen und/oder für Legacy Code sein kann.&lt;br/&gt;Sie können Clangd &lt;a href=&quot;dummy&quot;&gt;hier&lt;/a&gt; aktivieren/deaktivieren und anpassen.</translation>
</message> </message>
<message> <message>
<source>Enable Anyway</source> <source>Enable Anyway</source>
<translation type="unfinished"></translation> <translation>Trotzdem aktivieren</translation>
</message> </message>
<message> <message>
<source>Cannot use clangd: Failed to generate compilation database: <source>Cannot use clangd: Failed to generate compilation database:
%1</source> %1</source>
<translation type="unfinished"></translation> <translation>Kann Clangd nicht nutzen: Erstellen der Kompilierungsdatenbank fehlgeschlagen:
%1</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ClangdTextMark</name> <name>ClangdTextMark</name>
<message> <message>
<source>Code Model Error</source> <source>Code Model Error</source>
<translation type="unfinished">Codemodell-Fehler</translation> <translation>Codemodell-Fehler</translation>
</message> </message>
<message> <message>
<source>Code Model Warning</source> <source>Code Model Warning</source>
<translation type="unfinished">Codemodell-Warnung</translation> <translation>Codemodell-Warnung</translation>
</message> </message>
<message> <message>
<source>Copy to Clipboard</source> <source>Copy to Clipboard</source>
<comment>Clang Code Model Marks</comment> <comment>Clang Code Model Marks</comment>
<translation type="unfinished">In die Zwischenablage kopieren</translation> <translation>In die Zwischenablage kopieren</translation>
</message> </message>
<message> <message>
<source>Disable Diagnostic in Current Project</source> <source>Disable Diagnostic in Current Project</source>
<translation type="unfinished"></translation> <translation>Meldung für aktuelles Projekt deaktivieren</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ClangUtils</name> <name>ClangUtils</name>
<message> <message>
<source>Could not retrieve build directory.</source> <source>Could not retrieve build directory.</source>
<translation type="unfinished"></translation> <translation>Build-Verzeichnis konnte nicht abgefragt werden.</translation>
</message> </message>
<message> <message>
<source>Could not create &quot;%1&quot;: %2</source> <source>Could not create &quot;%1&quot;: %2</source>
<translation type="unfinished"></translation> <translation>Konnte &quot;%1&quot; nicht erzeugen: %2</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ClangFormat::ClangFormatGlobalConfigWidget</name> <name>ClangFormat::ClangFormatGlobalConfigWidget</name>
<message> <message>
<source>Formatting mode:</source> <source>Formatting mode:</source>
<translation type="unfinished"></translation> <translation>Formatierungsart:</translation>
</message> </message>
<message> <message>
<source>Format while typing</source> <source>Format while typing</source>
<translation type="unfinished">Bei der Eingabe formatieren</translation> <translation>Bei der Eingabe formatieren</translation>
</message> </message>
<message> <message>
<source>Format edited code on file save</source> <source>Format edited code on file save</source>
<translation type="unfinished">Bearbeiteten Quelltext beim Speichern der Datei formatieren</translation> <translation>Bearbeiteten Quelltext beim Speichern der Datei formatieren</translation>
</message> </message>
<message> <message>
<source>Override Clang Format configuration file</source> <source>Override Clang Format configuration file</source>
<translation type="unfinished">Clang-Format-Konfigurationsdatei überschreiben</translation> <translation>Clang-Format-Konfigurationsdatei überschreiben</translation>
</message> </message>
<message> <message>
<source>ClangFormat global setting:</source> <source>ClangFormat global setting:</source>
<translation type="unfinished"></translation> <translation>Globale Einstellungen für ClangFormat:</translation>
</message> </message>
<message> <message>
<source>Indenting only</source> <source>Indenting only</source>
<translation type="unfinished"></translation> <translation>Nur Einrückung</translation>
</message> </message>
<message> <message>
<source>Full formatting</source> <source>Full formatting</source>
<translation type="unfinished"></translation> <translation>Komplette Formatierung</translation>
</message> </message>
<message> <message>
<source>Disable</source> <source>Disable</source>
<translation type="unfinished">Deaktivieren</translation> <translation>Deaktivieren</translation>
</message> </message>
<message> <message>
<source>The current project has its own .clang-format file which can be overridden by the settings below.</source> <source>The current project has its own .clang-format file which can be overridden by the settings below.</source>
<translation type="unfinished"></translation> <translation>Das aktuelle Projekt hat ihre eigene .clang-format-Datei, die in den untenstehenden Einstellungen überschrieben werden kann.</translation>
</message> </message>
<message> <message>
<source>Override Clang Format configuration file with the chosen configuration.</source> <source>Override Clang Format configuration file with the chosen configuration.</source>
<translation type="unfinished"></translation> <translation>Die Clang-Format-Konfigurationsdatei mit der gewählten Konfiguration überschreiben.</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ClangFormatStyleFactory</name> <name>ClangFormatStyleFactory</name>
<message> <message>
<source>ClangFormat</source> <source>ClangFormat</source>
<translation type="unfinished">ClangFormat</translation> <translation>ClangFormat</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ClangTools::Internal::ClangToolsProjectSettingsWidget</name> <name>ClangTools::Internal::ClangToolsProjectSettingsWidget</name>
<message> <message>
<source>Restore Global Settings</source> <source>Restore Global Settings</source>
<translation type="unfinished">Globale Einstellungen wiederherstellen</translation> <translation>Globale Einstellungen wiederherstellen</translation>
</message> </message>
<message> <message>
<source>Go to Analyzer</source> <source>Go to Analyzer</source>
<translation type="unfinished"></translation> <translation>Zum Analyzer wechseln</translation>
</message> </message>
<message> <message>
<source>Remove Selected</source> <source>Remove Selected</source>
<translation type="unfinished">Ausgewählte entfernen</translation> <translation>Ausgewählte entfernen</translation>
</message> </message>
<message> <message>
<source>Remove All</source> <source>Remove All</source>
<translation type="unfinished">Alle entfernen</translation> <translation>Alle entfernen</translation>
</message> </message>
<message> <message>
<source>Suppressed diagnostics</source> <source>Suppressed diagnostics</source>
<translation type="unfinished">Unterdrückte Diagnosemeldungen</translation> <translation>Unterdrückte Meldungen</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ClangToolsDiagnosticModel</name> <name>ClangToolsDiagnosticModel</name>
<message> <message>
<source>No Fixits</source> <source>No Fixits</source>
<translation type="unfinished">Keine Korrekturen</translation> <translation>Keine Korrekturen</translation>
</message> </message>
<message> <message>
<source>Not Scheduled</source> <source>Not Scheduled</source>
<translation type="unfinished">nicht eingeplant</translation> <translation>Nicht eingeplant</translation>
</message> </message>
<message> <message>
<source>Invalidated</source> <source>Invalidated</source>
<translation type="unfinished">Ungültig</translation> <translation>Ungültig</translation>
</message> </message>
<message> <message>
<source>Scheduled</source> <source>Scheduled</source>
<translation type="unfinished">eingeplant</translation> <translation>Eingeplant</translation>
</message> </message>
<message> <message>
<source>Failed to Apply</source> <source>Failed to Apply</source>
<translation type="unfinished">Konnte nicht angewendet werden</translation> <translation>Konnte nicht angewendet werden</translation>
</message> </message>
<message> <message>
<source>Applied</source> <source>Applied</source>
<translation type="unfinished">Angewendet</translation> <translation>Angewendet</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ClangTools::Internal::TidyOptionsDialog</name> <name>ClangTools::Internal::TidyOptionsDialog</name>
<message> <message>
<source>Options for %1</source> <source>Options for %1</source>
<translation type="unfinished"></translation> <translation>Einstellungen für %1</translation>
</message> </message>
<message> <message>
<source>Option</source> <source>Option</source>
<translation type="unfinished"></translation> <translation>Einstellung</translation>
</message> </message>
<message> <message>
<source>Value</source> <source>Value</source>
<translation type="unfinished">Wert</translation> <translation>Wert</translation>
</message> </message>
<message> <message>
<source>Add Option</source> <source>Add Option</source>
<translation type="unfinished"></translation> <translation>Einstellung hinzufügen</translation>
</message> </message>
<message> <message>
<source>Remove Option</source> <source>Remove Option</source>
<translation type="unfinished"></translation> <translation>Einstellung entfernen</translation>
</message> </message>
<message> <message>
<source>&lt;new option&gt;</source> <source>&lt;new option&gt;</source>
<translation type="unfinished"></translation> <translation>&lt;Neue Einstellung&gt;</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ClangTools::Internal::TidyChecksTreeModel</name> <name>ClangTools::Internal::TidyChecksTreeModel</name>
<message> <message>
<source>Options</source> <source>Options</source>
<translation type="unfinished">Einstellungen</translation> <translation>Einstellungen</translation>
</message> </message>
</context> </context>
<context> <context>
<name>Clang Tools</name> <name>Clang Tools</name>
<message> <message>
<source>Custom Configuration</source> <source>Custom Configuration</source>
<translation type="unfinished"></translation> <translation>Benutzerdefinierte Konfiguration</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ClangTools::Internal::DiagnosticMark</name> <name>ClangTools::Internal::DiagnosticMark</name>
<message> <message>
<source>Copy to Clipboard</source> <source>Copy to Clipboard</source>
<translation type="unfinished">In die Zwischenablage kopieren</translation> <translation>In die Zwischenablage kopieren</translation>
</message> </message>
<message> <message>
<source>Disable Diagnostic</source> <source>Disable Diagnostic</source>
<translation type="unfinished"></translation> <translation>Meldung deaktivieren</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ClangTools::Internal::FilterChecksModel</name> <name>ClangTools::Internal::FilterChecksModel</name>
<message> <message>
<source>Check</source> <source>Check</source>
<translation type="unfinished"></translation> <translation>Check</translation>
</message> </message>
</context> </context>
<context> <context>
<name>ClangTools::Internal::SettingsWidget</name> <name>ClangTools::Internal::SettingsWidget</name>
<message> <message>
<source>Clang-Tidy Executable</source> <source>Clang-Tidy Executable</source>
<translation type="unfinished"></translation> <translation>Ausführbare Datei für Clang-Tidy</translation>
</message> </message>
<message> <message>
<source>Clazy Executable</source> <source>Clazy Executable</source>
<translation type="unfinished"></translation> <translation>Ausführbare Datei für Clazy</translation>
</message> </message>
<message> <message>
<source>Executables</source> <source>Executables</source>
<translation type="unfinished"></translation> <translation>Ausführbare Dateien</translation>
</message> </message>
<message> <message>
<source>Clang-Tidy:</source> <source>Clang-Tidy:</source>
<translation type="unfinished"></translation> <translation>Clang-Tidy:</translation>
</message> </message>
<message> <message>
<source>Clazy-Standalone:</source> <source>Clazy-Standalone:</source>
<translation type="unfinished"></translation> <translation>Clazy-Standalone:</translation>
</message> </message>
</context> </context>
<context> <context>

View File

@@ -933,8 +933,9 @@ QVariant FilePath::toVariant() const
bool FilePath::operator==(const FilePath &other) const bool FilePath::operator==(const FilePath &other) const
{ {
return pathView().compare(other.pathView(), caseSensitivity()) == 0 && host() == other.host() return pathView().compare(other.pathView(), caseSensitivity()) == 0
&& scheme() == other.scheme(); && host() == other.host()
&& scheme() == other.scheme();
} }
bool FilePath::operator!=(const FilePath &other) const bool FilePath::operator!=(const FilePath &other) const
@@ -1588,7 +1589,7 @@ static QString normalizePathSegmentHelper(const QString &name)
{ {
const int len = name.length(); const int len = name.length();
if (len == 0) if (len == 0 || name.contains("%{"))
return name; return name;
int i = len - 1; int i = len - 1;

View File

@@ -60,8 +60,12 @@ QStringList GTestConfiguration::argumentsForTestRunner(QStringList *omitted) con
} }
const QStringList &testSets = testCases(); const QStringList &testSets = testCases();
if (!testSets.isEmpty()) if (!testSets.isEmpty()) {
arguments << "--gtest_filter=\"" + testSets.join(':') + '"'; if (isDebugRunMode()) // debugger does its own special quoting
arguments << "--gtest_filter=" + testSets.join(':');
else
arguments << "--gtest_filter=\"" + testSets.join(':') + '"';
}
auto gSettings = static_cast<GTestSettings *>(framework()->testSettings()); auto gSettings = static_cast<GTestSettings *>(framework()->testSettings());
if (!gSettings) if (!gSettings)

View File

@@ -127,7 +127,7 @@ static void checkSystemForClangdSuitability()
if (ClangdSettings::hardwareFulfillsRequirements()) if (ClangdSettings::hardwareFulfillsRequirements())
return; return;
ClangdSettings::setUseClangd(false); ClangdSettings::setUseClangdAndSave(false);
const QString warnStr = ClangModelManagerSupport::tr("The use of clangd for the C/C++ " const QString warnStr = ClangModelManagerSupport::tr("The use of clangd for the C/C++ "
"code model was disabled, because it is likely that its memory requirements " "code model was disabled, because it is likely that its memory requirements "
"would be higher than what your system can handle."); "would be higher than what your system can handle.");
@@ -148,7 +148,7 @@ static void checkSystemForClangdSuitability()
return label; return label;
}); });
info.addCustomButton(ClangModelManagerSupport::tr("Enable Anyway"), [clangdWarningSetting] { info.addCustomButton(ClangModelManagerSupport::tr("Enable Anyway"), [clangdWarningSetting] {
ClangdSettings::setUseClangd(true); ClangdSettings::setUseClangdAndSave(true);
Core::ICore::infoBar()->removeInfo(clangdWarningSetting); Core::ICore::infoBar()->removeInfo(clangdWarningSetting);
}); });
Core::ICore::infoBar()->addInfo(info); Core::ICore::infoBar()->addInfo(info);
@@ -533,12 +533,14 @@ void ClangModelManagerSupport::updateLanguageClient(ProjectExplorer::Project *pr
&& currentClient->project() == docProject) { && currentClient->project() == docProject) {
continue; continue;
} }
if (!docProject || docProject == project) { if (docProject != project
if (currentClient) && (docProject || !ProjectFile::isHeader(doc->filePath()))) {
currentClient->closeDocument(doc); continue;
LanguageClientManager::openDocumentWithClient(doc, client);
hasDocuments = true;
} }
if (currentClient)
currentClient->closeDocument(doc);
LanguageClientManager::openDocumentWithClient(doc, client);
hasDocuments = true;
} }
for (auto it = m_queuedShadowDocuments.begin(); it != m_queuedShadowDocuments.end();) { for (auto it = m_queuedShadowDocuments.begin(); it != m_queuedShadowDocuments.end();) {
@@ -641,11 +643,13 @@ void ClangModelManagerSupport::claimNonProjectSources(ClangdClient *client)
} }
if (!ClangdSettings::instance().sizeIsOkay(doc->filePath())) if (!ClangdSettings::instance().sizeIsOkay(doc->filePath()))
continue; continue;
if (!ProjectExplorer::SessionManager::projectForFile(doc->filePath())) { if (ProjectExplorer::SessionManager::projectForFile(doc->filePath()))
if (currentClient) continue;
currentClient->closeDocument(doc); if (client->project() && !ProjectFile::isHeader(doc->filePath()))
LanguageClientManager::openDocumentWithClient(doc, client); continue;
} if (currentClient)
currentClient->closeDocument(doc);
LanguageClientManager::openDocumentWithClient(doc, client);
} }
} }
@@ -733,7 +737,7 @@ void ClangModelManagerSupport::onEditorOpened(Core::IEditor *editor)
return; return;
if (sessionModeEnabled()) if (sessionModeEnabled())
project = nullptr; project = nullptr;
else if (!project) else if (!project && ProjectFile::isHeader(document->filePath()))
project = fallbackProject(); project = fallbackProject();
if (ClangdClient * const client = clientForProject(project)) if (ClangdClient * const client = clientForProject(project))
LanguageClientManager::openDocumentWithClient(textDocument, client); LanguageClientManager::openDocumentWithClient(textDocument, client);

View File

@@ -108,9 +108,8 @@ SettingsPageWidget::SettingsPageWidget()
using namespace Layouting; using namespace Layouting;
Row { Form {
Tr::tr("Arg&uments:"), Tr::tr("Arg&uments:"), diffArgsEdit
diffArgsEdit
}.attachTo(diffWidget, WithoutMargins); }.attachTo(diffWidget, WithoutMargins);
Column { Column {

View File

@@ -11,6 +11,7 @@
#include "externaltoolmanager.h" #include "externaltoolmanager.h"
#include "fancytabwidget.h" #include "fancytabwidget.h"
#include "generalsettings.h" #include "generalsettings.h"
#include "helpmanager.h"
#include "icore.h" #include "icore.h"
#include "idocumentfactory.h" #include "idocumentfactory.h"
#include "jsexpander.h" #include "jsexpander.h"
@@ -1510,8 +1511,17 @@ void MainWindow::changeLog()
return; return;
const FilePath file = versionedFiles.at(index).second; const FilePath file = versionedFiles.at(index).second;
QString contents = QString::fromUtf8(file.fileContents().value_or(QByteArray())); QString contents = QString::fromUtf8(file.fileContents().value_or(QByteArray()));
contents.replace(QRegularExpression("(QT(CREATOR)?BUG-[0-9]+)"), static const QRegularExpression bugexpr("(QT(CREATOR)?BUG-[0-9]+)");
"[\\1](https://bugreports.qt.io/browse/\\1)"); contents.replace(bugexpr, "[\\1](https://bugreports.qt.io/browse/\\1)");
static const QRegularExpression docexpr("https://doc[.]qt[.]io/qtcreator/([.a-zA-Z/_-]*)");
QList<QRegularExpressionMatch> matches;
for (const QRegularExpressionMatch &m : docexpr.globalMatch(contents))
matches.append(m);
Utils::reverseForeach(matches, [&contents](const QRegularExpressionMatch &match) {
const QString qthelpUrl = "qthelp://org.qt-project.qtcreator/doc/" + match.captured(1);
if (!HelpManager::fileData(qthelpUrl).isEmpty())
contents.replace(match.capturedStart(), match.capturedLength(), qthelpUrl);
});
textEdit->setMarkdown(contents); textEdit->setMarkdown(contents);
}; };
connect(versionCombo, &QComboBox::currentIndexChanged, textEdit, showLog); connect(versionCombo, &QComboBox::currentIndexChanged, textEdit, showLog);

View File

@@ -253,6 +253,12 @@ bool ClangdSettings::useClangd() const
void ClangdSettings::setUseClangd(bool use) { instance().m_data.useClangd = use; } void ClangdSettings::setUseClangd(bool use) { instance().m_data.useClangd = use; }
void ClangdSettings::setUseClangdAndSave(bool use)
{
setUseClangd(use);
instance().saveSettings();
}
bool ClangdSettings::hardwareFulfillsRequirements() bool ClangdSettings::hardwareFulfillsRequirements()
{ {
instance().m_data.haveCheckedHardwareReqirements = true; instance().m_data.haveCheckedHardwareReqirements = true;

View File

@@ -133,6 +133,7 @@ public:
static ClangdSettings &instance(); static ClangdSettings &instance();
bool useClangd() const; bool useClangd() const;
static void setUseClangd(bool use); static void setUseClangd(bool use);
static void setUseClangdAndSave(bool use);
static bool hardwareFulfillsRequirements(); static bool hardwareFulfillsRequirements();
static bool haveCheckedHardwareRequirements(); static bool haveCheckedHardwareRequirements();

View File

@@ -6,6 +6,7 @@
#include "cppeditorconstants.h" #include "cppeditorconstants.h"
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <utils/filepath.h>
#include <utils/mimeutils.h> #include <utils/mimeutils.h>
#include <QDebug> #include <QDebug>
@@ -129,6 +130,11 @@ bool ProjectFile::isHeader(ProjectFile::Kind kind)
} }
} }
bool ProjectFile::isHeader(const Utils::FilePath &fp)
{
return isHeader(classify(fp.toString()));
}
bool ProjectFile::isSource(ProjectFile::Kind kind) bool ProjectFile::isSource(ProjectFile::Kind kind)
{ {
switch (kind) { switch (kind) {

View File

@@ -7,6 +7,8 @@
#include <QString> #include <QString>
namespace Utils { class FilePath; }
namespace CppEditor { namespace CppEditor {
class CPPEDITOR_EXPORT ProjectFile class CPPEDITOR_EXPORT ProjectFile
@@ -39,6 +41,7 @@ public:
static bool isSource(Kind kind); static bool isSource(Kind kind);
static bool isHeader(Kind kind); static bool isHeader(Kind kind);
static bool isHeader(const Utils::FilePath &fp);
static bool isC(Kind kind); static bool isC(Kind kind);
static bool isCxx(Kind kind); static bool isCxx(Kind kind);
static bool isAmbiguousHeader(const QString &filePath); static bool isAmbiguousHeader(const QString &filePath);

View File

@@ -268,6 +268,7 @@ void ThreadsHandler::setCurrentThread(const Thread &thread)
m_currentThread = thread; m_currentThread = thread;
thread->update(); thread->update();
threadSwitcher()->setCurrentIndex(thread->index().row());
} }
void ThreadsHandler::notifyGroupCreated(const QString &groupId, const QString &pid) void ThreadsHandler::notifyGroupCreated(const QString &groupId, const QString &pid)

View File

@@ -480,7 +480,8 @@ JsonWizardFactory *JsonWizardFactory::createWizardFactory(const QVariantMap &dat
if (!factory->initialize(data, baseDir, errorMessage)) { if (!factory->initialize(data, baseDir, errorMessage)) {
delete factory; delete factory;
factory = nullptr; factory = nullptr;
Core::MessageManager::writeDisrupting(*errorMessage); if (verbose())
Core::MessageManager::writeDisrupting(*errorMessage);
} }
return factory; return factory;
} }
@@ -513,6 +514,9 @@ FilePaths &JsonWizardFactory::searchPaths()
Core::ICore::resourcePath(WIZARD_PATH)}; Core::ICore::resourcePath(WIZARD_PATH)};
for (const QString &environmentTemplateDirName : environmentTemplatesPaths()) for (const QString &environmentTemplateDirName : environmentTemplatesPaths())
m_searchPaths << FilePath::fromString(environmentTemplateDirName); m_searchPaths << FilePath::fromString(environmentTemplateDirName);
m_searchPaths << Utils::transform(
Core::ICore::settings()->value("Wizards/SearchPaths").toStringList(),
[](const QString &s) { return FilePath::fromUserInput(s); });
} }
return m_searchPaths; return m_searchPaths;

View File

@@ -4178,6 +4178,7 @@ void ProjectExplorerPluginPrivate::updateSessionMenu()
auto *ag = new QActionGroup(m_sessionMenu); auto *ag = new QActionGroup(m_sessionMenu);
connect(ag, &QActionGroup::triggered, this, &ProjectExplorerPluginPrivate::setSession); connect(ag, &QActionGroup::triggered, this, &ProjectExplorerPluginPrivate::setSession);
const QString activeSession = SessionManager::activeSession(); const QString activeSession = SessionManager::activeSession();
const bool isDefaultVirgin = SessionManager::isDefaultVirgin();
QStringList sessions = SessionManager::sessions(); QStringList sessions = SessionManager::sessions();
std::sort(std::next(sessions.begin()), sessions.end(), [](const QString &s1, const QString &s2) { std::sort(std::next(sessions.begin()), sessions.end(), [](const QString &s1, const QString &s2) {
@@ -4192,7 +4193,7 @@ void ProjectExplorerPluginPrivate::updateSessionMenu()
QAction *act = ag->addAction(actionText); QAction *act = ag->addAction(actionText);
act->setData(session); act->setData(session);
act->setCheckable(true); act->setCheckable(true);
if (session == activeSession) if (session == activeSession && !isDefaultVirgin)
act->setChecked(true); act->setChecked(true);
} }
m_sessionMenu->addActions(ag->actions()); m_sessionMenu->addActions(ag->actions());
@@ -4201,9 +4202,7 @@ void ProjectExplorerPluginPrivate::updateSessionMenu()
void ProjectExplorerPluginPrivate::setSession(QAction *action) void ProjectExplorerPluginPrivate::setSession(QAction *action)
{ {
QString session = action->data().toString(); SessionManager::loadSession(action->data().toString());
if (session != SessionManager::activeSession())
SessionManager::loadSession(session);
} }
void ProjectExplorerPlugin::setProjectExplorerSettings(const ProjectExplorerSettings &pes) void ProjectExplorerPlugin::setProjectExplorerSettings(const ProjectExplorerSettings &pes)

View File

@@ -478,10 +478,10 @@ function(get_and_add_as_subdirectory name repository git_tag build_dir source_di
) )
execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" "${build_dir}/${name}" execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" "${build_dir}/${name}"
WORKING_DIRECTORY "${build_dir}/${name}" WORKING_DIRECTORY "${build_dir}/${name}"
COMMAND_ERROR_IS_FATAL ANY ${QTC_COMMAND_ERROR_IS_FATAL}
) )
execute_process(COMMAND "${CMAKE_COMMAND}" --build "${build_dir}/${name}" execute_process(COMMAND "${CMAKE_COMMAND}" --build "${build_dir}/${name}"
COMMAND_ERROR_IS_FATAL ANY ${QTC_COMMAND_ERROR_IS_FATAL}
) )
add_subdirectory(${source_dir}/${name}/${source_subdir} ${name}) add_subdirectory(${source_dir}/${name}/${source_subdir} ${name})
endfunction() endfunction()

View File

@@ -280,9 +280,9 @@ protected:
virtual bool visit(Declaration *symbol) { virtual bool visit(Declaration *symbol) {
out << _id[symbol].constData() << " [label=\""; out << _id[symbol].constData() << " [label=\"";
out << "Declaration\\n"; out << "Declaration\\n";
out << qPrintable(o(symbol->name())); out << qPrintable(o.prettyName(symbol->name()));
out << ": "; out << ": ";
out << qPrintable(o(symbol->type())); out << qPrintable(o.prettyType(symbol->type()));
if (symbol->isDeprecated()) if (symbol->isDeprecated())
out << "\\n(deprecated)"; out << "\\n(deprecated)";
if (Function *funTy = symbol->type()->asFunctionType()) { if (Function *funTy = symbol->type()->asFunctionType()) {
@@ -308,7 +308,7 @@ protected:
virtual bool visit(BaseClass *symbol) { virtual bool visit(BaseClass *symbol) {
out << _id[symbol].constData() << " [label=\"BaseClass\\n"; out << _id[symbol].constData() << " [label=\"BaseClass\\n";
out << qPrintable(o(symbol->name())); out << qPrintable(o.prettyName(symbol->name()));
if (symbol->isDeprecated()) if (symbol->isDeprecated())
out << "\\n(deprecated)"; out << "\\n(deprecated)";
out << "\"];" << std::endl; out << "\"];" << std::endl;

View File

@@ -44,7 +44,7 @@ class MkVisitor: protected SymbolVisitor
bool isMiscNode(ClassOrNamespace *b) const bool isMiscNode(ClassOrNamespace *b) const
{ {
for (const ClassOrNamespace *u : b->usings()) { for (const ClassOrNamespace *u : b->usings()) {
if (oo(u->symbols().first()->name()) == QLatin1String("AST")) if (oo.prettyName(u->symbols().first()->name()) == QLatin1String("AST"))
return true; return true;
} }
@@ -58,7 +58,7 @@ class MkVisitor: protected SymbolVisitor
retType->clear(); retType->clear();
if (interfaces.contains(b) || isMiscNode(b)) { if (interfaces.contains(b) || isMiscNode(b)) {
QString className = oo(b->symbols().first()->name()); QString className = oo.prettyName(b->symbols().first()->name());
if (className.endsWith(QLatin1String("AST"))) { if (className.endsWith(QLatin1String("AST"))) {
className.chop(3); className.chop(3);
@@ -114,7 +114,7 @@ public:
Q_ASSERT(klass != 0); Q_ASSERT(klass != 0);
QString className = oo(klass->name()); QString className = oo.prettyName(klass->name());
if (className == QLatin1String("AST")) if (className == QLatin1String("AST"))
continue; continue;
@@ -162,7 +162,7 @@ public:
Q_ASSERT(klass != 0); Q_ASSERT(klass != 0);
QString retTy ; QString retTy ;
QString className = oo(klass->name()); QString className = oo.prettyName(klass->name());
std::cout << " void " << qPrintable(getAcceptFunctionName(b, &retTy)) << "(" << qPrintable(className) << " *ast);" << std::endl; std::cout << " void " << qPrintable(getAcceptFunctionName(b, &retTy)) << "(" << qPrintable(className) << " *ast);" << std::endl;
} }
} }
@@ -170,7 +170,8 @@ public:
std::cout << std::endl; std::cout << std::endl;
for (ClassOrNamespace *iface : std::as_const(interfaces)) { for (ClassOrNamespace *iface : std::as_const(interfaces)) {
std::cout << " // " << qPrintable(oo(iface->symbols().first()->name())) << std::endl; std::cout << " // " << qPrintable(oo.prettyName(iface->symbols().first()->name()))
<< std::endl;
const QList<ClassOrNamespace *> values = implements.value(iface); const QList<ClassOrNamespace *> values = implements.value(iface);
for (ClassOrNamespace *b : values) { for (ClassOrNamespace *b : values) {
Class *klass = 0; Class *klass = 0;
@@ -180,7 +181,7 @@ public:
Q_ASSERT(klass != 0); Q_ASSERT(klass != 0);
QString className = oo(klass->name()); QString className = oo.prettyName(klass->name());
std::cout << " virtual bool visit(" << qPrintable(className) << " *ast);" << std::endl; std::cout << " virtual bool visit(" << qPrintable(className) << " *ast);" << std::endl;
} }
std::cout << std::endl; std::cout << std::endl;
@@ -197,7 +198,7 @@ public:
Q_ASSERT(klass != 0); Q_ASSERT(klass != 0);
QString className = oo(klass->name()); QString className = oo.prettyName(klass->name());
if (className == QLatin1String("AST")) if (className == QLatin1String("AST"))
continue; continue;
@@ -230,7 +231,7 @@ public:
Q_ASSERT(klass != 0); Q_ASSERT(klass != 0);
QString className = oo(klass->name()); QString className = oo.prettyName(klass->name());
if (className == QLatin1String("AST")) if (className == QLatin1String("AST"))
continue; continue;
@@ -256,7 +257,7 @@ public:
} }
for (ClassOrNamespace *iface : std::as_const(interfaces)) { for (ClassOrNamespace *iface : std::as_const(interfaces)) {
std::cout << "// " << qPrintable(oo(iface->symbols().first()->name())) << std::endl; std::cout << "// " << qPrintable(oo.prettyName(iface->symbols().first()->name())) << std::endl;
const QList<ClassOrNamespace *> values = implements.value(iface); const QList<ClassOrNamespace *> values = implements.value(iface);
for (ClassOrNamespace *b : values) { for (ClassOrNamespace *b : values) {
Class *klass = 0; Class *klass = 0;
@@ -266,7 +267,7 @@ public:
Q_ASSERT(klass != 0); Q_ASSERT(klass != 0);
QString className = oo(klass->name()); QString className = oo.prettyName(klass->name());
std::cout << "bool Semantic::visit(" << qPrintable(className) << " *ast)" << std::endl std::cout << "bool Semantic::visit(" << qPrintable(className) << " *ast)" << std::endl
<< "{" << std::endl; << "{" << std::endl;
@@ -293,12 +294,12 @@ public:
Declaration *decl = klass->memberAt(i)->asDeclaration(); Declaration *decl = klass->memberAt(i)->asDeclaration();
if (! decl) if (! decl)
continue; continue;
if (decl->type()->isFunctionType()) if (decl->type()->asFunctionType())
continue; continue;
const QString declName = oo(decl->name()); const QString declName = oo.prettyName(decl->name());
if (PointerType *ptrTy = decl->type()->asPointerType()) { if (PointerType *ptrTy = decl->type()->asPointerType()) {
if (NamedType *namedTy = ptrTy->elementType()->asNamedType()) { if (NamedType *namedTy = ptrTy->elementType()->asNamedType()) {
const QString eltTyName = oo(namedTy->name()); const QString eltTyName = oo.prettyName(namedTy->name());
if (eltTyName.endsWith(QLatin1String("ListAST"))) { if (eltTyName.endsWith(QLatin1String("ListAST"))) {
QString name = eltTyName; QString name = eltTyName;
name.chop(7); name.chop(7);
@@ -327,7 +328,7 @@ public:
} }
if (ClassOrNamespace *ty = context.lookupType(namedTy->name(), klass)) { if (ClassOrNamespace *ty = context.lookupType(namedTy->name(), klass)) {
QString className = oo(ty->symbols().first()->name()); QString className = oo.prettyName(ty->symbols().first()->name());
QString baseClassName = className; QString baseClassName = className;
if (baseClassName.endsWith(QLatin1String("AST"))) { if (baseClassName.endsWith(QLatin1String("AST"))) {
baseClassName.chop(3); baseClassName.chop(3);
@@ -370,7 +371,7 @@ protected:
} }
virtual bool visit(Class *klass) { virtual bool visit(Class *klass) {
const QString className = oo(klass->name()); const QString className = oo.prettyName(klass->name());
if (! className.endsWith(QLatin1String("AST"))) if (! className.endsWith(QLatin1String("AST")))
return false; return false;

View File

@@ -171,7 +171,7 @@ protected:
Class *klass = ast->symbol; Class *klass = ast->symbol;
Q_ASSERT(klass != nullptr); Q_ASSERT(klass != nullptr);
const QString className = oo(klass->name()); const QString className = oo.prettyName(klass->name());
if (className.endsWith(QLatin1String("AST"))) { if (className.endsWith(QLatin1String("AST"))) {
if (className == QLatin1String("AST")) if (className == QLatin1String("AST"))
@@ -271,7 +271,7 @@ protected:
continue; continue;
const QByteArray memberName = QByteArray::fromRawData(id->chars(), id->size()); const QByteArray memberName = QByteArray::fromRawData(id->chars(), id->size());
if (member->type()->isIntegerType() && memberName.endsWith("_token")) { if (member->type()->asIntegerType() && memberName.endsWith("_token")) {
// nothing to do. The member is a token. // nothing to do. The member is a token.
} else if (PointerType *ptrTy = member->type()->asPointerType()) { } else if (PointerType *ptrTy = member->type()->asPointerType()) {
@@ -394,7 +394,7 @@ protected:
void visitMembers(Class *klass) void visitMembers(Class *klass)
{ {
Overview oo; Overview oo;
const QString className = oo(klass->name()); const QString className = oo.prettyName(klass->name());
*out << " if (" << className << " *_other = pattern->as" *out << " if (" << className << " *_other = pattern->as"
<< className.left(className.length() - 3) << "())" << Qt::endl; << className.left(className.length() - 3) << "())" << Qt::endl;
@@ -518,7 +518,7 @@ protected:
continue; continue;
const QByteArray memberName = QByteArray::fromRawData(id->chars(), id->size()); const QByteArray memberName = QByteArray::fromRawData(id->chars(), id->size());
if (member->type()->isIntegerType() && memberName.endsWith("_token")) { if (member->type()->asIntegerType() && memberName.endsWith("_token")) {
*out << " pattern->" << memberName << " = node->" << memberName << ";" << Qt::endl *out << " pattern->" << memberName << " = node->" << memberName << ";" << Qt::endl
<< Qt::endl; << Qt::endl;
@@ -657,7 +657,7 @@ protected:
continue; continue;
const QByteArray memberName = QByteArray::fromRawData(id->chars(), id->size()); const QByteArray memberName = QByteArray::fromRawData(id->chars(), id->size());
if (member->type()->isIntegerType() && memberName.endsWith("_token")) { if (member->type()->asIntegerType() && memberName.endsWith("_token")) {
*out << " ast->" << memberName << " = " << memberName << ";" << Qt::endl; *out << " ast->" << memberName << " = " << memberName << ";" << Qt::endl;
} else if (PointerType *ptrTy = member->type()->asPointerType()) { } else if (PointerType *ptrTy = member->type()->asPointerType()) {
if (NamedType *namedTy = ptrTy->elementType()->asNamedType()) { if (NamedType *namedTy = ptrTy->elementType()->asNamedType()) {
@@ -789,7 +789,7 @@ protected:
continue; continue;
const QByteArray memberName = QByteArray::fromRawData(id->chars(), id->size()); const QByteArray memberName = QByteArray::fromRawData(id->chars(), id->size());
if (member->type()->isIntegerType() && memberName.endsWith("_token")) { if (member->type()->asIntegerType() && memberName.endsWith("_token")) {
out << " if (ast->" << memberName << ")" << Qt::endl; out << " if (ast->" << memberName << ")" << Qt::endl;
out << " terminal(ast->" << memberName << ", ast);" << Qt::endl; out << " terminal(ast->" << memberName << ", ast);" << Qt::endl;
} else if (PointerType *ptrTy = member->type()->asPointerType()) { } else if (PointerType *ptrTy = member->type()->asPointerType()) {
@@ -881,7 +881,7 @@ protected:
virtual bool visit(FunctionDefinitionAST *ast) virtual bool visit(FunctionDefinitionAST *ast)
{ {
Function *fun = ast->symbol; Function *fun = ast->symbol;
const QString functionName = oo(fun->name()); const QString functionName = oo.prettyName(fun->name());
if (functionName.length() > 3 && functionName.startsWith(QLatin1String("as")) if (functionName.length() > 3 && functionName.startsWith(QLatin1String("as"))
&& functionName.at(2).isUpper()) { && functionName.at(2).isUpper()) {
@@ -909,18 +909,18 @@ static QStringList collectFieldNames(ClassSpecifierAST *classAST, bool onlyToken
for (int i = 0; i < clazz->memberCount(); ++i) { for (int i = 0; i < clazz->memberCount(); ++i) {
Symbol *s = clazz->memberAt(i); Symbol *s = clazz->memberAt(i);
if (Declaration *decl = s->asDeclaration()) { if (Declaration *decl = s->asDeclaration()) {
const QString declName = oo(decl->name()); const QString declName = oo.prettyName(decl->name());
const FullySpecifiedType ty = decl->type(); const FullySpecifiedType ty = decl->type();
if (const PointerType *ptrTy = ty->asPointerType()) { if (const PointerType *ptrTy = ty->asPointerType()) {
if (onlyTokensAndASTNodes) { if (onlyTokensAndASTNodes) {
if (const NamedType *namedTy = ptrTy->elementType()->asNamedType()) { if (const NamedType *namedTy = ptrTy->elementType()->asNamedType()) {
if (oo(namedTy->name()).endsWith(QLatin1String("AST"))) if (oo.prettyName(namedTy->name()).endsWith(QLatin1String("AST")))
fields.append(declName); fields.append(declName);
} }
} else { } else {
fields.append(declName); fields.append(declName);
} }
} else if (ty->isIntegerType()) { } else if (ty->asIntegerType()) {
fields.append(declName); fields.append(declName);
} }
} }
@@ -1021,7 +1021,7 @@ void generateAST_cpp(const Snapshot &snapshot, const QDir &cplusplusDir)
// find all classes with method declarations for firstToken/lastToken // find all classes with method declarations for firstToken/lastToken
for (ClassSpecifierAST *classAST : std::as_const(astNodes.deriveds)) { for (ClassSpecifierAST *classAST : std::as_const(astNodes.deriveds)) {
const QString className = oo(classAST->symbol->name()); const QString className = oo.prettyName(classAST->symbol->name());
if (className.isEmpty()) if (className.isEmpty())
continue; continue;
@@ -1032,7 +1032,7 @@ void generateAST_cpp(const Snapshot &snapshot, const QDir &cplusplusDir)
std::cerr << "Found simple declaration with multiple symbols in " << className.toLatin1().data() << std::endl; std::cerr << "Found simple declaration with multiple symbols in " << className.toLatin1().data() << std::endl;
Symbol *s = decl->symbols->value; Symbol *s = decl->symbols->value;
const QString funName = oo(s->name()); const QString funName = oo.prettyName(s->name());
if (funName == QLatin1String("firstToken")) { if (funName == QLatin1String("firstToken")) {
// found it: // found it:
classesNeedingFirstToken.insert(className, classAST); classesNeedingFirstToken.insert(className, classAST);
@@ -1052,8 +1052,8 @@ void generateAST_cpp(const Snapshot &snapshot, const QDir &cplusplusDir)
if (FunctionDefinitionAST *funDef = iter->value->asFunctionDefinition()) { if (FunctionDefinitionAST *funDef = iter->value->asFunctionDefinition()) {
if (const Name *name = funDef->symbol->name()) { if (const Name *name = funDef->symbol->name()) {
if (const QualifiedNameId *qName = name->asQualifiedNameId()) { if (const QualifiedNameId *qName = name->asQualifiedNameId()) {
const QString className = oo(qName->base()); const QString className = oo.prettyName(qName->base());
const QString methodName = oo(qName->name()); const QString methodName = oo.prettyName(qName->name());
QTextCursor cursor(&cpp_document); QTextCursor cursor(&cpp_document);
@@ -1121,7 +1121,7 @@ void generateAST_cpp(const Snapshot &snapshot, const QDir &cplusplusDir)
Overview oo; Overview oo;
const QString className = oo(info.classAST->symbol->name()); const QString className = oo.prettyName(info.classAST->symbol->name());
QString method; QString method;
QTextStream os(&method); QTextStream os(&method);
@@ -1320,7 +1320,7 @@ QStringList generateAST_H(const Snapshot &snapshot, const QDir &cplusplusDir, co
QStringList castMethods; QStringList castMethods;
for (ClassSpecifierAST *classAST : std::as_const(astNodes.deriveds)) { for (ClassSpecifierAST *classAST : std::as_const(astNodes.deriveds)) {
cursors[classAST] = removeCastMethods(classAST); cursors[classAST] = removeCastMethods(classAST);
const QString className = oo(classAST->symbol->name()); const QString className = oo.prettyName(classAST->symbol->name());
const QString methodName = QLatin1String("as") + className.mid(0, className.length() - 3); const QString methodName = QLatin1String("as") + className.mid(0, className.length() - 3);
replacementCastMethods[classAST] replacementCastMethods[classAST]
= QString::fromLatin1(" virtual %1 *%2() { return this; }\n") = QString::fromLatin1(" virtual %1 *%2() { return this; }\n")
@@ -1401,7 +1401,7 @@ protected:
if (ElaboratedTypeSpecifierAST *e = ast->decl_specifier_list->value->asElaboratedTypeSpecifier()) { if (ElaboratedTypeSpecifierAST *e = ast->decl_specifier_list->value->asElaboratedTypeSpecifier()) {
if (tokenKind(e->classkey_token) == T_CLASS && !ast->declarator_list) { if (tokenKind(e->classkey_token) == T_CLASS && !ast->declarator_list) {
QString className = oo(e->name->name); QString className = oo.prettyName(e->name->name);
if (className.length() > 3 && className.endsWith(QLatin1String("AST"))) { if (className.length() > 3 && className.endsWith(QLatin1String("AST"))) {
QTextCursor tc = createCursor(translationUnit(), ast, document); QTextCursor tc = createCursor(translationUnit(), ast, document);
@@ -1499,7 +1499,7 @@ void generateASTPatternBuilder_h(const QDir &cplusplusDir)
if (! match0Method) if (! match0Method)
continue; continue;
const QString className = oo(klass->name()); const QString className = oo.prettyName(klass->name());
if (! className.endsWith(QLatin1String("AST"))) if (! className.endsWith(QLatin1String("AST")))
continue; continue;
@@ -1521,14 +1521,14 @@ void generateASTPatternBuilder_h(const QDir &cplusplusDir)
if (! ptrTy) if (! ptrTy)
continue; continue;
const QString tyName = oo(ptrTy->elementType()); const QString tyName = oo.prettyType(ptrTy->elementType());
if (tyName.endsWith(QLatin1String("ListAST"))) if (tyName.endsWith(QLatin1String("ListAST")))
classesSet.insert(tyName); classesSet.insert(tyName);
if (tyName.endsWith(QLatin1String("AST"))) { if (tyName.endsWith(QLatin1String("AST"))) {
if (! first) if (! first)
out << ", "; out << ", ";
const QString memberName = oo(member->name()); const QString memberName = oo.prettyName(member->name());
out << tyName << " *" << memberName << " = nullptr"; out << tyName << " *" << memberName << " = nullptr";
args.append(qMakePair(tyName, memberName)); args.append(qMakePair(tyName, memberName));

View File

@@ -43,7 +43,7 @@ function(download_jdk)
message("Downloading: ${jdk_url}") message("Downloading: ${jdk_url}")
file(DOWNLOAD ${jdk_url} ./jdk.zip SHOW_PROGRESS) file(DOWNLOAD ${jdk_url} ./jdk.zip SHOW_PROGRESS)
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf ./jdk.zip) execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf ./jdk.zip COMMAND_ERROR_IS_FATAL ANY)
endfunction() endfunction()
function(download_android_commandline) function(download_android_commandline)
@@ -61,7 +61,7 @@ function(download_android_commandline)
file(DOWNLOAD ${android_cmdtools_url} ./android_commandline_tools.zip SHOW_PROGRESS) file(DOWNLOAD ${android_cmdtools_url} ./android_commandline_tools.zip SHOW_PROGRESS)
file(MAKE_DIRECTORY android-sdk) file(MAKE_DIRECTORY android-sdk)
file(MAKE_DIRECTORY android-cmdlinetools) file(MAKE_DIRECTORY android-cmdlinetools)
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf ../android_commandline_tools.zip WORKING_DIRECTORY android-cmdlinetools) execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf ../android_commandline_tools.zip WORKING_DIRECTORY android-cmdlinetools COMMAND_ERROR_IS_FATAL ANY)
endfunction() endfunction()
function(setup_android) function(setup_android)
@@ -78,9 +78,11 @@ function(setup_android)
file(WRITE ${CMAKE_CURRENT_LIST_DIR}/accept_license.txt "y\ny\ny\ny\ny\ny\ny\ny\ny\ny\n") file(WRITE ${CMAKE_CURRENT_LIST_DIR}/accept_license.txt "y\ny\ny\ny\ny\ny\ny\ny\ny\ny\n")
execute_process( execute_process(
INPUT_FILE ${CMAKE_CURRENT_LIST_DIR}/accept_license.txt INPUT_FILE ${CMAKE_CURRENT_LIST_DIR}/accept_license.txt
COMMAND ${sdkmanager} --licenses --sdk_root=${CMAKE_CURRENT_LIST_DIR}/android-sdk) COMMAND ${sdkmanager} --licenses --sdk_root=${CMAKE_CURRENT_LIST_DIR}/android-sdk
COMMAND_ERROR_IS_FATAL ANY)
execute_process( execute_process(
COMMAND ${sdkmanager} --update --sdk_root=${CMAKE_CURRENT_LIST_DIR}/android-sdk) COMMAND ${sdkmanager} --update --sdk_root=${CMAKE_CURRENT_LIST_DIR}/android-sdk
COMMAND_ERROR_IS_FATAL ANY)
execute_process( execute_process(
COMMAND ${sdkmanager} COMMAND ${sdkmanager}
"platforms;${ANDROID_PLATFORM}" "platforms;${ANDROID_PLATFORM}"
@@ -90,13 +92,15 @@ function(setup_android)
"cmdline-tools;latest" "cmdline-tools;latest"
"tools" "tools"
"emulator" "emulator"
"ndk-bundle" --sdk_root=${CMAKE_CURRENT_LIST_DIR}/android-sdk) "ndk-bundle" --sdk_root=${CMAKE_CURRENT_LIST_DIR}/android-sdk
COMMAND_ERROR_IS_FATAL ANY)
if (WIN32) if (WIN32)
execute_process( execute_process(
COMMAND ${sdkmanager} COMMAND ${sdkmanager}
"extras;google;usb_driver" "extras;google;usb_driver"
--sdk_root=${CMAKE_CURRENT_LIST_DIR}/android-sdk) --sdk_root=${CMAKE_CURRENT_LIST_DIR}/android-sdk
COMMAND_ERROR_IS_FATAL ANY)
endif() endif()
endfunction() endfunction()