Merge remote-tracking branch 'origin/9.0'
Conflicts: cmake/QtCreatorIDEBranding.cmake qbs/modules/qtc/qtc.qbs qtcreator_ide_branding.pri src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp Change-Id: I154a9ababa9e166cb06e98652d481fe6234f6399
@@ -96,6 +96,13 @@ function(_create_ts_custom_target name)
|
|||||||
COMMENT "Generate .ts files"
|
COMMENT "Generate .ts files"
|
||||||
DEPENDS ${_sources}
|
DEPENDS ${_sources}
|
||||||
VERBATIM)
|
VERBATIM)
|
||||||
|
|
||||||
|
add_custom_target("${_arg_TS_TARGET_PREFIX}${name}_cleaned"
|
||||||
|
COMMAND Qt5::lupdate -locations relative -no-ui-lines -no-sort -no-obsolete -locations none "@${ts_file_list}" -ts ${ts_files}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
COMMENT "Generate .ts files, remove obsolete and vanished translations, and do not add files and line number"
|
||||||
|
DEPENDS ${_sources}
|
||||||
|
VERBATIM)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(add_translation_targets file_prefix)
|
function(add_translation_targets file_prefix)
|
||||||
|
|||||||
10
dist/changelog/changes-9.0.0.md
vendored
@@ -34,6 +34,7 @@ Editing
|
|||||||
* Added option for `Tint whole margin area`
|
* Added option for `Tint whole margin area`
|
||||||
* Added option for line spacing (QTCREATORBUG-13727)
|
* Added option for line spacing (QTCREATORBUG-13727)
|
||||||
* Added `Create Cursors at Selected Line Ends`
|
* Added `Create Cursors at Selected Line Ends`
|
||||||
|
* Added support for character encoding in binary/memory editor
|
||||||
* Improved UI for multiple markers on the same line (QTCREATORBUG-27415)
|
* Improved UI for multiple markers on the same line (QTCREATORBUG-27415)
|
||||||
* Fixed performance issue with large selections
|
* Fixed performance issue with large selections
|
||||||
* Fixed saving files with non-breaking spaces (QTCREATORBUG-17875)
|
* Fixed saving files with non-breaking spaces (QTCREATORBUG-17875)
|
||||||
@@ -76,10 +77,6 @@ Editing
|
|||||||
* Fixed that server was not restarted after 5 times, even if a long time passed
|
* Fixed that server was not restarted after 5 times, even if a long time passed
|
||||||
after the last time
|
after the last time
|
||||||
|
|
||||||
### Binaries
|
|
||||||
|
|
||||||
* Added support for character encoding
|
|
||||||
|
|
||||||
### Image Viewer
|
### Image Viewer
|
||||||
|
|
||||||
* Made `Fit to Screen` sticky and added option for the default
|
* Made `Fit to Screen` sticky and added option for the default
|
||||||
@@ -88,6 +85,7 @@ Editing
|
|||||||
### Diff Viewer
|
### Diff Viewer
|
||||||
|
|
||||||
* Fixed that calculating differences blocked Qt Creator
|
* Fixed that calculating differences blocked Qt Creator
|
||||||
|
* Fixed that description widget height was not persistent (QTCREATORBUG-24286)
|
||||||
|
|
||||||
Projects
|
Projects
|
||||||
--------
|
--------
|
||||||
@@ -105,6 +103,7 @@ Projects
|
|||||||
toolchain files (QTCREATORBUG-24555)
|
toolchain files (QTCREATORBUG-24555)
|
||||||
* 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)
|
||||||
* Fixed that `PATH` environment variable was not completely set up during first
|
* Fixed that `PATH` environment variable was not completely set up during first
|
||||||
CMake run
|
CMake run
|
||||||
* Fixed issues with importing builds using Visual C++ generator
|
* Fixed issues with importing builds using Visual C++ generator
|
||||||
@@ -132,6 +131,9 @@ Version Control Systems
|
|||||||
### Git
|
### Git
|
||||||
|
|
||||||
* Added support for user-configured comment character (QTCREATORBUG-28042)
|
* Added support for user-configured comment character (QTCREATORBUG-28042)
|
||||||
|
* Improved matching of commit hashes (QTCREATORBUG-24768, QTCREATORBUG-28268)
|
||||||
|
* Fixed adding or deleting files in nested directories (QTCREATORBUG-27644, QTCREATORBUG-27405)
|
||||||
|
* Fixed that text encoding in project settings was not respected on diff
|
||||||
|
|
||||||
Test Integration
|
Test Integration
|
||||||
----------------
|
----------------
|
||||||
|
|||||||
BIN
doc/qtcreator/images/qtcreator-cmake-presets-configure.webp
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
BIN
doc/qtcreator/images/qtcreator-cmake-presets-environment.webp
Normal file
|
After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 31 KiB |
@@ -4,11 +4,7 @@
|
|||||||
/*!
|
/*!
|
||||||
\page creator-developing-android.html
|
\page creator-developing-android.html
|
||||||
\previouspage creator-connecting-mobile.html
|
\previouspage creator-connecting-mobile.html
|
||||||
\if defined(qtdesignstudio)
|
|
||||||
\nextpage creator-developing-generic-linux.html
|
|
||||||
\else
|
|
||||||
\nextpage creator-developing-baremetal.html
|
\nextpage creator-developing-baremetal.html
|
||||||
\endif
|
|
||||||
|
|
||||||
\title Connecting Android Devices
|
\title Connecting Android Devices
|
||||||
|
|
||||||
|
|||||||
@@ -34,10 +34,8 @@
|
|||||||
packages, select \uicontrol Projects > \uicontrol Build >
|
packages, select \uicontrol Projects > \uicontrol Build >
|
||||||
\uicontrol {Build Android APK} > \uicontrol Details.
|
\uicontrol {Build Android APK} > \uicontrol Details.
|
||||||
|
|
||||||
\if defined(qtcreator)
|
|
||||||
For more information about options that you have for running applications,
|
For more information about options that you have for running applications,
|
||||||
see \l {Specifying Run Settings for Android Devices}.
|
see \l {Specifying Run Settings for Android Devices}.
|
||||||
\endif
|
|
||||||
|
|
||||||
\section1 Packaging Applications
|
\section1 Packaging Applications
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
\QC creates an initial configuration for you based on the kit
|
\QC creates an initial configuration for you based on the kit
|
||||||
settings and displays it in \uicontrol {Initial Configuration} in
|
settings and displays it in \uicontrol {Initial Configuration} in
|
||||||
the \l{Specifying Build Settings}{Build Settings} of the project.
|
the \l{Specifying Build Settings}{Build Settings} of the project.
|
||||||
|
Alternatively, you can use CMake presets to configure CMake.
|
||||||
|
|
||||||
The \uicontrol Configuration field displays the effective CMake call that
|
The \uicontrol Configuration field displays the effective CMake call that
|
||||||
is constructed by using the values of the \uicontrol {Build directory} and
|
is constructed by using the values of the \uicontrol {Build directory} and
|
||||||
@@ -40,7 +41,7 @@
|
|||||||
variables, see \l{CMake Variable Reference}.
|
variables, see \l{CMake Variable Reference}.
|
||||||
|
|
||||||
You can specify additional CMake options, such as \c {--find-debug},
|
You can specify additional CMake options, such as \c {--find-debug},
|
||||||
\c {--preset}, \c {--trace-expand}, or \c {--warn-uninitialized}, in
|
\c {--trace-expand}, or \c {--warn-uninitialized}, in
|
||||||
\uicontrol {Additional CMake options}. For more information about
|
\uicontrol {Additional CMake options}. For more information about
|
||||||
the available options, click the link in the field name or see
|
the available options, click the link in the field name or see
|
||||||
\l{CMake: cmake(1)}.
|
\l{CMake: cmake(1)}.
|
||||||
@@ -60,9 +61,173 @@
|
|||||||
|
|
||||||
Create the presets files in the format described in
|
Create the presets files in the format described in
|
||||||
\l{https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html}
|
\l{https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html}
|
||||||
{cmake-presets(7)} and store the in project's root directory.
|
{cmake-presets(7)} and store them in project's root directory.
|
||||||
|
|
||||||
To use the preset files, specify the \c {--preset} option for your project.
|
\QC supports presets up to version 3 (introduced in CMake 3.21), but version
|
||||||
|
checking is not enforced. All the fields from version 3 are read and used if
|
||||||
|
present. Test presets are not supported.
|
||||||
|
|
||||||
|
You can import the presets the first time you \l {Opening Projects}
|
||||||
|
{open a project}, when no \c CMakeLists.txt.user file exists or you have
|
||||||
|
disabled all kits in the project. To update changes to the
|
||||||
|
\c CMakePresets.json file, delete the \c CMakeLists.txt.user file.
|
||||||
|
|
||||||
|
\image qtcreator-cmake-presets-configure.webp "Opening a project that contains Cmake presets"
|
||||||
|
|
||||||
|
You can view the presets in the \uicontrol {Initial Configuration} field and
|
||||||
|
in the environment configuration field below it.
|
||||||
|
|
||||||
|
\image qtcreator-cmake-presets-environment.webp "CMake environment configuration"
|
||||||
|
|
||||||
|
\section2 Configure Presets
|
||||||
|
|
||||||
|
The following configure presets instruct CMake to use the default generator
|
||||||
|
on the platform and specify the build directory for all build types.
|
||||||
|
\c NOT_COMMON_VALUE is displayed in \uicontrol {Initial Parameters}
|
||||||
|
and \c AN_ENVIRONMENT_FLAG in the environment configuration field.
|
||||||
|
|
||||||
|
\badcode
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"configurePresets": [
|
||||||
|
{
|
||||||
|
"name": "preset",
|
||||||
|
"displayName": "preset",
|
||||||
|
"binaryDir": "${sourceDir}/build/preset",
|
||||||
|
"cacheVariables": {
|
||||||
|
"NOT_COMMON_VALUE": "NOT_COMMON_VALUE"
|
||||||
|
},
|
||||||
|
"environment": {
|
||||||
|
"AN_ENVIRONMENT_FLAG": "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
\section2 MinGW Example
|
||||||
|
|
||||||
|
The following example configures a Qt project with:
|
||||||
|
|
||||||
|
\list
|
||||||
|
\li MinGW compiler
|
||||||
|
\li build directory – \c <sourceDir>/build-release
|
||||||
|
\li build type – \c CMAKE_BUILD_TYPE as \c Release
|
||||||
|
\li generator – MinGW Makefiles
|
||||||
|
\li path to a CMake executable
|
||||||
|
\li path to the Qt installation via \c CMAKE_PREFIX_PATH
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
\badcode
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"configurePresets": [
|
||||||
|
{
|
||||||
|
"name": "mingw",
|
||||||
|
"displayName": "MinGW 11.2.0",
|
||||||
|
"generator": "MinGW Makefiles",
|
||||||
|
"binaryDir": "${sourceDir}/build-release",
|
||||||
|
"cmakeExecutable": "C:/Qt/Tools/CMake_64/bin/cmake.exe",
|
||||||
|
"cacheVariables": {
|
||||||
|
"CMAKE_BUILD_TYPE": "Release",
|
||||||
|
"CMAKE_PREFIX_PATH": "C:/Qt/6.4.0/mingw_64"
|
||||||
|
},
|
||||||
|
"environment": {
|
||||||
|
"PATH": "C:/Qt/Tools/mingw1120_64/bin;$penv{PATH}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
To speed up the process on Windows, specify the \c CMAKE_C_COMPILER and
|
||||||
|
\c CMAKE_CXX_COMPILER in the \c cacheVariables section.
|
||||||
|
|
||||||
|
\section2 Ninja Generator Example
|
||||||
|
|
||||||
|
The following configure and build presets set Ninja Multi-Config as the
|
||||||
|
generator, add \c Debug and \c Release build steps, and specify the path
|
||||||
|
to \c ninja.exe as a value of the \c CMAKE_MAKE_PROGRAM variable:
|
||||||
|
|
||||||
|
\badcode
|
||||||
|
{
|
||||||
|
"version": 2,
|
||||||
|
"configurePresets": [
|
||||||
|
{
|
||||||
|
"name": "ninja-nmc",
|
||||||
|
"displayName": "Ninja Multi-Config MinGW",
|
||||||
|
"generator": "Ninja Multi-Config",
|
||||||
|
"binaryDir": "${sourceDir}/build",
|
||||||
|
"cacheVariables": {
|
||||||
|
"CMAKE_BUILD_TYPE": "Debug;Release",
|
||||||
|
"CMAKE_PREFIX_PATH": "C:/Qt/6.4.0/mingw_64"
|
||||||
|
"CMAKE_MAKE_PROGRAM": "C:/Qt/Tools/Ninja/ninja.exe"
|
||||||
|
},
|
||||||
|
"environment": {
|
||||||
|
"PATH": "c:/Qt/Tools/mingw1120_64/bin;$penv{PATH}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"buildPresets": [
|
||||||
|
{
|
||||||
|
"name": "release",
|
||||||
|
"displayName": "Ninja Release",
|
||||||
|
"configurePreset": "ninja-nmc",
|
||||||
|
"configuration": "Release"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "debug",
|
||||||
|
"displayName": "Ninja Debug",
|
||||||
|
"configurePreset": "ninja-nmc",
|
||||||
|
"configuration": "Debug"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
This example assumes that the CMake executable path is set in
|
||||||
|
\uicontrol Edit > \uicontrol Preferences > \uicontrol CMake >
|
||||||
|
\uicontrol Tools.
|
||||||
|
|
||||||
|
\section2 Using Conditions
|
||||||
|
|
||||||
|
The following configure presets are used if they match \c condition. That is,
|
||||||
|
if the \c hostSystemName equals \c Linux, the \c linux presets are used and
|
||||||
|
if it equals \c Windows, the \c windows presets are used.
|
||||||
|
|
||||||
|
\badcode
|
||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"configurePresets": [
|
||||||
|
{
|
||||||
|
"name": "linux",
|
||||||
|
"displayName": "Linux GCC",
|
||||||
|
"binaryDir": "${sourceDir}/build",
|
||||||
|
"cacheVariables": {
|
||||||
|
"CMAKE_PREFIX_PATH": "$env{HOME}/Qt/6.4.0/gcc_64"
|
||||||
|
},
|
||||||
|
"condition": {
|
||||||
|
"type": "equals",
|
||||||
|
"lhs": "${hostSystemName}",
|
||||||
|
"rhs": "Linux"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "windows",
|
||||||
|
"displayName": "Windows MSVC",
|
||||||
|
"binaryDir": "${sourceDir}/build",
|
||||||
|
"cacheVariables": {
|
||||||
|
"CMAKE_PREFIX_PATH": "$env{SYSTEMDRIVE}/Qt/6.4.0/msvc2019_64"
|
||||||
|
},
|
||||||
|
"condition": {
|
||||||
|
"type": "equals",
|
||||||
|
"lhs": "${hostSystemName}",
|
||||||
|
"rhs": "Windows"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
\endcode
|
||||||
|
|
||||||
\section1 Multi-Config Support
|
\section1 Multi-Config Support
|
||||||
|
|
||||||
|
|||||||
@@ -45,6 +45,14 @@
|
|||||||
\uicontrol {Clear CMake Configuration}, and then select \uicontrol Build
|
\uicontrol {Clear CMake Configuration}, and then select \uicontrol Build
|
||||||
> \uicontrol {Run CMake} to reconfigure the project.
|
> \uicontrol {Run CMake} to reconfigure the project.
|
||||||
|
|
||||||
|
The \uicontrol Projects view shows the names of the subfolders where the
|
||||||
|
source files are located. To hide the subfolder names and arrange the files
|
||||||
|
only according to their source group, select \uicontrol Edit >
|
||||||
|
\uicontrol Preferences > \uicontrol CMake > \uicontrol General, and then
|
||||||
|
deselect the \uicontrol {Show subfolders inside source group folders} check
|
||||||
|
box. The change takes effect after you select \uicontrol Build >
|
||||||
|
\uicontrol {Run CMake}.
|
||||||
|
|
||||||
\section1 Adding CMake Tools
|
\section1 Adding CMake Tools
|
||||||
|
|
||||||
\QC requires CMake's \l{https://cmake.org/cmake/help/latest/manual/cmake-file-api.7.html}
|
\QC requires CMake's \l{https://cmake.org/cmake/help/latest/manual/cmake-file-api.7.html}
|
||||||
|
|||||||
@@ -3,11 +3,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\page creator-logging-viewer.html
|
\page creator-logging-viewer.html
|
||||||
\if defined(qtdesignstudio)
|
|
||||||
\previouspage creator-quick-ui-forms.html
|
|
||||||
\else
|
|
||||||
\previouspage creator-task-lists.html
|
\previouspage creator-task-lists.html
|
||||||
\endif
|
|
||||||
\nextpage creator-telemetry.html
|
\nextpage creator-telemetry.html
|
||||||
|
|
||||||
\title Inspecting Internal Logs
|
\title Inspecting Internal Logs
|
||||||
|
|||||||
@@ -25,44 +25,44 @@
|
|||||||
\li \l Windows
|
\li \l Windows
|
||||||
\row
|
\row
|
||||||
\li \l Android
|
\li \l Android
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\row
|
\row
|
||||||
\li \l{Bare Metal}
|
\li \l{Bare Metal}
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\row
|
\row
|
||||||
\li \l Boot2Qt
|
\li \l Boot2Qt
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\row
|
\row
|
||||||
\li \l{Generic Remote Linux}
|
\li \l{Remote Linux}
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\row
|
\row
|
||||||
\li \l iOS
|
\li \l iOS
|
||||||
\li
|
\li
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\li
|
\li
|
||||||
\row
|
\row
|
||||||
\li \l{Microcontroller Units (MCU)}{MCUs}
|
\li \l{Microcontroller Units (MCU)}{MCUs}
|
||||||
\li
|
\li
|
||||||
\li
|
\li
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\row
|
\row
|
||||||
\li \l QNX
|
\li \l QNX
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\li \inlineimage ok
|
\li \inlineimage ok.png
|
||||||
\row
|
\row
|
||||||
\li \l{Building Applications for the Web}{WebAssembly}
|
\li \l{Building Applications for the Web}{WebAssembly}
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\li \image ok
|
\li \image ok.png
|
||||||
\endtable
|
\endtable
|
||||||
|
|
||||||
\note UWP support was removed from \QC 8.0.
|
\note UWP support was removed from \QC 8.0.
|
||||||
|
|||||||
@@ -9,13 +9,8 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\page creator-build-process-customizing.html
|
\page creator-build-process-customizing.html
|
||||||
\if defined(qtdesignstudio)
|
|
||||||
\previouspage creator-developing-generic-linux.html
|
|
||||||
\nextpage studio-advanced.html
|
|
||||||
\else
|
|
||||||
\previouspage creator-setup-webassembly.html
|
\previouspage creator-setup-webassembly.html
|
||||||
\nextpage creator-testing.html
|
\nextpage creator-testing.html
|
||||||
\endif
|
|
||||||
|
|
||||||
\title Customizing the Build Process
|
\title Customizing the Build Process
|
||||||
|
|
||||||
|
|||||||
@@ -22,10 +22,16 @@
|
|||||||
|
|
||||||
\QC automatically detects the compilers that are registered by your
|
\QC automatically detects the compilers that are registered by your
|
||||||
system or by the Qt Installer and lists them in \uicontrol Edit >
|
system or by the Qt Installer and lists them in \uicontrol Edit >
|
||||||
\uicontrol Preferences > \uicontrol Kits > \uicontrol Compilers:
|
\uicontrol Preferences > \uicontrol Kits > \uicontrol Compilers.
|
||||||
|
|
||||||
\image qtcreator-toolchains.png
|
\image qtcreator-toolchains.png
|
||||||
|
|
||||||
|
\note On \macos, the \c ccache C/C++ compiler cache is detected
|
||||||
|
automatically only if you installed it using Homebrew or MacPorts.
|
||||||
|
When using MacPorts, you also need to create symlinks, as instructed in
|
||||||
|
\l{https://trac.macports.org/wiki/howto/ccache}{How to enable ccache}
|
||||||
|
in the MacPorts wiki.
|
||||||
|
|
||||||
You can add the following compilers to build applications by using other
|
You can add the following compilers to build applications by using other
|
||||||
compilers or by using additional versions of the automatically detected
|
compilers or by using additional versions of the automatically detected
|
||||||
compilers:
|
compilers:
|
||||||
@@ -68,16 +74,16 @@
|
|||||||
\li \l{https://www.iar.com/iar-embedded-workbench/}{IAREW} is a group of
|
\li \l{https://www.iar.com/iar-embedded-workbench/}{IAREW} is a group of
|
||||||
C and C++ bare-metal compilers from the various IAR Embedded Workbench
|
C and C++ bare-metal compilers from the various IAR Embedded Workbench
|
||||||
development environments.
|
development environments.
|
||||||
\note Currently supported architectures are \c 8051, \c AVR, \c ARM,
|
Currently supported architectures are \c 8051, \c AVR, \c ARM,
|
||||||
\c STM8, and \c MSP430.
|
\c STM8, and \c MSP430.
|
||||||
|
|
||||||
\li \l{https://www.keil.com}{KEIL} is a group of C and C++ bare-metal
|
\li \l{https://www.keil.com}{KEIL} is a group of C and C++ bare-metal
|
||||||
compilers from the various KEIL development environments.
|
compilers from the various KEIL development environments.
|
||||||
\note Currently supported architectures are \c 8051 and \c ARM.
|
Currently supported architectures are \c 8051 and \c ARM.
|
||||||
|
|
||||||
\li \l{http://sdcc.sourceforge.net}{SDCC} is a retargetable, optimizing
|
\li \l{http://sdcc.sourceforge.net}{SDCC} is a retargetable, optimizing
|
||||||
C bare-metal compiler for various architectures.
|
C bare-metal compiler for various architectures.
|
||||||
\note Currently supported architectures are \c 8051 and \c STM8.
|
Currently supported architectures are \c 8051 and \c STM8.
|
||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
|
|||||||
@@ -10,11 +10,7 @@
|
|||||||
/*!
|
/*!
|
||||||
\page creator-build-dependencies.html
|
\page creator-build-dependencies.html
|
||||||
\previouspage creator-code-style-settings.html
|
\previouspage creator-code-style-settings.html
|
||||||
\if defined(qtdesignstudio)
|
|
||||||
\nextpage studio-designing.html
|
|
||||||
\else
|
|
||||||
\nextpage creator-project-settings-environment.html
|
\nextpage creator-project-settings-environment.html
|
||||||
\endif
|
|
||||||
|
|
||||||
\title Specifying Dependencies
|
\title Specifying Dependencies
|
||||||
|
|
||||||
|
|||||||
@@ -3,13 +3,8 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\page qt-design-viewer.html
|
\page qt-design-viewer.html
|
||||||
\if defined(qtdesignstudio)
|
|
||||||
\previouspage creator-live-preview-android.html
|
|
||||||
\nextpage studio-exporting-and-importing.html
|
|
||||||
\else
|
|
||||||
\previouspage creator-live-preview-devices.html
|
\previouspage creator-live-preview-devices.html
|
||||||
\nextpage creator-building-targets.html
|
\nextpage creator-building-targets.html
|
||||||
\endif
|
|
||||||
|
|
||||||
\title Previewing in Browsers
|
\title Previewing in Browsers
|
||||||
|
|
||||||
@@ -24,24 +19,17 @@
|
|||||||
However, the actual performance of the application once started is
|
However, the actual performance of the application once started is
|
||||||
indistinguishable from the same application running on the desktop.
|
indistinguishable from the same application running on the desktop.
|
||||||
|
|
||||||
\if defined(qtdesignstudio)
|
|
||||||
To create a resource file out of your project, select \uicontrol Build >
|
|
||||||
\uicontrol {Generate Resource File} in \QC. Then upload the package into
|
|
||||||
\QDV.
|
|
||||||
\else
|
|
||||||
You can run \l{Creating Qt Quick UI Projects}{Qt Quick UI projects}, which
|
You can run \l{Creating Qt Quick UI Projects}{Qt Quick UI projects}, which
|
||||||
have a .qmlproject file that define the main QML file and the import paths.
|
have a .qmlproject file that define the main QML file and the import paths.
|
||||||
Compress the project folder into a ZIP file that you upload to \QDV.
|
Compress the project folder into a ZIP file that you upload to \QDV.
|
||||||
\endif
|
|
||||||
|
|
||||||
The loaded applications remain locally in your browser. No data is uploaded
|
The loaded applications remain locally in your browser. No data is uploaded
|
||||||
into the cloud.
|
into the cloud.
|
||||||
|
|
||||||
To preview an application in a web browser:
|
To preview an application in a web browser:
|
||||||
|
|
||||||
\list
|
\list 1
|
||||||
\li In the browser, open \l{http://qt-webassembly.io/designviewer/}
|
\li In the browser, open \l{ https://designviewer.qt.io/}{\QDV}.
|
||||||
{\QDV}.
|
|
||||||
\li Drag and drop your application package to \QDV, or click the load
|
\li Drag and drop your application package to \QDV, or click the load
|
||||||
icon to browse for your file.
|
icon to browse for your file.
|
||||||
\endlist
|
\endlist
|
||||||
@@ -57,10 +57,15 @@
|
|||||||
You can preview Android applications live using an Android
|
You can preview Android applications live using an Android
|
||||||
emulator.
|
emulator.
|
||||||
|
|
||||||
\endif
|
\li \l{Sharing Applications Online}
|
||||||
|
|
||||||
|
You can share applications online and view them in a web browser.
|
||||||
|
|
||||||
|
\else
|
||||||
\li \l{Previewing in Browsers}
|
\li \l{Previewing in Browsers}
|
||||||
|
|
||||||
You can open \l{https://qt-webassembly.io/designviewer/}{\QDV}
|
You can open \l{https://designviewer.qt.io/}{\QDV}
|
||||||
in a browser and load applications to it.
|
in a browser and load applications to it.
|
||||||
|
\endif
|
||||||
\endlist
|
\endlist
|
||||||
*/
|
*/
|
||||||
|
|||||||
BIN
doc/qtdesignstudio/images/extended-state.webp
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
doc/qtdesignstudio/images/no-extended-state.webp
Normal file
|
After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 10 KiB |
BIN
doc/qtdesignstudio/images/qt-design-viewer.webp
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
doc/qtdesignstudio/images/share-online-manage.webp
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
doc/qtdesignstudio/images/share-online.webp
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
doc/qtdesignstudio/images/states-view-menu.png
Normal file
|
After Width: | Height: | Size: 94 B |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 9.1 KiB |
43
doc/qtdesignstudio/src/overviews/qt-design-viewer.qdoc
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
// Copyright (C) 2019 The Qt Company Ltd.
|
||||||
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\page qt-design-viewer.html
|
||||||
|
\previouspage creator-live-preview-android.html
|
||||||
|
\nextpage studio-exporting-and-importing.html
|
||||||
|
|
||||||
|
\title Sharing Applications Online
|
||||||
|
|
||||||
|
\image qt-design-viewer.webp
|
||||||
|
|
||||||
|
In \QDS, you can share your applications in most widely-used web browsers,
|
||||||
|
such as Apple Safari, Google Chrome, Microsoft Edge, and Mozilla Firefox,
|
||||||
|
on the desktop and on mobile devices.
|
||||||
|
|
||||||
|
The application shared online runs in Qt Design Viewer, which is a QML
|
||||||
|
viewer that runs in your web browser.
|
||||||
|
|
||||||
|
The startup and compilation time depend on your browser and configuration.
|
||||||
|
However, the actual performance of the application once started is
|
||||||
|
indistinguishable from the same application running on the desktop.
|
||||||
|
|
||||||
|
The loaded applications remain locally in your browser. No data is uploaded
|
||||||
|
into the cloud.
|
||||||
|
|
||||||
|
\section1 Sharing your Application Online
|
||||||
|
|
||||||
|
To share your \QDS application online:
|
||||||
|
|
||||||
|
\list 1
|
||||||
|
\li Open the application in \QDS.
|
||||||
|
\li Select \uicontrol File > \uicontrol {Share Application Online}.
|
||||||
|
\li In the dialog, select \uicontrol Share.
|
||||||
|
\image share-online.webp
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
In the dialog, you can now open the application in a web
|
||||||
|
browser, copy the link to share with others, or manage your shared
|
||||||
|
applications.
|
||||||
|
|
||||||
|
\image share-online-manage.webp
|
||||||
|
*/
|
||||||
@@ -131,7 +131,7 @@
|
|||||||
\li \l{Previewing on Desktop}
|
\li \l{Previewing on Desktop}
|
||||||
\li \l{Previewing on Devices}
|
\li \l{Previewing on Devices}
|
||||||
\li \l{Previewing Android Applications}
|
\li \l{Previewing Android Applications}
|
||||||
\li \l{Previewing in Browsers}
|
\li \l{Sharing Applications Online}
|
||||||
\endlist
|
\endlist
|
||||||
\li \l {Asset Creation with Other Tools}
|
\li \l {Asset Creation with Other Tools}
|
||||||
\list
|
\list
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
\page qtquick-states-view.html
|
\page qtquick-states-view.html
|
||||||
\previouspage qtquick-connection-view.html
|
\previouspage qtquick-connection-view.html
|
||||||
\nextpage studio-translations.html
|
\nextpage studio-translations.html
|
||||||
|
\sa {Working with States}
|
||||||
|
|
||||||
\title States
|
\title States
|
||||||
|
|
||||||
@@ -25,48 +26,4 @@
|
|||||||
|
|
||||||
\youtube FzmLuRHQXaw
|
\youtube FzmLuRHQXaw
|
||||||
|
|
||||||
\section1 Summary of States View Actions
|
|
||||||
|
|
||||||
To open the \uicontrol Actions menu, select
|
|
||||||
\inlineimage icons/action-icon.png
|
|
||||||
. The actions available in the menu depend on the current context. For
|
|
||||||
example, the option for editing an annotation becomes available after
|
|
||||||
you add an annotation.
|
|
||||||
|
|
||||||
\table
|
|
||||||
\header
|
|
||||||
\li Action
|
|
||||||
\li Purpose
|
|
||||||
\li Read More
|
|
||||||
\row
|
|
||||||
\li \uicontrol {Set when Condition}
|
|
||||||
\li Determines when a state should be applied.
|
|
||||||
\li \l{Applying States}
|
|
||||||
\row
|
|
||||||
\li \uicontrol {Reset when Condition}
|
|
||||||
\li Removes \c when condition for the state.
|
|
||||||
\li \l{Applying States}
|
|
||||||
\row
|
|
||||||
\li \uicontrol {Set as Default}
|
|
||||||
\li Sets the current state as the startup state of the application.
|
|
||||||
\li \l{Setting the Default State}
|
|
||||||
\row
|
|
||||||
\li\uicontrol {Reset Default}
|
|
||||||
\li Resets the current state as the default state.
|
|
||||||
\li \l{Setting the Default State}
|
|
||||||
\row
|
|
||||||
\li \uicontrol {Add Annotation}
|
|
||||||
\li Opens the \uicontrol {Annotation Editor} when you can add an
|
|
||||||
annotation for the states that you create.
|
|
||||||
\li \l{Annotating Designs}
|
|
||||||
\row
|
|
||||||
\li \uicontrol {Edit Annotation}
|
|
||||||
\li Opens the \uicontrol {Annotation Editor} where you can edit the
|
|
||||||
annotation for the state.
|
|
||||||
\li \l{Annotating Designs}
|
|
||||||
\row
|
|
||||||
\li \uicontrol {Add Annotation}
|
|
||||||
\li Removes the annotation for the state.
|
|
||||||
\li \l{Annotating Designs}
|
|
||||||
\endtable
|
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -19,9 +19,9 @@
|
|||||||
|
|
||||||
\image qmldesigner-transitions.png "States view"
|
\image qmldesigner-transitions.png "States view"
|
||||||
|
|
||||||
Click the new state to switch to it in the \l {2D} view, and then modify the
|
Click the new state to switch to it in the \l {2D} and \l{3D} views, and
|
||||||
values of the properties of components or component instances in
|
then modify the values of the properties of components or component
|
||||||
\l Properties.
|
instances in \l Properties.
|
||||||
|
|
||||||
For example, to change the appearance of a button, you can define states in
|
For example, to change the appearance of a button, you can define states in
|
||||||
the button component to hide the button image and show another image in its
|
the button component to hide the button image and show another image in its
|
||||||
@@ -60,21 +60,17 @@
|
|||||||
|
|
||||||
\section1 Setting the Default State
|
\section1 Setting the Default State
|
||||||
|
|
||||||
To determine the startup state of the application,
|
The default state determines the startup state of the application.
|
||||||
select \inlineimage icons/action-icon.png
|
|
||||||
to open the \uicontrol Actions menu, and then select
|
|
||||||
\uicontrol {Set as Default}.
|
|
||||||
|
|
||||||
To reset the state later, select \uicontrol Actions >
|
To set a state to the default state, select \uicontrol Default.
|
||||||
\uicontrol {Reset Default}.
|
|
||||||
|
|
||||||
\section1 Applying States
|
\section1 Applying States
|
||||||
|
|
||||||
To determine when a state should be applied, select \uicontrol Actions >
|
To determine when a state is applied, select \inlineimage icons/edit.png
|
||||||
\uicontrol {Set when Condition}. In \uicontrol {Binding Editor}, specify
|
in the \uicontrol {When Condition} field. In \uicontrol {Binding Editor},
|
||||||
a \l [QtQuick]{State::when}{when} property for the state. Set the value of
|
specify a \l [QtQuick]{State::when}{when} property for the state. Set the
|
||||||
the property to a boolean expression that evaluates to \c true when you want
|
value of the property to a boolean expression that evaluates to \c true when
|
||||||
the state to be applied.
|
you want the state to be applied.
|
||||||
|
|
||||||
This enables you to evaluate the truthfulness of several components'
|
This enables you to evaluate the truthfulness of several components'
|
||||||
properties and move the UI to the state in which these conditions apply.
|
properties and move the UI to the state in which these conditions apply.
|
||||||
@@ -170,10 +166,40 @@
|
|||||||
\li Create additional states for each view and set the visibility
|
\li Create additional states for each view and set the visibility
|
||||||
or opacity of the components in the view.
|
or opacity of the components in the view.
|
||||||
\li To determine which state is applied when the application starts,
|
\li To determine which state is applied when the application starts,
|
||||||
select \uicontrol Actions > \uicontrol {Set as Default}.
|
select \uicontrol Default.
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
\if defined(qtcreator)
|
\if defined(qtcreator)
|
||||||
\include qtquick-states-scxml.qdocinc scxml state machines
|
\include qtquick-states-scxml.qdocinc scxml state machines
|
||||||
\endif
|
\endif
|
||||||
|
|
||||||
|
\section1 State Groups
|
||||||
|
|
||||||
|
With state groups, you can change the state of certain components
|
||||||
|
independently of other components and their states in the same view.
|
||||||
|
|
||||||
|
Each state group has its own property changes and transitions.
|
||||||
|
|
||||||
|
By default, there is one root state group.
|
||||||
|
|
||||||
|
\section1 Extending States
|
||||||
|
|
||||||
|
When a state extends another state, it inherits all the changes of that
|
||||||
|
state. The state being extended is treated as the base state in regards to
|
||||||
|
the changes specified by the extending state.
|
||||||
|
|
||||||
|
Using extended states can make the user interface and your QML code
|
||||||
|
cleaner.
|
||||||
|
|
||||||
|
Below is an example where the only change between \e State1 and \e State2
|
||||||
|
is the brightness of \e directionalLight.
|
||||||
|
|
||||||
|
Here, extended states are not used:
|
||||||
|
|
||||||
|
\image no-extended-state.webp
|
||||||
|
|
||||||
|
Here, \e State2 is extended from \e State1:
|
||||||
|
|
||||||
|
\image extended-state.webp
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -162,6 +162,7 @@ ScrollView { // TODO: experiment using ListView instead of ScrollView + Column
|
|||||||
|
|
||||||
readonly property string suffix: fileName.substr(-4)
|
readonly property string suffix: fileName.substr(-4)
|
||||||
readonly property bool isFont: suffix === ".ttf" || suffix === ".otf"
|
readonly property bool isFont: suffix === ".ttf" || suffix === ".otf"
|
||||||
|
readonly property bool isEffect: suffix === ".qep"
|
||||||
property bool currFileSelected: false
|
property bool currFileSelected: false
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
@@ -180,7 +181,7 @@ ScrollView { // TODO: experiment using ListView instead of ScrollView + Column
|
|||||||
allowTooltip = true
|
allowTooltip = true
|
||||||
}
|
}
|
||||||
onPositionChanged: tooltipBackend.reposition()
|
onPositionChanged: tooltipBackend.reposition()
|
||||||
onPressed: (mouse)=> {
|
onPressed: (mouse) => {
|
||||||
forceActiveFocus()
|
forceActiveFocus()
|
||||||
allowTooltip = false
|
allowTooltip = false
|
||||||
tooltipBackend.hideTooltip()
|
tooltipBackend.hideTooltip()
|
||||||
@@ -212,7 +213,7 @@ ScrollView { // TODO: experiment using ListView instead of ScrollView + Column
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onReleased: (mouse)=> {
|
onReleased: (mouse) => {
|
||||||
allowTooltip = true
|
allowTooltip = true
|
||||||
if (mouse.button === Qt.LeftButton) {
|
if (mouse.button === Qt.LeftButton) {
|
||||||
if (!(mouse.modifiers & Qt.ControlModifier))
|
if (!(mouse.modifiers & Qt.ControlModifier))
|
||||||
@@ -222,6 +223,14 @@ ScrollView { // TODO: experiment using ListView instead of ScrollView + Column
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onDoubleClicked: (mouse) => {
|
||||||
|
forceActiveFocus()
|
||||||
|
allowTooltip = false
|
||||||
|
tooltipBackend.hideTooltip()
|
||||||
|
if (mouse.button === Qt.LeftButton && isEffect)
|
||||||
|
rootView.openEffectMaker(filePath)
|
||||||
|
}
|
||||||
|
|
||||||
ToolTip {
|
ToolTip {
|
||||||
visible: !isFont && mouseArea.containsMouse && !contextMenu.visible
|
visible: !isFont && mouseArea.containsMouse && !contextMenu.visible
|
||||||
text: filePath
|
text: filePath
|
||||||
|
|||||||
@@ -241,10 +241,15 @@ Item {
|
|||||||
|
|
||||||
delegate: Section {
|
delegate: Section {
|
||||||
width: root.width
|
width: root.width
|
||||||
caption: bundleCategory
|
caption: bundleCategoryName
|
||||||
addTopPadding: false
|
addTopPadding: false
|
||||||
sectionBackgroundColor: "transparent"
|
sectionBackgroundColor: "transparent"
|
||||||
visible: bundleCategoryVisible
|
visible: bundleCategoryVisible
|
||||||
|
expanded: bundleCategoryExpanded
|
||||||
|
expandOnClick: false
|
||||||
|
onToggleExpand: bundleCategoryExpanded = !bundleCategoryExpanded
|
||||||
|
onExpand: bundleCategoryExpanded = true
|
||||||
|
onCollapse: bundleCategoryExpanded = false
|
||||||
|
|
||||||
Grid {
|
Grid {
|
||||||
width: scrollView.width
|
width: scrollView.width
|
||||||
@@ -254,7 +259,7 @@ Item {
|
|||||||
columns: root.width / root.cellWidth
|
columns: root.width / root.cellWidth
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
model: bundleMaterialsModel
|
model: bundleCategoryMaterials
|
||||||
|
|
||||||
delegate: BundleMaterialItem {
|
delegate: BundleMaterialItem {
|
||||||
width: root.cellWidth
|
width: root.cellWidth
|
||||||
|
|||||||
@@ -80,6 +80,10 @@ StudioControls.Menu {
|
|||||||
root.matSectionsModel = root.matSectionsModel.concat(materialBrowserModel.principledMaterialSections);
|
root.matSectionsModel = root.matSectionsModel.concat(materialBrowserModel.principledMaterialSections);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "SpecularGlossyMaterial":
|
||||||
|
root.matSectionsModel = root.matSectionsModel.concat(materialBrowserModel.specularGlossyMaterialSections);
|
||||||
|
break;
|
||||||
|
|
||||||
case "CustomMaterial":
|
case "CustomMaterial":
|
||||||
root.matSectionsModel = root.matSectionsModel.concat(materialBrowserModel.customMaterialSections);
|
root.matSectionsModel = root.matSectionsModel.concat(materialBrowserModel.customMaterialSections);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -401,6 +401,7 @@ Item {
|
|||||||
ListElement { name: "Qt 5.15" }
|
ListElement { name: "Qt 5.15" }
|
||||||
ListElement { name: "Qt 6.2" }
|
ListElement { name: "Qt 6.2" }
|
||||||
ListElement { name: "Qt 6.3" }
|
ListElement { name: "Qt 6.3" }
|
||||||
|
ListElement { name: "Qt 6.4" }
|
||||||
}
|
}
|
||||||
|
|
||||||
onActivated: (index) => {
|
onActivated: (index) => {
|
||||||
|
|||||||
@@ -50,10 +50,19 @@ Item {
|
|||||||
Connections {
|
Connections {
|
||||||
target: Controller
|
target: Controller
|
||||||
function onCollapseAll() {
|
function onCollapseAll() {
|
||||||
if (collapsible)
|
if (collapsible) {
|
||||||
|
if (section.expandOnClick)
|
||||||
section.expanded = false
|
section.expanded = false
|
||||||
|
else
|
||||||
|
section.collapse()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function onExpandAll() {
|
||||||
|
if (section.expandOnClick)
|
||||||
|
section.expanded = true
|
||||||
|
else
|
||||||
|
section.expand()
|
||||||
}
|
}
|
||||||
function onExpandAll() { section.expanded = true }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
signal drop(var drag)
|
signal drop(var drag)
|
||||||
@@ -61,6 +70,8 @@ Item {
|
|||||||
signal dropExit()
|
signal dropExit()
|
||||||
signal showContextMenu()
|
signal showContextMenu()
|
||||||
signal toggleExpand()
|
signal toggleExpand()
|
||||||
|
signal expand()
|
||||||
|
signal collapse()
|
||||||
|
|
||||||
DropArea {
|
DropArea {
|
||||||
id: dropArea
|
id: dropArea
|
||||||
|
|||||||
@@ -49,126 +49,128 @@ QtObject {
|
|||||||
readonly property string centerHorizontal: "\u0042"
|
readonly property string centerHorizontal: "\u0042"
|
||||||
readonly property string centerVertical: "\u0043"
|
readonly property string centerVertical: "\u0043"
|
||||||
readonly property string closeCross: "\u0044"
|
readonly property string closeCross: "\u0044"
|
||||||
readonly property string colorPopupClose: "\u0045"
|
readonly property string closeLink: "\u0045"
|
||||||
readonly property string columnsAndRows: "\u0046"
|
readonly property string colorPopupClose: "\u0046"
|
||||||
readonly property string copyStyle: "\u0047"
|
readonly property string columnsAndRows: "\u0047"
|
||||||
readonly property string cornerA: "\u0048"
|
readonly property string copyLink: "\u0048"
|
||||||
readonly property string cornerB: "\u0049"
|
readonly property string copyStyle: "\u0049"
|
||||||
readonly property string cornersAll: "\u004A"
|
readonly property string cornerA: "\u004A"
|
||||||
readonly property string curveDesigner: "\u004B"
|
readonly property string cornerB: "\u004B"
|
||||||
readonly property string curveEditor: "\u004C"
|
readonly property string cornersAll: "\u004C"
|
||||||
readonly property string customMaterialEditor: "\u004D"
|
readonly property string curveDesigner: "\u004D"
|
||||||
readonly property string decisionNode: "\u004E"
|
readonly property string curveEditor: "\u004E"
|
||||||
readonly property string deleteColumn: "\u004F"
|
readonly property string customMaterialEditor: "\u004F"
|
||||||
readonly property string deleteMaterial: "\u0050"
|
readonly property string decisionNode: "\u0050"
|
||||||
readonly property string deleteRow: "\u0051"
|
readonly property string deleteColumn: "\u0051"
|
||||||
readonly property string deleteTable: "\u0052"
|
readonly property string deleteMaterial: "\u0052"
|
||||||
readonly property string detach: "\u0053"
|
readonly property string deleteRow: "\u0053"
|
||||||
readonly property string distributeBottom: "\u0054"
|
readonly property string deleteTable: "\u0054"
|
||||||
readonly property string distributeCenterHorizontal: "\u0055"
|
readonly property string detach: "\u0055"
|
||||||
readonly property string distributeCenterVertical: "\u0056"
|
readonly property string distributeBottom: "\u0056"
|
||||||
readonly property string distributeLeft: "\u0057"
|
readonly property string distributeCenterHorizontal: "\u0057"
|
||||||
readonly property string distributeOriginBottomRight: "\u0058"
|
readonly property string distributeCenterVertical: "\u0058"
|
||||||
readonly property string distributeOriginCenter: "\u0059"
|
readonly property string distributeLeft: "\u0059"
|
||||||
readonly property string distributeOriginNone: "\u005A"
|
readonly property string distributeOriginBottomRight: "\u005A"
|
||||||
readonly property string distributeOriginTopLeft: "\u005B"
|
readonly property string distributeOriginCenter: "\u005B"
|
||||||
readonly property string distributeRight: "\u005C"
|
readonly property string distributeOriginNone: "\u005C"
|
||||||
readonly property string distributeSpacingHorizontal: "\u005D"
|
readonly property string distributeOriginTopLeft: "\u005D"
|
||||||
readonly property string distributeSpacingVertical: "\u005E"
|
readonly property string distributeRight: "\u005E"
|
||||||
readonly property string distributeTop: "\u005F"
|
readonly property string distributeSpacingHorizontal: "\u005F"
|
||||||
readonly property string download: "\u0060"
|
readonly property string distributeSpacingVertical: "\u0060"
|
||||||
readonly property string downloadUnavailable: "\u0061"
|
readonly property string distributeTop: "\u0061"
|
||||||
readonly property string downloadUpdate: "\u0062"
|
readonly property string download: "\u0062"
|
||||||
readonly property string downloaded: "\u0063"
|
readonly property string downloadUnavailable: "\u0063"
|
||||||
readonly property string edit: "\u0064"
|
readonly property string downloadUpdate: "\u0064"
|
||||||
readonly property string eyeDropper: "\u0065"
|
readonly property string downloaded: "\u0065"
|
||||||
readonly property string favorite: "\u0066"
|
readonly property string edit: "\u0066"
|
||||||
readonly property string flowAction: "\u0067"
|
readonly property string eyeDropper: "\u0067"
|
||||||
readonly property string flowTransition: "\u0068"
|
readonly property string favorite: "\u0068"
|
||||||
readonly property string fontStyleBold: "\u0069"
|
readonly property string flowAction: "\u0069"
|
||||||
readonly property string fontStyleItalic: "\u006A"
|
readonly property string flowTransition: "\u006A"
|
||||||
readonly property string fontStyleStrikethrough: "\u006B"
|
readonly property string fontStyleBold: "\u006B"
|
||||||
readonly property string fontStyleUnderline: "\u006C"
|
readonly property string fontStyleItalic: "\u006C"
|
||||||
readonly property string gradient: "\u006D"
|
readonly property string fontStyleStrikethrough: "\u006D"
|
||||||
readonly property string gridView: "\u006E"
|
readonly property string fontStyleUnderline: "\u006E"
|
||||||
readonly property string idAliasOff: "\u006F"
|
readonly property string gradient: "\u006F"
|
||||||
readonly property string idAliasOn: "\u0070"
|
readonly property string gridView: "\u0070"
|
||||||
readonly property string imported: "\u0071"
|
readonly property string idAliasOff: "\u0071"
|
||||||
readonly property string infinity: "\u0072"
|
readonly property string idAliasOn: "\u0072"
|
||||||
readonly property string keyframe: "\u0073"
|
readonly property string infinity: "\u0073"
|
||||||
readonly property string linkTriangle: "\u0074"
|
readonly property string keyframe: "\u0074"
|
||||||
readonly property string linked: "\u0075"
|
readonly property string linkTriangle: "\u0075"
|
||||||
readonly property string listView: "\u0076"
|
readonly property string linked: "\u0076"
|
||||||
readonly property string lockOff: "\u0077"
|
readonly property string listView: "\u0077"
|
||||||
readonly property string lockOn: "\u0078"
|
readonly property string lockOff: "\u0078"
|
||||||
readonly property string materialPreviewEnvironment: "\u0079"
|
readonly property string lockOn: "\u0079"
|
||||||
readonly property string materialPreviewModel: "\u007A"
|
readonly property string materialPreviewEnvironment: "\u007A"
|
||||||
readonly property string mergeCells: "\u007B"
|
readonly property string materialPreviewModel: "\u007B"
|
||||||
readonly property string minus: "\u007C"
|
readonly property string mergeCells: "\u007C"
|
||||||
readonly property string mirror: "\u007D"
|
readonly property string minus: "\u007D"
|
||||||
readonly property string newMaterial: "\u007E"
|
readonly property string mirror: "\u007E"
|
||||||
readonly property string openMaterialBrowser: "\u007F"
|
readonly property string newMaterial: "\u007F"
|
||||||
readonly property string orientation: "\u0080"
|
readonly property string openLink: "\u0080"
|
||||||
readonly property string paddingEdge: "\u0081"
|
readonly property string openMaterialBrowser: "\u0081"
|
||||||
readonly property string paddingFrame: "\u0082"
|
readonly property string orientation: "\u0082"
|
||||||
readonly property string pasteStyle: "\u0083"
|
readonly property string paddingEdge: "\u0083"
|
||||||
readonly property string pause: "\u0084"
|
readonly property string paddingFrame: "\u0084"
|
||||||
readonly property string pin: "\u0085"
|
readonly property string pasteStyle: "\u0085"
|
||||||
readonly property string play: "\u0086"
|
readonly property string pause: "\u0086"
|
||||||
readonly property string plus: "\u0087"
|
readonly property string pin: "\u0087"
|
||||||
readonly property string promote: "\u0088"
|
readonly property string play: "\u0088"
|
||||||
readonly property string readOnly: "\u0089"
|
readonly property string plus: "\u0089"
|
||||||
readonly property string redo: "\u008A"
|
readonly property string promote: "\u008A"
|
||||||
readonly property string rotationFill: "\u008B"
|
readonly property string readOnly: "\u008B"
|
||||||
readonly property string rotationOutline: "\u008C"
|
readonly property string redo: "\u008C"
|
||||||
readonly property string search: "\u008D"
|
readonly property string rotationFill: "\u008D"
|
||||||
readonly property string sectionToggle: "\u008E"
|
readonly property string rotationOutline: "\u008E"
|
||||||
readonly property string splitColumns: "\u008F"
|
readonly property string search: "\u008F"
|
||||||
readonly property string splitRows: "\u0090"
|
readonly property string sectionToggle: "\u0090"
|
||||||
readonly property string startNode: "\u0091"
|
readonly property string splitColumns: "\u0091"
|
||||||
readonly property string testIcon: "\u0092"
|
readonly property string splitRows: "\u0092"
|
||||||
readonly property string textAlignBottom: "\u0093"
|
readonly property string startNode: "\u0093"
|
||||||
readonly property string textAlignCenter: "\u0094"
|
readonly property string testIcon: "\u0094"
|
||||||
readonly property string textAlignJustified: "\u0095"
|
readonly property string textAlignBottom: "\u0095"
|
||||||
readonly property string textAlignLeft: "\u0096"
|
readonly property string textAlignCenter: "\u0096"
|
||||||
readonly property string textAlignMiddle: "\u0097"
|
readonly property string textAlignJustified: "\u0097"
|
||||||
readonly property string textAlignRight: "\u0098"
|
readonly property string textAlignLeft: "\u0098"
|
||||||
readonly property string textAlignTop: "\u0099"
|
readonly property string textAlignMiddle: "\u0099"
|
||||||
readonly property string textBulletList: "\u009A"
|
readonly property string textAlignRight: "\u009A"
|
||||||
readonly property string textFullJustification: "\u009B"
|
readonly property string textAlignTop: "\u009B"
|
||||||
readonly property string textNumberedList: "\u009D"
|
readonly property string textBulletList: "\u009D"
|
||||||
readonly property string tickIcon: "\u009E"
|
readonly property string textFullJustification: "\u009E"
|
||||||
readonly property string translationCreateFiles: "\u009F"
|
readonly property string textNumberedList: "\u009F"
|
||||||
readonly property string translationCreateReport: "\u00A0"
|
readonly property string tickIcon: "\u00A0"
|
||||||
readonly property string translationExport: "\u00A1"
|
readonly property string translationCreateFiles: "\u00A1"
|
||||||
readonly property string translationImport: "\u00A2"
|
readonly property string translationCreateReport: "\u00A2"
|
||||||
readonly property string translationSelectLanguages: "\u00A3"
|
readonly property string translationExport: "\u00A3"
|
||||||
readonly property string translationTest: "\u00A4"
|
readonly property string translationImport: "\u00A4"
|
||||||
readonly property string transparent: "\u00A5"
|
readonly property string translationSelectLanguages: "\u00A5"
|
||||||
readonly property string triState: "\u00A6"
|
readonly property string translationTest: "\u00A6"
|
||||||
readonly property string triangleArcA: "\u00A7"
|
readonly property string transparent: "\u00A7"
|
||||||
readonly property string triangleArcB: "\u00A8"
|
readonly property string triState: "\u00A8"
|
||||||
readonly property string triangleCornerA: "\u00A9"
|
readonly property string triangleArcA: "\u00A9"
|
||||||
readonly property string triangleCornerB: "\u00AA"
|
readonly property string triangleArcB: "\u00AA"
|
||||||
readonly property string unLinked: "\u00AB"
|
readonly property string triangleCornerA: "\u00AB"
|
||||||
readonly property string undo: "\u00AC"
|
readonly property string triangleCornerB: "\u00AC"
|
||||||
readonly property string unpin: "\u00AE"
|
readonly property string unLinked: "\u00AE"
|
||||||
readonly property string upDownIcon: "\u00AF"
|
readonly property string undo: "\u00AF"
|
||||||
readonly property string upDownSquare2: "\u00B0"
|
readonly property string unpin: "\u00B0"
|
||||||
readonly property string visibilityOff: "\u00B1"
|
readonly property string upDownIcon: "\u00B1"
|
||||||
readonly property string visibilityOn: "\u00B2"
|
readonly property string upDownSquare2: "\u00B2"
|
||||||
readonly property string wildcard: "\u00B3"
|
readonly property string visibilityOff: "\u00B3"
|
||||||
readonly property string wizardsAutomotive: "\u00B4"
|
readonly property string visibilityOn: "\u00B4"
|
||||||
readonly property string wizardsDesktop: "\u00B5"
|
readonly property string wildcard: "\u00B5"
|
||||||
readonly property string wizardsGeneric: "\u00B6"
|
readonly property string wizardsAutomotive: "\u00B6"
|
||||||
readonly property string wizardsMcuEmpty: "\u00B7"
|
readonly property string wizardsDesktop: "\u00B7"
|
||||||
readonly property string wizardsMcuGraph: "\u00B8"
|
readonly property string wizardsGeneric: "\u00B8"
|
||||||
readonly property string wizardsMobile: "\u00B9"
|
readonly property string wizardsMcuEmpty: "\u00B9"
|
||||||
readonly property string wizardsUnknown: "\u00BA"
|
readonly property string wizardsMcuGraph: "\u00BA"
|
||||||
readonly property string zoomAll: "\u00BB"
|
readonly property string wizardsMobile: "\u00BB"
|
||||||
readonly property string zoomIn: "\u00BC"
|
readonly property string wizardsUnknown: "\u00BC"
|
||||||
readonly property string zoomOut: "\u00BD"
|
readonly property string zoomAll: "\u00BD"
|
||||||
readonly property string zoomSelection: "\u00BE"
|
readonly property string zoomIn: "\u00BE"
|
||||||
|
readonly property string zoomOut: "\u00BF"
|
||||||
|
readonly property string zoomSelection: "\u00C0"
|
||||||
|
|
||||||
readonly property font iconFont: Qt.font({
|
readonly property font iconFont: Qt.font({
|
||||||
"family": controlIcons.name,
|
"family": controlIcons.name,
|
||||||
|
|||||||
@@ -264,6 +264,14 @@
|
|||||||
'TargetQuickVersion': '6.3',
|
'TargetQuickVersion': '6.3',
|
||||||
'TargetQuick3DVersion': '6.3'
|
'TargetQuick3DVersion': '6.3'
|
||||||
})"
|
})"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"trKey": "Qt 6.4",
|
||||||
|
"value":
|
||||||
|
"({
|
||||||
|
'TargetQuickVersion': '6.4',
|
||||||
|
'TargetQuick3DVersion': '6.4'
|
||||||
|
})"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
cmake_minimum_required (VERSION 3.15)
|
cmake_minimum_required (VERSION 3.15)
|
||||||
|
|
||||||
project(%{ProjectName} VERSION 0.0.1 LANGUAGES C CXX ASM ASM_MASM)
|
project(%{ProjectName} VERSION 0.0.1 LANGUAGES C CXX ASM)
|
||||||
|
|
||||||
if (NOT TARGET Qul::Core)
|
if (NOT TARGET Qul::Core)
|
||||||
find_package(Qul)
|
find_package(Qul)
|
||||||
|
|||||||
@@ -261,6 +261,13 @@
|
|||||||
"({
|
"({
|
||||||
'TargetQuickVersion': '6.3'
|
'TargetQuickVersion': '6.3'
|
||||||
})"
|
})"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"trKey": "Qt 6.4",
|
||||||
|
"value":
|
||||||
|
"({
|
||||||
|
'TargetQuickVersion': '6.4'
|
||||||
|
})"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ Project {
|
|||||||
Environment {
|
Environment {
|
||||||
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
|
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
|
||||||
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
|
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
|
||||||
|
QML_COMPAT_RESOLVE_URLS_ON_ASSIGNMENT: "1"
|
||||||
@if %{IsQt6Project}
|
@if %{IsQt6Project}
|
||||||
@else
|
@else
|
||||||
QMLSCENE_CORE_PROFILE: "true" // Required for macOS, but can create issues on embedded Linux
|
QMLSCENE_CORE_PROFILE: "true" // Required for macOS, but can create issues on embedded Linux
|
||||||
@@ -99,7 +100,7 @@ Project {
|
|||||||
/* Required for deployment */
|
/* Required for deployment */
|
||||||
targetDirectory: "/opt/%{ProjectName}"
|
targetDirectory: "/opt/%{ProjectName}"
|
||||||
|
|
||||||
qdsVersion: "3.7"
|
qdsVersion: "3.8"
|
||||||
|
|
||||||
quickVersion: "%{QtQuickVersion}"
|
quickVersion: "%{QtQuickVersion}"
|
||||||
|
|
||||||
|
|||||||
@@ -15,4 +15,5 @@ void set_qt_environment()
|
|||||||
qputenv("QT_ENABLE_HIGHDPI_SCALING", "0");
|
qputenv("QT_ENABLE_HIGHDPI_SCALING", "0");
|
||||||
qputenv("QT_LOGGING_RULES", "qt.qml.connections=false");
|
qputenv("QT_LOGGING_RULES", "qt.qml.connections=false");
|
||||||
qputenv("QT_QUICK_CONTROLS_CONF", ":/qtquickcontrols2.conf");
|
qputenv("QT_QUICK_CONTROLS_CONF", ":/qtquickcontrols2.conf");
|
||||||
|
qputenv("QML_COMPAT_RESOLVE_URLS_ON_ASSIGNMENT", "1");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -259,6 +259,13 @@
|
|||||||
"({
|
"({
|
||||||
'TargetQuickVersion': '6.3'
|
'TargetQuickVersion': '6.3'
|
||||||
})"
|
})"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"trKey": "Qt 6.4",
|
||||||
|
"value":
|
||||||
|
"({
|
||||||
|
'TargetQuickVersion': '6.4'
|
||||||
|
})"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
{ "key": "ProjectPluginClassName", "value": "%{ProjectName}Plugin" },
|
{ "key": "ProjectPluginClassName", "value": "%{ProjectName}Plugin" },
|
||||||
{ "key": "QmlProjectFileName", "value": "%{JS: Util.fileName('%{ProjectName}', 'qmlproject')}" },
|
{ "key": "QmlProjectFileName", "value": "%{JS: Util.fileName('%{ProjectName}', 'qmlproject')}" },
|
||||||
{ "key": "ImportModuleName", "value": "%{ProjectName}" },
|
{ "key": "ImportModuleName", "value": "%{ProjectName}" },
|
||||||
|
{ "key": "UIClassName", "value": "Screen01" },
|
||||||
|
{ "key": "UIClassFileName", "value": "%{JS: Util.fileName('%{UIClassName}', 'ui.qml')}" },
|
||||||
{ "key": "IsQt6Project", "value": "%{JS: value('QtQuickVersion') !== '2.15' }" },
|
{ "key": "IsQt6Project", "value": "%{JS: value('QtQuickVersion') !== '2.15' }" },
|
||||||
{ "key": "QtQuickVersion", "value": "%{JS: %{TargetQtVersion}.TargetQuickVersion}" },
|
{ "key": "QtQuickVersion", "value": "%{JS: %{TargetQtVersion}.TargetQuickVersion}" },
|
||||||
{ "key": "QtQuickFeature", "value": "QtSupport.Wizards.FeatureQtQuick.%{QtQuickVersion}" },
|
{ "key": "QtQuickFeature", "value": "QtSupport.Wizards.FeatureQtQuick.%{QtQuickVersion}" },
|
||||||
@@ -216,6 +218,13 @@
|
|||||||
"({
|
"({
|
||||||
'TargetQuickVersion': '6.3'
|
'TargetQuickVersion': '6.3'
|
||||||
})"
|
})"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"trKey": "Qt 6.4",
|
||||||
|
"value":
|
||||||
|
"({
|
||||||
|
'TargetQuickVersion': '6.4'
|
||||||
|
})"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -216,6 +216,13 @@
|
|||||||
"({
|
"({
|
||||||
'TargetQuickVersion': '6.3'
|
'TargetQuickVersion': '6.3'
|
||||||
})"
|
})"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"trKey": "Qt 6.4",
|
||||||
|
"value":
|
||||||
|
"({
|
||||||
|
'TargetQuickVersion': '6.4'
|
||||||
|
})"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -216,6 +216,13 @@
|
|||||||
"({
|
"({
|
||||||
'TargetQuickVersion': '6.3'
|
'TargetQuickVersion': '6.3'
|
||||||
})"
|
})"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"trKey": "Qt 6.4",
|
||||||
|
"value":
|
||||||
|
"({
|
||||||
|
'TargetQuickVersion': '6.4'
|
||||||
|
})"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
40
share/qtcreator/templates/wizards/files/effect/wizard.json
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"supportedProjectTypes": [ ],
|
||||||
|
"id": "J.QEP",
|
||||||
|
"category": "U.QEP",
|
||||||
|
"trDescription": "Creates an Effect Maker file.",
|
||||||
|
"trDisplayName": "Effect File (Effect Maker)",
|
||||||
|
"trDisplayCategory": "Effects",
|
||||||
|
"iconText": "qep",
|
||||||
|
"platformIndependent": true,
|
||||||
|
"enabled": true,
|
||||||
|
|
||||||
|
"options": { "key": "DefaultSuffix", "value": "qep" },
|
||||||
|
|
||||||
|
"pages" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"trDisplayName": "Location",
|
||||||
|
"trShortTitle": "Location",
|
||||||
|
"typeId": "File"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"trDisplayName": "Project Management",
|
||||||
|
"trShortTitle": "Summary",
|
||||||
|
"typeId": "Summary"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"generators" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"typeId": "File",
|
||||||
|
"data":
|
||||||
|
{
|
||||||
|
"source": "file.qep",
|
||||||
|
"target": "%{JS: Util.fileName(value('TargetPath'), value('DefaultSuffix'))}",
|
||||||
|
"openInEditor": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -14619,46 +14619,6 @@ Další podrobnosti hledejte v /etc/sysctl.d/10-ptrace.conf
|
|||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TextEditor::DisplaySettingsPage</name>
|
<name>TextEditor::DisplaySettingsPage</name>
|
||||||
<message>
|
|
||||||
<source>Display</source>
|
|
||||||
<translation type="obsolete">Zobrazení</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Display line &numbers</source>
|
|
||||||
<translation type="obsolete">&Zobrazit čísla řádků</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Display &folding markers</source>
|
|
||||||
<translation type="obsolete">Zobrazit znaky s&kládání kódu</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Show tabs and spaces.</source>
|
|
||||||
<translation type="obsolete">Ukázat zarážky a prázdné znaky (mezery).</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>&Visualize whitespace</source>
|
|
||||||
<translation type="obsolete">&Zviditelnit prázdné znaky</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Highlight current &line</source>
|
|
||||||
<translation type="obsolete">Zvýraznit nynější řá&dek</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Text Wrapping</source>
|
|
||||||
<translation type="obsolete">Zalomení textu</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Enable text &wrapping</source>
|
|
||||||
<translation type="obsolete">Povolit &zalomení textu</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Display right &margin at column:</source>
|
|
||||||
<translation type="obsolete">Zobrazit pravý &okraj sloupce:</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Highlight &blocks</source>
|
|
||||||
<translation type="obsolete">Zvýraznit &bloky</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Animate matching parentheses</source>
|
<source>Animate matching parentheses</source>
|
||||||
<translation type="obsolete">Rozhýbat odpovídající závorky</translation>
|
<translation type="obsolete">Rozhýbat odpovídající závorky</translation>
|
||||||
@@ -14675,22 +14635,6 @@ Další podrobnosti hledejte v /etc/sysctl.d/10-ptrace.conf
|
|||||||
<source>Mark text changes</source>
|
<source>Mark text changes</source>
|
||||||
<translation type="obsolete">Vyznačit textové změny</translation>
|
<translation type="obsolete">Vyznačit textové změny</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Mark &text changes</source>
|
|
||||||
<translation type="obsolete">Vyznačit &textové změny</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>&Animate matching parentheses</source>
|
|
||||||
<translation type="obsolete">&Rozhýbat odpovídající závorky</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Auto-fold first &comment</source>
|
|
||||||
<translation type="obsolete">Automaticky složit první po&známku</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Center &cursor on scroll</source>
|
|
||||||
<translation type="obsolete">Při projíždění držet &ukazovátko vprostřed</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TextEditor::FontSettingsPage</name>
|
<name>TextEditor::FontSettingsPage</name>
|
||||||
@@ -30795,14 +30739,6 @@ Určuje, jak se chová zpětná klávesa (backspace) co se týče odsazování.
|
|||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TextEditor::TabSettingsWidget</name>
|
<name>TextEditor::TabSettingsWidget</name>
|
||||||
<message>
|
|
||||||
<source>Form</source>
|
|
||||||
<translation type="obsolete">Formulář</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Tabs And Indentation</source>
|
|
||||||
<translation type="obsolete">Zarážky a odsazení</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Insert &spaces instead of tabs</source>
|
<source>Insert &spaces instead of tabs</source>
|
||||||
<translation type="obsolete">Vložit místo zarážek prázdné &znaky (mezery)</translation>
|
<translation type="obsolete">Vložit místo zarážek prázdné &znaky (mezery)</translation>
|
||||||
@@ -30815,14 +30751,6 @@ Určuje, jak se chová zpětná klávesa (backspace) co se týče odsazování.
|
|||||||
<source>Based on the surrounding lines</source>
|
<source>Based on the surrounding lines</source>
|
||||||
<translation type="obsolete">Založeno na okolních řádcích</translation>
|
<translation type="obsolete">Založeno na okolních řádcích</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Ta&b size:</source>
|
|
||||||
<translation type="obsolete">Šířka &zarážky:</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>&Indent size:</source>
|
|
||||||
<translation type="obsolete">&Velikost odsazení:</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Enable automatic &indentation</source>
|
<source>Enable automatic &indentation</source>
|
||||||
<translation type="obsolete">Povolit automatické &odsazení</translation>
|
<translation type="obsolete">Povolit automatické &odsazení</translation>
|
||||||
@@ -30835,74 +30763,6 @@ Určuje, jak se chová zpětná klávesa (backspace) co se týče odsazování.
|
|||||||
<source>&Backspace follows indentation</source>
|
<source>&Backspace follows indentation</source>
|
||||||
<translation type="obsolete">&Zpětná klávesa sleduje hloubku odsazení</translation>
|
<translation type="obsolete">&Zpětná klávesa sleduje hloubku odsazení</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Align continuation lines:</source>
|
|
||||||
<translation type="obsolete">Zarovnání navazujících řádků:</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source><html><head/><body>
|
|
||||||
Influences the indentation of continuation lines.
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>Not At All: Do not align at all. Lines will only be indented to the current logical indentation depth.
|
|
||||||
<pre>
|
|
||||||
(tab)int i = foo(a, b
|
|
||||||
(tab)c, d);
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>With Spaces: Always use spaces for alignment, regardless of the other indentation settings.
|
|
||||||
<pre>
|
|
||||||
(tab)int i = foo(a, b
|
|
||||||
(tab) c, d);
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>With Regular Indent: Use tabs and/or spaces for alignment, as configured above.
|
|
||||||
<pre>
|
|
||||||
(tab)int i = foo(a, b
|
|
||||||
(tab)(tab)(tab) c, d);
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
</ul></body></html></source>
|
|
||||||
<translation type="obsolete"><html><head/><body>
|
|
||||||
Určuje chování odsazení se zřetelem k navazujícím řádkům.
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>Žádné odsazení: Žádné odsazení dodatečně k logickému odsazení.
|
|
||||||
<pre>
|
|
||||||
(tab)int i = foo(a, b
|
|
||||||
(tab)c, d);
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>Prázdné znaky: Dodatečné odsazení pomocí prázdných znaků.
|
|
||||||
<pre>
|
|
||||||
(tab)int i = foo(a, b
|
|
||||||
(tab) c, d);
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>Normální odsazení: Používají se zarážky nebo prázdné znaky odpovídající hořejšímu nastavení.
|
|
||||||
<pre>
|
|
||||||
(tab)int i = foo(a, b
|
|
||||||
(tab)(tab)(tab) c, d);
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
</ul></body></html></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Not At All</source>
|
|
||||||
<translation type="obsolete">Žádné odsazení</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>With Spaces</source>
|
|
||||||
<translation type="obsolete">Prázdné znaky</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>With Regular Indent</source>
|
|
||||||
<translation type="obsolete">Normální odsazení</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Tab key performs auto-indent:</source>
|
<source>Tab key performs auto-indent:</source>
|
||||||
<translation type="obsolete">Klávesa pro zarážku provede automatické odsazení:</translation>
|
<translation type="obsolete">Klávesa pro zarážku provede automatické odsazení:</translation>
|
||||||
@@ -30919,22 +30779,6 @@ Určuje chování odsazení se zřetelem k navazujícím řádkům.
|
|||||||
<source>In Leading White Space</source>
|
<source>In Leading White Space</source>
|
||||||
<translation type="obsolete">Pouze v prázdném místu na začátku řádku</translation>
|
<translation type="obsolete">Pouze v prázdném místu na začátku řádku</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Tab policy:</source>
|
|
||||||
<translation type="obsolete">Chování zarážek:</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Spaces Only</source>
|
|
||||||
<translation type="obsolete">Pouze mezery</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Tabs Only</source>
|
|
||||||
<translation type="obsolete">Pouze zarážky</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Mixed</source>
|
|
||||||
<translation type="obsolete">Smíchaně</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>Valgrind</name>
|
<name>Valgrind</name>
|
||||||
|
|||||||
@@ -47228,10 +47228,6 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e
|
|||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TextEditor::DisplaySettingsPage</name>
|
<name>TextEditor::DisplaySettingsPage</name>
|
||||||
<message>
|
|
||||||
<source>Display</source>
|
|
||||||
<translation>Anzeige</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>Todo</name>
|
<name>Todo</name>
|
||||||
@@ -47474,10 +47470,6 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e
|
|||||||
<source>Are you sure you want to delete this color scheme permanently?</source>
|
<source>Are you sure you want to delete this color scheme permanently?</source>
|
||||||
<translation>Möchten Sie das Farbschema löschen?</translation>
|
<translation>Möchten Sie das Farbschema löschen?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Delete</source>
|
|
||||||
<translation>Löschen</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Color Scheme Changed</source>
|
<source>Color Scheme Changed</source>
|
||||||
<translation>Farbschema geändert</translation>
|
<translation>Farbschema geändert</translation>
|
||||||
|
|||||||
@@ -15872,50 +15872,10 @@ Influence l'indentation des lignes de continuation.
|
|||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TextEditor::DisplaySettingsPage</name>
|
<name>TextEditor::DisplaySettingsPage</name>
|
||||||
<message>
|
|
||||||
<source>Display</source>
|
|
||||||
<translation type="obsolete">Affichage</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Display line &numbers</source>
|
|
||||||
<translation type="obsolete">Afficher les &numéros de ligne</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Display &folding markers</source>
|
|
||||||
<translation type="obsolete">Affiche les marqueurs de &pliage</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Show tabs and spaces.</source>
|
|
||||||
<translation type="obsolete">Afficher les tabulations et espaces.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>&Visualize whitespace</source>
|
|
||||||
<translation type="obsolete">&Visualiser les espaces</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Highlight current &line</source>
|
|
||||||
<translation type="obsolete">Surligner la &ligne courante</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Highlight &blocks</source>
|
|
||||||
<translation type="obsolete">Surligner les &blocs</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Animate matching parentheses</source>
|
<source>Animate matching parentheses</source>
|
||||||
<translation type="obsolete">Animer les parenthèses correspondantes</translation>
|
<translation type="obsolete">Animer les parenthèses correspondantes</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Text Wrapping</source>
|
|
||||||
<translation type="obsolete">Retour à la ligne dynamique</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Enable text &wrapping</source>
|
|
||||||
<translation type="obsolete">Activer le &retour à la ligne automatique</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Display right &margin at column:</source>
|
|
||||||
<translation type="obsolete">Afficher une &marge à la colonne :</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Navigation</source>
|
<source>Navigation</source>
|
||||||
<translation type="obsolete">Navigation</translation>
|
<translation type="obsolete">Navigation</translation>
|
||||||
@@ -15929,24 +15889,6 @@ Influence l'indentation des lignes de continuation.
|
|||||||
<translatorcomment>Put a red mark next to the text that has been modified since the last save</translatorcomment>
|
<translatorcomment>Put a red mark next to the text that has been modified since the last save</translatorcomment>
|
||||||
<translation type="obsolete">Marquer le texte modifié</translation>
|
<translation type="obsolete">Marquer le texte modifié</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Mark &text changes</source>
|
|
||||||
<translation type="obsolete">Marquer les modifications de &texte</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>&Animate matching parentheses</source>
|
|
||||||
<translation type="obsolete">&Animer les parenthèses correspondantes</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Auto-fold first &comment</source>
|
|
||||||
<translatorcomment>reformulation à l'infinitif
|
|
||||||
francis : en effet, une erreur de ma part --> validé.</translatorcomment>
|
|
||||||
<translation type="obsolete">Replier automatiquement le premier &commentaire</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Center &cursor on scroll</source>
|
|
||||||
<translation type="obsolete">Centrer le &curseur sur le barre de défilement</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TextEditor::FontSettingsPage</name>
|
<name>TextEditor::FontSettingsPage</name>
|
||||||
@@ -37242,14 +37184,6 @@ Ils requièrent Qt 4.7.4 ou supérieur et l'ensemble de composants install
|
|||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TextEditor::TabSettingsWidget</name>
|
<name>TextEditor::TabSettingsWidget</name>
|
||||||
<message>
|
|
||||||
<source>Form</source>
|
|
||||||
<translation type="obsolete">Formulaire</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Tabs And Indentation</source>
|
|
||||||
<translation type="obsolete">Tabulation et indentation</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Insert &spaces instead of tabs</source>
|
<source>Insert &spaces instead of tabs</source>
|
||||||
<translation type="obsolete">Insérer des e&spaces au lieu de tabulations</translation>
|
<translation type="obsolete">Insérer des e&spaces au lieu de tabulations</translation>
|
||||||
@@ -37262,14 +37196,6 @@ Ils requièrent Qt 4.7.4 ou supérieur et l'ensemble de composants install
|
|||||||
<source>Based on the surrounding lines</source>
|
<source>Based on the surrounding lines</source>
|
||||||
<translation type="obsolete">Basé sur les lignes environnantes</translation>
|
<translation type="obsolete">Basé sur les lignes environnantes</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Ta&b size:</source>
|
|
||||||
<translation type="obsolete">Taille de ta&bulation : </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>&Indent size:</source>
|
|
||||||
<translation type="obsolete">Taille de l'&indentation : </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Enable automatic &indentation</source>
|
<source>Enable automatic &indentation</source>
|
||||||
<translation type="obsolete">Activer l'&indentation automatique</translation>
|
<translation type="obsolete">Activer l'&indentation automatique</translation>
|
||||||
@@ -37282,71 +37208,6 @@ Ils requièrent Qt 4.7.4 ou supérieur et l'ensemble de composants install
|
|||||||
<source>&Backspace follows indentation</source>
|
<source>&Backspace follows indentation</source>
|
||||||
<translation type="obsolete">La touche &retour arrière suit l'indentation</translation>
|
<translation type="obsolete">La touche &retour arrière suit l'indentation</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Align continuation lines:</source>
|
|
||||||
<translation type="obsolete">Aligner les lignes de continuation : </translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source><html><head/><body>
|
|
||||||
Influences the indentation of continuation lines.
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>Not At All: Do not align at all. Lines will only be indented to the current logical indentation depth.
|
|
||||||
<pre>
|
|
||||||
(tab)int i = foo(a, b
|
|
||||||
(tab)c, d);
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>With Spaces: Always use spaces for alignment, regardless of the other indentation settings.
|
|
||||||
<pre>
|
|
||||||
(tab)int i = foo(a, b
|
|
||||||
(tab) c, d);
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>With Regular Indent: Use tabs and/or spaces for alignment, as configured above.
|
|
||||||
<pre>
|
|
||||||
(tab)int i = foo(a, b
|
|
||||||
(tab)(tab)(tab) c, d);
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
</ul></body></html></source>
|
|
||||||
<translation type="obsolete"><html><head/><body>
|
|
||||||
Influence l'indentation des lignes de continuation.
|
|
||||||
<ul>
|
|
||||||
<li>Pas du tout : ne pas aligner. Les lignes ne seront indentées jusqu'à la profondeur d'indentation logique.
|
|
||||||
<pre>
|
|
||||||
(tab)int i = foo(a, b
|
|
||||||
(tab)c, d);
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
<li>Avec espaces : toujours utiliser des espaces pour l'alignement, sans tenir compte des autres paramètres d'indentation.
|
|
||||||
<pre>
|
|
||||||
(tab)int i = foo(a, b
|
|
||||||
(tab) c, d);
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
<li>Avec indentation régulière : utiliser des tabulations et/ou des espaces pour l'alignement, en fonction de la configuration.
|
|
||||||
<pre>
|
|
||||||
(tab)int i = foo(a, b
|
|
||||||
(tab)(tab)(tab) c, d);
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
</ul></body></html></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Not At All</source>
|
|
||||||
<translation type="obsolete">Pas du tout</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>With Spaces</source>
|
|
||||||
<translation type="obsolete">Avec espaces</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>With Regular Indent</source>
|
|
||||||
<translation type="obsolete">Avec indentation régulière</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Tab key performs auto-indent:</source>
|
<source>Tab key performs auto-indent:</source>
|
||||||
<translation type="obsolete">La touche tabulation active l'identation automatique : </translation>
|
<translation type="obsolete">La touche tabulation active l'identation automatique : </translation>
|
||||||
@@ -37363,22 +37224,6 @@ Influence l'indentation des lignes de continuation.
|
|||||||
<source>In Leading White Space</source>
|
<source>In Leading White Space</source>
|
||||||
<translation type="obsolete">En début de ligne uniquement</translation>
|
<translation type="obsolete">En début de ligne uniquement</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Tab policy:</source>
|
|
||||||
<translation type="obsolete">Politique de tabulation :</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Spaces Only</source>
|
|
||||||
<translation type="obsolete">Espaces seulement</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Tabs Only</source>
|
|
||||||
<translation type="obsolete">Tabulation seulement</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Mixed</source>
|
|
||||||
<translation type="obsolete">Mixte</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>Valgrind</name>
|
<name>Valgrind</name>
|
||||||
@@ -43644,6 +43489,8 @@ Specifie comment retour arrière se comporte avec l'indentation.
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Auto-fold first &comment</source>
|
<source>Auto-fold first &comment</source>
|
||||||
|
<translatorcomment>reformulation à l'infinitif
|
||||||
|
francis : en effet, une erreur de ma part --> validé.</translatorcomment>
|
||||||
<translation>Replier automatiquement le premier &commentaire</translation>
|
<translation>Replier automatiquement le premier &commentaire</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
|
|||||||
@@ -52042,10 +52042,6 @@ Row: %4, Column: %5
|
|||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TextEditor::DisplaySettingsPage</name>
|
<name>TextEditor::DisplaySettingsPage</name>
|
||||||
<message>
|
|
||||||
<source>Display</source>
|
|
||||||
<translation>表示</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TextEditor::FontSettingsPageWidget</name>
|
<name>TextEditor::FontSettingsPageWidget</name>
|
||||||
|
|||||||
@@ -46346,10 +46346,6 @@ In addition, Shift+Enter inserts an escape character at the cursor position and
|
|||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TextEditor::DisplaySettingsPage</name>
|
<name>TextEditor::DisplaySettingsPage</name>
|
||||||
<message>
|
|
||||||
<source>Display</source>
|
|
||||||
<translation>Отображение</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Display line &numbers</source>
|
<source>Display line &numbers</source>
|
||||||
<translation>Показывать &номера строк</translation>
|
<translation>Показывать &номера строк</translation>
|
||||||
@@ -46499,10 +46495,6 @@ In addition, Shift+Enter inserts an escape character at the cursor position and
|
|||||||
<source>Color Scheme</source>
|
<source>Color Scheme</source>
|
||||||
<translation>Цветовая схема</translation>
|
<translation>Цветовая схема</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Delete</source>
|
|
||||||
<translation>Удалить</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Copy...</source>
|
<source>Copy...</source>
|
||||||
<translation>Копировать...</translation>
|
<translation>Копировать...</translation>
|
||||||
|
|||||||
@@ -14944,46 +14944,6 @@ Influences the indentation of continuation lines.
|
|||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TextEditor::DisplaySettingsPage</name>
|
<name>TextEditor::DisplaySettingsPage</name>
|
||||||
<message>
|
|
||||||
<source>Display</source>
|
|
||||||
<translation type="obsolete">显示</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Display line &numbers</source>
|
|
||||||
<translation type="obsolete">显示行号(&N)</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Display &folding markers</source>
|
|
||||||
<translation type="obsolete">显示折叠标记(&F)</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Show tabs and spaces.</source>
|
|
||||||
<translation type="obsolete">显示制表符和空白.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>&Visualize whitespace</source>
|
|
||||||
<translation type="obsolete">标示空白</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Highlight current &line</source>
|
|
||||||
<translation type="obsolete">高亮显示当前行(&L)</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Text Wrapping</source>
|
|
||||||
<translation type="obsolete">文字折行</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Enable text &wrapping</source>
|
|
||||||
<translation type="obsolete">开启文字折行</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Display right &margin at column:</source>
|
|
||||||
<translation type="obsolete">显示右边分界(&M)在列:</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Highlight &blocks</source>
|
|
||||||
<translation type="obsolete">高亮显示段落(&B)</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Animate matching parentheses</source>
|
<source>Animate matching parentheses</source>
|
||||||
<translation type="obsolete">动画显示对应的括号</translation>
|
<translation type="obsolete">动画显示对应的括号</translation>
|
||||||
@@ -15000,22 +14960,6 @@ Influences the indentation of continuation lines.
|
|||||||
<source>Mark text changes</source>
|
<source>Mark text changes</source>
|
||||||
<translation type="obsolete">标记文本改变</translation>
|
<translation type="obsolete">标记文本改变</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Mark &text changes</source>
|
|
||||||
<translation type="obsolete">标记文本改变(&T)</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>&Animate matching parentheses</source>
|
|
||||||
<translation type="obsolete">动画显示对应的括号(&A)</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Auto-fold first &comment</source>
|
|
||||||
<translation type="obsolete">自动折叠开头的注释(&C)</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Center &cursor on scroll</source>
|
|
||||||
<translation type="obsolete">滚动时居中光标(&C)</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TextEditor::FontSettingsPage</name>
|
<name>TextEditor::FontSettingsPage</name>
|
||||||
@@ -35241,14 +35185,6 @@ Requires Qt 4.7.4 or newer, and the component set installed for your Qt version.
|
|||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TextEditor::TabSettingsWidget</name>
|
<name>TextEditor::TabSettingsWidget</name>
|
||||||
<message>
|
|
||||||
<source>Form</source>
|
|
||||||
<translation type="obsolete">界面</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Tabs And Indentation</source>
|
|
||||||
<translation type="obsolete">制表符和缩进</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Insert &spaces instead of tabs</source>
|
<source>Insert &spaces instead of tabs</source>
|
||||||
<translation type="obsolete">插入空格代替制表符(&S)</translation>
|
<translation type="obsolete">插入空格代替制表符(&S)</translation>
|
||||||
@@ -35261,14 +35197,6 @@ Requires Qt 4.7.4 or newer, and the component set installed for your Qt version.
|
|||||||
<source>Based on the surrounding lines</source>
|
<source>Based on the surrounding lines</source>
|
||||||
<translation type="obsolete">依据周围行的情况</translation>
|
<translation type="obsolete">依据周围行的情况</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Ta&b size:</source>
|
|
||||||
<translation type="obsolete">制表符尺寸(&B):</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>&Indent size:</source>
|
|
||||||
<translation type="obsolete">缩进尺寸(&i):</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Enable automatic &indentation</source>
|
<source>Enable automatic &indentation</source>
|
||||||
<translation type="obsolete">开启自动缩进(&i)</translation>
|
<translation type="obsolete">开启自动缩进(&i)</translation>
|
||||||
@@ -35281,74 +35209,6 @@ Requires Qt 4.7.4 or newer, and the component set installed for your Qt version.
|
|||||||
<source>&Backspace follows indentation</source>
|
<source>&Backspace follows indentation</source>
|
||||||
<translation type="obsolete">退格键跟随缩进(&B)</translation>
|
<translation type="obsolete">退格键跟随缩进(&B)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Align continuation lines:</source>
|
|
||||||
<translation type="obsolete">对齐连续行:</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source><html><head/><body>
|
|
||||||
Influences the indentation of continuation lines.
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>Not At All: Do not align at all. Lines will only be indented to the current logical indentation depth.
|
|
||||||
<pre>
|
|
||||||
(tab)int i = foo(a, b
|
|
||||||
(tab)c, d);
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>With Spaces: Always use spaces for alignment, regardless of the other indentation settings.
|
|
||||||
<pre>
|
|
||||||
(tab)int i = foo(a, b
|
|
||||||
(tab) c, d);
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>With Regular Indent: Use tabs and/or spaces for alignment, as configured above.
|
|
||||||
<pre>
|
|
||||||
(tab)int i = foo(a, b
|
|
||||||
(tab)(tab)(tab) c, d);
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
</ul></body></html></source>
|
|
||||||
<translation type="obsolete"><html><head/><body>
|
|
||||||
改变连续行的缩进
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>不对齐: 不进行对齐。代码行只根据当前逻辑缩进深度进行缩进。
|
|
||||||
<pre>
|
|
||||||
(tab)int i = foo(a, b
|
|
||||||
(tab)c, d);
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>伴随空格: 允许使用空格进行对齐,忽略其他缩进设置。
|
|
||||||
<pre>
|
|
||||||
(tab)int i = foo(a, b
|
|
||||||
(tab) c, d);
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>伴随规则缩进: 在原设置上使用 tab 或 空格进行对齐。
|
|
||||||
<pre>
|
|
||||||
(tab)int i = foo(a, b
|
|
||||||
(tab)(tab)(tab) c, d);
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
</ul></body></html></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Not At All</source>
|
|
||||||
<translation type="obsolete">不对齐</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>With Spaces</source>
|
|
||||||
<translation type="obsolete">伴随空格</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>With Regular Indent</source>
|
|
||||||
<translation type="obsolete">伴随规则缩进</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Never</source>
|
<source>Never</source>
|
||||||
<translation type="obsolete">从不</translation>
|
<translation type="obsolete">从不</translation>
|
||||||
@@ -35361,22 +35221,6 @@ Influences the indentation of continuation lines.
|
|||||||
<source>In Leading White Space</source>
|
<source>In Leading White Space</source>
|
||||||
<translation type="obsolete">仅用于行首空白</translation>
|
<translation type="obsolete">仅用于行首空白</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Tab policy:</source>
|
|
||||||
<translation type="obsolete">缩进策略:</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Spaces Only</source>
|
|
||||||
<translation type="obsolete">仅空格</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Tabs Only</source>
|
|
||||||
<translation type="obsolete">仅缩进</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Mixed</source>
|
|
||||||
<translation type="obsolete">混合</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>Valgrind</name>
|
<name>Valgrind</name>
|
||||||
|
|||||||
@@ -74,10 +74,18 @@ QStringList DeviceShell::missingFeatures() const { return m_missingFeatures; }
|
|||||||
|
|
||||||
RunResult DeviceShell::run(const CommandLine &cmd, const QByteArray &stdInData)
|
RunResult DeviceShell::run(const CommandLine &cmd, const QByteArray &stdInData)
|
||||||
{
|
{
|
||||||
if (m_shellScriptState == State::NoScript) {
|
// If the script failed to install, use QtcProcess directly instead.
|
||||||
// Fallback ...
|
bool useProcess = m_shellScriptState == State::NoScript;
|
||||||
|
|
||||||
|
// Transferring large amounts of stdInData is slow via the shell script.
|
||||||
|
// Use QtcProcess directly if the size exceeds 100kb.
|
||||||
|
useProcess |= stdInData.size() > (1024 * 100);
|
||||||
|
|
||||||
|
if (useProcess) {
|
||||||
QtcProcess proc;
|
QtcProcess proc;
|
||||||
proc.setCommand(createFallbackCommand(cmd));
|
const CommandLine fallbackCmd = createFallbackCommand(cmd);
|
||||||
|
qCDebug(deviceShellLog) << "Running fallback:" << fallbackCmd;
|
||||||
|
proc.setCommand(fallbackCmd);
|
||||||
proc.setWriteData(stdInData);
|
proc.setWriteData(stdInData);
|
||||||
|
|
||||||
proc.start();
|
proc.start();
|
||||||
@@ -105,7 +113,7 @@ RunResult DeviceShell::run(const CommandLine &cmd, const QByteArray &stdInData)
|
|||||||
.arg(id)
|
.arg(id)
|
||||||
.arg(QString::fromLatin1(stdInData.toBase64()))
|
.arg(QString::fromLatin1(stdInData.toBase64()))
|
||||||
.arg(cmd.toUserOutput());
|
.arg(cmd.toUserOutput());
|
||||||
qCDebug(deviceShellLog) << "Running:" << command;
|
qCDebug(deviceShellLog) << "Running via shell:" << command;
|
||||||
m_shellProcess->writeRaw(command.toUtf8());
|
m_shellProcess->writeRaw(command.toUtf8());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
#include "qtcassert.h"
|
#include "qtcassert.h"
|
||||||
#include "qtcprocess.h"
|
#include "qtcprocess.h"
|
||||||
#include "terminalcommand.h"
|
#include "terminalcommand.h"
|
||||||
#include "winutils.h"
|
|
||||||
|
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QLocalServer>
|
#include <QLocalServer>
|
||||||
@@ -22,17 +21,19 @@
|
|||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
|
|
||||||
# include <windows.h>
|
#include "winutils.h"
|
||||||
# include <stdlib.h>
|
|
||||||
# include <cstring>
|
#include <cstring>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
# include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
# include <sys/types.h>
|
#include <sys/types.h>
|
||||||
# include <errno.h>
|
#include <errno.h>
|
||||||
# include <string.h>
|
#include <string.h>
|
||||||
# include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -423,7 +424,9 @@ void TerminalImpl::sendControlSignal(ControlSignal controlSignal)
|
|||||||
switch (controlSignal) {
|
switch (controlSignal) {
|
||||||
case ControlSignal::Terminate:
|
case ControlSignal::Terminate:
|
||||||
case ControlSignal::Kill:
|
case ControlSignal::Kill:
|
||||||
stopProcess();
|
killProcess();
|
||||||
|
if (HostOsInfo::isWindowsHost())
|
||||||
|
killStub();
|
||||||
break;
|
break;
|
||||||
case ControlSignal::Interrupt:
|
case ControlSignal::Interrupt:
|
||||||
sendCommand('i');
|
sendCommand('i');
|
||||||
@@ -468,13 +471,13 @@ void TerminalImpl::killStub()
|
|||||||
TerminateProcess(d->m_pid->hProcess, (unsigned)-1);
|
TerminateProcess(d->m_pid->hProcess, (unsigned)-1);
|
||||||
WaitForSingleObject(d->m_pid->hProcess, INFINITE);
|
WaitForSingleObject(d->m_pid->hProcess, INFINITE);
|
||||||
cleanupStub();
|
cleanupStub();
|
||||||
|
emitFinished(-1, QProcess::CrashExit);
|
||||||
#else
|
#else
|
||||||
sendCommand('s');
|
sendCommand('s');
|
||||||
stubServerShutdown();
|
stubServerShutdown();
|
||||||
|
d->m_process.stop();
|
||||||
d->m_process.waitForFinished();
|
d->m_process.waitForFinished();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
emitFinished(-1, QProcess::CrashExit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TerminalImpl::stopProcess()
|
void TerminalImpl::stopProcess()
|
||||||
@@ -525,7 +528,7 @@ QString TerminalImpl::stubServerListen()
|
|||||||
return QtcProcess::tr("Cannot create socket \"%1\": %2")
|
return QtcProcess::tr("Cannot create socket \"%1\": %2")
|
||||||
.arg(stubServer, d->m_stubServer.errorString());
|
.arg(stubServer, d->m_stubServer.errorString());
|
||||||
}
|
}
|
||||||
return QString();
|
return {};
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -253,6 +253,13 @@ void Theme::setInitialPalette(Theme *initTheme)
|
|||||||
initialPalette();
|
initialPalette();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Theme::setHelpMenu(QMenu *menu)
|
||||||
|
{
|
||||||
|
#ifdef Q_OS_MACOS
|
||||||
|
Internal::setMacOSHelpMenu(menu);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
QPalette Theme::initialPalette()
|
QPalette Theme::initialPalette()
|
||||||
{
|
{
|
||||||
static QPalette palette = copyPalette(QApplication::palette());
|
static QPalette palette = copyPalette(QApplication::palette());
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
class QMenu;
|
||||||
class QPalette;
|
class QPalette;
|
||||||
class QSettings;
|
class QSettings;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
@@ -473,6 +474,8 @@ public:
|
|||||||
|
|
||||||
static void setInitialPalette(Theme *initTheme);
|
static void setInitialPalette(Theme *initTheme);
|
||||||
|
|
||||||
|
static void setHelpMenu(QMenu *menu);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Theme(Theme *originTheme, QObject *parent = nullptr);
|
Theme(Theme *originTheme, QObject *parent = nullptr);
|
||||||
ThemePrivate *d;
|
ThemePrivate *d;
|
||||||
|
|||||||
@@ -3,11 +3,18 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <qglobal.h>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
class QMenu;
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
namespace Utils {
|
namespace Utils {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
void forceMacAppearance(bool dark);
|
void forceMacAppearance(bool dark);
|
||||||
bool currentAppearanceIsDark();
|
bool currentAppearanceIsDark();
|
||||||
|
void setMacOSHelpMenu(QMenu *menu);
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
} // Utils
|
} // Utils
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include "theme_mac.h"
|
#include "theme_mac.h"
|
||||||
|
|
||||||
#include <qglobal.h>
|
#include <QMenu>
|
||||||
#include <QOperatingSystemVersion>
|
#include <QOperatingSystemVersion>
|
||||||
|
|
||||||
#include <AppKit/AppKit.h>
|
#include <AppKit/AppKit.h>
|
||||||
@@ -47,5 +47,10 @@ bool currentAppearanceIsDark()
|
|||||||
return !currentAppearanceMatches(false /*==light*/);
|
return !currentAppearanceMatches(false /*==light*/);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setMacOSHelpMenu(QMenu *menu)
|
||||||
|
{
|
||||||
|
NSApp.helpMenu = menu->toNSMenu();
|
||||||
|
}
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
} // Utils
|
} // Utils
|
||||||
|
|||||||
@@ -181,7 +181,8 @@ bool AndroidDeployQtStep::init()
|
|||||||
}
|
}
|
||||||
|
|
||||||
const QtSupport::QtVersion * const qt = QtSupport::QtKitAspect::qtVersion(kit());
|
const QtSupport::QtVersion * const qt = QtSupport::QtKitAspect::qtVersion(kit());
|
||||||
if (qt && qt->supportsMultipleQtAbis() && !selectedAbis.contains(info.cpuAbi.first())) {
|
if (qt && qt->supportsMultipleQtAbis() && !info.cpuAbi.isEmpty() &&
|
||||||
|
!selectedAbis.contains(info.cpuAbi.first())) {
|
||||||
TaskHub::addTask(DeploymentTask(Task::Warning,
|
TaskHub::addTask(DeploymentTask(Task::Warning,
|
||||||
Tr::tr("Android: The main ABI of the deployment device (%1) is not selected. The app "
|
Tr::tr("Android: The main ABI of the deployment device (%1) is not selected. The app "
|
||||||
"execution or debugging might not work properly. Add it from Projects > Build > "
|
"execution or debugging might not work properly. Add it from Projects > Build > "
|
||||||
|
|||||||
@@ -293,7 +293,11 @@ void TestCodeParser::scanForTests(const Utils::FilePaths &fileList,
|
|||||||
qCDebug(LOG) << "File list empty (FullParse) - trying again in a sec";
|
qCDebug(LOG) << "File list empty (FullParse) - trying again in a sec";
|
||||||
emitUpdateTestTree();
|
emitUpdateTestTree();
|
||||||
return;
|
return;
|
||||||
|
} else if (list.size() == 1 && list.first() == project->projectFilePath()) {
|
||||||
|
qCDebug(LOG) << "File list contains only the project file.";
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
qCDebug(LOG) << "setting state to FullParse (scanForTests)";
|
qCDebug(LOG) << "setting state to FullParse (scanForTests)";
|
||||||
m_parserState = FullParse;
|
m_parserState = FullParse;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -155,16 +155,9 @@ void TestResultDelegate::currentChanged(const QModelIndex ¤t, const QModel
|
|||||||
|
|
||||||
void TestResultDelegate::clearCache()
|
void TestResultDelegate::clearCache()
|
||||||
{
|
{
|
||||||
const QModelIndex current = m_lastProcessedIndex;
|
|
||||||
m_lastProcessedIndex = QModelIndex();
|
m_lastProcessedIndex = QModelIndex();
|
||||||
m_lastProcessedFont = QFont();
|
m_lastProcessedFont = QFont();
|
||||||
m_lastWidth = -1;
|
m_lastWidth = -1;
|
||||||
if (current.isValid()) {
|
|
||||||
if (auto model = current.model()) {
|
|
||||||
if (model->index(current.row(), current.column(), current.parent()) == current)
|
|
||||||
emit sizeHintChanged(current);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestResultDelegate::limitTextOutput(QString &output) const
|
void TestResultDelegate::limitTextOutput(QString &output) const
|
||||||
|
|||||||
@@ -250,7 +250,7 @@ QByteArray dummyTextForContext(CharacterContext context, bool closingBraceBlock)
|
|||||||
case CharacterContext::IfOrElseWithoutScope:
|
case CharacterContext::IfOrElseWithoutScope:
|
||||||
return ";";
|
return ";";
|
||||||
case CharacterContext::NewStatementOrContinuation:
|
case CharacterContext::NewStatementOrContinuation:
|
||||||
return "/**/";
|
return "/*//*/";
|
||||||
case CharacterContext::Unknown:
|
case CharacterContext::Unknown:
|
||||||
default:
|
default:
|
||||||
QTC_ASSERT(false, return "";);
|
QTC_ASSERT(false, return "";);
|
||||||
@@ -302,7 +302,7 @@ int forceIndentWithExtraText(QByteArray &buffer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// A comment at the end of the line appears to prevent clang-format from removing line breaks.
|
// A comment at the end of the line appears to prevent clang-format from removing line breaks.
|
||||||
if (dummyText == "/**/" || dummyText.isEmpty()) {
|
if (dummyText == "/*//*/" || dummyText.isEmpty()) {
|
||||||
if (block.previous().isValid()) {
|
if (block.previous().isValid()) {
|
||||||
const int prevEndOffset = Utils::Text::utf8NthLineOffset(block.document(), buffer,
|
const int prevEndOffset = Utils::Text::utf8NthLineOffset(block.document(), buffer,
|
||||||
block.blockNumber()) + block.previous().text().length();
|
block.blockNumber()) + block.previous().text().length();
|
||||||
|
|||||||
@@ -704,4 +704,24 @@ void ClangFormatTest::testIndentFunctionArgumentOnNewLine()
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ClangFormatTest::testIndentCommentOnNewLine()
|
||||||
|
{
|
||||||
|
insertLines(
|
||||||
|
{"/*!",
|
||||||
|
" \\qmlproperty double Type::property",
|
||||||
|
" ",
|
||||||
|
" \\brief The property of Type.",
|
||||||
|
"*/"
|
||||||
|
});
|
||||||
|
m_indenter->indent(*m_cursor, QChar::Null, TextEditor::TabSettings());
|
||||||
|
QCOMPARE(documentLines(),
|
||||||
|
(std::vector<QString>{
|
||||||
|
"/*!",
|
||||||
|
" \\qmlproperty double Type::property",
|
||||||
|
" ",
|
||||||
|
" \\brief The property of Type.",
|
||||||
|
"*/"
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ClangFormat::Internal
|
} // namespace ClangFormat::Internal
|
||||||
|
|||||||
@@ -90,6 +90,7 @@ private slots:
|
|||||||
void testClassIndentStructure();
|
void testClassIndentStructure();
|
||||||
void testIndentInitializeVector();
|
void testIndentInitializeVector();
|
||||||
void testIndentFunctionArgumentOnNewLine();
|
void testIndentFunctionArgumentOnNewLine();
|
||||||
|
void testIndentCommentOnNewLine();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void insertLines(const std::vector<QString> &lines);
|
void insertLines(const std::vector<QString> &lines);
|
||||||
|
|||||||
@@ -197,19 +197,27 @@ static CMakeConfig configurationFromPresetProbe(
|
|||||||
const CMakeConfig cache = configurePreset.cacheVariables
|
const CMakeConfig cache = configurePreset.cacheVariables
|
||||||
? configurePreset.cacheVariables.value()
|
? configurePreset.cacheVariables.value()
|
||||||
: CMakeConfig();
|
: CMakeConfig();
|
||||||
const FilePath cmakeMakeProgram = cache.filePathValueOf(QByteArray("CMAKE_MAKE_PROGRAM"));
|
|
||||||
const FilePath toolchainFile = cache.filePathValueOf(QByteArray("CMAKE_TOOLCHAIN_FILE"));
|
auto expandCacheValue =
|
||||||
const QString prefixPath = cache.stringValueOf(QByteArray("CMAKE_PREFIX_PATH"));
|
[configurePreset, env, importPath, cache](const QString &key) -> QString {
|
||||||
const QString findRootPath = cache.stringValueOf(QByteArray("CMAKE_FIND_ROOT_PATH"));
|
QString result = cache.stringValueOf(key.toUtf8());
|
||||||
const QString qtHostPath = cache.stringValueOf(QByteArray("QT_HOST_PATH"));
|
CMakePresets::Macros::expand(configurePreset, env, importPath, result);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
const QString cmakeMakeProgram = expandCacheValue("CMAKE_MAKE_PROGRAM");
|
||||||
|
const QString toolchainFile = expandCacheValue("CMAKE_TOOLCHAIN_FILE");
|
||||||
|
const QString prefixPath = expandCacheValue("CMAKE_PREFIX_PATH");
|
||||||
|
const QString findRootPath = expandCacheValue("CMAKE_FIND_ROOT_PATH");
|
||||||
|
const QString qtHostPath = expandCacheValue("QT_HOST_PATH");
|
||||||
|
|
||||||
if (!cmakeMakeProgram.isEmpty()) {
|
if (!cmakeMakeProgram.isEmpty()) {
|
||||||
args.emplace_back(
|
args.emplace_back(
|
||||||
QStringLiteral("-DCMAKE_MAKE_PROGRAM=%1").arg(cmakeMakeProgram.toString()));
|
QStringLiteral("-DCMAKE_MAKE_PROGRAM=%1").arg(cmakeMakeProgram));
|
||||||
}
|
}
|
||||||
if (!toolchainFile.isEmpty()) {
|
if (!toolchainFile.isEmpty()) {
|
||||||
args.emplace_back(
|
args.emplace_back(
|
||||||
QStringLiteral("-DCMAKE_TOOLCHAIN_FILE=%1").arg(toolchainFile.toString()));
|
QStringLiteral("-DCMAKE_TOOLCHAIN_FILE=%1").arg(toolchainFile));
|
||||||
}
|
}
|
||||||
if (!prefixPath.isEmpty()) {
|
if (!prefixPath.isEmpty()) {
|
||||||
args.emplace_back(QStringLiteral("-DCMAKE_PREFIX_PATH=%1").arg(prefixPath));
|
args.emplace_back(QStringLiteral("-DCMAKE_PREFIX_PATH=%1").arg(prefixPath));
|
||||||
@@ -412,6 +420,27 @@ static QVector<ToolChainDescription> extractToolChainsFromCache(const CMakeConfi
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QString extractVisualStudioPlatformFromConfig(const CMakeConfig &config)
|
||||||
|
{
|
||||||
|
const QString cmakeGenerator = config.stringValueOf(QByteArray("CMAKE_GENERATOR"));
|
||||||
|
QString platform;
|
||||||
|
if (cmakeGenerator.contains("Visual Studio")) {
|
||||||
|
const FilePath linker = config.filePathValueOf("CMAKE_LINKER");
|
||||||
|
const QString toolsDir = linker.parentDir().fileName();
|
||||||
|
if (toolsDir.compare("x64", Qt::CaseInsensitive) == 0) {
|
||||||
|
platform = "x64";
|
||||||
|
} else if (toolsDir.compare("x86", Qt::CaseInsensitive) == 0) {
|
||||||
|
platform = "Win32";
|
||||||
|
} else if (toolsDir.compare("arm64", Qt::CaseInsensitive) == 0) {
|
||||||
|
platform = "ARM64";
|
||||||
|
} else if (toolsDir.compare("arm", Qt::CaseInsensitive) == 0) {
|
||||||
|
platform = "ARM";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return platform;
|
||||||
|
}
|
||||||
|
|
||||||
QList<void *> CMakeProjectImporter::examineDirectory(const FilePath &importPath,
|
QList<void *> CMakeProjectImporter::examineDirectory(const FilePath &importPath,
|
||||||
QString *warningMessage) const
|
QString *warningMessage) const
|
||||||
{
|
{
|
||||||
@@ -476,6 +505,17 @@ QList<void *> CMakeProjectImporter::examineDirectory(const FilePath &importPath,
|
|||||||
QApplication::setOverrideCursor(Qt::WaitCursor);
|
QApplication::setOverrideCursor(Qt::WaitCursor);
|
||||||
config = configurationFromPresetProbe(importPath, configurePreset);
|
config = configurationFromPresetProbe(importPath, configurePreset);
|
||||||
QApplication::restoreOverrideCursor();
|
QApplication::restoreOverrideCursor();
|
||||||
|
|
||||||
|
if (!configurePreset.generator) {
|
||||||
|
QString cmakeGenerator = config.stringValueOf(QByteArray("CMAKE_GENERATOR"));
|
||||||
|
configurePreset.generator = cmakeGenerator;
|
||||||
|
data->generator = cmakeGenerator;
|
||||||
|
data->platform = extractVisualStudioPlatformFromConfig(config);
|
||||||
|
if (!data->platform.isEmpty()) {
|
||||||
|
configurePreset.architecture = PresetsDetails::ValueStrategyPair();
|
||||||
|
configurePreset.architecture->value = data->platform;
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
config = cache;
|
config = cache;
|
||||||
config << CMakeConfigItem("CMAKE_COMMAND",
|
config << CMakeConfigItem("CMAKE_COMMAND",
|
||||||
@@ -566,6 +606,8 @@ QList<void *> CMakeProjectImporter::examineDirectory(const FilePath &importPath,
|
|||||||
data->generator = config.stringValueOf("CMAKE_GENERATOR");
|
data->generator = config.stringValueOf("CMAKE_GENERATOR");
|
||||||
data->extraGenerator = config.stringValueOf("CMAKE_EXTRA_GENERATOR");
|
data->extraGenerator = config.stringValueOf("CMAKE_EXTRA_GENERATOR");
|
||||||
data->platform = config.stringValueOf("CMAKE_GENERATOR_PLATFORM");
|
data->platform = config.stringValueOf("CMAKE_GENERATOR_PLATFORM");
|
||||||
|
if (data->platform.isEmpty())
|
||||||
|
data->platform = extractVisualStudioPlatformFromConfig(config);
|
||||||
data->toolset = config.stringValueOf("CMAKE_GENERATOR_TOOLSET");
|
data->toolset = config.stringValueOf("CMAKE_GENERATOR_TOOLSET");
|
||||||
data->sysroot = config.filePathValueOf("CMAKE_SYSROOT");
|
data->sysroot = config.filePathValueOf("CMAKE_SYSROOT");
|
||||||
|
|
||||||
@@ -618,22 +660,24 @@ bool CMakeProjectImporter::matchKit(void *directoryData, const Kit *k) const
|
|||||||
if (data->qt.qt && QtSupport::QtKitAspect::qtVersionId(k) != data->qt.qt->uniqueId())
|
if (data->qt.qt && QtSupport::QtKitAspect::qtVersionId(k) != data->qt.qt->uniqueId())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
const QList<Id> allLanguages = ToolChainManager::allLanguages();
|
bool haveCMakePreset = false;
|
||||||
for (const ToolChainDescription &tcd : data->toolChains) {
|
|
||||||
if (!Utils::contains(allLanguages, [&tcd](const Id& language) {return language == tcd.language;}))
|
|
||||||
continue;
|
|
||||||
ToolChain *tc = ToolChainKitAspect::toolChain(k, tcd.language);
|
|
||||||
if (!tc || !tc->matchesCompilerCommand(tcd.compilerPath)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!data->cmakePreset.isEmpty()) {
|
if (!data->cmakePreset.isEmpty()) {
|
||||||
auto presetConfigItem = CMakeConfigurationKitAspect::cmakePresetConfigItem(k);
|
auto presetConfigItem = CMakeConfigurationKitAspect::cmakePresetConfigItem(k);
|
||||||
if (data->cmakePreset != presetConfigItem.expandedValue(k))
|
if (data->cmakePreset != presetConfigItem.expandedValue(k))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
ensureBuildDirectory(*data, k);
|
ensureBuildDirectory(*data, k);
|
||||||
|
haveCMakePreset = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QList<Id> allLanguages = ToolChainManager::allLanguages();
|
||||||
|
for (const ToolChainDescription &tcd : data->toolChains) {
|
||||||
|
if (!Utils::contains(allLanguages, [&tcd](const Id& language) {return language == tcd.language;}))
|
||||||
|
continue;
|
||||||
|
ToolChain *tc = ToolChainKitAspect::toolChain(k, tcd.language);
|
||||||
|
if ((!tc || !tc->matchesCompilerCommand(tcd.compilerPath)) && !haveCMakePreset) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qCDebug(cmInputLog) << k->displayName()
|
qCDebug(cmInputLog) << k->displayName()
|
||||||
|
|||||||
@@ -462,6 +462,7 @@ void CMakeToolItemConfigWidget::onBinaryPathEditingFinished()
|
|||||||
{
|
{
|
||||||
updateQchFilePath();
|
updateQchFilePath();
|
||||||
store();
|
store();
|
||||||
|
load(m_model->cmakeToolItem(m_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMakeToolItemConfigWidget::updateQchFilePath()
|
void CMakeToolItemConfigWidget::updateQchFilePath()
|
||||||
|
|||||||
@@ -295,6 +295,9 @@ CMakeTool::Version CMakeTool::version() const
|
|||||||
|
|
||||||
QString CMakeTool::versionDisplay() const
|
QString CMakeTool::versionDisplay() const
|
||||||
{
|
{
|
||||||
|
if (m_executable.isEmpty())
|
||||||
|
return {};
|
||||||
|
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
return Tr::tr("Version not parseable");
|
return Tr::tr("Version not parseable");
|
||||||
|
|
||||||
|
|||||||
@@ -99,22 +99,17 @@ static QString expandMacroEnv(const QString ¯oPrefix,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static QHash<QString, QString> getEnvCombined(
|
static Utils::Environment getEnvCombined(const std::optional<Utils::Environment> &optPresetEnv,
|
||||||
const std::optional<QHash<QString, QString>> &optPresetEnv, const Utils::Environment &env)
|
const Utils::Environment &env)
|
||||||
{
|
{
|
||||||
QHash<QString, QString> result;
|
Utils::Environment result = env;
|
||||||
|
|
||||||
for (auto it = env.constBegin(); it != env.constEnd(); ++it) {
|
|
||||||
if (it.value().second)
|
|
||||||
result.insert(it.key().name, it.value().first);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!optPresetEnv)
|
if (!optPresetEnv)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
QHash<QString, QString> presetEnv = optPresetEnv.value();
|
Utils::Environment presetEnv = optPresetEnv.value();
|
||||||
for (auto it = presetEnv.constKeyValueBegin(); it != presetEnv.constKeyValueEnd(); ++it) {
|
for (auto it = presetEnv.constBegin(); it != presetEnv.constEnd(); ++it) {
|
||||||
result[it->first] = it->second;
|
result.set(it.key().name, it.value().first);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -125,10 +120,10 @@ void expand(const PresetType &preset,
|
|||||||
Utils::Environment &env,
|
Utils::Environment &env,
|
||||||
const Utils::FilePath &sourceDirectory)
|
const Utils::FilePath &sourceDirectory)
|
||||||
{
|
{
|
||||||
const QHash<QString, QString> presetEnv = getEnvCombined(preset.environment, env);
|
const Utils::Environment presetEnv = getEnvCombined(preset.environment, env);
|
||||||
for (auto it = presetEnv.constKeyValueBegin(); it != presetEnv.constKeyValueEnd(); ++it) {
|
for (auto it = presetEnv.constBegin(); it != presetEnv.constEnd(); ++it) {
|
||||||
const QString key = it->first;
|
const QString key = it.key().name;
|
||||||
QString value = it->second;
|
QString value = it.value().first;
|
||||||
|
|
||||||
expandAllButEnv(preset, sourceDirectory, value);
|
expandAllButEnv(preset, sourceDirectory, value);
|
||||||
value = expandMacroEnv("env", value, [presetEnv](const QString ¯oName) {
|
value = expandMacroEnv("env", value, [presetEnv](const QString ¯oName) {
|
||||||
@@ -161,15 +156,15 @@ void expand(const PresetType &preset,
|
|||||||
Utils::EnvironmentItems &envItems,
|
Utils::EnvironmentItems &envItems,
|
||||||
const Utils::FilePath &sourceDirectory)
|
const Utils::FilePath &sourceDirectory)
|
||||||
{
|
{
|
||||||
const QHash<QString, QString> presetEnv = preset.environment ? preset.environment.value()
|
const Utils::Environment presetEnv = preset.environment ? preset.environment.value()
|
||||||
: QHash<QString, QString>();
|
: Utils::Environment();
|
||||||
for (auto it = presetEnv.constKeyValueBegin(); it != presetEnv.constKeyValueEnd(); ++it) {
|
for (auto it = presetEnv.constBegin(); it != presetEnv.constEnd(); ++it) {
|
||||||
const QString key = it->first;
|
const QString key = it.key().name;
|
||||||
QString value = it->second;
|
QString value = it.value().first;
|
||||||
|
|
||||||
expandAllButEnv(preset, sourceDirectory, value);
|
expandAllButEnv(preset, sourceDirectory, value);
|
||||||
value = expandMacroEnv("env", value, [presetEnv](const QString ¯oName) {
|
value = expandMacroEnv("env", value, [presetEnv](const QString ¯oName) {
|
||||||
if (presetEnv.contains(macroName))
|
if (presetEnv.hasKey(macroName))
|
||||||
return presetEnv.value(macroName);
|
return presetEnv.value(macroName);
|
||||||
return QString("${%1}").arg(macroName);
|
return QString("${%1}").arg(macroName);
|
||||||
});
|
});
|
||||||
@@ -199,7 +194,7 @@ void expand(const PresetType &preset,
|
|||||||
{
|
{
|
||||||
expandAllButEnv(preset, sourceDirectory, value);
|
expandAllButEnv(preset, sourceDirectory, value);
|
||||||
|
|
||||||
const QHash<QString, QString> presetEnv = getEnvCombined(preset.environment, env);
|
const Utils::Environment presetEnv = getEnvCombined(preset.environment, env);
|
||||||
value = expandMacroEnv("env", value, [presetEnv](const QString ¯oName) {
|
value = expandMacroEnv("env", value, [presetEnv](const QString ¯oName) {
|
||||||
return presetEnv.value(macroName);
|
return presetEnv.value(macroName);
|
||||||
});
|
});
|
||||||
@@ -225,7 +220,7 @@ void updateToolchainFile(
|
|||||||
Utils::FilePath toolchainFile = Utils::FilePath::fromString(toolchainFileName);
|
Utils::FilePath toolchainFile = Utils::FilePath::fromString(toolchainFileName);
|
||||||
if (toolchainFile.isRelativePath()) {
|
if (toolchainFile.isRelativePath()) {
|
||||||
for (const auto &path : {sourceDirectory, buildDirectory}) {
|
for (const auto &path : {sourceDirectory, buildDirectory}) {
|
||||||
Utils::FilePath probePath = toolchainFile.resolvePath(path);
|
Utils::FilePath probePath = path.resolvePath(toolchainFile);
|
||||||
if (probePath.exists() && probePath != path) {
|
if (probePath.exists() && probePath != path) {
|
||||||
toolchainFile = probePath;
|
toolchainFile = probePath;
|
||||||
break;
|
break;
|
||||||
@@ -236,6 +231,8 @@ void updateToolchainFile(
|
|||||||
if (!toolchainFile.exists())
|
if (!toolchainFile.exists())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
const QString toolchainFileString = toolchainFile.cleanPath().toString();
|
||||||
|
|
||||||
// toolchainFile takes precedence to CMAKE_TOOLCHAIN_FILE
|
// toolchainFile takes precedence to CMAKE_TOOLCHAIN_FILE
|
||||||
CMakeConfig cache = configurePreset.cacheVariables ? configurePreset.cacheVariables.value()
|
CMakeConfig cache = configurePreset.cacheVariables ? configurePreset.cacheVariables.value()
|
||||||
: CMakeConfig();
|
: CMakeConfig();
|
||||||
@@ -244,11 +241,11 @@ void updateToolchainFile(
|
|||||||
return item.key == "CMAKE_TOOLCHAIN_FILE";
|
return item.key == "CMAKE_TOOLCHAIN_FILE";
|
||||||
});
|
});
|
||||||
if (it != cache.end())
|
if (it != cache.end())
|
||||||
it->value = toolchainFile.toString().toUtf8();
|
it->value = toolchainFileString.toUtf8();
|
||||||
else
|
else
|
||||||
cache << CMakeConfigItem("CMAKE_TOOLCHAIN_FILE",
|
cache << CMakeConfigItem("CMAKE_TOOLCHAIN_FILE",
|
||||||
CMakeConfigItem::FILEPATH,
|
CMakeConfigItem::FILEPATH,
|
||||||
toolchainFile.toString().toUtf8());
|
toolchainFileString.toUtf8());
|
||||||
|
|
||||||
configurePreset.cacheVariables = cache;
|
configurePreset.cacheVariables = cache;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -208,10 +208,10 @@ bool parseConfigurePresets(const QJsonValue &jsonValue,
|
|||||||
const QJsonObject environmentObj = object.value("environment").toObject();
|
const QJsonObject environmentObj = object.value("environment").toObject();
|
||||||
for (const QString &envKey : environmentObj.keys()) {
|
for (const QString &envKey : environmentObj.keys()) {
|
||||||
if (!preset.environment)
|
if (!preset.environment)
|
||||||
preset.environment = QHash<QString, QString>();
|
preset.environment = Utils::Environment();
|
||||||
|
|
||||||
QJsonValue envValue = environmentObj.value(envKey);
|
QJsonValue envValue = environmentObj.value(envKey);
|
||||||
preset.environment.value().insert(envKey, envValue.toString());
|
preset.environment.value().set(envKey, envValue.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
const QJsonObject warningsObj = object.value("warnings").toObject();
|
const QJsonObject warningsObj = object.value("warnings").toObject();
|
||||||
@@ -335,10 +335,10 @@ bool parseBuildPresets(const QJsonValue &jsonValue,
|
|||||||
const QJsonObject environmentObj = object.value("environment").toObject();
|
const QJsonObject environmentObj = object.value("environment").toObject();
|
||||||
for (const QString &envKey : environmentObj.keys()) {
|
for (const QString &envKey : environmentObj.keys()) {
|
||||||
if (!preset.environment)
|
if (!preset.environment)
|
||||||
preset.environment = QHash<QString, QString>();
|
preset.environment = Utils::Environment();
|
||||||
|
|
||||||
QJsonValue envValue = environmentObj.value(envKey);
|
QJsonValue envValue = environmentObj.value(envKey);
|
||||||
preset.environment.value().insert(envKey, envValue.toString());
|
preset.environment.value().set(envKey, envValue.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (object.contains("configurePreset"))
|
if (object.contains("configurePreset"))
|
||||||
@@ -441,6 +441,44 @@ bool PresetsParser::parse(const Utils::FilePath &jsonFile, QString &errorMessage
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QHash<QString, QString> merge(const QHash<QString, QString> &first,
|
||||||
|
const QHash<QString, QString> &second)
|
||||||
|
{
|
||||||
|
QHash<QString, QString> result = first;
|
||||||
|
for (auto it = second.constKeyValueBegin(); it != second.constKeyValueEnd(); ++it) {
|
||||||
|
result[it->first] = it->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Utils::Environment merge(const Utils::Environment &first, const Utils::Environment &second)
|
||||||
|
{
|
||||||
|
Utils::Environment result = first;
|
||||||
|
for (auto it = second.constBegin(); it != second.constEnd(); ++it) {
|
||||||
|
result.set(it.key().name, it.value().first);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static CMakeConfig merge(const CMakeConfig &first, const CMakeConfig &second)
|
||||||
|
{
|
||||||
|
return Utils::setUnionMerge<CMakeConfig>(
|
||||||
|
first,
|
||||||
|
second,
|
||||||
|
[](const auto & /*left*/, const auto &right) { return right; },
|
||||||
|
&CMakeConfigItem::less);
|
||||||
|
}
|
||||||
|
|
||||||
|
static QStringList merge(const QStringList &first, const QStringList &second)
|
||||||
|
{
|
||||||
|
return Utils::setUnionMerge<QStringList>(
|
||||||
|
first,
|
||||||
|
second,
|
||||||
|
[](const auto & /*left*/, const auto &right) { return right; });
|
||||||
|
}
|
||||||
|
|
||||||
void PresetsDetails::ConfigurePreset::inheritFrom(const ConfigurePreset &other)
|
void PresetsDetails::ConfigurePreset::inheritFrom(const ConfigurePreset &other)
|
||||||
{
|
{
|
||||||
if (!condition && other.condition && !other.condition.value().isNull())
|
if (!condition && other.condition && !other.condition.value().isNull())
|
||||||
@@ -449,6 +487,9 @@ void PresetsDetails::ConfigurePreset::inheritFrom(const ConfigurePreset &other)
|
|||||||
if (!vendor && other.vendor)
|
if (!vendor && other.vendor)
|
||||||
vendor = other.vendor;
|
vendor = other.vendor;
|
||||||
|
|
||||||
|
if (vendor && other.vendor)
|
||||||
|
vendor = merge(other.vendor.value(), vendor.value());
|
||||||
|
|
||||||
if (!generator && other.generator)
|
if (!generator && other.generator)
|
||||||
generator = other.generator;
|
generator = other.generator;
|
||||||
|
|
||||||
@@ -472,9 +513,13 @@ void PresetsDetails::ConfigurePreset::inheritFrom(const ConfigurePreset &other)
|
|||||||
|
|
||||||
if (!cacheVariables && other.cacheVariables)
|
if (!cacheVariables && other.cacheVariables)
|
||||||
cacheVariables = other.cacheVariables;
|
cacheVariables = other.cacheVariables;
|
||||||
|
else if (cacheVariables && other.cacheVariables)
|
||||||
|
cacheVariables = merge(other.cacheVariables.value(), cacheVariables.value());
|
||||||
|
|
||||||
if (!environment && other.environment)
|
if (!environment && other.environment)
|
||||||
environment = other.environment;
|
environment = other.environment;
|
||||||
|
else if (environment && other.environment)
|
||||||
|
environment = merge(other.environment.value(), environment.value());
|
||||||
|
|
||||||
if (!warnings && other.warnings)
|
if (!warnings && other.warnings)
|
||||||
warnings = other.warnings;
|
warnings = other.warnings;
|
||||||
@@ -494,8 +539,13 @@ void PresetsDetails::BuildPreset::inheritFrom(const BuildPreset &other)
|
|||||||
if (!vendor && other.vendor)
|
if (!vendor && other.vendor)
|
||||||
vendor = other.vendor;
|
vendor = other.vendor;
|
||||||
|
|
||||||
|
if (vendor && other.vendor)
|
||||||
|
vendor = merge(other.vendor.value(), vendor.value());
|
||||||
|
|
||||||
if (!environment && other.environment)
|
if (!environment && other.environment)
|
||||||
environment = other.environment;
|
environment = other.environment;
|
||||||
|
else if (environment && other.environment)
|
||||||
|
environment = merge(other.environment.value(), environment.value());
|
||||||
|
|
||||||
if (!configurePreset && other.configurePreset)
|
if (!configurePreset && other.configurePreset)
|
||||||
configurePreset = other.configurePreset;
|
configurePreset = other.configurePreset;
|
||||||
@@ -508,6 +558,8 @@ void PresetsDetails::BuildPreset::inheritFrom(const BuildPreset &other)
|
|||||||
|
|
||||||
if (!targets && other.targets)
|
if (!targets && other.targets)
|
||||||
targets = other.targets;
|
targets = other.targets;
|
||||||
|
else if (targets && other.targets)
|
||||||
|
targets = merge(other.targets.value(), targets.value());
|
||||||
|
|
||||||
if (!configuration && other.configuration)
|
if (!configuration && other.configuration)
|
||||||
configuration = other.configuration;
|
configuration = other.configuration;
|
||||||
@@ -520,6 +572,8 @@ void PresetsDetails::BuildPreset::inheritFrom(const BuildPreset &other)
|
|||||||
|
|
||||||
if (!nativeToolOptions && other.nativeToolOptions)
|
if (!nativeToolOptions && other.nativeToolOptions)
|
||||||
nativeToolOptions = other.nativeToolOptions;
|
nativeToolOptions = other.nativeToolOptions;
|
||||||
|
else if (nativeToolOptions && other.nativeToolOptions)
|
||||||
|
nativeToolOptions = merge(other.nativeToolOptions.value(), nativeToolOptions.value());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PresetsDetails::Condition::evaluate() const
|
bool PresetsDetails::Condition::evaluate() const
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include "cmakeconfigitem.h"
|
#include "cmakeconfigitem.h"
|
||||||
|
|
||||||
|
#include <utils/environment.h>
|
||||||
#include <utils/filepath.h>
|
#include <utils/filepath.h>
|
||||||
|
|
||||||
#include <QHash>
|
#include <QHash>
|
||||||
@@ -103,7 +104,7 @@ public:
|
|||||||
std::optional<QString> installDir;
|
std::optional<QString> installDir;
|
||||||
std::optional<QString> cmakeExecutable;
|
std::optional<QString> cmakeExecutable;
|
||||||
std::optional<CMakeConfig> cacheVariables;
|
std::optional<CMakeConfig> cacheVariables;
|
||||||
std::optional<QHash<QString, QString>> environment;
|
std::optional<Utils::Environment> environment;
|
||||||
std::optional<Warnings> warnings;
|
std::optional<Warnings> warnings;
|
||||||
std::optional<Errors> errors;
|
std::optional<Errors> errors;
|
||||||
std::optional<Debug> debug;
|
std::optional<Debug> debug;
|
||||||
@@ -120,7 +121,7 @@ public:
|
|||||||
std::optional<QHash<QString, QString>> vendor;
|
std::optional<QHash<QString, QString>> vendor;
|
||||||
std::optional<QString> displayName;
|
std::optional<QString> displayName;
|
||||||
std::optional<QString> description;
|
std::optional<QString> description;
|
||||||
std::optional<QHash<QString, QString>> environment;
|
std::optional<Utils::Environment> environment;
|
||||||
std::optional<QString> configurePreset;
|
std::optional<QString> configurePreset;
|
||||||
std::optional<bool> inheritConfigureEnvironment = true;
|
std::optional<bool> inheritConfigureEnvironment = true;
|
||||||
std::optional<int> jobs;
|
std::optional<int> jobs;
|
||||||
|
|||||||
@@ -258,12 +258,12 @@ static void registerActionsForOptions()
|
|||||||
categoryDisplay[page->category()] = page->displayCategory();
|
categoryDisplay[page->category()] = page->displayCategory();
|
||||||
}
|
}
|
||||||
for (IOptionsPage *page : IOptionsPage::allOptionsPages()) {
|
for (IOptionsPage *page : IOptionsPage::allOptionsPages()) {
|
||||||
Id commandId = generateOpenPageCommandId(page);
|
const Id commandId = generateOpenPageCommandId(page);
|
||||||
if (!commandId.isValid())
|
if (!commandId.isValid())
|
||||||
continue;
|
continue;
|
||||||
const QString actionTitle = Tr::tr("%1 > %2 Preferences...")
|
const QString actionTitle = Tr::tr("%1 > %2 Preferences...")
|
||||||
.arg(categoryDisplay.value(page->category()), page->displayName());
|
.arg(categoryDisplay.value(page->category()), page->displayName());
|
||||||
auto action = new QAction(actionTitle);
|
auto action = new QAction(actionTitle, m_instance);
|
||||||
QObject::connect(action, &QAction::triggered, m_instance, [id = page->id()]() {
|
QObject::connect(action, &QAction::triggered, m_instance, [id = page->id()]() {
|
||||||
ICore::showOptionsDialog(id);
|
ICore::showOptionsDialog(id);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1376,6 +1376,21 @@ void DocumentManager::saveSettings()
|
|||||||
s->endGroup();
|
s->endGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void restoreRecentFiles(const QVariantList &recentFiles, const QStringList &recentEditorIds)
|
||||||
|
{
|
||||||
|
QList<DocumentManager::RecentFile> result;
|
||||||
|
|
||||||
|
for (int i = 0, n = recentFiles.size(); i < n; ++i) {
|
||||||
|
QString editorId;
|
||||||
|
if (i < recentEditorIds.size()) // guard against old or weird settings
|
||||||
|
editorId = recentEditorIds.at(i);
|
||||||
|
const Utils::FilePath &filePath = FilePath::fromVariant(recentFiles.at(i));
|
||||||
|
result.append({filePath, Id::fromString(editorId)});
|
||||||
|
}
|
||||||
|
|
||||||
|
d->m_recentFiles = result;
|
||||||
|
}
|
||||||
|
|
||||||
void readSettings()
|
void readSettings()
|
||||||
{
|
{
|
||||||
QSettings *s = ICore::settings();
|
QSettings *s = ICore::settings();
|
||||||
@@ -1384,23 +1399,14 @@ void readSettings()
|
|||||||
const QVariantList recentFiles = s->value(QLatin1String(filesKeyC)).toList();
|
const QVariantList recentFiles = s->value(QLatin1String(filesKeyC)).toList();
|
||||||
const QStringList recentEditorIds = s->value(QLatin1String(editorsKeyC)).toStringList();
|
const QStringList recentEditorIds = s->value(QLatin1String(editorsKeyC)).toStringList();
|
||||||
s->endGroup();
|
s->endGroup();
|
||||||
// clean non-existing files
|
|
||||||
for (int i = 0, n = recentFiles.size(); i < n; ++i) {
|
restoreRecentFiles(recentFiles, recentEditorIds);
|
||||||
QString editorId;
|
|
||||||
if (i < recentEditorIds.size()) // guard against old or weird settings
|
|
||||||
editorId = recentEditorIds.at(i);
|
|
||||||
const Utils::FilePath &filePath = FilePath::fromVariant(recentFiles.at(i));
|
|
||||||
if (filePath.exists() && !filePath.isDir())
|
|
||||||
d->m_recentFiles.append({filePath, Id::fromString(editorId)});
|
|
||||||
}
|
|
||||||
|
|
||||||
s->beginGroup(QLatin1String(directoryGroupC));
|
s->beginGroup(QLatin1String(directoryGroupC));
|
||||||
const FilePath settingsProjectDir = FilePath::fromString(s->value(QLatin1String(projectDirectoryKeyC),
|
|
||||||
QString()).toString());
|
d->m_projectsDirectory = FilePath::fromVariant(
|
||||||
if (!settingsProjectDir.isEmpty() && settingsProjectDir.isDir())
|
s->value(QLatin1String(projectDirectoryKeyC), PathChooser::homePath().toVariant()));
|
||||||
d->m_projectsDirectory = settingsProjectDir;
|
|
||||||
else
|
|
||||||
d->m_projectsDirectory = PathChooser::homePath();
|
|
||||||
d->m_useProjectsDirectory
|
d->m_useProjectsDirectory
|
||||||
= s->value(QLatin1String(useProjectDirectoryKeyC), kUseProjectsDirectoryDefault).toBool();
|
= s->value(QLatin1String(useProjectDirectoryKeyC), kUseProjectsDirectoryDefault).toBool();
|
||||||
|
|
||||||
|
|||||||
@@ -232,6 +232,12 @@ bool HighlightScrollBarOverlay::eventFilter(QObject *object, QEvent *event)
|
|||||||
case QEvent::ZOrderChange:
|
case QEvent::ZOrderChange:
|
||||||
raise();
|
raise();
|
||||||
break;
|
break;
|
||||||
|
case QEvent::Show:
|
||||||
|
show();
|
||||||
|
break;
|
||||||
|
case QEvent::Hide:
|
||||||
|
hide();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -360,7 +366,7 @@ void HighlightScrollBarController::setScrollArea(QAbstractScrollArea *scrollArea
|
|||||||
|
|
||||||
double HighlightScrollBarController::lineHeight() const
|
double HighlightScrollBarController::lineHeight() const
|
||||||
{
|
{
|
||||||
return m_lineHeight;
|
return ceil(m_lineHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HighlightScrollBarController::setLineHeight(double lineHeight)
|
void HighlightScrollBarController::setLineHeight(double lineHeight)
|
||||||
|
|||||||
@@ -561,7 +561,7 @@ bool CompletionList::eventFilter(QObject *watched, QEvent *event)
|
|||||||
LocatorWidget::LocatorWidget(Locator *locator)
|
LocatorWidget::LocatorWidget(Locator *locator)
|
||||||
: m_locatorModel(new LocatorModel(this))
|
: m_locatorModel(new LocatorModel(this))
|
||||||
, m_filterMenu(new QMenu(this))
|
, m_filterMenu(new QMenu(this))
|
||||||
, m_centeredPopupAction(new QAction(tr("Open as Centered Popup")))
|
, m_centeredPopupAction(new QAction(tr("Open as Centered Popup"), this))
|
||||||
, m_refreshAction(new QAction(tr("Refresh"), this))
|
, m_refreshAction(new QAction(tr("Refresh"), this))
|
||||||
, m_configureAction(new QAction(ICore::msgShowOptionsDialog(), this))
|
, m_configureAction(new QAction(ICore::msgShowOptionsDialog(), this))
|
||||||
, m_fileLineEdit(new Utils::FancyLineEdit)
|
, m_fileLineEdit(new Utils::FancyLineEdit)
|
||||||
|
|||||||
@@ -514,6 +514,7 @@ void MainWindow::registerDefaultContainers()
|
|||||||
ac = ActionManager::createMenu(Constants::M_HELP);
|
ac = ActionManager::createMenu(Constants::M_HELP);
|
||||||
menubar->addMenu(ac, Constants::G_HELP);
|
menubar->addMenu(ac, Constants::G_HELP);
|
||||||
ac->menu()->setTitle(tr("&Help"));
|
ac->menu()->setTitle(tr("&Help"));
|
||||||
|
Theme::setHelpMenu(ac->menu());
|
||||||
ac->appendGroup(Constants::G_HELP_HELP);
|
ac->appendGroup(Constants::G_HELP_HELP);
|
||||||
ac->appendGroup(Constants::G_HELP_SUPPORT);
|
ac->appendGroup(Constants::G_HELP_SUPPORT);
|
||||||
ac->appendGroup(Constants::G_HELP_ABOUT);
|
ac->appendGroup(Constants::G_HELP_ABOUT);
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ QString CppcheckRunner::currentCommand() const
|
|||||||
|
|
||||||
void CppcheckRunner::checkQueued()
|
void CppcheckRunner::checkQueued()
|
||||||
{
|
{
|
||||||
if (m_queue.isEmpty() || m_binary.isEmpty())
|
if (m_queue.isEmpty() || !m_binary.isExecutableFile())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
FilePaths files = m_queue.begin().value();
|
FilePaths files = m_queue.begin().value();
|
||||||
|
|||||||
@@ -193,11 +193,8 @@ void TerminalRunner::start()
|
|||||||
|
|
||||||
void TerminalRunner::stop()
|
void TerminalRunner::stop()
|
||||||
{
|
{
|
||||||
if (m_stubProc && m_stubProc->isRunning()) {
|
if (m_stubProc && m_stubProc->isRunning())
|
||||||
m_stubProc->stop();
|
m_stubProc->stop();
|
||||||
m_stubProc->waitForFinished();
|
|
||||||
}
|
|
||||||
reportStopped();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TerminalRunner::stubStarted()
|
void TerminalRunner::stubStarted()
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QStandardItemModel>
|
#include <QStandardItemModel>
|
||||||
|
#include <QTimer>
|
||||||
#include <QTreeView>
|
#include <QTreeView>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
|
||||||
@@ -75,7 +76,7 @@ LogChangeWidget::LogChangeWidget(QWidget *parent)
|
|||||||
setSelectionBehavior(QAbstractItemView::SelectRows);
|
setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||||
setActivationMode(Utils::DoubleClickActivation);
|
setActivationMode(Utils::DoubleClickActivation);
|
||||||
connect(this, &LogChangeWidget::activated, this, &LogChangeWidget::emitCommitActivated);
|
connect(this, &LogChangeWidget::activated, this, &LogChangeWidget::emitCommitActivated);
|
||||||
setFocus();
|
QTimer::singleShot(0, [this] { setFocus(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LogChangeWidget::init(const FilePath &repository, const QString &commit, LogFlags flags)
|
bool LogChangeWidget::init(const FilePath &repository, const QString &commit, LogFlags flags)
|
||||||
@@ -211,16 +212,15 @@ const QStandardItem *LogChangeWidget::currentItem(int column) const
|
|||||||
LogChangeDialog::LogChangeDialog(bool isReset, QWidget *parent) :
|
LogChangeDialog::LogChangeDialog(bool isReset, QWidget *parent) :
|
||||||
QDialog(parent)
|
QDialog(parent)
|
||||||
, m_widget(new LogChangeWidget)
|
, m_widget(new LogChangeWidget)
|
||||||
|
, m_dialogButtonBox(new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this))
|
||||||
, m_dialogButtonBox(new QDialogButtonBox(this))
|
|
||||||
{
|
{
|
||||||
auto layout = new QVBoxLayout(this);
|
auto layout = new QVBoxLayout(this);
|
||||||
layout->addWidget(new QLabel(isReset ? Tr::tr("Reset to:") : Tr::tr("Select change:"), this));
|
layout->addWidget(new QLabel(isReset ? Tr::tr("Reset to:") : Tr::tr("Select change:"), this));
|
||||||
layout->addWidget(m_widget);
|
layout->addWidget(m_widget);
|
||||||
auto popUpLayout = new QHBoxLayout;
|
auto popUpLayout = new QHBoxLayout;
|
||||||
if (isReset) {
|
if (isReset) {
|
||||||
popUpLayout->addWidget(new QLabel(Tr::tr("Reset type:"), this));
|
popUpLayout->addWidget(new QLabel(Tr::tr("Reset type:")));
|
||||||
m_resetTypeComboBox = new QComboBox(this);
|
m_resetTypeComboBox = new QComboBox;
|
||||||
m_resetTypeComboBox->addItem(Tr::tr("Hard"), "--hard");
|
m_resetTypeComboBox->addItem(Tr::tr("Hard"), "--hard");
|
||||||
m_resetTypeComboBox->addItem(Tr::tr("Mixed"), "--mixed");
|
m_resetTypeComboBox->addItem(Tr::tr("Mixed"), "--mixed");
|
||||||
m_resetTypeComboBox->addItem(Tr::tr("Soft"), "--soft");
|
m_resetTypeComboBox->addItem(Tr::tr("Soft"), "--soft");
|
||||||
@@ -230,8 +230,7 @@ LogChangeDialog::LogChangeDialog(bool isReset, QWidget *parent) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
popUpLayout->addWidget(m_dialogButtonBox);
|
popUpLayout->addWidget(m_dialogButtonBox);
|
||||||
m_dialogButtonBox->addButton(QDialogButtonBox::Cancel);
|
QPushButton *okButton = m_dialogButtonBox->button(QDialogButtonBox::Ok);
|
||||||
QPushButton *okButton = m_dialogButtonBox->addButton(QDialogButtonBox::Ok);
|
|
||||||
layout->addLayout(popUpLayout);
|
layout->addLayout(popUpLayout);
|
||||||
|
|
||||||
connect(m_dialogButtonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
|
connect(m_dialogButtonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
|
||||||
|
|||||||
@@ -114,8 +114,10 @@ GeneralSettingsPageWidget::GeneralSettingsPageWidget()
|
|||||||
|
|
||||||
// startup group box
|
// startup group box
|
||||||
auto startupGroupBox = new QGroupBox(Tr::tr("Startup"));
|
auto startupGroupBox = new QGroupBox(Tr::tr("Startup"));
|
||||||
|
startupGroupBox->setObjectName("startupGroupBox");
|
||||||
|
|
||||||
contextHelpComboBox = new QComboBox(startupGroupBox);
|
contextHelpComboBox = new QComboBox(startupGroupBox);
|
||||||
|
contextHelpComboBox->setObjectName("contextHelpComboBox");
|
||||||
contextHelpComboBox->addItem(Tr::tr("Show Side-by-Side if Possible"));
|
contextHelpComboBox->addItem(Tr::tr("Show Side-by-Side if Possible"));
|
||||||
contextHelpComboBox->addItem(Tr::tr("Always Show Side-by-Side"));
|
contextHelpComboBox->addItem(Tr::tr("Always Show Side-by-Side"));
|
||||||
contextHelpComboBox->addItem(Tr::tr("Always Show in Help Mode"));
|
contextHelpComboBox->addItem(Tr::tr("Always Show in Help Mode"));
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ void DocumentLocatorFilter::updateSymbols(const DocumentUri &uri,
|
|||||||
return;
|
return;
|
||||||
QMutexLocker locker(&m_mutex);
|
QMutexLocker locker(&m_mutex);
|
||||||
m_currentSymbols = symbols;
|
m_currentSymbols = symbols;
|
||||||
emit symbolsUpToDate({});
|
emit symbolsUpToDate(QPrivateSignal());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DocumentLocatorFilter::resetSymbols()
|
void DocumentLocatorFilter::resetSymbols()
|
||||||
|
|||||||
@@ -14,4 +14,18 @@ struct McuTargetDescription;
|
|||||||
McuTarget::OS deduceOperatingSystem(const McuTargetDescription &);
|
McuTarget::OS deduceOperatingSystem(const McuTargetDescription &);
|
||||||
QString removeRtosSuffix(const QString &environmentVariable);
|
QString removeRtosSuffix(const QString &environmentVariable);
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
class asKeyValueRange
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
asKeyValueRange(T &data)
|
||||||
|
: m_data{data}
|
||||||
|
{}
|
||||||
|
auto begin() { return m_data.keyValueBegin(); }
|
||||||
|
auto end() { return m_data.keyValueEnd(); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
T &m_data;
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace McuSupport::Internal
|
} // namespace McuSupport::Internal
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
#include "mcusupportconstants.h"
|
#include "mcusupportconstants.h"
|
||||||
#include "mcusupportplugin.h"
|
#include "mcusupportplugin.h"
|
||||||
#include "mcusupportsdk.h"
|
#include "mcusupportsdk.h"
|
||||||
|
#include "mcusupporttr.h"
|
||||||
#include "mcutarget.h"
|
#include "mcutarget.h"
|
||||||
|
|
||||||
#include <cmakeprojectmanager/cmakekitinformation.h>
|
#include <cmakeprojectmanager/cmakekitinformation.h>
|
||||||
@@ -247,10 +248,19 @@ public:
|
|||||||
auto cxxToolchain = toolchainPackage->toolChain(
|
auto cxxToolchain = toolchainPackage->toolChain(
|
||||||
ProjectExplorer::Constants::CXX_LANGUAGE_ID);
|
ProjectExplorer::Constants::CXX_LANGUAGE_ID);
|
||||||
|
|
||||||
|
if (cToolchain && cxxToolchain) {
|
||||||
configMap.insert("CMAKE_CXX_COMPILER",
|
configMap.insert("CMAKE_CXX_COMPILER",
|
||||||
cxxToolchain->compilerCommand().toString().toLatin1());
|
cxxToolchain->compilerCommand().toString().toLatin1());
|
||||||
configMap.insert("CMAKE_C_COMPILER",
|
configMap.insert("CMAKE_C_COMPILER",
|
||||||
cToolchain->compilerCommand().toString().toLatin1());
|
cToolchain->compilerCommand().toString().toLatin1());
|
||||||
|
} else {
|
||||||
|
printMessage(Tr::tr("Warning for target %1: invalid toolchain path (%2). "
|
||||||
|
"Update the toolchain in Edit > Preferences > Kits.")
|
||||||
|
.arg(generateKitNameFromTarget(mcuTarget),
|
||||||
|
toolchainPackage->path().toUserOutput()),
|
||||||
|
true);
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
const FilePath cMakeToolchainFile = mcuTarget->toolChainFilePackage()->path();
|
const FilePath cMakeToolchainFile = mcuTarget->toolChainFilePackage()->path();
|
||||||
|
|
||||||
@@ -335,7 +345,15 @@ Kit *newKit(const McuTarget *mcuTarget, const McuPackagePtr &qtForMCUsSdk)
|
|||||||
k->fix();
|
k->fix();
|
||||||
};
|
};
|
||||||
|
|
||||||
return KitManager::registerKit(init);
|
Kit *kit = KitManager::registerKit(init);
|
||||||
|
if (kit) {
|
||||||
|
printMessage(Tr::tr("Kit for %1 created.").arg(generateKitNameFromTarget(mcuTarget)), false);
|
||||||
|
} else {
|
||||||
|
printMessage(Tr::tr("Error registering Kit for %1.")
|
||||||
|
.arg(generateKitNameFromTarget(mcuTarget)),
|
||||||
|
true);
|
||||||
|
}
|
||||||
|
return kit;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Kit Information
|
// Kit Information
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ McuPackage::McuPackage(const SettingsHandler::Ptr &settingsHandler,
|
|||||||
const QStringList &versions,
|
const QStringList &versions,
|
||||||
const QString &downloadUrl,
|
const QString &downloadUrl,
|
||||||
const McuPackageVersionDetector *versionDetector,
|
const McuPackageVersionDetector *versionDetector,
|
||||||
const bool addToSystemPath)
|
const bool addToSystemPath,
|
||||||
|
const Utils::PathChooser::Kind &valueType)
|
||||||
: settingsHandler(settingsHandler)
|
: settingsHandler(settingsHandler)
|
||||||
, m_label(label)
|
, m_label(label)
|
||||||
, m_defaultPath(settingsHandler->getPath(settingsKey, QSettings::SystemScope, defaultPath))
|
, m_defaultPath(settingsHandler->getPath(settingsKey, QSettings::SystemScope, defaultPath))
|
||||||
@@ -50,6 +51,7 @@ McuPackage::McuPackage(const SettingsHandler::Ptr &settingsHandler,
|
|||||||
, m_environmentVariableName(envVarName)
|
, m_environmentVariableName(envVarName)
|
||||||
, m_downloadUrl(downloadUrl)
|
, m_downloadUrl(downloadUrl)
|
||||||
, m_addToSystemPath(addToSystemPath)
|
, m_addToSystemPath(addToSystemPath)
|
||||||
|
, m_valueType(valueType)
|
||||||
{
|
{
|
||||||
m_path = FilePath::fromUserInput(qtcEnvironmentVariable(m_environmentVariableName));
|
m_path = FilePath::fromUserInput(qtcEnvironmentVariable(m_environmentVariableName));
|
||||||
if (!m_path.exists()) {
|
if (!m_path.exists()) {
|
||||||
@@ -141,7 +143,7 @@ void McuPackage::updateStatus()
|
|||||||
m_status = Status::ValidPathInvalidPackage;
|
m_status = Status::ValidPathInvalidPackage;
|
||||||
} else if (m_versionDetector && m_detectedVersion.isEmpty()) {
|
} else if (m_versionDetector && m_detectedVersion.isEmpty()) {
|
||||||
m_status = Status::ValidPackageVersionNotDetected;
|
m_status = Status::ValidPackageVersionNotDetected;
|
||||||
} else if (!validVersion) {
|
} else if (m_versionDetector && !validVersion) {
|
||||||
m_status = Status::ValidPackageMismatchedVersion;
|
m_status = Status::ValidPackageMismatchedVersion;
|
||||||
} else {
|
} else {
|
||||||
m_status = Status::ValidPackage;
|
m_status = Status::ValidPackage;
|
||||||
@@ -157,7 +159,8 @@ McuPackage::Status McuPackage::status() const
|
|||||||
|
|
||||||
bool McuPackage::isValidStatus() const
|
bool McuPackage::isValidStatus() const
|
||||||
{
|
{
|
||||||
return m_status == Status::ValidPackage || m_status == Status::ValidPackageMismatchedVersion;
|
return m_status == Status::ValidPackage || m_status == Status::ValidPackageMismatchedVersion
|
||||||
|
|| m_status == Status::ValidPackageVersionNotDetected;
|
||||||
}
|
}
|
||||||
|
|
||||||
void McuPackage::updateStatusUi()
|
void McuPackage::updateStatusUi()
|
||||||
@@ -223,7 +226,8 @@ QString McuPackage::statusText() const
|
|||||||
: tr("Path is empty, %1 not found.").arg(displayRequiredPath);
|
: tr("Path is empty, %1 not found.").arg(displayRequiredPath);
|
||||||
break;
|
break;
|
||||||
case Status::ValidPackageVersionNotDetected:
|
case Status::ValidPackageVersionNotDetected:
|
||||||
response = tr("Path %1 exists, but version could not be detected.").arg(displayPackagePath);
|
response = tr("Path %1 exists, but version %2 could not be detected.")
|
||||||
|
.arg(displayPackagePath, displayVersions);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return response;
|
return response;
|
||||||
@@ -244,6 +248,7 @@ QWidget *McuPackage::widget()
|
|||||||
{
|
{
|
||||||
auto *widget = new QWidget;
|
auto *widget = new QWidget;
|
||||||
m_fileChooser = new PathChooser(widget);
|
m_fileChooser = new PathChooser(widget);
|
||||||
|
m_fileChooser->setExpectedKind(m_valueType);
|
||||||
m_fileChooser->lineEdit()->setButtonIcon(FancyLineEdit::Right, Icons::RESET.icon());
|
m_fileChooser->lineEdit()->setButtonIcon(FancyLineEdit::Right, Icons::RESET.icon());
|
||||||
m_fileChooser->lineEdit()->setButtonVisible(FancyLineEdit::Right, true);
|
m_fileChooser->lineEdit()->setButtonVisible(FancyLineEdit::Right, true);
|
||||||
connect(m_fileChooser->lineEdit(), &FancyLineEdit::rightButtonClicked, this, [&] {
|
connect(m_fileChooser->lineEdit(), &FancyLineEdit::rightButtonClicked, this, [&] {
|
||||||
@@ -359,10 +364,9 @@ ToolChain *McuToolChainPackage::msvcToolChain(Id language)
|
|||||||
{
|
{
|
||||||
ToolChain *toolChain = ToolChainManager::toolChain([language](const ToolChain *t) {
|
ToolChain *toolChain = ToolChainManager::toolChain([language](const ToolChain *t) {
|
||||||
const Abi abi = t->targetAbi();
|
const Abi abi = t->targetAbi();
|
||||||
// TODO: Should Abi::WindowsMsvc2022Flavor be added too?
|
return abi.osFlavor() == Abi::WindowsMsvc2019Flavor
|
||||||
return (abi.osFlavor() == Abi::WindowsMsvc2017Flavor
|
|
||||||
|| abi.osFlavor() == Abi::WindowsMsvc2019Flavor)
|
|
||||||
&& abi.architecture() == Abi::X86Architecture && abi.wordWidth() == 64
|
&& abi.architecture() == Abi::X86Architecture && abi.wordWidth() == 64
|
||||||
|
&& t->typeId() == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID
|
||||||
&& t->language() == language;
|
&& t->language() == language;
|
||||||
});
|
});
|
||||||
return toolChain;
|
return toolChain;
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#include "settingshandler.h"
|
#include "settingshandler.h"
|
||||||
|
|
||||||
#include <utils/filepath.h>
|
#include <utils/filepath.h>
|
||||||
|
#include <utils/pathchooser.h>
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
@@ -18,7 +19,6 @@ class ToolChain;
|
|||||||
}
|
}
|
||||||
|
|
||||||
namespace Utils {
|
namespace Utils {
|
||||||
class PathChooser;
|
|
||||||
class InfoLabel;
|
class InfoLabel;
|
||||||
class Id;
|
class Id;
|
||||||
} // namespace Utils
|
} // namespace Utils
|
||||||
@@ -30,7 +30,8 @@ class McuPackage : public McuAbstractPackage
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
McuPackage(const SettingsHandler::Ptr &settingsHandler,
|
McuPackage(
|
||||||
|
const SettingsHandler::Ptr &settingsHandler,
|
||||||
const QString &label,
|
const QString &label,
|
||||||
const Utils::FilePath &defaultPath,
|
const Utils::FilePath &defaultPath,
|
||||||
const Utils::FilePath &detectionPath,
|
const Utils::FilePath &detectionPath,
|
||||||
@@ -40,7 +41,8 @@ public:
|
|||||||
const QStringList &versions = {},
|
const QStringList &versions = {},
|
||||||
const QString &downloadUrl = {},
|
const QString &downloadUrl = {},
|
||||||
const McuPackageVersionDetector *versionDetector = nullptr,
|
const McuPackageVersionDetector *versionDetector = nullptr,
|
||||||
const bool addToPath = false);
|
const bool addToPath = false,
|
||||||
|
const Utils::PathChooser::Kind &valueType = Utils::PathChooser::Kind::ExistingDirectory);
|
||||||
|
|
||||||
~McuPackage() override = default;
|
~McuPackage() override = default;
|
||||||
|
|
||||||
@@ -92,6 +94,7 @@ private:
|
|||||||
const QString m_environmentVariableName;
|
const QString m_environmentVariableName;
|
||||||
const QString m_downloadUrl;
|
const QString m_downloadUrl;
|
||||||
const bool m_addToSystemPath;
|
const bool m_addToSystemPath;
|
||||||
|
const Utils::PathChooser::Kind m_valueType;
|
||||||
|
|
||||||
Status m_status = Status::InvalidPath;
|
Status m_status = Status::InvalidPath;
|
||||||
}; // class McuPackage
|
}; // class McuPackage
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ QtcPlugin {
|
|||||||
Depends { name: "Qt.widgets" }
|
Depends { name: "Qt.widgets" }
|
||||||
Depends { name: "Qt.testlib"; condition: qtc.testsEnabled }
|
Depends { name: "Qt.testlib"; condition: qtc.testsEnabled }
|
||||||
Depends { name: "Utils" }
|
Depends { name: "Utils" }
|
||||||
|
Depends { name: "app_version_header" }
|
||||||
|
|
||||||
Depends { name: "Core" }
|
Depends { name: "Core" }
|
||||||
Depends { name: "BareMetal" }
|
Depends { name: "BareMetal" }
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "mcusupportoptions.h"
|
#include "mcusupportoptions.h"
|
||||||
|
|
||||||
|
#include "mcuhelpers.h"
|
||||||
#include "mcukitmanager.h"
|
#include "mcukitmanager.h"
|
||||||
#include "mcupackage.h"
|
#include "mcupackage.h"
|
||||||
#include "mcusupportconstants.h"
|
#include "mcusupportconstants.h"
|
||||||
@@ -16,16 +17,71 @@
|
|||||||
#include <coreplugin/icore.h>
|
#include <coreplugin/icore.h>
|
||||||
#include <debugger/debuggerkitinformation.h>
|
#include <debugger/debuggerkitinformation.h>
|
||||||
#include <utils/algorithm.h>
|
#include <utils/algorithm.h>
|
||||||
|
#include <utils/filepath.h>
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
#include <qtsupport/qtversionmanager.h>
|
#include <qtsupport/qtversionmanager.h>
|
||||||
|
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
|
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
using namespace Utils;
|
using namespace Utils;
|
||||||
|
|
||||||
namespace McuSupport::Internal {
|
namespace McuSupport::Internal {
|
||||||
|
|
||||||
|
static const Utils::FilePath expandWildcards(const Utils::FilePath& path)
|
||||||
|
{
|
||||||
|
if (!path.fileName().contains("*") && !path.fileName().contains("?"))
|
||||||
|
return path;
|
||||||
|
|
||||||
|
const FilePath p = path.parentDir();
|
||||||
|
|
||||||
|
auto entries = p.dirEntries(
|
||||||
|
Utils::FileFilter({path.fileName()}, QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot));
|
||||||
|
|
||||||
|
if (entries.isEmpty())
|
||||||
|
return path;
|
||||||
|
|
||||||
|
// Return the last match (can correspond to the latest version)
|
||||||
|
sort(entries, [](const FilePath &a, const FilePath &b) { return a.fileName() < b.fileName(); });
|
||||||
|
|
||||||
|
return entries.last();
|
||||||
|
}
|
||||||
|
|
||||||
|
Macros *McuSdkRepository::globalMacros()
|
||||||
|
{
|
||||||
|
static Macros macros;
|
||||||
|
return ¯os;
|
||||||
|
}
|
||||||
|
|
||||||
|
void McuSdkRepository::expandVariablesAndWildcards()
|
||||||
|
{
|
||||||
|
for (const auto &target : std::as_const(mcuTargets)) {
|
||||||
|
auto macroExpander = getMacroExpander(*target);
|
||||||
|
for (const auto &package : target->packages()) {
|
||||||
|
package->setPath(expandWildcards(macroExpander->expand(package->path())));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MacroExpanderPtr McuSdkRepository::getMacroExpander(const McuTarget &target)
|
||||||
|
{
|
||||||
|
auto macroExpander = std::make_shared<Utils::MacroExpander>();
|
||||||
|
|
||||||
|
//register the macros
|
||||||
|
for (const auto &package : target.packages()) {
|
||||||
|
macroExpander->registerVariable(package->cmakeVariableName().toLocal8Bit(),
|
||||||
|
package->label(),
|
||||||
|
[package] { return package->path().toString(); });
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto [key, macro] : asKeyValueRange(*globalMacros()))
|
||||||
|
macroExpander->registerVariable(key.toLocal8Bit(), "QtMCUs Macro", macro);
|
||||||
|
|
||||||
|
return macroExpander;
|
||||||
|
}
|
||||||
|
|
||||||
McuSupportOptions::McuSupportOptions(const SettingsHandler::Ptr &settingsHandler, QObject *parent)
|
McuSupportOptions::McuSupportOptions(const SettingsHandler::Ptr &settingsHandler, QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, qtForMCUsSdkPackage(createQtForMCUsPackage(settingsHandler))
|
, qtForMCUsSdkPackage(createQtForMCUsPackage(settingsHandler))
|
||||||
@@ -93,8 +149,15 @@ bool McuSupportOptions::isLegacyVersion(const QVersionNumber &version)
|
|||||||
return version < newVersion;
|
return version < newVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
void McuSupportOptions::setQulDir(const FilePath &)
|
void McuSupportOptions::setQulDir(const FilePath &path)
|
||||||
{
|
{
|
||||||
|
//register the Qt installation directory containing Qul dir
|
||||||
|
auto qtPath = (path / "../..").cleanPath();
|
||||||
|
if (qtPath.exists()) {
|
||||||
|
McuSdkRepository::globalMacros()->insert("QtDir", [qtPathString = qtPath.path()] {
|
||||||
|
return qtPathString;
|
||||||
|
});
|
||||||
|
}
|
||||||
qtForMCUsSdkPackage->updateStatus();
|
qtForMCUsSdkPackage->updateStatus();
|
||||||
if (qtForMCUsSdkPackage->isValidStatus())
|
if (qtForMCUsSdkPackage->isValidStatus())
|
||||||
sdkRepository = targetsAndPackages(qtForMCUsSdkPackage, settingsHandler);
|
sdkRepository = targetsAndPackages(qtForMCUsSdkPackage, settingsHandler);
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#include "settingshandler.h"
|
#include "settingshandler.h"
|
||||||
|
|
||||||
#include <utils/environmentfwd.h>
|
#include <utils/environmentfwd.h>
|
||||||
|
#include <utils/macroexpander.h>
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QVersionNumber>
|
#include <QVersionNumber>
|
||||||
@@ -30,11 +31,19 @@ namespace Internal {
|
|||||||
|
|
||||||
class McuAbstractPackage;
|
class McuAbstractPackage;
|
||||||
|
|
||||||
|
using MacroExpanderPtr = std::shared_ptr<Utils::MacroExpander>;
|
||||||
|
using Macros = QHash<QString, Utils::MacroExpander::StringFunction>;
|
||||||
|
|
||||||
class McuSdkRepository final
|
class McuSdkRepository final
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Targets mcuTargets;
|
Targets mcuTargets;
|
||||||
Packages packages;
|
Packages packages;
|
||||||
|
|
||||||
|
void expandVariablesAndWildcards();
|
||||||
|
MacroExpanderPtr getMacroExpander(const McuTarget &target);
|
||||||
|
|
||||||
|
static Macros *globalMacros();
|
||||||
};
|
};
|
||||||
|
|
||||||
class McuSupportOptions final : public QObject
|
class McuSupportOptions final : public QObject
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#include "mcusupportconstants.h"
|
#include "mcusupportconstants.h"
|
||||||
#include "mcusupportoptions.h"
|
#include "mcusupportoptions.h"
|
||||||
#include "mcusupportsdk.h"
|
#include "mcusupportsdk.h"
|
||||||
|
#include "mcusupporttr.h"
|
||||||
#include "mcutarget.h"
|
#include "mcutarget.h"
|
||||||
#include "mcutargetfactory.h"
|
#include "mcutargetfactory.h"
|
||||||
#include "settingshandler.h"
|
#include "settingshandler.h"
|
||||||
@@ -28,6 +29,7 @@
|
|||||||
#include <QGroupBox>
|
#include <QGroupBox>
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
|
#include <QMessageBox>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
|
||||||
@@ -287,9 +289,30 @@ void McuSupportOptionsWidget::apply()
|
|||||||
bool pathsChanged = false;
|
bool pathsChanged = false;
|
||||||
|
|
||||||
m_settingsHandler->setAutomaticKitCreation(m_options.automaticKitCreationEnabled());
|
m_settingsHandler->setAutomaticKitCreation(m_options.automaticKitCreationEnabled());
|
||||||
McuTargetFactory::expandVariables(m_options.sdkRepository.packages);
|
m_options.sdkRepository.expandVariablesAndWildcards();
|
||||||
|
|
||||||
|
QMessageBox warningPopup(QMessageBox::Icon::Warning,
|
||||||
|
Tr::tr("Warning"),
|
||||||
|
Tr::tr("Unable to apply changes in Devices > MCU."),
|
||||||
|
QMessageBox::Ok,
|
||||||
|
this);
|
||||||
|
|
||||||
|
auto target = currentMcuTarget();
|
||||||
|
if (!target) {
|
||||||
|
warningPopup.setInformativeText(Tr::tr("No target selected."));
|
||||||
|
warningPopup.exec();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!target->isValid()) {
|
||||||
|
warningPopup.setInformativeText(
|
||||||
|
Tr::tr("Invalid paths present for target\n%1")
|
||||||
|
.arg(McuKitManager::generateKitNameFromTarget(target.get())));
|
||||||
|
warningPopup.exec();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
pathsChanged |= m_options.qtForMCUsSdkPackage->writeToSettings();
|
pathsChanged |= m_options.qtForMCUsSdkPackage->writeToSettings();
|
||||||
for (const auto &package : std::as_const(m_options.sdkRepository.packages))
|
for (const auto &package : target->packages())
|
||||||
pathsChanged |= package->writeToSettings();
|
pathsChanged |= package->writeToSettings();
|
||||||
|
|
||||||
if (pathsChanged) {
|
if (pathsChanged) {
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "mcusupportconstants.h"
|
#include "mcusupportconstants.h"
|
||||||
#include "mcusupportoptions.h"
|
#include "mcusupportoptions.h"
|
||||||
#include "mcusupportplugin.h"
|
#include "mcusupportplugin.h"
|
||||||
|
#include "mcusupporttr.h"
|
||||||
#include "mcusupportversiondetection.h"
|
#include "mcusupportversiondetection.h"
|
||||||
#include "mcutarget.h"
|
#include "mcutarget.h"
|
||||||
#include "mcutargetdescription.h"
|
#include "mcutargetdescription.h"
|
||||||
@@ -190,7 +191,7 @@ McuToolChainPackagePtr createMsvcToolChainPackage(const SettingsHandler::Ptr &se
|
|||||||
const FilePath defaultPath = toolChain ? toolChain->compilerCommand().parentDir() : FilePath();
|
const FilePath defaultPath = toolChain ? toolChain->compilerCommand().parentDir() : FilePath();
|
||||||
|
|
||||||
const auto *versionDetector = new McuPackageExecutableVersionDetector(detectionPath,
|
const auto *versionDetector = new McuPackageExecutableVersionDetector(detectionPath,
|
||||||
{"--version"},
|
{"/?"},
|
||||||
R"(\b(\d+\.\d+)\.\d+\b)");
|
R"(\b(\d+\.\d+)\.\d+\b)");
|
||||||
|
|
||||||
return McuToolChainPackagePtr{new McuToolChainPackage(settingsHandler,
|
return McuToolChainPackagePtr{new McuToolChainPackage(settingsHandler,
|
||||||
@@ -276,8 +277,8 @@ McuToolChainPackagePtr createGhsToolchainPackage(const SettingsHandler::Ptr &set
|
|||||||
const FilePath defaultPath = FilePath::fromUserInput(qtcEnvironmentVariable(envVar));
|
const FilePath defaultPath = FilePath::fromUserInput(qtcEnvironmentVariable(envVar));
|
||||||
|
|
||||||
const auto *versionDetector
|
const auto *versionDetector
|
||||||
= new McuPackageExecutableVersionDetector(FilePath("as850").withExecutableSuffix(),
|
= new McuPackageExecutableVersionDetector(FilePath("gversion").withExecutableSuffix(),
|
||||||
{"-V"},
|
{"-help"},
|
||||||
R"(\bv(\d+\.\d+\.\d+)\b)");
|
R"(\bv(\d+\.\d+\.\d+)\b)");
|
||||||
|
|
||||||
return McuToolChainPackagePtr{
|
return McuToolChainPackagePtr{
|
||||||
@@ -301,8 +302,8 @@ McuToolChainPackagePtr createGhsArmToolchainPackage(const SettingsHandler::Ptr &
|
|||||||
const FilePath defaultPath = FilePath::fromUserInput(qtcEnvironmentVariable(envVar));
|
const FilePath defaultPath = FilePath::fromUserInput(qtcEnvironmentVariable(envVar));
|
||||||
|
|
||||||
const auto *versionDetector
|
const auto *versionDetector
|
||||||
= new McuPackageExecutableVersionDetector(FilePath("asarm").withExecutableSuffix(),
|
= new McuPackageExecutableVersionDetector(FilePath("gversion").withExecutableSuffix(),
|
||||||
{"-V"},
|
{"-help"},
|
||||||
R"(\bv(\d+\.\d+\.\d+)\b)");
|
R"(\bv(\d+\.\d+\.\d+)\b)");
|
||||||
|
|
||||||
return McuToolChainPackagePtr{
|
return McuToolChainPackagePtr{
|
||||||
@@ -368,8 +369,8 @@ McuPackagePtr createStm32CubeProgrammerPackage(const SettingsHandler::Ptr &setti
|
|||||||
FilePath defaultPath = {};
|
FilePath defaultPath = {};
|
||||||
|
|
||||||
const FilePath detectionPath = FilePath::fromUserInput(
|
const FilePath detectionPath = FilePath::fromUserInput(
|
||||||
QLatin1String(Utils::HostOsInfo::isWindowsHost() ? "bin/STM32_Programmer_CLI.exe"
|
QLatin1String(Utils::HostOsInfo::isWindowsHost() ? "STM32_Programmer_CLI.exe"
|
||||||
: "bin/STM32_Programmer.sh"));
|
: "STM32_Programmer.sh"));
|
||||||
|
|
||||||
return McuPackagePtr{
|
return McuPackagePtr{
|
||||||
new McuPackage(settingsHandler,
|
new McuPackage(settingsHandler,
|
||||||
@@ -591,7 +592,11 @@ McuSdkRepository targetsFromDescriptions(const QList<McuTargetDescription> &desc
|
|||||||
mcuPackages.insert(package);
|
mcuPackages.insert(package);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return McuSdkRepository{mcuTargets, mcuPackages};
|
|
||||||
|
McuSdkRepository repo{mcuTargets, mcuPackages};
|
||||||
|
repo.expandVariablesAndWildcards();
|
||||||
|
|
||||||
|
return repo;
|
||||||
}
|
}
|
||||||
|
|
||||||
FilePath kitsPath(const FilePath &qtMcuSdkPath)
|
FilePath kitsPath(const FilePath &qtMcuSdkPath)
|
||||||
@@ -604,19 +609,7 @@ static FilePaths targetDescriptionFiles(const FilePath &dir)
|
|||||||
return kitsPath(dir).dirEntries(Utils::FileFilter({"*.json"}, QDir::Files));
|
return kitsPath(dir).dirEntries(Utils::FileFilter({"*.json"}, QDir::Files));
|
||||||
}
|
}
|
||||||
|
|
||||||
VersionDetection parseVersionDetection(const QJsonObject &packageEntry)
|
static QString getOsSpecificValue(const QJsonValue &entry)
|
||||||
{
|
|
||||||
const QJsonObject versioning = packageEntry.value("versionDetection").toObject();
|
|
||||||
return {
|
|
||||||
versioning["regex"].toString(),
|
|
||||||
versioning["filePattern"].toString(),
|
|
||||||
versioning["executableArgs"].toString(),
|
|
||||||
versioning["xmlElement"].toString(),
|
|
||||||
versioning["xmlAttribute"].toString(),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
QString getOsSpecificValue(const QJsonValue &entry)
|
|
||||||
{
|
{
|
||||||
if (entry.isObject()) {
|
if (entry.isObject()) {
|
||||||
//The json entry has os-specific values
|
//The json entry has os-specific values
|
||||||
@@ -626,6 +619,52 @@ QString getOsSpecificValue(const QJsonValue &entry)
|
|||||||
return entry.toString();
|
return entry.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VersionDetection parseVersionDetection(const QJsonObject &packageEntry)
|
||||||
|
{
|
||||||
|
const QJsonObject versioning = packageEntry.value("versionDetection").toObject();
|
||||||
|
return {
|
||||||
|
versioning["regex"].toString(),
|
||||||
|
getOsSpecificValue(versioning["filePattern"]),
|
||||||
|
versioning["executableArgs"].toString(),
|
||||||
|
versioning["xmlElement"].toString(),
|
||||||
|
versioning["xmlAttribute"].toString(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
static Utils::PathChooser::Kind parseLineEditType(const QJsonValue &type)
|
||||||
|
{
|
||||||
|
//Utility function to handle the different kinds of PathChooser
|
||||||
|
//Default is ExistingDirectory, see pathchooser.h for more options
|
||||||
|
const auto defaultValue = Utils::PathChooser::Kind::ExistingDirectory;
|
||||||
|
if (type.isUndefined()) {
|
||||||
|
//No "type" entry in the json file, this is not an error
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QString typeString = type.toString();
|
||||||
|
if (typeString.isNull()) {
|
||||||
|
printMessage(Tr::tr("Parsing error: the type entry in JSON kit files must be a string, "
|
||||||
|
"defaulting to \"path\"")
|
||||||
|
.arg(typeString),
|
||||||
|
true);
|
||||||
|
|
||||||
|
return defaultValue;
|
||||||
|
|
||||||
|
} else if (typeString.compare("file", Qt::CaseInsensitive) == 0) {
|
||||||
|
return Utils::PathChooser::File;
|
||||||
|
} else if (typeString.compare("path", Qt::CaseInsensitive) == 0) {
|
||||||
|
return Utils::PathChooser::ExistingDirectory;
|
||||||
|
} else {
|
||||||
|
printMessage(Tr::tr(
|
||||||
|
"Parsing error: the type entry \"%2\" in JSON kit files is not supported, "
|
||||||
|
"defaulting to \"path\"")
|
||||||
|
.arg(typeString),
|
||||||
|
true);
|
||||||
|
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static PackageDescription parsePackage(const QJsonObject &cmakeEntry)
|
static PackageDescription parsePackage(const QJsonObject &cmakeEntry)
|
||||||
{
|
{
|
||||||
const QVariantList versionsVariantList = cmakeEntry["versions"].toArray().toVariantList();
|
const QVariantList versionsVariantList = cmakeEntry["versions"].toArray().toVariantList();
|
||||||
@@ -652,7 +691,8 @@ static PackageDescription parsePackage(const QJsonObject &cmakeEntry)
|
|||||||
FilePath::fromUserInput(detectionPathString),
|
FilePath::fromUserInput(detectionPathString),
|
||||||
versions,
|
versions,
|
||||||
parseVersionDetection(cmakeEntry),
|
parseVersionDetection(cmakeEntry),
|
||||||
cmakeEntry["addToSystemPath"].toBool()};
|
cmakeEntry["addToSystemPath"].toBool(),
|
||||||
|
parseLineEditType(cmakeEntry["type"])};
|
||||||
}
|
}
|
||||||
|
|
||||||
static QList<PackageDescription> parsePackages(const QJsonArray &cmakeEntries)
|
static QList<PackageDescription> parsePackages(const QJsonArray &cmakeEntries)
|
||||||
@@ -820,11 +860,6 @@ McuSdkRepository targetsAndPackages(const McuPackagePtr &qtForMCUsPackage,
|
|||||||
< McuKitManager::generateKitNameFromTarget(rhs.get());
|
< McuKitManager::generateKitNameFromTarget(rhs.get());
|
||||||
});
|
});
|
||||||
|
|
||||||
for (const auto &target : repo.mcuTargets) {
|
|
||||||
printMessage(McuTarget::tr("Kit for %1 created.")
|
|
||||||
.arg(McuKitManager::generateKitNameFromTarget(target.get())),
|
|
||||||
false);
|
|
||||||
}
|
|
||||||
return repo;
|
return repo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <utils/filepath.h>
|
#include <utils/filepath.h>
|
||||||
|
#include <utils/pathchooser.h>
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
#include <QVector>
|
#include <QVector>
|
||||||
@@ -32,6 +34,7 @@ struct PackageDescription
|
|||||||
QStringList versions;
|
QStringList versions;
|
||||||
VersionDetection versionDetection;
|
VersionDetection versionDetection;
|
||||||
bool shouldAddToSystemPath;
|
bool shouldAddToSystemPath;
|
||||||
|
Utils::PathChooser::Kind type;
|
||||||
}; //struct PackageDescription
|
}; //struct PackageDescription
|
||||||
|
|
||||||
struct McuTargetDescription
|
struct McuTargetDescription
|
||||||
|
|||||||
@@ -4,13 +4,13 @@
|
|||||||
#include "mcutargetfactory.h"
|
#include "mcutargetfactory.h"
|
||||||
#include "mcuhelpers.h"
|
#include "mcuhelpers.h"
|
||||||
#include "mcupackage.h"
|
#include "mcupackage.h"
|
||||||
|
#include "mcusupport_global.h"
|
||||||
#include "mcusupportplugin.h"
|
#include "mcusupportplugin.h"
|
||||||
#include "mcusupportversiondetection.h"
|
#include "mcusupportversiondetection.h"
|
||||||
#include "mcutarget.h"
|
#include "mcutarget.h"
|
||||||
#include "mcutargetdescription.h"
|
#include "mcutargetdescription.h"
|
||||||
|
|
||||||
#include <utils/algorithm.h>
|
#include <utils/algorithm.h>
|
||||||
#include <utils/macroexpander.h>
|
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
#include <QVersionNumber>
|
#include <QVersionNumber>
|
||||||
@@ -56,18 +56,6 @@ static void removeEmptyPackages(Packages &packages)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void McuTargetFactory::expandVariables(Packages &packages)
|
|
||||||
{
|
|
||||||
Utils::MacroExpander macroExpander;
|
|
||||||
for (const auto &package : packages) {
|
|
||||||
macroExpander.registerVariable(package->cmakeVariableName().toLocal8Bit(),
|
|
||||||
package->label(),
|
|
||||||
[package] { return package->path().toString(); });
|
|
||||||
}
|
|
||||||
for (const auto &package : packages)
|
|
||||||
package->setPath(macroExpander.expand(package->path()));
|
|
||||||
}
|
|
||||||
|
|
||||||
McuTargetFactory::McuTargetFactory(const SettingsHandler::Ptr &settingsHandler)
|
McuTargetFactory::McuTargetFactory(const SettingsHandler::Ptr &settingsHandler)
|
||||||
: settingsHandler{settingsHandler}
|
: settingsHandler{settingsHandler}
|
||||||
{}
|
{}
|
||||||
@@ -94,7 +82,6 @@ QPair<Targets, Packages> McuTargetFactory::createTargets(const McuTargetDescript
|
|||||||
targetPackages.unite({toolchainFile});
|
targetPackages.unite({toolchainFile});
|
||||||
|
|
||||||
removeEmptyPackages(targetPackages);
|
removeEmptyPackages(targetPackages);
|
||||||
expandVariables(targetPackages);
|
|
||||||
|
|
||||||
packages.unite(targetPackages);
|
packages.unite(targetPackages);
|
||||||
|
|
||||||
@@ -144,7 +131,8 @@ McuPackagePtr McuTargetFactory::createPackage(const PackageDescription &pkgDesc)
|
|||||||
pkgDesc.versions,
|
pkgDesc.versions,
|
||||||
{},
|
{},
|
||||||
createVersionDetection(pkgDesc.versionDetection),
|
createVersionDetection(pkgDesc.versionDetection),
|
||||||
pkgDesc.shouldAddToSystemPath}};
|
pkgDesc.shouldAddToSystemPath,
|
||||||
|
pkgDesc.type}};
|
||||||
}
|
}
|
||||||
|
|
||||||
McuToolChainPackage *McuTargetFactory::createToolchain(
|
McuToolChainPackage *McuTargetFactory::createToolchain(
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ public:
|
|||||||
Packages createPackages(const McuTargetDescription &);
|
Packages createPackages(const McuTargetDescription &);
|
||||||
McuToolChainPackage *createToolchain(const McuTargetDescription::Toolchain &, const Utils::FilePath &sourceFile = Utils::FilePath());
|
McuToolChainPackage *createToolchain(const McuTargetDescription::Toolchain &, const Utils::FilePath &sourceFile = Utils::FilePath());
|
||||||
McuPackagePtr createPackage(const PackageDescription &);
|
McuPackagePtr createPackage(const PackageDescription &);
|
||||||
static void expandVariables(Packages &packages);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SettingsHandler::Ptr settingsHandler;
|
SettingsHandler::Ptr settingsHandler;
|
||||||
|
|||||||
@@ -24,6 +24,10 @@ constexpr auto armgcc_ek_ra6m3g_baremetal_json = R"(
|
|||||||
"windows": "%{Env:PROGRAMFILES}/SEGGER/JLink",
|
"windows": "%{Env:PROGRAMFILES}/SEGGER/JLink",
|
||||||
"linux": "/opt/SEGGER/JLink"
|
"linux": "/opt/SEGGER/JLink"
|
||||||
},
|
},
|
||||||
|
"detectionPath": {
|
||||||
|
"windows": "JLink.exe",
|
||||||
|
"linux": "JLinkExe"
|
||||||
|
},
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"addToSystemPath": true
|
"addToSystemPath": true
|
||||||
}
|
}
|
||||||
@@ -43,9 +47,12 @@ constexpr auto armgcc_ek_ra6m3g_baremetal_json = R"(
|
|||||||
"type": "path",
|
"type": "path",
|
||||||
"optional": false,
|
"optional": false,
|
||||||
"versionDetection": {
|
"versionDetection": {
|
||||||
"filePattern": "bin/arm-none-eabi-g++",
|
"filePattern": {
|
||||||
|
"windows": "bin/arm-none-eabi-g++.exe",
|
||||||
|
"linux": "bin/arm-none-eabi-g++"
|
||||||
|
},
|
||||||
"executableArgs": "--version",
|
"executableArgs": "--version",
|
||||||
"regex": "\\bv(\\d+\\.\\d+\\.\\d+)\\b"
|
"regex": "\\b(\\d+\\.\\d+\\.\\d+)\\b"
|
||||||
},
|
},
|
||||||
"detectionPath": {
|
"detectionPath": {
|
||||||
"windows": "bin/arm-none-eabi-g++.exe",
|
"windows": "bin/arm-none-eabi-g++.exe",
|
||||||
@@ -64,6 +71,7 @@ constexpr auto armgcc_ek_ra6m3g_baremetal_json = R"(
|
|||||||
"boardSdk": {
|
"boardSdk": {
|
||||||
"cmakeVar": "QUL_BOARD_SDK_DIR",
|
"cmakeVar": "QUL_BOARD_SDK_DIR",
|
||||||
"envVar": "EK_RA6M3G_FSP_PATH",
|
"envVar": "EK_RA6M3G_FSP_PATH",
|
||||||
|
"setting": "EK_RA6M3G_FSP_PATH",
|
||||||
"id": "EK_RA6M3G_FSP_PATH",
|
"id": "EK_RA6M3G_FSP_PATH",
|
||||||
"label": "Flexible Software Package for Renesas RA MCU Family",
|
"label": "Flexible Software Package for Renesas RA MCU Family",
|
||||||
"optional": false,
|
"optional": false,
|
||||||
|
|||||||
@@ -24,6 +24,10 @@ constexpr auto armgcc_ek_ra6m3g_freertos_json = R"(
|
|||||||
"windows": "%{Env:PROGRAMFILES}/SEGGER/JLink",
|
"windows": "%{Env:PROGRAMFILES}/SEGGER/JLink",
|
||||||
"linux": "/opt/SEGGER/JLink"
|
"linux": "/opt/SEGGER/JLink"
|
||||||
},
|
},
|
||||||
|
"detectionPath": {
|
||||||
|
"windows": "JLink.exe",
|
||||||
|
"linux": "JLinkExe"
|
||||||
|
},
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"addToSystemPath": true
|
"addToSystemPath": true
|
||||||
}
|
}
|
||||||
@@ -43,9 +47,12 @@ constexpr auto armgcc_ek_ra6m3g_freertos_json = R"(
|
|||||||
"type": "path",
|
"type": "path",
|
||||||
"optional": false,
|
"optional": false,
|
||||||
"versionDetection": {
|
"versionDetection": {
|
||||||
"filePattern": "bin/arm-none-eabi-g++",
|
"filePattern": {
|
||||||
|
"windows": "bin/arm-none-eabi-g++.exe",
|
||||||
|
"linux": "bin/arm-none-eabi-g++"
|
||||||
|
},
|
||||||
"executableArgs": "--version",
|
"executableArgs": "--version",
|
||||||
"regex": "\\bv(\\d+\\.\\d+\\.\\d+)\\b"
|
"regex": "\\b(\\d+\\.\\d+\\.\\d+)\\b"
|
||||||
},
|
},
|
||||||
"detectionPath": {
|
"detectionPath": {
|
||||||
"windows": "bin/arm-none-eabi-g++.exe",
|
"windows": "bin/arm-none-eabi-g++.exe",
|
||||||
@@ -64,6 +71,7 @@ constexpr auto armgcc_ek_ra6m3g_freertos_json = R"(
|
|||||||
"boardSdk": {
|
"boardSdk": {
|
||||||
"cmakeVar": "QUL_BOARD_SDK_DIR",
|
"cmakeVar": "QUL_BOARD_SDK_DIR",
|
||||||
"envVar": "EK_RA6M3G_FSP_PATH",
|
"envVar": "EK_RA6M3G_FSP_PATH",
|
||||||
|
"setting": "EK_RA6M3G_FSP_PATH",
|
||||||
"id": "EK_RA6M3G_FSP_PATH",
|
"id": "EK_RA6M3G_FSP_PATH",
|
||||||
"label": "Flexible Software Package for Renesas RA MCU Family",
|
"label": "Flexible Software Package for Renesas RA MCU Family",
|
||||||
"optional": false,
|
"optional": false,
|
||||||
@@ -76,6 +84,7 @@ constexpr auto armgcc_ek_ra6m3g_freertos_json = R"(
|
|||||||
"envVar": "EK_RA6M3G_FREERTOS_DIR",
|
"envVar": "EK_RA6M3G_FREERTOS_DIR",
|
||||||
"id": "EK_RA6M3G_FREERTOS_DIR",
|
"id": "EK_RA6M3G_FREERTOS_DIR",
|
||||||
"label": "FreeRTOS SDK for EK-RA6M3G",
|
"label": "FreeRTOS SDK for EK-RA6M3G",
|
||||||
|
"setting": "FreeRTOSSourcePackage_EK_RA6M3G",
|
||||||
"cmakeVar": "FREERTOS_DIR",
|
"cmakeVar": "FREERTOS_DIR",
|
||||||
"defaultValue": "%{Qul_ROOT}/platform/boards/renesas/ek-ra6m3g-common/3rdparty/freertos",
|
"defaultValue": "%{Qul_ROOT}/platform/boards/renesas/ek-ra6m3g-common/3rdparty/freertos",
|
||||||
"detectionPath": "tasks.c",
|
"detectionPath": "tasks.c",
|
||||||
|
|||||||
@@ -28,9 +28,12 @@ constexpr auto armgcc_example_baremetal_json = R"(
|
|||||||
"type": "path",
|
"type": "path",
|
||||||
"optional": false,
|
"optional": false,
|
||||||
"versionDetection": {
|
"versionDetection": {
|
||||||
"filePattern": "bin/arm-none-eabi-g++",
|
"filePattern": {
|
||||||
|
"windows": "bin/arm-none-eabi-g++.exe",
|
||||||
|
"linux": "bin/arm-none-eabi-g++"
|
||||||
|
},
|
||||||
"executableArgs": "--version",
|
"executableArgs": "--version",
|
||||||
"regex": "\\bv(\\d+\\.\\d+\\.\\d+)\\b"
|
"regex": "\\b(\\d+\\.\\d+\\.\\d+)\\b"
|
||||||
},
|
},
|
||||||
"detectionPath": {
|
"detectionPath": {
|
||||||
"windows": "bin/arm-none-eabi-g++.exe",
|
"windows": "bin/arm-none-eabi-g++.exe",
|
||||||
|
|||||||
@@ -47,9 +47,12 @@ constexpr auto armgcc_mimxrt1050_evk_baremetal_json = R"(
|
|||||||
"type": "path",
|
"type": "path",
|
||||||
"optional": false,
|
"optional": false,
|
||||||
"versionDetection": {
|
"versionDetection": {
|
||||||
"filePattern": "bin/arm-none-eabi-g++",
|
"filePattern": {
|
||||||
|
"windows": "bin/arm-none-eabi-g++.exe",
|
||||||
|
"linux": "bin/arm-none-eabi-g++"
|
||||||
|
},
|
||||||
"executableArgs": "--version",
|
"executableArgs": "--version",
|
||||||
"regex": "\\bv(\\d+\\.\\d+\\.\\d+)\\b"
|
"regex": "\\b(\\d+\\.\\d+\\.\\d+)\\b"
|
||||||
},
|
},
|
||||||
"detectionPath": {
|
"detectionPath": {
|
||||||
"windows": "bin/arm-none-eabi-g++.exe",
|
"windows": "bin/arm-none-eabi-g++.exe",
|
||||||
|
|||||||
@@ -47,9 +47,12 @@ constexpr auto armgcc_mimxrt1050_evk_freertos_json = R"(
|
|||||||
"type": "path",
|
"type": "path",
|
||||||
"optional": false,
|
"optional": false,
|
||||||
"versionDetection": {
|
"versionDetection": {
|
||||||
"filePattern": "bin/arm-none-eabi-g++",
|
"filePattern": {
|
||||||
|
"windows": "bin/arm-none-eabi-g++.exe",
|
||||||
|
"linux": "bin/arm-none-eabi-g++"
|
||||||
|
},
|
||||||
"executableArgs": "--version",
|
"executableArgs": "--version",
|
||||||
"regex": "\\bv(\\d+\\.\\d+\\.\\d+)\\b"
|
"regex": "\\b(\\d+\\.\\d+\\.\\d+)\\b"
|
||||||
},
|
},
|
||||||
"detectionPath": {
|
"detectionPath": {
|
||||||
"windows": "bin/arm-none-eabi-g++.exe",
|
"windows": "bin/arm-none-eabi-g++.exe",
|
||||||
|
|||||||