Merge remote-tracking branch 'origin/7.0'
Change-Id: Ic646cdb2a14e5a2638ff88a922067dcf378dde5b
@@ -1,4 +1,4 @@
|
|||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
## Add paths to check for cmake modules:
|
## Add paths to check for cmake modules:
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||||
@@ -138,15 +138,8 @@ endif()
|
|||||||
|
|
||||||
add_subdirectory(doc)
|
add_subdirectory(doc)
|
||||||
|
|
||||||
# TODO: Remove when cmake_minimum_required greater than 3.12
|
find_package(Python3 COMPONENTS Interpreter)
|
||||||
if (CMAKE_VERSION VERSION_GREATER 3.12)
|
if (NOT Python3_Interpreter_FOUND)
|
||||||
find_package(Python3 COMPONENTS Interpreter)
|
|
||||||
set(PYTHONINTERP_FOUND ${Python3_Interpreter_FOUND})
|
|
||||||
set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
|
|
||||||
else()
|
|
||||||
find_package(PythonInterp)
|
|
||||||
endif()
|
|
||||||
if (NOT PYTHONINTERP_FOUND)
|
|
||||||
message("No python interpreter found, skipping \"Dependencies\" install component.")
|
message("No python interpreter found, skipping \"Dependencies\" install component.")
|
||||||
else()
|
else()
|
||||||
get_target_property(_qmake_binary Qt5::qmake IMPORTED_LOCATION)
|
get_target_property(_qmake_binary Qt5::qmake IMPORTED_LOCATION)
|
||||||
@@ -161,7 +154,7 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
install(CODE "
|
install(CODE "
|
||||||
execute_process(COMMAND
|
execute_process(COMMAND
|
||||||
\"${PYTHON_EXECUTABLE}\"
|
\"${Python3_EXECUTABLE}\"
|
||||||
\"${CMAKE_CURRENT_LIST_DIR}/scripts/deployqt.py\"
|
\"${CMAKE_CURRENT_LIST_DIR}/scripts/deployqt.py\"
|
||||||
${_llvm_arg}
|
${_llvm_arg}
|
||||||
${_elfutils_arg}
|
${_elfutils_arg}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ find_package(Clang CONFIG)
|
|||||||
|
|
||||||
# silence a lot of warnings from building against llvm
|
# silence a lot of warnings from building against llvm
|
||||||
if(MSVC AND TARGET libclang)
|
if(MSVC AND TARGET libclang)
|
||||||
target_compile_options(libclang INTERFACE /wd4100 /wd4141 /wd4146 /wd4244 /wd4267 /wd4291)
|
target_compile_options(libclang INTERFACE /wd4267)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(CLANGTOOLING_LINK_CLANG_DYLIB "Force linking of Clang tooling against clang-cpp" NO)
|
option(CLANGTOOLING_LINK_CLANG_DYLIB "Force linking of Clang tooling against clang-cpp" NO)
|
||||||
|
|||||||
@@ -155,20 +155,6 @@ function(add_qtc_library name)
|
|||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# TODO copied from extend_qtc_target.
|
|
||||||
# Instead require CMake 3.11 and use extend_qtc_target for setting SOURCES.
|
|
||||||
# Requiring cmake 3.11 is necessary because before that add_library requires
|
|
||||||
# at least one source file.
|
|
||||||
if (_arg_SOURCES_PREFIX)
|
|
||||||
foreach(source IN LISTS _arg_SOURCES)
|
|
||||||
list(APPEND prefixed_sources "${_arg_SOURCES_PREFIX}/${source}")
|
|
||||||
endforeach()
|
|
||||||
if (NOT IS_ABSOLUTE ${_arg_SOURCES_PREFIX})
|
|
||||||
set(_arg_SOURCES_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/${_arg_SOURCES_PREFIX}")
|
|
||||||
endif()
|
|
||||||
set(_arg_SOURCES ${prefixed_sources})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(library_type SHARED)
|
set(library_type SHARED)
|
||||||
if (_arg_STATIC)
|
if (_arg_STATIC)
|
||||||
set(library_type STATIC)
|
set(library_type STATIC)
|
||||||
@@ -177,16 +163,9 @@ function(add_qtc_library name)
|
|||||||
set(library_type OBJECT)
|
set(library_type OBJECT)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_library(${name} ${library_type} ${_arg_SOURCES})
|
add_library(${name} ${library_type})
|
||||||
add_library(QtCreator::${name} ALIAS ${name})
|
add_library(QtCreator::${name} ALIAS ${name})
|
||||||
|
|
||||||
set_public_headers(${name} "${_arg_SOURCES}")
|
|
||||||
|
|
||||||
# TODO remove, see above
|
|
||||||
if (_arg_SOURCES_PREFIX)
|
|
||||||
target_include_directories(${name} PRIVATE $<BUILD_INTERFACE:${_arg_SOURCES_PREFIX}>)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (${name} MATCHES "^[^0-9-]+$")
|
if (${name} MATCHES "^[^0-9-]+$")
|
||||||
string(TOUPPER "${name}_LIBRARY" EXPORT_SYMBOL)
|
string(TOUPPER "${name}_LIBRARY" EXPORT_SYMBOL)
|
||||||
endif()
|
endif()
|
||||||
@@ -201,6 +180,8 @@ function(add_qtc_library name)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
extend_qtc_target(${name}
|
extend_qtc_target(${name}
|
||||||
|
SOURCES_PREFIX ${_arg_SOURCES_PREFIX}
|
||||||
|
SOURCES ${_arg_SOURCES}
|
||||||
INCLUDES ${_arg_INCLUDES}
|
INCLUDES ${_arg_INCLUDES}
|
||||||
PUBLIC_INCLUDES ${_arg_PUBLIC_INCLUDES}
|
PUBLIC_INCLUDES ${_arg_PUBLIC_INCLUDES}
|
||||||
DEFINES ${EXPORT_SYMBOL} ${default_defines_copy} ${_arg_DEFINES} ${TEST_DEFINES}
|
DEFINES ${EXPORT_SYMBOL} ${default_defines_copy} ${_arg_DEFINES} ${TEST_DEFINES}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
if (CMAKE_VERSION VERSION_LESS 3.18)
|
if (CMAKE_VERSION VERSION_LESS 3.18)
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL GNU OR CMAKE_VERSION VERSION_LESS 3.16)
|
if (CMAKE_CXX_COMPILER_ID STREQUAL GNU)
|
||||||
set(BUILD_WITH_PCH OFF CACHE BOOL "" FORCE)
|
set(BUILD_WITH_PCH OFF CACHE BOOL "" FORCE)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
@@ -183,31 +183,6 @@ function(update_cached_list name value)
|
|||||||
set("${name}" "${_tmp_list}" CACHE INTERNAL "*** Internal ***")
|
set("${name}" "${_tmp_list}" CACHE INTERNAL "*** Internal ***")
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(separate_object_libraries libraries REGULAR_LIBS OBJECT_LIBS OBJECT_LIB_OBJECTS)
|
|
||||||
if (CMAKE_VERSION VERSION_LESS 3.14)
|
|
||||||
foreach(lib IN LISTS libraries)
|
|
||||||
if (TARGET ${lib})
|
|
||||||
get_target_property(lib_type ${lib} TYPE)
|
|
||||||
if (lib_type STREQUAL "OBJECT_LIBRARY")
|
|
||||||
list(APPEND object_libs ${lib})
|
|
||||||
list(APPEND object_libs_objects $<TARGET_OBJECTS:${lib}>)
|
|
||||||
else()
|
|
||||||
list(APPEND regular_libs ${lib})
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
list(APPEND regular_libs ${lib})
|
|
||||||
endif()
|
|
||||||
set(${REGULAR_LIBS} ${regular_libs} PARENT_SCOPE)
|
|
||||||
set(${OBJECT_LIBS} ${object_libs} PARENT_SCOPE)
|
|
||||||
set(${OBJECT_LIB_OBJECTS} ${object_libs_objects} PARENT_SCOPE)
|
|
||||||
endforeach()
|
|
||||||
else()
|
|
||||||
set(${REGULAR_LIBS} ${libraries} PARENT_SCOPE)
|
|
||||||
unset(${OBJECT_LIBS} PARENT_SCOPE)
|
|
||||||
unset(${OBJECT_LIB_OBJECTS} PARENT_SCOPE)
|
|
||||||
endif()
|
|
||||||
endfunction(separate_object_libraries)
|
|
||||||
|
|
||||||
function(set_explicit_moc target_name file)
|
function(set_explicit_moc target_name file)
|
||||||
unset(file_dependencies)
|
unset(file_dependencies)
|
||||||
if (file MATCHES "^.*plugin.h$")
|
if (file MATCHES "^.*plugin.h$")
|
||||||
@@ -293,12 +268,8 @@ function(add_qtc_depends target_name)
|
|||||||
check_qtc_disabled_targets(${target_name} _arg_PRIVATE)
|
check_qtc_disabled_targets(${target_name} _arg_PRIVATE)
|
||||||
check_qtc_disabled_targets(${target_name} _arg_PUBLIC)
|
check_qtc_disabled_targets(${target_name} _arg_PUBLIC)
|
||||||
|
|
||||||
separate_object_libraries("${_arg_PRIVATE}"
|
set(depends "${_arg_PRIVATE}")
|
||||||
depends object_lib_depends object_lib_depends_objects)
|
set(public_depends "${_arg_PUBLIC}")
|
||||||
separate_object_libraries("${_arg_PUBLIC}"
|
|
||||||
public_depends object_public_depends object_public_depends_objects)
|
|
||||||
|
|
||||||
target_sources(${target_name} PRIVATE ${object_lib_depends_objects} ${object_public_depends_objects})
|
|
||||||
|
|
||||||
get_target_property(target_type ${target_name} TYPE)
|
get_target_property(target_type ${target_name} TYPE)
|
||||||
if (NOT target_type STREQUAL "OBJECT_LIBRARY")
|
if (NOT target_type STREQUAL "OBJECT_LIBRARY")
|
||||||
|
|||||||
|
After Width: | Height: | Size: 21 KiB |
BIN
doc/qtcreator/images/qtcreator-language-client-inspector-log.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 10 KiB |
@@ -176,7 +176,7 @@
|
|||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li Select \uicontrol Tools > \uicontrol Options > \uicontrol C++ >
|
\li Select \uicontrol Tools > \uicontrol Options > \uicontrol C++ >
|
||||||
\uicontrol Clangd > \uicontrol {Use clangd (EXPERIMENTAL)}.
|
\uicontrol Clangd > \uicontrol {Use clangd}.
|
||||||
\image qtcreator-options-clangd.png "clangd options"
|
\image qtcreator-options-clangd.png "clangd options"
|
||||||
\li In \uicontrol {Path to executable}, enter the path to clangd
|
\li In \uicontrol {Path to executable}, enter the path to clangd
|
||||||
version 13, or later.
|
version 13, or later.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
** Copyright (C) 2022 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -32,7 +32,8 @@
|
|||||||
|
|
||||||
For several programming languages, a \e {language server} is available
|
For several programming languages, a \e {language server} is available
|
||||||
that provides information about the code to IDEs as long as they support
|
that provides information about the code to IDEs as long as they support
|
||||||
communication via the language server protocol (LSP). This enables the
|
communication via the \l{Language Server Protocol}
|
||||||
|
{language server protocol (LSP)}. This enables the
|
||||||
IDE to provide the following services:
|
IDE to provide the following services:
|
||||||
|
|
||||||
\list
|
\list
|
||||||
@@ -145,6 +146,7 @@
|
|||||||
the Java language server \c .jar file.
|
the Java language server \c .jar file.
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
|
|
||||||
\section1 Supported Locator Filters
|
\section1 Supported Locator Filters
|
||||||
|
|
||||||
The locator enables you to browse not only files, but any items defined by
|
The locator enables you to browse not only files, but any items defined by
|
||||||
@@ -158,6 +160,49 @@
|
|||||||
definitions in your project
|
definitions in your project
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
|
\section1 Inspecting Language Clients
|
||||||
|
|
||||||
|
\QC sends messages (\e Requests) to the language server and receives
|
||||||
|
responses that contain the requested information if the language server is
|
||||||
|
capable of handling the requests. To inspect the communication between \QC
|
||||||
|
and language servers and view server capabilities, select \uicontrol Tools
|
||||||
|
> \uicontrol {Debug \QC} > \uicontrol {Inspect Language Client}.
|
||||||
|
|
||||||
|
\image qtcreator-language-client-inspector-log.png "Language Client Inspector dialog"
|
||||||
|
|
||||||
|
The dialog shows a list of running language servers. The value of the
|
||||||
|
\uicontrol {Startup behavior} field in the language server options
|
||||||
|
determines when the server is started. The information displayed depends on
|
||||||
|
the language server.
|
||||||
|
|
||||||
|
\uicontrol Log displays additional information about the selected log entry.
|
||||||
|
You can see the \uicontrol {Content length} and \uicontrol {MIME type} of
|
||||||
|
a \uicontrol {Client Message} and \uicontrol {Server Message}, as well as
|
||||||
|
inspect the data sent between \QC and the language server.
|
||||||
|
|
||||||
|
To remove old entries, select \uicontrol Clear.
|
||||||
|
|
||||||
|
\section2 Capabilities
|
||||||
|
|
||||||
|
In \uicontrol Capabilities, you can check whether a language server is
|
||||||
|
capable of a specific task. You cannot modify the server capabilities
|
||||||
|
in this dialog.
|
||||||
|
|
||||||
|
You can view the \uicontrol Name, \uicontrol Value, and \uicontrol Type
|
||||||
|
of the capability.
|
||||||
|
|
||||||
|
\image qtcreator-language-client-inspector-capabilities.png "Language Client Inspector Capabilities tab"
|
||||||
|
|
||||||
|
For some language servers, \uicontrol {Dynamic Capabilities} lists the
|
||||||
|
\uicontrol Methods and \uicontrol Options available.
|
||||||
|
|
||||||
|
\section2 Memory Usage
|
||||||
|
|
||||||
|
For a clangd server, you can inspect the total amount of memory used by a
|
||||||
|
particular component in \uicontrol {Memory Usage}.
|
||||||
|
|
||||||
|
\image qtcreator-language-client-inspector-capabilities.png "Language Client Inspector Capabilities tab"
|
||||||
|
|
||||||
\section1 Reporting Issues
|
\section1 Reporting Issues
|
||||||
|
|
||||||
The language service client has been mostly tested with Python and Java.
|
The language service client has been mostly tested with Python and Java.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
** Copyright (C) 2022 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the documentation of the Qt Toolkit.
|
** This file is part of the documentation of the Qt Toolkit.
|
||||||
@@ -141,3 +141,7 @@
|
|||||||
\externalpage https://cmake.org/cmake/help/latest/prop_sf/HEADER_FILE_ONLY.html
|
\externalpage https://cmake.org/cmake/help/latest/prop_sf/HEADER_FILE_ONLY.html
|
||||||
\title CMake: HEADER_FILE_ONLY
|
\title CMake: HEADER_FILE_ONLY
|
||||||
*/
|
*/
|
||||||
|
/*!
|
||||||
|
\externalpage https://microsoft.github.io/language-server-protocol/
|
||||||
|
\title Language Server Protocol
|
||||||
|
*/
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 4.0 KiB |
@@ -41,6 +41,9 @@
|
|||||||
project and a button UI control, and how to modify the files generated by
|
project and a button UI control, and how to modify the files generated by
|
||||||
the wizard templates to wireframe the UI.
|
the wizard templates to wireframe the UI.
|
||||||
|
|
||||||
|
You can donwnload the completed project from
|
||||||
|
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui1}{here}.
|
||||||
|
|
||||||
The \e {Learn More} sections provide additional information about the
|
The \e {Learn More} sections provide additional information about the
|
||||||
tasks performed by the wizards and about other basic tasks and concepts.
|
tasks performed by the wizards and about other basic tasks and concepts.
|
||||||
|
|
||||||
@@ -54,24 +57,19 @@
|
|||||||
To create a project:
|
To create a project:
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li Select \uicontrol File > \uicontrol {New Project} >
|
\li Select \uicontrol File > \uicontrol {New Project}.
|
||||||
\uicontrol General > \uicontrol {Qt Quick Application - Empty} >
|
\li In the \uicontrol Presets tab, select \uicontrol General >
|
||||||
\uicontrol Choose.
|
\uicontrol {Empty}.
|
||||||
\li In the \uicontrol Name field, enter the project name: \e {loginui1}.
|
\li In the \uicontrol Details tab:
|
||||||
When naming your own projects, keep in mind that they cannot be
|
\list
|
||||||
easily renamed later.
|
\li Enter \e Loginui1 as the name for the project. Keep in mind
|
||||||
\li In the \uicontrol {Create in} field, enter the path to the folder
|
that projects cannot be easily renamed later.
|
||||||
where you want to store the project files. You can move project
|
\li Select the path for the project files. You can move project
|
||||||
folders later without problems.
|
folders later.
|
||||||
\li Select \uicontrol Next (or \uicontrol Continue on \macos) to
|
\li Set \uicontrol Width to 720 and \uicontrol Height to 1280.
|
||||||
continue to the \uicontrol {Define Project Details} page.
|
You can change the screen size later in \l Properties.
|
||||||
\li In the \uicontrol {Screen resolution} field, select the initial
|
\endlist
|
||||||
size of the UI. In this tutorial, we use the predefined size
|
\li Select \uicontrol Create to create the project.
|
||||||
\e {720 x 1280 (HD)} (portrait) instead of the default size
|
|
||||||
(landscape). You can easily change the screen size later in
|
|
||||||
\l Properties.
|
|
||||||
\li Select \uicontrol Finish (or \uicontrol Done on \macos) to create
|
|
||||||
the project.
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
Your project should now look something like this in the \uicontrol Design
|
Your project should now look something like this in the \uicontrol Design
|
||||||
@@ -92,7 +90,7 @@
|
|||||||
\section2 Learn More - Projects and Files
|
\section2 Learn More - Projects and Files
|
||||||
|
|
||||||
\QDS creates a set of boilerplate files and folders that you need to create
|
\QDS creates a set of boilerplate files and folders that you need to create
|
||||||
a UI. The files are listed in the \l Projects view.
|
a UI. The files are listed in the \l{File System} view.
|
||||||
|
|
||||||
\image loginui1-project-files.png
|
\image loginui1-project-files.png
|
||||||
|
|
||||||
@@ -112,6 +110,9 @@
|
|||||||
Specifically, if you export and import designs using \QB, your main
|
Specifically, if you export and import designs using \QB, your main
|
||||||
file is most likely called something else. For more information,
|
file is most likely called something else. For more information,
|
||||||
see \l {Exporting from Design Tools}.
|
see \l {Exporting from Design Tools}.
|
||||||
|
\li The \e CMakeLists.txt project configuration file allowing you to
|
||||||
|
share your project as a fully working C++ application with
|
||||||
|
developers.
|
||||||
\li The \e {qtquickcontrols2.conf} file specifies the selected
|
\li The \e {qtquickcontrols2.conf} file specifies the selected
|
||||||
\l {Styling Qt Quick Controls}{UI style} and some style-specific
|
\l {Styling Qt Quick Controls}{UI style} and some style-specific
|
||||||
arguments.
|
arguments.
|
||||||
@@ -230,7 +231,7 @@
|
|||||||
adds the following \e import statements to the UI files (.ui.qml) that it
|
adds the following \e import statements to the UI files (.ui.qml) that it
|
||||||
creates:
|
creates:
|
||||||
|
|
||||||
\quotefromfile loginui1/Screen01.ui.qml
|
\quotefromfile Loginui1/Content/Screen01.ui.qml
|
||||||
\skipto import
|
\skipto import
|
||||||
\printuntil Controls
|
\printuntil Controls
|
||||||
|
|
||||||
@@ -333,7 +334,7 @@
|
|||||||
To be able to use the functionality of the Button control, the wizard template
|
To be able to use the functionality of the Button control, the wizard template
|
||||||
adds the following \e import statements to the \e EntryField.ui.qml file:
|
adds the following \e import statements to the \e EntryField.ui.qml file:
|
||||||
|
|
||||||
\quotefromfile loginui1/EntryField.ui.qml
|
\quotefromfile Loginui1/Content/EntryField.ui.qml
|
||||||
\skipto import
|
\skipto import
|
||||||
\printuntil Controls
|
\printuntil Controls
|
||||||
|
|
||||||
@@ -364,7 +365,7 @@
|
|||||||
to \e 100, to match the width of the tag line.
|
to \e 100, to match the width of the tag line.
|
||||||
\li In the \uicontrol Control section, deselect the \uicontrol Hover
|
\li In the \uicontrol Control section, deselect the \uicontrol Hover
|
||||||
check box because we don't want the hover effect for the button.
|
check box because we don't want the hover effect for the button.
|
||||||
\li Select the button background in \uicontrol Navigator to display its
|
\li Select \e buttonBackground in \uicontrol Navigator to display its
|
||||||
properties in \uicontrol Properties.
|
properties in \uicontrol Properties.
|
||||||
\li In \uicontrol Rectangle > \uicontrol {Fill color}, set the color to
|
\li In \uicontrol Rectangle > \uicontrol {Fill color}, set the color to
|
||||||
transparent light gray (\e #28e7e7e7) in \uicontrol Hex. You can
|
transparent light gray (\e #28e7e7e7) in \uicontrol Hex. You can
|
||||||
@@ -372,7 +373,7 @@
|
|||||||
\li In \uicontrol {Border Color}, select white (\e #ffffff).
|
\li In \uicontrol {Border Color}, select white (\e #ffffff).
|
||||||
\li In \uicontrol Radius, enter \e 50 to give the button
|
\li In \uicontrol Radius, enter \e 50 to give the button
|
||||||
rounded corners.
|
rounded corners.
|
||||||
\li Select the text component in \uicontrol Navigator to display its
|
\li Select \e textItem in \uicontrol Navigator to display its
|
||||||
properties in \uicontrol Properties.
|
properties in \uicontrol Properties.
|
||||||
\li In \uicontrol Character > \uicontrol Font, select
|
\li In \uicontrol Character > \uicontrol Font, select
|
||||||
\e {Titillium Web ExtraLight}.
|
\e {Titillium Web ExtraLight}.
|
||||||
@@ -382,7 +383,7 @@
|
|||||||
(\e #ffffff).
|
(\e #ffffff).
|
||||||
\li In \uicontrol {Alignment H}, select the \uicontrol Left button to
|
\li In \uicontrol {Alignment H}, select the \uicontrol Left button to
|
||||||
align the text horizontally to the left.
|
align the text horizontally to the left.
|
||||||
\li In the \uicontrol Padding section > \uicontrol Horizontal >
|
\li In \uicontrol Padding > \uicontrol Horizontal >
|
||||||
\uicontrol Left, set the padding in the field between background
|
\uicontrol Left, set the padding in the field between background
|
||||||
border and text to \e 50.
|
border and text to \e 50.
|
||||||
\image loginui1-text-properties-button.png "Text properties"
|
\image loginui1-text-properties-button.png "Text properties"
|
||||||
@@ -450,13 +451,13 @@
|
|||||||
to \e 100.
|
to \e 100.
|
||||||
\li In the \uicontrol Control section, deselect the \uicontrol Hover
|
\li In the \uicontrol Control section, deselect the \uicontrol Hover
|
||||||
check box because we don't want the hover effect for the button.
|
check box because we don't want the hover effect for the button.
|
||||||
\li Select the button background in \uicontrol Navigator to display its
|
\li Select \e buttonBackground in \uicontrol Navigator to display its
|
||||||
properties in \uicontrol Properties.
|
properties in \uicontrol Properties.
|
||||||
\li In \uicontrol Rectangle > \uicontrol {Border color}, select the
|
\li In \uicontrol Rectangle > \uicontrol {Border color}, select the
|
||||||
green used in the logo (\e #41cd52).
|
green used in the logo (\e #41cd52).
|
||||||
\li In \uicontrol Radius, enter \e 50 to give the button rounded
|
\li In \uicontrol Radius, enter \e 50 to give the button rounded
|
||||||
corners.
|
corners.
|
||||||
\li Select the the text component in \uicontrol Navigator to display
|
\li Select \e textItem in \uicontrol Navigator to display
|
||||||
its properties in \uicontrol Properties.
|
its properties in \uicontrol Properties.
|
||||||
\li In \uicontrol Character > \uicontrol Font, select
|
\li In \uicontrol Character > \uicontrol Font, select
|
||||||
\e {Titillium Web ExtraLight}.
|
\e {Titillium Web ExtraLight}.
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\example loginui2
|
\example Loginui2
|
||||||
\ingroup gstutorials
|
\ingroup gstutorials
|
||||||
\previouspage {Log In UI - Components}
|
\previouspage {Log In UI - Components}
|
||||||
\nextpage {Log In UI - States}
|
\nextpage {Log In UI - States}
|
||||||
@@ -45,7 +45,12 @@
|
|||||||
their proper places when you resize the UI on the desktop or on devices
|
their proper places when you resize the UI on the desktop or on devices
|
||||||
with different screen sizes, you will use anchors and positioners.
|
with different screen sizes, you will use anchors and positioners.
|
||||||
|
|
||||||
These instructions build on \l {Log In UI - Components}.
|
The starting point for this tutorial is the completed
|
||||||
|
\l{Log In UI - Components} project. You can download the project from
|
||||||
|
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui1}{here}.
|
||||||
|
|
||||||
|
Additionally, you can download the completed project of this tutorial from
|
||||||
|
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui2}{here}.
|
||||||
|
|
||||||
The \e {Learn More} sections provide additional information about the
|
The \e {Learn More} sections provide additional information about the
|
||||||
task at hand.
|
task at hand.
|
||||||
@@ -79,6 +84,9 @@
|
|||||||
anchor button to anchor \e adventurePage to its
|
anchor button to anchor \e adventurePage to its
|
||||||
parent in the \uicontrol Target field. This attaches the background
|
parent in the \uicontrol Target field. This attaches the background
|
||||||
image to the rectangle on all sides.
|
image to the rectangle on all sides.
|
||||||
|
Note: Selecting the anchor button should automatically select the
|
||||||
|
four buttons on the left side of it. If it doesn't, refresh
|
||||||
|
\uicontrol{Form Editor}.
|
||||||
\image loginui2-layout.png "Layout properties"
|
\image loginui2-layout.png "Layout properties"
|
||||||
\li Select \e qt_logo_green_128x128px in \l Navigator.
|
\li Select \e qt_logo_green_128x128px in \l Navigator.
|
||||||
\li In \uicontrol Properties > \uicontrol Layout, select the
|
\li In \uicontrol Properties > \uicontrol Layout, select the
|
||||||
|
|||||||
@@ -46,12 +46,12 @@
|
|||||||
login page, you will use \e states to show and hide UI components as necessary
|
login page, you will use \e states to show and hide UI components as necessary
|
||||||
when a user selects the \e {Create Account} button.
|
when a user selects the \e {Create Account} button.
|
||||||
|
|
||||||
These instructions build on:
|
The starting point for this tutorial is the completed
|
||||||
|
\l{Log In UI - Positioning} project. You can download the project from
|
||||||
|
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui2}{here}.
|
||||||
|
|
||||||
\list
|
Additionally, you can download the completed project of this tutorial from
|
||||||
\li \l {Log In UI - Components}
|
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui3}{here}.
|
||||||
\li \l {Log In UI - Positioning}
|
|
||||||
\endlist
|
|
||||||
|
|
||||||
The \e {Learn More} sections provide additional information relevant to the
|
The \e {Learn More} sections provide additional information relevant to the
|
||||||
task at hand.
|
task at hand.
|
||||||
|
|||||||
@@ -46,13 +46,13 @@
|
|||||||
\l{Creating Timeline Animations}{timeline animations} that you bind
|
\l{Creating Timeline Animations}{timeline animations} that you bind
|
||||||
to states.
|
to states.
|
||||||
|
|
||||||
These instructions build on:
|
The starting point for this tutorial is the completed
|
||||||
|
\l{Log In UI - States} project. You can download the project from
|
||||||
|
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui3}{here}.
|
||||||
|
|
||||||
|
Additionally, you can download the completed project of this tutorial from
|
||||||
|
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/Loginui4}{here}.
|
||||||
|
|
||||||
\list
|
|
||||||
\li \l {Log In UI - Components}
|
|
||||||
\li \l {Log In UI - Positioning}
|
|
||||||
\li \l {Log In UI - States}
|
|
||||||
\endlist
|
|
||||||
|
|
||||||
The \e {Learn More} sections provide additional information relevant to the
|
The \e {Learn More} sections provide additional information relevant to the
|
||||||
task at hand.
|
task at hand.
|
||||||
@@ -94,7 +94,7 @@
|
|||||||
\li Select \inlineimage icons/navigator-arrowup.png
|
\li Select \inlineimage icons/navigator-arrowup.png
|
||||||
to move \e username below \e tagLine in \uicontrol Navigator
|
to move \e username below \e tagLine in \uicontrol Navigator
|
||||||
to preserve the \l{Arranging Components}{component hierarchy}.
|
to preserve the \l{Arranging Components}{component hierarchy}.
|
||||||
\li Repeat for \e password and \e repeatPassword.
|
\li Repeat step 3 and 4 for \e password and \e repeatPassword.
|
||||||
\li Select \e fields in \uicontrol Navigator and press \key Delete to
|
\li Select \e fields in \uicontrol Navigator and press \key Delete to
|
||||||
delete it.
|
delete it.
|
||||||
\li Select \e username in \uicontrol Navigator to display its properties
|
\li Select \e username in \uicontrol Navigator to display its properties
|
||||||
@@ -196,8 +196,8 @@
|
|||||||
to save your changes.
|
to save your changes.
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
When you move the playhead along the timeline, you can see how the login
|
When you move the playhead along the timeline, you can see how the create
|
||||||
button fades out while the repeat password field fades in.
|
account button fades out while the repeat password field fades in.
|
||||||
|
|
||||||
You will now animate the top anchor margin of the repeat password field
|
You will now animate the top anchor margin of the repeat password field
|
||||||
to make it appear to slide down from the password field.
|
to make it appear to slide down from the password field.
|
||||||
@@ -219,7 +219,7 @@
|
|||||||
frame 0, and select the record button for the \e anchors.topMargin
|
frame 0, and select the record button for the \e anchors.topMargin
|
||||||
property of \e repeatPassword.
|
property of \e repeatPassword.
|
||||||
\li In the field next to the property, set a negative value for the
|
\li In the field next to the property, set a negative value for the
|
||||||
top anchor margin, -40, to place \e repeatPassword on top of
|
top anchor margin, -100, to place \e repeatPassword on top of
|
||||||
\e password.
|
\e password.
|
||||||
\li Move the playhead to frame 1000 and change the top anchor margin
|
\li Move the playhead to frame 1000 and change the top anchor margin
|
||||||
to 20, so that, combined with the change in the \uicontrol Opacity
|
to 20, so that, combined with the change in the \uicontrol Opacity
|
||||||
@@ -312,7 +312,7 @@
|
|||||||
the following \e import statement to the UI files where it uses the
|
the following \e import statement to the UI files where it uses the
|
||||||
components:
|
components:
|
||||||
|
|
||||||
\quotefromfile loginui4/Screen01.ui.qml
|
\quotefromfile Loginui4/Content/Screen01.ui.qml
|
||||||
\skipto QtQuick.Timeline
|
\skipto QtQuick.Timeline
|
||||||
\printuntil 1.0
|
\printuntil 1.0
|
||||||
|
|
||||||
|
|||||||
@@ -39,8 +39,8 @@
|
|||||||
translations from a JSON file.
|
translations from a JSON file.
|
||||||
|
|
||||||
You need to download the starting project for this tutorial from
|
You need to download the starting project for this tutorial from
|
||||||
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/examples/
|
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/multi-language%20tutorial/Loginui2}{here}
|
||||||
loginui2}{here} before you start.
|
before you start.
|
||||||
|
|
||||||
Download the project and open the \e loginui2.qmlproject file in \QDS
|
Download the project and open the \e loginui2.qmlproject file in \QDS
|
||||||
to get started.
|
to get started.
|
||||||
@@ -48,8 +48,7 @@
|
|||||||
This project consists of a login page with a couple of text elements.
|
This project consists of a login page with a couple of text elements.
|
||||||
|
|
||||||
Additionally, you will use a JSON translation file in this tutorial.
|
Additionally, you will use a JSON translation file in this tutorial.
|
||||||
Download it from \l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/
|
Download it from \l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/multi-language}{here}.
|
||||||
master/tutorial%20projects/multi-language}{here}.
|
|
||||||
|
|
||||||
\section1 JSON Translation File
|
\section1 JSON Translation File
|
||||||
|
|
||||||
@@ -133,10 +132,11 @@
|
|||||||
First, you need to prepare your project for translation:
|
First, you need to prepare your project for translation:
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
|
\li In \uicontrol{Projects}, double-click \e{Screen01.ui.qml} to open it.
|
||||||
\li All text strings that you want to translate need to be of \c
|
\li All text strings that you want to translate need to be of \c
|
||||||
qsTrId type. In this project the text strings are of \c qsTr type so you
|
qsTrId type. In this project the text strings are of \c qsTr type so you
|
||||||
need to change them. Open \uicontrol{Text Editor}, find all five
|
need to change them. Open \uicontrol{Text Editor}, find all five
|
||||||
occurrences of \c QsTr and replace them with \c{QsTrId}. For example,
|
occurrences of \c qsTr and replace them with \c{qsTrId}. For example,
|
||||||
replace:
|
replace:
|
||||||
\code
|
\code
|
||||||
text: qsTr("Qt Account")
|
text: qsTr("Qt Account")
|
||||||
@@ -165,21 +165,14 @@
|
|||||||
\li Go to \uicontrol View > \uicontrol Views and select \uicontrol
|
\li Go to \uicontrol View > \uicontrol Views and select \uicontrol
|
||||||
Translations to open the \uicontrol Translations view. You can
|
Translations to open the \uicontrol Translations view. You can
|
||||||
drag it to a workspace to dock it.
|
drag it to a workspace to dock it.
|
||||||
|
|
||||||
When you open the \uicontrol Translations view for the first time, \QDS
|
|
||||||
prompts you to enable the multi-language database, select
|
|
||||||
\uicontrol{Yes}.
|
|
||||||
\image enable-multilanguage.png
|
|
||||||
\li In \uicontrol Translations, select
|
\li In \uicontrol Translations, select
|
||||||
\inlineimage icons/select-languages.png
|
\inlineimage icons/select-languages.png
|
||||||
.
|
.
|
||||||
|
|
||||||
When you enable the multi-language database, an SQLite database named
|
|
||||||
\e translations.db is created in the project folder root.
|
|
||||||
\li Select the languages that you want to support in your project,
|
\li Select the languages that you want to support in your project,
|
||||||
in this case \uicontrol{English - American English} and
|
in this case \uicontrol{English - American English} and
|
||||||
\uicontrol{Swedish}.
|
\uicontrol{Swedish - Svenska}.
|
||||||
\li Set \uicontrol English as primary language and select \uicontrol{OK}.
|
\li Set \uicontrol{English - American English} as primary language and
|
||||||
|
select \uicontrol{Ok}.
|
||||||
\li Select \inlineimage icons/import-json-translations.png
|
\li Select \inlineimage icons/import-json-translations.png
|
||||||
and open the \e ml_translations.json file. Now you can see all your
|
and open the \e ml_translations.json file. Now you can see all your
|
||||||
imported translations in the \uicontrol Translations view.
|
imported translations in the \uicontrol Translations view.
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
** Copyright (C) 2022 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
** This file is part of the examples of the Qt Design Studio.
|
||||||
@@ -49,6 +47,7 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
import QtQuick 2.15
|
import QtQuick 2.15
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls 2.12
|
||||||
|
|
||||||
@@ -100,13 +99,16 @@ Button {
|
|||||||
when: !control.down
|
when: !control.down
|
||||||
|
|
||||||
PropertyChanges {
|
PropertyChanges {
|
||||||
target: textItem
|
target: buttonBackground
|
||||||
font.family: "Titillium Web ExtraLight"
|
color: "#00000000"
|
||||||
|
border.color: "#ffffff"
|
||||||
}
|
}
|
||||||
|
|
||||||
PropertyChanges {
|
PropertyChanges {
|
||||||
target: buttonBackground
|
target: textItem
|
||||||
color: "#28e7e7e7"
|
color: "#ffffff"
|
||||||
|
font.pixelSize: 34
|
||||||
|
font.family: "Titillium Web ExtraLight"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
State {
|
State {
|
||||||
@@ -115,12 +117,14 @@ Button {
|
|||||||
PropertyChanges {
|
PropertyChanges {
|
||||||
target: textItem
|
target: textItem
|
||||||
color: "#ffffff"
|
color: "#ffffff"
|
||||||
|
border.color: "#ffffff"
|
||||||
|
font.family: "Titillium Web ExtraLight"
|
||||||
}
|
}
|
||||||
|
|
||||||
PropertyChanges {
|
PropertyChanges {
|
||||||
target: buttonBackground
|
target: buttonBackground
|
||||||
color: "#e7e7e7"
|
color: "#28e7e7e7"
|
||||||
border.color: "#ffffff"
|
border.color: "#00000000"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
** Copyright (C) 2022 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
** This file is part of the examples of the Qt Design Studio.
|
||||||
@@ -49,6 +47,7 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
import QtQuick 2.15
|
import QtQuick 2.15
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls 2.12
|
||||||
|
|
||||||
@@ -68,6 +67,7 @@ Button {
|
|||||||
|
|
||||||
text: "My Button"
|
text: "My Button"
|
||||||
hoverEnabled: false
|
hoverEnabled: false
|
||||||
|
enabled: true
|
||||||
|
|
||||||
background: buttonBackground
|
background: buttonBackground
|
||||||
Rectangle {
|
Rectangle {
|
||||||
@@ -83,6 +83,8 @@ Button {
|
|||||||
contentItem: textItem
|
contentItem: textItem
|
||||||
Text {
|
Text {
|
||||||
id: textItem
|
id: textItem
|
||||||
|
width: 500
|
||||||
|
height: 100
|
||||||
text: control.text
|
text: control.text
|
||||||
font.pixelSize: 34
|
font.pixelSize: 34
|
||||||
|
|
||||||
@@ -101,6 +103,14 @@ Button {
|
|||||||
PropertyChanges {
|
PropertyChanges {
|
||||||
target: buttonBackground
|
target: buttonBackground
|
||||||
color: "#00000000"
|
color: "#00000000"
|
||||||
|
border.color: "#41cd52"
|
||||||
|
}
|
||||||
|
|
||||||
|
PropertyChanges {
|
||||||
|
target: textItem
|
||||||
|
color: "#41cd52"
|
||||||
|
font.pixelSize: 34
|
||||||
|
font.family: "Titillium Web ExtraLight"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
State {
|
State {
|
||||||
@@ -108,20 +118,17 @@ Button {
|
|||||||
when: control.down
|
when: control.down
|
||||||
PropertyChanges {
|
PropertyChanges {
|
||||||
target: textItem
|
target: textItem
|
||||||
color: "#ffffff"
|
color: "#41cd52"
|
||||||
|
border.color: "#41cd52"
|
||||||
|
font.pixelSize: 34
|
||||||
|
font.family: "Titillium Web ExtraLight"
|
||||||
}
|
}
|
||||||
|
|
||||||
PropertyChanges {
|
PropertyChanges {
|
||||||
target: buttonBackground
|
target: buttonBackground
|
||||||
color: "#41cd52"
|
color: "#41cd52"
|
||||||
border.color: "#00000000"
|
border.color: "#41cd52"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
/*##^##
|
|
||||||
Designer {
|
|
||||||
D{i:0;height:100;width:500}
|
|
||||||
}
|
|
||||||
##^##*/
|
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
** Copyright (C) 2022 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
** This file is part of the examples of the Qt Design Studio.
|
||||||
@@ -49,9 +47,10 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
import loginui1 1.0
|
import Loginui1
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
width: Constants.width
|
width: Constants.width
|
||||||
@@ -70,47 +69,44 @@ Rectangle {
|
|||||||
Image {
|
Image {
|
||||||
id: qt_logo_green_128x128px
|
id: qt_logo_green_128x128px
|
||||||
x: 296
|
x: 296
|
||||||
y: 40
|
y: 0
|
||||||
source: "images/qt_logo_green_128x128px.png"
|
source: "images/qt_logo_green_128x128px.png"
|
||||||
fillMode: Image.PreserveAspectFit
|
fillMode: Image.PreserveAspectFit
|
||||||
}
|
}
|
||||||
Text {
|
Text {
|
||||||
id: tagLine
|
|
||||||
width: 541
|
|
||||||
height: 78
|
|
||||||
color: "#ffffff"
|
color: "#ffffff"
|
||||||
text: qsTr("Are you ready to explore?")
|
text: qsTr("Are you ready to explore?")
|
||||||
font.pixelSize: 50
|
font.pixelSize: 50
|
||||||
font.family: "Titillium Web ExtraLight"
|
font.family: "Titillium Web ExtraLight"
|
||||||
anchors.verticalCenterOffset: -391
|
anchors.verticalCenterOffset: -430
|
||||||
anchors.horizontalCenterOffset: 18
|
anchors.horizontalCenterOffset: 0
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
}
|
}
|
||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
id: username
|
id: username
|
||||||
x: 128
|
x: 110
|
||||||
y: 470
|
y: 470
|
||||||
text: "Username or Email"
|
text: qsTr("Username or Email")
|
||||||
}
|
}
|
||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
id: password
|
id: password
|
||||||
x: 128
|
x: 110
|
||||||
y: 590
|
y: 590
|
||||||
text: qsTr("Password")
|
text: qsTr("Password")
|
||||||
}
|
}
|
||||||
|
|
||||||
PushButton {
|
PushButton {
|
||||||
id: login
|
id: login
|
||||||
x: 102
|
x: 101
|
||||||
y: 966
|
y: 944
|
||||||
text: qsTr("Continue")
|
text: qsTr("Continue")
|
||||||
}
|
}
|
||||||
|
|
||||||
PushButton {
|
PushButton {
|
||||||
id: createAccount
|
id: creteAccount
|
||||||
x: 102
|
x: 101
|
||||||
y: 1088
|
y: 1088
|
||||||
text: qsTr("Create Account")
|
text: qsTr("Create Account")
|
||||||
}
|
}
|
||||||
@@ -118,7 +114,7 @@ Rectangle {
|
|||||||
|
|
||||||
/*##^##
|
/*##^##
|
||||||
Designer {
|
Designer {
|
||||||
D{i:0;formeditorZoom:0.33}
|
D{i:0;formeditorZoom:0.5}D{i:1}D{i:2}D{i:3}D{i:4}D{i:5}D{i:6}D{i:7}
|
||||||
}
|
}
|
||||||
##^##*/
|
##^##*/
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 3.4 KiB |
@@ -0,0 +1,41 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2018 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Quick Designer Components.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:GPL$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 or (at your option) any later version
|
||||||
|
** approved by the KDE Free Qt Foundation. The licenses are as published by
|
||||||
|
** the Free Software Foundation and appearing in the file LICENSE.GPL3
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
import QtQuick
|
||||||
|
|
||||||
|
ListModel {
|
||||||
|
id: eventListModel
|
||||||
|
|
||||||
|
ListElement {
|
||||||
|
eventId: "enterPressed"
|
||||||
|
eventDescription: "Emitted when pressing the enter button"
|
||||||
|
shortcut: "Return"
|
||||||
|
parameters: "Enter"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2018 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Quick Designer Components.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:GPL$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 or (at your option) any later version
|
||||||
|
** approved by the KDE Free Qt Foundation. The licenses are as published by
|
||||||
|
** the Free Software Foundation and appearing in the file LICENSE.GPL3
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
import QtQuick
|
||||||
|
import QtQuick.Studio.EventSimulator 1.0
|
||||||
|
import QtQuick.Studio.EventSystem 1.0
|
||||||
|
|
||||||
|
QtObject {
|
||||||
|
id: simulator
|
||||||
|
property bool active: true
|
||||||
|
|
||||||
|
property Timer __timer: Timer {
|
||||||
|
id: timer
|
||||||
|
interval: 100
|
||||||
|
onTriggered: {
|
||||||
|
EventSimulator.show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
EventSystem.init(Qt.resolvedUrl("EventListModel.qml"))
|
||||||
|
if (simulator.active)
|
||||||
|
timer.start()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,2 +1,6 @@
|
|||||||
|
Module Loginui1
|
||||||
singleton Constants 1.0 Constants.qml
|
singleton Constants 1.0 Constants.qml
|
||||||
EventListSimulator 1.0 EventListSimulator.qml
|
EventListSimulator 1.0 EventListSimulator.qml
|
||||||
|
EventListModel 1.0 EventListModel.qml
|
||||||
|
DirectoryFontLoader 1.0 DirectoryFontLoader.qml
|
||||||
|
|
||||||
|
|||||||
@@ -1,61 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
|
||||||
** Contact: https://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** Commercial License Usage
|
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
** accordance with the commercial license agreement provided with the
|
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
|
||||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
|
||||||
** information use the contact form at https://www.qt.io/contact-us.
|
|
||||||
**
|
|
||||||
** BSD License Usage
|
|
||||||
** Alternatively, you may use this file under the terms of the BSD license
|
|
||||||
** as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
|
||||||
** contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
import QtQuick
|
|
||||||
import loginui1 1.0
|
|
||||||
|
|
||||||
Item {
|
|
||||||
width: Constants.width
|
|
||||||
height: Constants.height
|
|
||||||
|
|
||||||
Screen01 {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,21 +1,69 @@
|
|||||||
/* File generated by Qt Creator */
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the examples of the Qt Design Studio.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
import QmlProject 1.1
|
import QmlProject
|
||||||
|
|
||||||
Project {
|
Project {
|
||||||
mainFile: "loginui1.qml"
|
mainFile: "content/App.qml"
|
||||||
|
|
||||||
/* Include .qml, .js, and image files from current directory and subdirectories */
|
/* Include .qml, .js, and image files from current directory and subdirectories */
|
||||||
QmlFiles {
|
QmlFiles {
|
||||||
directory: "."
|
directory: "content"
|
||||||
}
|
}
|
||||||
|
|
||||||
JavaScriptFiles {
|
JavaScriptFiles {
|
||||||
directory: "."
|
directory: "content"
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageFiles {
|
ImageFiles {
|
||||||
directory: "."
|
directory: "content"
|
||||||
}
|
}
|
||||||
|
|
||||||
Files {
|
Files {
|
||||||
@@ -32,9 +80,34 @@ Project {
|
|||||||
filter: "*.ttf;*.otf"
|
filter: "*.ttf;*.otf"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.wav;*.mp3"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.mp4"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.glsl;*.glslv;*.glslf;*.vsh;*.fsh;*.vert;*.frag"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.mesh"
|
||||||
|
directory: "asset_imports"
|
||||||
|
}
|
||||||
|
|
||||||
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"
|
||||||
|
QT_LOGGING_RULES: "qt.qml.connections=false"
|
||||||
|
QT_ENABLE_HIGHDPI_SCALING: "0"
|
||||||
|
/* Useful for debugging
|
||||||
|
QSG_VISUALIZE=batches
|
||||||
|
QSG_VISUALIZE=clip
|
||||||
|
QSG_VISUALIZE=changes
|
||||||
|
QSG_VISUALIZE=overdraw
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
qt6Project: true
|
qt6Project: true
|
||||||
@@ -43,5 +116,10 @@ Project {
|
|||||||
importPaths: [ "imports", "asset_imports" ]
|
importPaths: [ "imports", "asset_imports" ]
|
||||||
|
|
||||||
/* Required for deployment */
|
/* Required for deployment */
|
||||||
targetDirectory: "/opt/loginui1"
|
targetDirectory: "/opt/Loginui1"
|
||||||
|
|
||||||
|
qdsVersion: "3.0"
|
||||||
|
|
||||||
|
/* If any modules the project imports require widgets (e.g. QtCharts), widgetApp must be true */
|
||||||
|
widgetApp: true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
; This file can be edited to change the style of the application
|
|
||||||
; Read "Qt Quick Controls 2 Configuration File" for details:
|
|
||||||
; http://doc.qt.io/qt-5/qtquickcontrols2-configuration.html
|
|
||||||
|
|
||||||
[Controls]
|
|
||||||
Style=Default
|
|
||||||
@@ -1,6 +1,11 @@
|
|||||||
|
/*
|
||||||
|
* This file is automatically generated by Qt Design Studio.
|
||||||
|
* Do not change.
|
||||||
|
*/
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
** Copyright (C) 2022 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
** This file is part of the examples of the Qt Design Studio.
|
||||||
@@ -48,14 +53,12 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
import QtQuick
|
#include <QGuiApplication>
|
||||||
import loginui4 1.0
|
|
||||||
|
|
||||||
Item {
|
|
||||||
width: Constants.width
|
|
||||||
height: Constants.height
|
|
||||||
|
|
||||||
Screen01 {
|
|
||||||
}
|
|
||||||
|
|
||||||
|
void set_qt_environment()
|
||||||
|
{
|
||||||
|
qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1");
|
||||||
|
qputenv("QT_ENABLE_HIGHDPI_SCALING", "0");
|
||||||
|
qputenv("QT_LOGGING_RULES", "qt.qml.connections=false");
|
||||||
|
qputenv("QT_QUICK_CONTROLS_CONF", ":/qtquickcontrols2.conf");
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
/*
|
||||||
|
* This file is automatically generated by Qt Design Studio.
|
||||||
|
* Do not change.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <QtQml/qqmlextensionplugin.h>
|
||||||
|
|
||||||
|
Q_IMPORT_QML_PLUGIN(contentPlugin)
|
||||||
|
Q_IMPORT_QML_PLUGIN(Loginui1Plugin)
|
||||||
62
doc/qtdesignstudio/examples/loginui1/src/main.cpp
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Quick Studio Components.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:GPL$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 or (at your option) any later version
|
||||||
|
** approved by the KDE Free Qt Foundation. The licenses are as published by
|
||||||
|
** the Free Software Foundation and appearing in the file LICENSE.GPL3
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <QGuiApplication>
|
||||||
|
#include <QQmlApplicationEngine>
|
||||||
|
|
||||||
|
#include "app_environment.h"
|
||||||
|
#include "import_qml_plugins.h"
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
set_qt_environment();
|
||||||
|
|
||||||
|
QGuiApplication app(argc, argv);
|
||||||
|
|
||||||
|
QQmlApplicationEngine engine;
|
||||||
|
const QUrl url(u"qrc:Main/main.qml"_qs);
|
||||||
|
QObject::connect(
|
||||||
|
&engine, &QQmlApplicationEngine::objectCreated, &app,
|
||||||
|
[url](QObject *obj, const QUrl &objUrl) {
|
||||||
|
if (!obj && url == objUrl)
|
||||||
|
QCoreApplication::exit(-1);
|
||||||
|
},
|
||||||
|
Qt::QueuedConnection);
|
||||||
|
|
||||||
|
engine.addImportPath(QCoreApplication::applicationDirPath() + "/qml");
|
||||||
|
engine.addImportPath(":/");
|
||||||
|
|
||||||
|
engine.load(url);
|
||||||
|
|
||||||
|
if (engine.rootObjects().isEmpty()) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return app.exec();
|
||||||
|
}
|
||||||
75
doc/qtdesignstudio/examples/loginui2/Loginui2.qmlproject
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
import QmlProject
|
||||||
|
|
||||||
|
Project {
|
||||||
|
mainFile: "content/App.qml"
|
||||||
|
|
||||||
|
/* Include .qml, .js, and image files from current directory and subdirectories */
|
||||||
|
QmlFiles {
|
||||||
|
directory: "content"
|
||||||
|
}
|
||||||
|
|
||||||
|
JavaScriptFiles {
|
||||||
|
directory: "content"
|
||||||
|
}
|
||||||
|
|
||||||
|
ImageFiles {
|
||||||
|
directory: "content"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.conf"
|
||||||
|
files: ["qtquickcontrols2.conf"]
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "qmldir"
|
||||||
|
directory: "."
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.ttf;*.otf"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.wav;*.mp3"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.mp4"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.glsl;*.glslv;*.glslf;*.vsh;*.fsh;*.vert;*.frag"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.mesh"
|
||||||
|
directory: "asset_imports"
|
||||||
|
}
|
||||||
|
|
||||||
|
Environment {
|
||||||
|
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
|
||||||
|
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
|
||||||
|
QT_LOGGING_RULES: "qt.qml.connections=false"
|
||||||
|
QT_ENABLE_HIGHDPI_SCALING: "0"
|
||||||
|
/* Useful for debugging
|
||||||
|
QSG_VISUALIZE=batches
|
||||||
|
QSG_VISUALIZE=clip
|
||||||
|
QSG_VISUALIZE=changes
|
||||||
|
QSG_VISUALIZE=overdraw
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
qt6Project: true
|
||||||
|
|
||||||
|
/* List of plugin directories passed to QML runtime */
|
||||||
|
importPaths: [ "imports", "asset_imports" ]
|
||||||
|
|
||||||
|
/* Required for deployment */
|
||||||
|
targetDirectory: "/opt/Loginui1"
|
||||||
|
|
||||||
|
qdsVersion: "3.0"
|
||||||
|
|
||||||
|
/* If any modules the project imports require widgets (e.g. QtCharts), widgetApp must be true */
|
||||||
|
widgetApp: true
|
||||||
|
}
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
** Copyright (C) 2022 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
** This file is part of the examples of the Qt Design Studio.
|
||||||
@@ -49,9 +47,10 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
import loginui2 1.0
|
import Loginui1
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: rectangle
|
id: rectangle
|
||||||
@@ -69,7 +68,6 @@ Rectangle {
|
|||||||
|
|
||||||
Image {
|
Image {
|
||||||
id: qt_logo_green_128x128px
|
id: qt_logo_green_128x128px
|
||||||
x: 296
|
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
source: "images/qt_logo_green_128x128px.png"
|
source: "images/qt_logo_green_128x128px.png"
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
@@ -78,8 +76,6 @@ Rectangle {
|
|||||||
}
|
}
|
||||||
Text {
|
Text {
|
||||||
id: tagLine
|
id: tagLine
|
||||||
width: 541
|
|
||||||
height: 78
|
|
||||||
color: "#ffffff"
|
color: "#ffffff"
|
||||||
text: qsTr("Are you ready to explore?")
|
text: qsTr("Are you ready to explore?")
|
||||||
anchors.top: qt_logo_green_128x128px.bottom
|
anchors.top: qt_logo_green_128x128px.bottom
|
||||||
@@ -87,11 +83,11 @@ Rectangle {
|
|||||||
anchors.topMargin: 40
|
anchors.topMargin: 40
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
font.family: "Titillium Web ExtraLight"
|
font.family: "Titillium Web ExtraLight"
|
||||||
|
anchors.horizontalCenterOffset: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
id: fields
|
id: fields
|
||||||
x: 128
|
|
||||||
anchors.top: tagLine.bottom
|
anchors.top: tagLine.bottom
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
anchors.topMargin: 170
|
anchors.topMargin: 170
|
||||||
@@ -99,7 +95,7 @@ Rectangle {
|
|||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
id: username
|
id: username
|
||||||
text: "Username or Email"
|
text: qsTr("Username or Email")
|
||||||
}
|
}
|
||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
@@ -110,11 +106,10 @@ Rectangle {
|
|||||||
|
|
||||||
Column {
|
Column {
|
||||||
id: buttons
|
id: buttons
|
||||||
x: 102
|
y: 944
|
||||||
y: 966
|
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
anchors.bottomMargin: 100
|
anchors.bottomMargin: 50
|
||||||
spacing: 20
|
spacing: 20
|
||||||
|
|
||||||
PushButton {
|
PushButton {
|
||||||
@@ -123,7 +118,7 @@ Rectangle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PushButton {
|
PushButton {
|
||||||
id: createAccount
|
id: creteAccount
|
||||||
text: qsTr("Create Account")
|
text: qsTr("Create Account")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -131,7 +126,7 @@ Rectangle {
|
|||||||
|
|
||||||
/*##^##
|
/*##^##
|
||||||
Designer {
|
Designer {
|
||||||
D{i:0;formeditorZoom:0.5}D{i:1}D{i:2}D{i:4}
|
D{i:0;formeditorZoom:0.66}D{i:1}D{i:2}D{i:3}D{i:5}D{i:6}D{i:4}D{i:8}D{i:9}D{i:7}
|
||||||
}
|
}
|
||||||
##^##*/
|
##^##*/
|
||||||
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
pragma Singleton
|
|
||||||
import QtQuick
|
|
||||||
|
|
||||||
QtObject {
|
|
||||||
readonly property int width: 720
|
|
||||||
readonly property int height: 1280
|
|
||||||
|
|
||||||
property alias fontDirectory: directoryFontLoader.fontDirectory
|
|
||||||
property alias relativeFontDirectory: directoryFontLoader.relativeFontDirectory
|
|
||||||
|
|
||||||
/* Edit this comment to add your custom font */
|
|
||||||
readonly property font font: Qt.font({
|
|
||||||
family: Qt.application.font.family,
|
|
||||||
pixelSize: Qt.application.font.pixelSize
|
|
||||||
})
|
|
||||||
readonly property font largeFont: Qt.font({
|
|
||||||
family: Qt.application.font.family,
|
|
||||||
pixelSize: Qt.application.font.pixelSize * 1.6
|
|
||||||
})
|
|
||||||
|
|
||||||
readonly property color backgroundColor: "#c2c2c2"
|
|
||||||
|
|
||||||
property DirectoryFontLoader directoryFontLoader: DirectoryFontLoader {
|
|
||||||
id: directoryFontLoader
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
singleton Constants 1.0 Constants.qml
|
|
||||||
EventListSimulator 1.0 EventListSimulator.qml
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
|
||||||
** Contact: https://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** Commercial License Usage
|
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
** accordance with the commercial license agreement provided with the
|
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
|
||||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
|
||||||
** information use the contact form at https://www.qt.io/contact-us.
|
|
||||||
**
|
|
||||||
** BSD License Usage
|
|
||||||
** Alternatively, you may use this file under the terms of the BSD license
|
|
||||||
** as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
|
||||||
** contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
import QtQuick
|
|
||||||
import loginui2 1.0
|
|
||||||
|
|
||||||
Item {
|
|
||||||
width: Constants.width
|
|
||||||
height: Constants.height
|
|
||||||
|
|
||||||
Screen01 {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
/* File generated by Qt Creator */
|
|
||||||
|
|
||||||
import QmlProject 1.1
|
|
||||||
|
|
||||||
Project {
|
|
||||||
mainFile: "loginui2.qml"
|
|
||||||
|
|
||||||
/* Include .qml, .js, and image files from current directory and subdirectories */
|
|
||||||
QmlFiles {
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
JavaScriptFiles {
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
ImageFiles {
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
Files {
|
|
||||||
filter: "*.conf"
|
|
||||||
files: ["qtquickcontrols2.conf"]
|
|
||||||
}
|
|
||||||
|
|
||||||
Files {
|
|
||||||
filter: "qmldir"
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
Files {
|
|
||||||
filter: "*.ttf;*.otf"
|
|
||||||
}
|
|
||||||
|
|
||||||
Environment {
|
|
||||||
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
|
|
||||||
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
|
|
||||||
}
|
|
||||||
|
|
||||||
qt6Project: true
|
|
||||||
|
|
||||||
/* List of plugin directories passed to QML runtime */
|
|
||||||
importPaths: [ "imports", "asset_imports" ]
|
|
||||||
|
|
||||||
/* Required for deployment */
|
|
||||||
targetDirectory: "/opt/loginui1"
|
|
||||||
}
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
; This file can be edited to change the style of the application
|
|
||||||
; Read "Qt Quick Controls 2 Configuration File" for details:
|
|
||||||
; http://doc.qt.io/qt-5/qtquickcontrols2-configuration.html
|
|
||||||
|
|
||||||
[Controls]
|
|
||||||
Style=Default
|
|
||||||
75
doc/qtdesignstudio/examples/loginui3/Loginui3.qmlproject
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
import QmlProject
|
||||||
|
|
||||||
|
Project {
|
||||||
|
mainFile: "content/App.qml"
|
||||||
|
|
||||||
|
/* Include .qml, .js, and image files from current directory and subdirectories */
|
||||||
|
QmlFiles {
|
||||||
|
directory: "content"
|
||||||
|
}
|
||||||
|
|
||||||
|
JavaScriptFiles {
|
||||||
|
directory: "content"
|
||||||
|
}
|
||||||
|
|
||||||
|
ImageFiles {
|
||||||
|
directory: "content"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.conf"
|
||||||
|
files: ["qtquickcontrols2.conf"]
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "qmldir"
|
||||||
|
directory: "."
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.ttf;*.otf"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.wav;*.mp3"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.mp4"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.glsl;*.glslv;*.glslf;*.vsh;*.fsh;*.vert;*.frag"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.mesh"
|
||||||
|
directory: "asset_imports"
|
||||||
|
}
|
||||||
|
|
||||||
|
Environment {
|
||||||
|
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
|
||||||
|
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
|
||||||
|
QT_LOGGING_RULES: "qt.qml.connections=false"
|
||||||
|
QT_ENABLE_HIGHDPI_SCALING: "0"
|
||||||
|
/* Useful for debugging
|
||||||
|
QSG_VISUALIZE=batches
|
||||||
|
QSG_VISUALIZE=clip
|
||||||
|
QSG_VISUALIZE=changes
|
||||||
|
QSG_VISUALIZE=overdraw
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
qt6Project: true
|
||||||
|
|
||||||
|
/* List of plugin directories passed to QML runtime */
|
||||||
|
importPaths: [ "imports", "asset_imports" ]
|
||||||
|
|
||||||
|
/* Required for deployment */
|
||||||
|
targetDirectory: "/opt/Loginui1"
|
||||||
|
|
||||||
|
qdsVersion: "3.0"
|
||||||
|
|
||||||
|
/* If any modules the project imports require widgets (e.g. QtCharts), widgetApp must be true */
|
||||||
|
widgetApp: true
|
||||||
|
}
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
** Copyright (C) 2022 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
** This file is part of the examples of the Qt Design Studio.
|
||||||
@@ -49,9 +47,10 @@
|
|||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
import loginui3 1.0
|
import Loginui1
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: rectangle
|
id: rectangle
|
||||||
@@ -70,7 +69,6 @@ Rectangle {
|
|||||||
|
|
||||||
Image {
|
Image {
|
||||||
id: qt_logo_green_128x128px
|
id: qt_logo_green_128x128px
|
||||||
x: 296
|
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
source: "images/qt_logo_green_128x128px.png"
|
source: "images/qt_logo_green_128x128px.png"
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
@@ -79,8 +77,6 @@ Rectangle {
|
|||||||
}
|
}
|
||||||
Text {
|
Text {
|
||||||
id: tagLine
|
id: tagLine
|
||||||
width: 541
|
|
||||||
height: 78
|
|
||||||
color: "#ffffff"
|
color: "#ffffff"
|
||||||
text: qsTr("Are you ready to explore?")
|
text: qsTr("Are you ready to explore?")
|
||||||
anchors.top: qt_logo_green_128x128px.bottom
|
anchors.top: qt_logo_green_128x128px.bottom
|
||||||
@@ -88,11 +84,11 @@ Rectangle {
|
|||||||
anchors.topMargin: 40
|
anchors.topMargin: 40
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
font.family: "Titillium Web ExtraLight"
|
font.family: "Titillium Web ExtraLight"
|
||||||
|
anchors.horizontalCenterOffset: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
id: fields
|
id: fields
|
||||||
x: 128
|
|
||||||
anchors.top: tagLine.bottom
|
anchors.top: tagLine.bottom
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
anchors.topMargin: 170
|
anchors.topMargin: 170
|
||||||
@@ -100,7 +96,7 @@ Rectangle {
|
|||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
id: username
|
id: username
|
||||||
text: "Username or Email"
|
text: qsTr("Username or Email")
|
||||||
}
|
}
|
||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
@@ -110,17 +106,16 @@ Rectangle {
|
|||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
id: repeatPassword
|
id: repeatPassword
|
||||||
text: "Repeat Password"
|
text: qsTr("Repeat Password")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
id: buttons
|
id: buttons
|
||||||
x: 102
|
y: 944
|
||||||
y: 966
|
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
anchors.bottomMargin: 100
|
anchors.bottomMargin: 50
|
||||||
spacing: 20
|
spacing: 20
|
||||||
|
|
||||||
PushButton {
|
PushButton {
|
||||||
@@ -160,7 +155,8 @@ Rectangle {
|
|||||||
|
|
||||||
/*##^##
|
/*##^##
|
||||||
Designer {
|
Designer {
|
||||||
D{i:0;formeditorZoom:0.5}
|
D{i:0;formeditorZoom:0.5}D{i:1}D{i:2}D{i:3}D{i:5}D{i:6}D{i:7}D{i:4}D{i:9}D{i:11}D{i:10}
|
||||||
|
D{i:8}
|
||||||
}
|
}
|
||||||
##^##*/
|
##^##*/
|
||||||
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
pragma Singleton
|
|
||||||
import QtQuick
|
|
||||||
|
|
||||||
QtObject {
|
|
||||||
readonly property int width: 720
|
|
||||||
readonly property int height: 1280
|
|
||||||
|
|
||||||
property alias fontDirectory: directoryFontLoader.fontDirectory
|
|
||||||
property alias relativeFontDirectory: directoryFontLoader.relativeFontDirectory
|
|
||||||
|
|
||||||
/* Edit this comment to add your custom font */
|
|
||||||
readonly property font font: Qt.font({
|
|
||||||
family: Qt.application.font.family,
|
|
||||||
pixelSize: Qt.application.font.pixelSize
|
|
||||||
})
|
|
||||||
readonly property font largeFont: Qt.font({
|
|
||||||
family: Qt.application.font.family,
|
|
||||||
pixelSize: Qt.application.font.pixelSize * 1.6
|
|
||||||
})
|
|
||||||
|
|
||||||
readonly property color backgroundColor: "#c2c2c2"
|
|
||||||
|
|
||||||
property DirectoryFontLoader directoryFontLoader: DirectoryFontLoader {
|
|
||||||
id: directoryFontLoader
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
singleton Constants 1.0 Constants.qml
|
|
||||||
EventListSimulator 1.0 EventListSimulator.qml
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
|
||||||
** Contact: https://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** Commercial License Usage
|
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
** accordance with the commercial license agreement provided with the
|
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
|
||||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
|
||||||
** information use the contact form at https://www.qt.io/contact-us.
|
|
||||||
**
|
|
||||||
** BSD License Usage
|
|
||||||
** Alternatively, you may use this file under the terms of the BSD license
|
|
||||||
** as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
|
||||||
** contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
import QtQuick
|
|
||||||
import loginui3 1.0
|
|
||||||
|
|
||||||
Item {
|
|
||||||
width: Constants.width
|
|
||||||
height: Constants.height
|
|
||||||
|
|
||||||
Screen01 {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
/* File generated by Qt Creator */
|
|
||||||
|
|
||||||
import QmlProject 1.1
|
|
||||||
|
|
||||||
Project {
|
|
||||||
mainFile: "loginui3.qml"
|
|
||||||
|
|
||||||
/* Include .qml, .js, and image files from current directory and subdirectories */
|
|
||||||
QmlFiles {
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
JavaScriptFiles {
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
ImageFiles {
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
Files {
|
|
||||||
filter: "*.conf"
|
|
||||||
files: ["qtquickcontrols2.conf"]
|
|
||||||
}
|
|
||||||
|
|
||||||
Files {
|
|
||||||
filter: "qmldir"
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
Files {
|
|
||||||
filter: "*.ttf;*.otf"
|
|
||||||
}
|
|
||||||
|
|
||||||
Environment {
|
|
||||||
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
|
|
||||||
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
|
|
||||||
}
|
|
||||||
|
|
||||||
qt6Project: true
|
|
||||||
|
|
||||||
/* List of plugin directories passed to QML runtime */
|
|
||||||
importPaths: [ "imports", "asset_imports" ]
|
|
||||||
|
|
||||||
/* Required for deployment */
|
|
||||||
targetDirectory: "/opt/loginui1"
|
|
||||||
}
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
[Controls]
|
|
||||||
Style=Default
|
|
||||||
75
doc/qtdesignstudio/examples/loginui4/Loginui4.qmlproject
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
import QmlProject
|
||||||
|
|
||||||
|
Project {
|
||||||
|
mainFile: "content/App.qml"
|
||||||
|
|
||||||
|
/* Include .qml, .js, and image files from current directory and subdirectories */
|
||||||
|
QmlFiles {
|
||||||
|
directory: "content"
|
||||||
|
}
|
||||||
|
|
||||||
|
JavaScriptFiles {
|
||||||
|
directory: "content"
|
||||||
|
}
|
||||||
|
|
||||||
|
ImageFiles {
|
||||||
|
directory: "content"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.conf"
|
||||||
|
files: ["qtquickcontrols2.conf"]
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "qmldir"
|
||||||
|
directory: "."
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.ttf;*.otf"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.wav;*.mp3"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.mp4"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.glsl;*.glslv;*.glslf;*.vsh;*.fsh;*.vert;*.frag"
|
||||||
|
}
|
||||||
|
|
||||||
|
Files {
|
||||||
|
filter: "*.mesh"
|
||||||
|
directory: "asset_imports"
|
||||||
|
}
|
||||||
|
|
||||||
|
Environment {
|
||||||
|
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
|
||||||
|
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
|
||||||
|
QT_LOGGING_RULES: "qt.qml.connections=false"
|
||||||
|
QT_ENABLE_HIGHDPI_SCALING: "0"
|
||||||
|
/* Useful for debugging
|
||||||
|
QSG_VISUALIZE=batches
|
||||||
|
QSG_VISUALIZE=clip
|
||||||
|
QSG_VISUALIZE=changes
|
||||||
|
QSG_VISUALIZE=overdraw
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
qt6Project: true
|
||||||
|
|
||||||
|
/* List of plugin directories passed to QML runtime */
|
||||||
|
importPaths: [ "imports", "asset_imports" ]
|
||||||
|
|
||||||
|
/* Required for deployment */
|
||||||
|
targetDirectory: "/opt/Loginui1"
|
||||||
|
|
||||||
|
qdsVersion: "3.0"
|
||||||
|
|
||||||
|
/* If any modules the project imports require widgets (e.g. QtCharts), widgetApp must be true */
|
||||||
|
widgetApp: true
|
||||||
|
}
|
||||||
@@ -1,57 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2021 The Qt Company Ltd.
|
|
||||||
** Contact: https://www.qt.io/licensing/
|
|
||||||
**
|
|
||||||
** This file is part of the examples of the Qt Design Studio.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** Commercial License Usage
|
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
** accordance with the commercial license agreement provided with the
|
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
|
||||||
** a written agreement between you and The Qt Company. For licensing terms
|
|
||||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
|
||||||
** information use the contact form at https://www.qt.io/contact-us.
|
|
||||||
**
|
|
||||||
** BSD License Usage
|
|
||||||
** Alternatively, you may use this file under the terms of the BSD license
|
|
||||||
** as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
|
||||||
** contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
import loginui4 1.0
|
import Loginui1
|
||||||
import QtQuick.Timeline 1.0
|
import QtQuick.Timeline 1.0
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
@@ -71,7 +20,6 @@ Rectangle {
|
|||||||
|
|
||||||
Image {
|
Image {
|
||||||
id: qt_logo_green_128x128px
|
id: qt_logo_green_128x128px
|
||||||
x: 296
|
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
source: "images/qt_logo_green_128x128px.png"
|
source: "images/qt_logo_green_128x128px.png"
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
@@ -80,8 +28,6 @@ Rectangle {
|
|||||||
}
|
}
|
||||||
Text {
|
Text {
|
||||||
id: tagLine
|
id: tagLine
|
||||||
width: 541
|
|
||||||
height: 78
|
|
||||||
color: "#ffffff"
|
color: "#ffffff"
|
||||||
text: qsTr("Are you ready to explore?")
|
text: qsTr("Are you ready to explore?")
|
||||||
anchors.top: qt_logo_green_128x128px.bottom
|
anchors.top: qt_logo_green_128x128px.bottom
|
||||||
@@ -89,30 +35,29 @@ Rectangle {
|
|||||||
anchors.topMargin: 40
|
anchors.topMargin: 40
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
font.family: "Titillium Web ExtraLight"
|
font.family: "Titillium Web ExtraLight"
|
||||||
|
anchors.horizontalCenterOffset: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
id: username
|
id: username
|
||||||
x: 110
|
text: qsTr("Username or Email")
|
||||||
text: "Username or Email"
|
|
||||||
anchors.top: tagLine.bottom
|
anchors.top: tagLine.bottom
|
||||||
anchors.topMargin: 170
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
anchors.topMargin: 170
|
||||||
}
|
}
|
||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
id: password
|
id: password
|
||||||
x: 110
|
|
||||||
text: qsTr("Password")
|
text: qsTr("Password")
|
||||||
anchors.top: username.bottom
|
anchors.top: username.bottom
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
anchors.topMargin: 20
|
anchors.topMargin: 21
|
||||||
}
|
}
|
||||||
|
|
||||||
EntryField {
|
EntryField {
|
||||||
id: repeatPassword
|
id: repeatPassword
|
||||||
x: 110
|
opacity: 0
|
||||||
text: "Repeat Password"
|
text: qsTr("Repeat Password")
|
||||||
anchors.top: password.bottom
|
anchors.top: password.bottom
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
anchors.topMargin: 20
|
anchors.topMargin: 20
|
||||||
@@ -120,11 +65,10 @@ Rectangle {
|
|||||||
|
|
||||||
Column {
|
Column {
|
||||||
id: buttons
|
id: buttons
|
||||||
x: 102
|
y: 944
|
||||||
y: 966
|
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
anchors.bottomMargin: 100
|
anchors.bottomMargin: 50
|
||||||
spacing: 20
|
spacing: 20
|
||||||
|
|
||||||
PushButton {
|
PushButton {
|
||||||
@@ -148,70 +92,68 @@ Rectangle {
|
|||||||
animations: [
|
animations: [
|
||||||
TimelineAnimation {
|
TimelineAnimation {
|
||||||
id: toCreateAccountState
|
id: toCreateAccountState
|
||||||
|
duration: 1000
|
||||||
running: false
|
running: false
|
||||||
loops: 1
|
loops: 1
|
||||||
duration: 1000
|
|
||||||
to: 1000
|
to: 1000
|
||||||
from: 0
|
from: 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
endFrame: 1000
|
endFrame: 1000
|
||||||
startFrame: 0
|
|
||||||
enabled: true
|
enabled: true
|
||||||
|
startFrame: 0
|
||||||
|
|
||||||
KeyframeGroup {
|
KeyframeGroup {
|
||||||
target: repeatPassword
|
target: repeatPassword
|
||||||
property: "opacity"
|
property: "opacity"
|
||||||
|
|
||||||
Keyframe {
|
Keyframe {
|
||||||
frame: 0
|
|
||||||
value: 0
|
value: 0
|
||||||
|
frame: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
Keyframe {
|
Keyframe {
|
||||||
frame: 999
|
|
||||||
value: 1
|
value: 1
|
||||||
|
frame: 1000
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
KeyframeGroup {
|
KeyframeGroup {
|
||||||
target: createAccount
|
target: createAccount
|
||||||
property: "opacity"
|
property: "opacity"
|
||||||
|
Keyframe {
|
||||||
|
value: 1
|
||||||
|
frame: 0
|
||||||
|
}
|
||||||
|
|
||||||
Keyframe {
|
Keyframe {
|
||||||
frame: 1000
|
|
||||||
value: 0
|
value: 0
|
||||||
|
frame: 1000
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
KeyframeGroup {
|
KeyframeGroup {
|
||||||
target: repeatPassword
|
target: repeatPassword
|
||||||
property: "anchors.topMargin"
|
property: "anchors.topMargin"
|
||||||
|
|
||||||
Keyframe {
|
Keyframe {
|
||||||
|
value: -100
|
||||||
frame: 0
|
frame: 0
|
||||||
value: -40
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Keyframe {
|
Keyframe {
|
||||||
easing.bezierCurve: [0.39,0.575,0.565,1,1,1]
|
value: -100
|
||||||
frame: 999
|
frame: 4
|
||||||
|
}
|
||||||
|
|
||||||
|
Keyframe {
|
||||||
|
easing.bezierCurve: [0.39, 0.575, 0.565, 1, 1, 1]
|
||||||
value: 20
|
value: 20
|
||||||
|
frame: 999
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
states: [
|
states: [
|
||||||
State {
|
State {
|
||||||
name: "login"
|
name: "login"
|
||||||
|
|
||||||
PropertyChanges {
|
|
||||||
target: timeline
|
|
||||||
enabled: true
|
|
||||||
}
|
|
||||||
|
|
||||||
PropertyChanges {
|
|
||||||
target: toCreateAccountState
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
State {
|
State {
|
||||||
name: "createAccount"
|
name: "createAccount"
|
||||||
@@ -231,6 +173,8 @@ Rectangle {
|
|||||||
|
|
||||||
/*##^##
|
/*##^##
|
||||||
Designer {
|
Designer {
|
||||||
D{i:0;formeditorZoom:0.5}D{i:6}D{i:9}D{i:11}
|
D{i:0;formeditorZoom:0.5}D{i:1}D{i:2}D{i:3}D{i:4}D{i:5}D{i:6}D{i:8}D{i:10}D{i:9}D{i:7}
|
||||||
|
D{i:11}
|
||||||
}
|
}
|
||||||
##^##*/
|
##^##*/
|
||||||
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
pragma Singleton
|
|
||||||
import QtQuick
|
|
||||||
|
|
||||||
QtObject {
|
|
||||||
readonly property int width: 720
|
|
||||||
readonly property int height: 1280
|
|
||||||
|
|
||||||
property alias fontDirectory: directoryFontLoader.fontDirectory
|
|
||||||
property alias relativeFontDirectory: directoryFontLoader.relativeFontDirectory
|
|
||||||
|
|
||||||
/* Edit this comment to add your custom font */
|
|
||||||
readonly property font font: Qt.font({
|
|
||||||
family: Qt.application.font.family,
|
|
||||||
pixelSize: Qt.application.font.pixelSize
|
|
||||||
})
|
|
||||||
readonly property font largeFont: Qt.font({
|
|
||||||
family: Qt.application.font.family,
|
|
||||||
pixelSize: Qt.application.font.pixelSize * 1.6
|
|
||||||
})
|
|
||||||
|
|
||||||
readonly property color backgroundColor: "#c2c2c2"
|
|
||||||
|
|
||||||
property DirectoryFontLoader directoryFontLoader: DirectoryFontLoader {
|
|
||||||
id: directoryFontLoader
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
singleton Constants 1.0 Constants.qml
|
|
||||||
EventListSimulator 1.0 EventListSimulator.qml
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
/* File generated by Qt Creator */
|
|
||||||
|
|
||||||
import QmlProject 1.1
|
|
||||||
|
|
||||||
Project {
|
|
||||||
mainFile: "loginui4.qml"
|
|
||||||
|
|
||||||
/* Include .qml, .js, and image files from current directory and subdirectories */
|
|
||||||
QmlFiles {
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
JavaScriptFiles {
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
ImageFiles {
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
Files {
|
|
||||||
filter: "*.conf"
|
|
||||||
files: ["qtquickcontrols2.conf"]
|
|
||||||
}
|
|
||||||
|
|
||||||
Files {
|
|
||||||
filter: "qmldir"
|
|
||||||
directory: "."
|
|
||||||
}
|
|
||||||
|
|
||||||
Files {
|
|
||||||
filter: "*.ttf;*.otf"
|
|
||||||
}
|
|
||||||
|
|
||||||
Environment {
|
|
||||||
QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
|
|
||||||
QT_AUTO_SCREEN_SCALE_FACTOR: "1"
|
|
||||||
}
|
|
||||||
|
|
||||||
qt6Project: true
|
|
||||||
|
|
||||||
/* List of plugin directories passed to QML runtime */
|
|
||||||
importPaths: [ "imports", "asset_imports" ]
|
|
||||||
|
|
||||||
/* Required for deployment */
|
|
||||||
targetDirectory: "/opt/loginui4"
|
|
||||||
}
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
[Controls]
|
|
||||||
Style=Default
|
|
||||||
|
Before Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 3.8 KiB |
@@ -63,12 +63,14 @@
|
|||||||
\li \l{Generating Qt Translation Source Files}
|
\li \l{Generating Qt Translation Source Files}
|
||||||
\row
|
\row
|
||||||
\li \inlineimage icons/project-translation-test.png
|
\li \inlineimage icons/project-translation-test.png
|
||||||
\li Run project translation test.
|
\li Run translation test for several documents and create a test report.
|
||||||
\li \l{Running the Project Translation Test}
|
\li \l{Running Translation Test for Several Documents}
|
||||||
\row
|
\row
|
||||||
\li \inlineimage icons/qml-translation-test.png
|
\li \inlineimage icons/qml-translation-test.png
|
||||||
\li Run QML translation test to find missing and elided translations.
|
\li Run translation test for the currently open document. This test
|
||||||
\li \l{Running the QML Translation Test}
|
shows translation warnings in \uicontrol{From Editor} and creates a
|
||||||
|
test report.
|
||||||
|
\li \l{Running Translation Test for a Single Document}
|
||||||
\row
|
\row
|
||||||
\li \inlineimage icons/export-translations.png
|
\li \inlineimage icons/export-translations.png
|
||||||
\li Export all translations used in your project or all translations
|
\li Export all translations used in your project or all translations
|
||||||
@@ -93,8 +95,8 @@
|
|||||||
"translation": "Password"
|
"translation": "Password"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"language": "sv",
|
"language": "fi",
|
||||||
"translation": "Lösenord"
|
"translation": "Salasana"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -120,8 +122,8 @@
|
|||||||
"translation": "Password"
|
"translation": "Password"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"language": "sv",
|
"language": "fi",
|
||||||
"translation": "Lösenord"
|
"translation": "Salasana"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
\endcode
|
\endcode
|
||||||
@@ -139,14 +141,14 @@
|
|||||||
in the \uicontrol Translations view. The files are generated
|
in the \uicontrol Translations view. The files are generated
|
||||||
in \e{<project-folder>/i18n}.
|
in \e{<project-folder>/i18n}.
|
||||||
|
|
||||||
\section1 Running the QML Translation Test
|
\section1 Running Translation Test for a Single Document
|
||||||
|
|
||||||
You can run the QML language test to find missing
|
You can run the translation test to find missing translations
|
||||||
and elided translations. Running the QML language test
|
and translations where the text exceeds the text element boundaries. Running
|
||||||
is a quick way to check the translations in the application you have open in
|
the test is a quick way to check the translations in the document you have
|
||||||
\uicontrol{Form Editor} as it highlights errors in the UI.
|
open in \uicontrol{Form Editor} as it highlights errors in the UI.
|
||||||
|
|
||||||
To run the QML translation test:
|
To run the test for the currently open document:
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li In the \uicontrol Translations view, select
|
\li In the \uicontrol Translations view, select
|
||||||
@@ -155,12 +157,11 @@
|
|||||||
\li Select the tests to run and the highlight color
|
\li Select the tests to run and the highlight color
|
||||||
for each test:
|
for each test:
|
||||||
\list
|
\list
|
||||||
\li \uicontrol{Show Translation Warnings} highlights missing
|
\li \uicontrol{Success} highlights translations without any warnings.
|
||||||
translations.
|
\li \uicontrol{Missing translation} highlights translations that are
|
||||||
\li \uicontrol{Show Found Translations} highlights all translations
|
missing for one or more languages.
|
||||||
that are correct.
|
\li \uicontrol{Exceeds boundaries} highlights translations where
|
||||||
\li \uicontrol{Show Elide Warnings} highlights all translations where
|
the text is too long to fit in the text object.
|
||||||
the text is too long to fit in the text object and therefore is elided.
|
|
||||||
\endlist
|
\endlist
|
||||||
\image translation-tester.png
|
\image translation-tester.png
|
||||||
\li Select \uicontrol{Run Tests}.
|
\li Select \uicontrol{Run Tests}.
|
||||||
@@ -205,16 +206,21 @@
|
|||||||
The report shows the type of error as well as line and column of the
|
The report shows the type of error as well as line and column of the
|
||||||
affected text element in the \e{ui.qml} file.
|
affected text element in the \e{ui.qml} file.
|
||||||
|
|
||||||
\section1 Running the Project Translation Test
|
\section1 Running Translation Test for Several Documents
|
||||||
|
|
||||||
You can run the project translation test on several \e{.ui.qml} files
|
You can run the project translation test on several \e{.ui.qml} files
|
||||||
at the same time. \QDS runs the same tests as during the
|
at the same time. \QDS runs the same tests as during the
|
||||||
\l{Running the QML Translation Test}{QML Translation Test} and generates the
|
\l{Running Translation Test for a Single Document}{Translation Test} and
|
||||||
same test reports but does not highlight errors in the UI.
|
generates the same test reports but does not highlight errors in the UI.
|
||||||
|
|
||||||
To run the project translation test, select
|
To run the translation test for several documents:
|
||||||
\inlineimage icons/project-translation-test.png
|
\list 1
|
||||||
in the \uicontrol Translations view.
|
\li Select
|
||||||
|
\inlineimage icons/project-translation-test.png
|
||||||
|
in the \uicontrol Translations view.
|
||||||
|
\li Select the files that you want to include in the test.
|
||||||
|
\li Select \uicontrol{Run Tests}.
|
||||||
|
\endlist
|
||||||
|
|
||||||
\section1 Exporting Translations in Other Ways
|
\section1 Exporting Translations in Other Ways
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"mac_sha256": "2c3822db1c916655223e5ee8ce0fbf6b73d0b99012045c9dc8eaa6a5736c0c55"
|
"mac_sha256": "2c3822db1c916655223e5ee8ce0fbf6b73d0b99012045c9dc8eaa6a5736c0c55"
|
||||||
},
|
},
|
||||||
"sdk_essential_packages": {
|
"sdk_essential_packages": {
|
||||||
"default": ["platform-tools", "platforms;android-30", "cmdline-tools;latest"],
|
"default": ["platform-tools", "platforms;android-31", "cmdline-tools;latest"],
|
||||||
"linux": [],
|
"linux": [],
|
||||||
"mac": [],
|
"mac": [],
|
||||||
"windows": ["extras;google;usb_driver"]
|
"windows": ["extras;google;usb_driver"]
|
||||||
@@ -18,7 +18,12 @@
|
|||||||
"specific_qt_versions": [
|
"specific_qt_versions": [
|
||||||
{
|
{
|
||||||
"versions": ["default"],
|
"versions": ["default"],
|
||||||
"sdk_essential_packages": ["build-tools;30.0.2", "ndk;21.3.6528147"],
|
"sdk_essential_packages": ["build-tools;31.0.0", "ndk;22.1.7171670"],
|
||||||
|
"ndk_path": "ndk/22.1.7171670"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"versions": ["5.15.[0-8]", "5.14.[0-2]", "5.13.2"],
|
||||||
|
"sdk_essential_packages": ["build-tools;31.0.0", "ndk;21.3.6528147"],
|
||||||
"ndk_path": "ndk/21.3.6528147"
|
"ndk_path": "ndk/21.3.6528147"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -185,3 +185,16 @@ def qdump__boost__variant(d, value):
|
|||||||
dummy, val = value.split('%is{%s}' % (max(4, alignment), realType.name))
|
dummy, val = value.split('%is{%s}' % (max(4, alignment), realType.name))
|
||||||
d.putItem(val)
|
d.putItem(val)
|
||||||
d.putBetterType(value.type)
|
d.putBetterType(value.type)
|
||||||
|
|
||||||
|
|
||||||
|
def qdump__boost__container__devector(d, value):
|
||||||
|
inner_type = value.type[0]
|
||||||
|
buffer = value["m_"]["buffer"].pointer()
|
||||||
|
front_idx = value["m_"]["front_idx"].integer()
|
||||||
|
back_idx = value["m_"]["back_idx"].integer()
|
||||||
|
start = buffer + (front_idx * inner_type.size())
|
||||||
|
size = int(back_idx - front_idx)
|
||||||
|
if size > 0:
|
||||||
|
d.checkPointer(start)
|
||||||
|
d.putItemCount(size)
|
||||||
|
d.putPlotData(start, size, inner_type)
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ HEADERS += $$PWD/synchronizecommand.h \ \
|
|||||||
$$PWD/clearscenecommand.h \
|
$$PWD/clearscenecommand.h \
|
||||||
$$PWD/createinstancescommand.h \
|
$$PWD/createinstancescommand.h \
|
||||||
$$PWD/informationchangedcommand.h \
|
$$PWD/informationchangedcommand.h \
|
||||||
|
$$PWD/nanotracecommand.h \
|
||||||
$$PWD/pixmapchangedcommand.h \
|
$$PWD/pixmapchangedcommand.h \
|
||||||
$$PWD/removeinstancescommand.h \
|
$$PWD/removeinstancescommand.h \
|
||||||
$$PWD/removepropertiescommand.h \
|
$$PWD/removepropertiescommand.h \
|
||||||
@@ -54,6 +55,7 @@ SOURCES += $$PWD/synchronizecommand.cpp \
|
|||||||
$$PWD/changestatecommand.cpp \
|
$$PWD/changestatecommand.cpp \
|
||||||
$$PWD/changevaluescommand.cpp \
|
$$PWD/changevaluescommand.cpp \
|
||||||
$$PWD/informationchangedcommand.cpp \
|
$$PWD/informationchangedcommand.cpp \
|
||||||
|
$$PWD/nanotracecommand.cpp \
|
||||||
$$PWD/removeinstancescommand.cpp \
|
$$PWD/removeinstancescommand.cpp \
|
||||||
$$PWD/removepropertiescommand.cpp \
|
$$PWD/removepropertiescommand.cpp \
|
||||||
$$PWD/reparentinstancescommand.cpp \
|
$$PWD/reparentinstancescommand.cpp \
|
||||||
|
|||||||
@@ -47,6 +47,9 @@ public:
|
|||||||
OrientationToggle,
|
OrientationToggle,
|
||||||
EditLightToggle,
|
EditLightToggle,
|
||||||
ShowGrid,
|
ShowGrid,
|
||||||
|
ShowSelectionBox,
|
||||||
|
ShowIconGizmo,
|
||||||
|
ShowCameraFrustum,
|
||||||
Edit3DParticleModeToggle,
|
Edit3DParticleModeToggle,
|
||||||
ParticlesPlay,
|
ParticlesPlay,
|
||||||
ParticlesRestart,
|
ParticlesRestart,
|
||||||
|
|||||||
@@ -77,7 +77,16 @@
|
|||||||
#include "view3dactioncommand.h"
|
#include "view3dactioncommand.h"
|
||||||
#include "requestmodelnodepreviewimagecommand.h"
|
#include "requestmodelnodepreviewimagecommand.h"
|
||||||
#include "nanotracecommand.h"
|
#include "nanotracecommand.h"
|
||||||
|
|
||||||
|
// Nanotrace headers are not exported to build dir at all if the feature is disabled, so
|
||||||
|
// runtime puppet build can't find them.
|
||||||
|
#if NANOTRACE_ENABLED
|
||||||
#include "nanotrace/nanotrace.h"
|
#include "nanotrace/nanotrace.h"
|
||||||
|
#else
|
||||||
|
#define NANOTRACE_INIT(process, thread, filepath)
|
||||||
|
#define NANOTRACE_SHUTDOWN()
|
||||||
|
#define NANOTRACE_SCOPE_ARGS(cat, name, ...)
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace QmlDesigner {
|
namespace QmlDesigner {
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ IconGizmo {
|
|||||||
id: cameraGizmo
|
id: cameraGizmo
|
||||||
|
|
||||||
property Model frustumModel: null
|
property Model frustumModel: null
|
||||||
|
property bool globalShowFrustum: false
|
||||||
|
|
||||||
iconSource: "qrc:///qtquickplugin/mockfiles/images/editor_camera.png"
|
iconSource: "qrc:///qtquickplugin/mockfiles/images/editor_camera.png"
|
||||||
|
|
||||||
@@ -46,8 +47,12 @@ IconGizmo {
|
|||||||
frustum.targetNode = targetNode;
|
frustum.targetNode = targetNode;
|
||||||
frustum.targetNode = Qt.binding(function() {return targetNode;});
|
frustum.targetNode = Qt.binding(function() {return targetNode;});
|
||||||
|
|
||||||
frustum.visible = visible || (targetNode && selected && activeScene === scene);
|
frustum.visible = (canBeVisible && globalShowFrustum)
|
||||||
frustum.visible = Qt.binding(function() {return visible || (targetNode && selected && activeScene === scene);});
|
|| (targetNode && selected && activeScene === scene);
|
||||||
|
frustum.visible = Qt.binding(function() {
|
||||||
|
return (canBeVisible && globalShowFrustum)
|
||||||
|
|| (targetNode && selected && activeScene === scene);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
onActiveSceneChanged: {
|
onActiveSceneChanged: {
|
||||||
|
|||||||
@@ -39,6 +39,9 @@ Item {
|
|||||||
|
|
||||||
property bool showEditLight: false
|
property bool showEditLight: false
|
||||||
property bool showGrid: true
|
property bool showGrid: true
|
||||||
|
property bool showSelectionBox: true
|
||||||
|
property bool showIconGizmo: true
|
||||||
|
property bool showCameraFrustum: false
|
||||||
property bool usePerspective: true
|
property bool usePerspective: true
|
||||||
property bool globalOrientation: false
|
property bool globalOrientation: false
|
||||||
property alias contentItem: contentItem
|
property alias contentItem: contentItem
|
||||||
@@ -70,6 +73,9 @@ Item {
|
|||||||
onShowEditLightChanged: _generalHelper.storeToolState(sceneId, "showEditLight", showEditLight)
|
onShowEditLightChanged: _generalHelper.storeToolState(sceneId, "showEditLight", showEditLight)
|
||||||
onGlobalOrientationChanged: _generalHelper.storeToolState(sceneId, "globalOrientation", globalOrientation)
|
onGlobalOrientationChanged: _generalHelper.storeToolState(sceneId, "globalOrientation", globalOrientation)
|
||||||
onShowGridChanged: _generalHelper.storeToolState(sceneId, "showGrid", showGrid);
|
onShowGridChanged: _generalHelper.storeToolState(sceneId, "showGrid", showGrid);
|
||||||
|
onShowSelectionBoxChanged: _generalHelper.storeToolState(sceneId, "showSelectionBox", showSelectionBox);
|
||||||
|
onShowIconGizmoChanged: _generalHelper.storeToolState(sceneId, "showIconGizmo", showIconGizmo);
|
||||||
|
onShowCameraFrustumChanged: _generalHelper.storeToolState(sceneId, "showCameraFrustum", showCameraFrustum);
|
||||||
onSelectionModeChanged: _generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
|
onSelectionModeChanged: _generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
|
||||||
onTransformModeChanged: _generalHelper.storeToolState(sceneId, "transformMode", transformMode);
|
onTransformModeChanged: _generalHelper.storeToolState(sceneId, "transformMode", transformMode);
|
||||||
|
|
||||||
@@ -220,6 +226,21 @@ Item {
|
|||||||
else if (resetToDefault)
|
else if (resetToDefault)
|
||||||
showGrid = true;
|
showGrid = true;
|
||||||
|
|
||||||
|
if ("showSelectionBox" in toolStates)
|
||||||
|
showSelectionBox = toolStates.showSelectionBox;
|
||||||
|
else if (resetToDefault)
|
||||||
|
showSelectionBox = true;
|
||||||
|
|
||||||
|
if ("showIconGizmo" in toolStates)
|
||||||
|
showIconGizmo = toolStates.showIconGizmo;
|
||||||
|
else if (resetToDefault)
|
||||||
|
showIconGizmo = true;
|
||||||
|
|
||||||
|
if ("showCameraFrustum" in toolStates)
|
||||||
|
showCameraFrustum = toolStates.showCameraFrustum;
|
||||||
|
else if (resetToDefault)
|
||||||
|
showCameraFrustum = false;
|
||||||
|
|
||||||
if ("usePerspective" in toolStates)
|
if ("usePerspective" in toolStates)
|
||||||
usePerspective = toolStates.usePerspective;
|
usePerspective = toolStates.usePerspective;
|
||||||
else if (resetToDefault)
|
else if (resetToDefault)
|
||||||
@@ -250,6 +271,9 @@ Item {
|
|||||||
{
|
{
|
||||||
_generalHelper.storeToolState(sceneId, "showEditLight", showEditLight)
|
_generalHelper.storeToolState(sceneId, "showEditLight", showEditLight)
|
||||||
_generalHelper.storeToolState(sceneId, "showGrid", showGrid)
|
_generalHelper.storeToolState(sceneId, "showGrid", showGrid)
|
||||||
|
_generalHelper.storeToolState(sceneId, "showSelectionBox", showSelectionBox)
|
||||||
|
_generalHelper.storeToolState(sceneId, "showIconGizmo", showIconGizmo)
|
||||||
|
_generalHelper.storeToolState(sceneId, "showCameraFrustum", showCameraFrustum)
|
||||||
_generalHelper.storeToolState(sceneId, "usePerspective", usePerspective)
|
_generalHelper.storeToolState(sceneId, "usePerspective", usePerspective)
|
||||||
_generalHelper.storeToolState(sceneId, "globalOrientation", globalOrientation)
|
_generalHelper.storeToolState(sceneId, "globalOrientation", globalOrientation)
|
||||||
_generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
|
_generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
|
||||||
@@ -273,6 +297,7 @@ Item {
|
|||||||
"geometryName": geometryName});
|
"geometryName": geometryName});
|
||||||
selectionBoxes[selectionBoxes.length] = box;
|
selectionBoxes[selectionBoxes.length] = box;
|
||||||
box.view3D = Qt.binding(function() {return editView;});
|
box.view3D = Qt.binding(function() {return editView;});
|
||||||
|
box.visible = Qt.binding(function() {return showSelectionBox;});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -373,11 +398,13 @@ Item {
|
|||||||
"selectedNodes": selectedNodes, "scene": scene,
|
"selectedNodes": selectedNodes, "scene": scene,
|
||||||
"activeScene": activeScene,
|
"activeScene": activeScene,
|
||||||
"locked": _generalHelper.isLocked(obj),
|
"locked": _generalHelper.isLocked(obj),
|
||||||
"hidden": _generalHelper.isHidden(obj)});
|
"hidden": _generalHelper.isHidden(obj),
|
||||||
|
"globalShow": showIconGizmo});
|
||||||
lightIconGizmos[lightIconGizmos.length] = gizmo;
|
lightIconGizmos[lightIconGizmos.length] = gizmo;
|
||||||
gizmo.clicked.connect(handleObjectClicked);
|
gizmo.clicked.connect(handleObjectClicked);
|
||||||
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
|
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
|
||||||
gizmo.activeScene = Qt.binding(function() {return activeScene;});
|
gizmo.activeScene = Qt.binding(function() {return activeScene;});
|
||||||
|
gizmo.globalShow = Qt.binding(function() {return showIconGizmo;});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -416,12 +443,15 @@ Item {
|
|||||||
overlayView,
|
overlayView,
|
||||||
{"view3D": overlayView, "targetNode": obj,
|
{"view3D": overlayView, "targetNode": obj,
|
||||||
"selectedNodes": selectedNodes, "scene": scene, "activeScene": activeScene,
|
"selectedNodes": selectedNodes, "scene": scene, "activeScene": activeScene,
|
||||||
"locked": _generalHelper.isLocked(obj), "hidden": _generalHelper.isHidden(obj)});
|
"locked": _generalHelper.isLocked(obj), "hidden": _generalHelper.isHidden(obj),
|
||||||
|
"globalShow": showIconGizmo, "globalShowFrustum": showCameraFrustum});
|
||||||
|
|
||||||
cameraGizmos[cameraGizmos.length] = gizmo;
|
cameraGizmos[cameraGizmos.length] = gizmo;
|
||||||
gizmo.clicked.connect(handleObjectClicked);
|
gizmo.clicked.connect(handleObjectClicked);
|
||||||
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
|
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
|
||||||
gizmo.activeScene = Qt.binding(function() {return activeScene;});
|
gizmo.activeScene = Qt.binding(function() {return activeScene;});
|
||||||
|
gizmo.globalShow = Qt.binding(function() {return showIconGizmo;});
|
||||||
|
gizmo.globalShowFrustum = Qt.binding(function() {return showCameraFrustum;});
|
||||||
frustum.viewPortRect = Qt.binding(function() {return viewPortRect;});
|
frustum.viewPortRect = Qt.binding(function() {return viewPortRect;});
|
||||||
gizmo.connectFrustum(frustum);
|
gizmo.connectFrustum(frustum);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,6 +45,8 @@ Item {
|
|||||||
property bool hasMouse: false
|
property bool hasMouse: false
|
||||||
property bool hidden: false
|
property bool hidden: false
|
||||||
property bool locked: false
|
property bool locked: false
|
||||||
|
property bool globalShow: true
|
||||||
|
property bool canBeVisible: activeScene === scene && !hidden && (targetNode ? targetNode.visible : false)
|
||||||
|
|
||||||
property alias iconSource: iconImage.source
|
property alias iconSource: iconImage.source
|
||||||
|
|
||||||
@@ -55,7 +57,7 @@ Item {
|
|||||||
hasMouse = false;
|
hasMouse = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
visible: activeScene === scene && !hidden && (targetNode ? targetNode.visible : false)
|
visible: canBeVisible && globalShow
|
||||||
|
|
||||||
Overlay2D {
|
Overlay2D {
|
||||||
id: iconOverlay
|
id: iconOverlay
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ IconGizmo {
|
|||||||
id: cameraGizmo
|
id: cameraGizmo
|
||||||
|
|
||||||
property Model frustumModel: null
|
property Model frustumModel: null
|
||||||
|
property bool globalShowFrustum: false
|
||||||
|
|
||||||
iconSource: "qrc:///qtquickplugin/mockfiles/images/editor_camera.png"
|
iconSource: "qrc:///qtquickplugin/mockfiles/images/editor_camera.png"
|
||||||
|
|
||||||
@@ -46,8 +47,12 @@ IconGizmo {
|
|||||||
frustum.targetNode = targetNode;
|
frustum.targetNode = targetNode;
|
||||||
frustum.targetNode = Qt.binding(function() {return targetNode;});
|
frustum.targetNode = Qt.binding(function() {return targetNode;});
|
||||||
|
|
||||||
frustum.visible = visible || (targetNode && selected && activeScene === scene);
|
frustum.visible = (canBeVisible && globalShowFrustum)
|
||||||
frustum.visible = Qt.binding(function() {return visible || (targetNode && selected && activeScene === scene);});
|
|| (targetNode && selected && activeScene === scene);
|
||||||
|
frustum.visible = Qt.binding(function() {
|
||||||
|
return (canBeVisible && globalShowFrustum)
|
||||||
|
|| (targetNode && selected && activeScene === scene);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
onActiveSceneChanged: {
|
onActiveSceneChanged: {
|
||||||
|
|||||||
@@ -39,6 +39,9 @@ Item {
|
|||||||
|
|
||||||
property bool showEditLight: false
|
property bool showEditLight: false
|
||||||
property bool showGrid: true
|
property bool showGrid: true
|
||||||
|
property bool showSelectionBox: true
|
||||||
|
property bool showIconGizmo: true
|
||||||
|
property bool showCameraFrustum: false
|
||||||
property bool usePerspective: true
|
property bool usePerspective: true
|
||||||
property bool globalOrientation: false
|
property bool globalOrientation: false
|
||||||
property alias contentItem: contentItem
|
property alias contentItem: contentItem
|
||||||
@@ -71,6 +74,9 @@ Item {
|
|||||||
onShowEditLightChanged: _generalHelper.storeToolState(sceneId, "showEditLight", showEditLight)
|
onShowEditLightChanged: _generalHelper.storeToolState(sceneId, "showEditLight", showEditLight)
|
||||||
onGlobalOrientationChanged: _generalHelper.storeToolState(sceneId, "globalOrientation", globalOrientation)
|
onGlobalOrientationChanged: _generalHelper.storeToolState(sceneId, "globalOrientation", globalOrientation)
|
||||||
onShowGridChanged: _generalHelper.storeToolState(sceneId, "showGrid", showGrid);
|
onShowGridChanged: _generalHelper.storeToolState(sceneId, "showGrid", showGrid);
|
||||||
|
onShowSelectionBoxChanged: _generalHelper.storeToolState(sceneId, "showSelectionBox", showSelectionBox);
|
||||||
|
onShowIconGizmoChanged: _generalHelper.storeToolState(sceneId, "showIconGizmo", showIconGizmo);
|
||||||
|
onShowCameraFrustumChanged: _generalHelper.storeToolState(sceneId, "showCameraFrustum", showCameraFrustum);
|
||||||
onSelectionModeChanged: _generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
|
onSelectionModeChanged: _generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
|
||||||
onTransformModeChanged: _generalHelper.storeToolState(sceneId, "transformMode", transformMode);
|
onTransformModeChanged: _generalHelper.storeToolState(sceneId, "transformMode", transformMode);
|
||||||
|
|
||||||
@@ -211,6 +217,21 @@ Item {
|
|||||||
else if (resetToDefault)
|
else if (resetToDefault)
|
||||||
showGrid = true;
|
showGrid = true;
|
||||||
|
|
||||||
|
if ("showSelectionBox" in toolStates)
|
||||||
|
showSelectionBox = toolStates.showSelectionBox;
|
||||||
|
else if (resetToDefault)
|
||||||
|
showSelectionBox = true;
|
||||||
|
|
||||||
|
if ("showIconGizmo" in toolStates)
|
||||||
|
showIconGizmo = toolStates.showIconGizmo;
|
||||||
|
else if (resetToDefault)
|
||||||
|
showIconGizmo = true;
|
||||||
|
|
||||||
|
if ("showCameraFrustum" in toolStates)
|
||||||
|
showCameraFrustum = toolStates.showCameraFrustum;
|
||||||
|
else if (resetToDefault)
|
||||||
|
showCameraFrustum = false;
|
||||||
|
|
||||||
if ("usePerspective" in toolStates)
|
if ("usePerspective" in toolStates)
|
||||||
usePerspective = toolStates.usePerspective;
|
usePerspective = toolStates.usePerspective;
|
||||||
else if (resetToDefault)
|
else if (resetToDefault)
|
||||||
@@ -241,6 +262,9 @@ Item {
|
|||||||
{
|
{
|
||||||
_generalHelper.storeToolState(sceneId, "showEditLight", showEditLight)
|
_generalHelper.storeToolState(sceneId, "showEditLight", showEditLight)
|
||||||
_generalHelper.storeToolState(sceneId, "showGrid", showGrid)
|
_generalHelper.storeToolState(sceneId, "showGrid", showGrid)
|
||||||
|
_generalHelper.storeToolState(sceneId, "showSelectionBox", showSelectionBox)
|
||||||
|
_generalHelper.storeToolState(sceneId, "showIconGizmo", showIconGizmo)
|
||||||
|
_generalHelper.storeToolState(sceneId, "showCameraFrustum", showCameraFrustum)
|
||||||
_generalHelper.storeToolState(sceneId, "usePerspective", usePerspective)
|
_generalHelper.storeToolState(sceneId, "usePerspective", usePerspective)
|
||||||
_generalHelper.storeToolState(sceneId, "globalOrientation", globalOrientation)
|
_generalHelper.storeToolState(sceneId, "globalOrientation", globalOrientation)
|
||||||
_generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
|
_generalHelper.storeToolState(sceneId, "selectionMode", selectionMode);
|
||||||
@@ -264,6 +288,7 @@ Item {
|
|||||||
"geometryName": geometryName});
|
"geometryName": geometryName});
|
||||||
selectionBoxes[selectionBoxes.length] = box;
|
selectionBoxes[selectionBoxes.length] = box;
|
||||||
box.view3D = Qt.binding(function() {return editView;});
|
box.view3D = Qt.binding(function() {return editView;});
|
||||||
|
box.visible = Qt.binding(function() {return showSelectionBox;});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -364,11 +389,13 @@ Item {
|
|||||||
"selectedNodes": selectedNodes, "scene": scene,
|
"selectedNodes": selectedNodes, "scene": scene,
|
||||||
"activeScene": activeScene,
|
"activeScene": activeScene,
|
||||||
"locked": _generalHelper.isLocked(obj),
|
"locked": _generalHelper.isLocked(obj),
|
||||||
"hidden": _generalHelper.isHidden(obj)});
|
"hidden": _generalHelper.isHidden(obj),
|
||||||
|
"globalShow": showIconGizmo});
|
||||||
lightIconGizmos[lightIconGizmos.length] = gizmo;
|
lightIconGizmos[lightIconGizmos.length] = gizmo;
|
||||||
gizmo.clicked.connect(handleObjectClicked);
|
gizmo.clicked.connect(handleObjectClicked);
|
||||||
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
|
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
|
||||||
gizmo.activeScene = Qt.binding(function() {return activeScene;});
|
gizmo.activeScene = Qt.binding(function() {return activeScene;});
|
||||||
|
gizmo.globalShow = Qt.binding(function() {return showIconGizmo;});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -407,12 +434,15 @@ Item {
|
|||||||
overlayView,
|
overlayView,
|
||||||
{"view3D": overlayView, "targetNode": obj,
|
{"view3D": overlayView, "targetNode": obj,
|
||||||
"selectedNodes": selectedNodes, "scene": scene, "activeScene": activeScene,
|
"selectedNodes": selectedNodes, "scene": scene, "activeScene": activeScene,
|
||||||
"locked": _generalHelper.isLocked(obj), "hidden": _generalHelper.isHidden(obj)});
|
"locked": _generalHelper.isLocked(obj), "hidden": _generalHelper.isHidden(obj),
|
||||||
|
"globalShow": showIconGizmo, "globalShowFrustum": showCameraFrustum});
|
||||||
|
|
||||||
cameraGizmos[cameraGizmos.length] = gizmo;
|
cameraGizmos[cameraGizmos.length] = gizmo;
|
||||||
gizmo.clicked.connect(handleObjectClicked);
|
gizmo.clicked.connect(handleObjectClicked);
|
||||||
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
|
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
|
||||||
gizmo.activeScene = Qt.binding(function() {return activeScene;});
|
gizmo.activeScene = Qt.binding(function() {return activeScene;});
|
||||||
|
gizmo.globalShow = Qt.binding(function() {return showIconGizmo;});
|
||||||
|
gizmo.globalShowFrustum = Qt.binding(function() {return showCameraFrustum;});
|
||||||
frustum.viewPortRect = Qt.binding(function() {return viewPortRect;});
|
frustum.viewPortRect = Qt.binding(function() {return viewPortRect;});
|
||||||
gizmo.connectFrustum(frustum);
|
gizmo.connectFrustum(frustum);
|
||||||
}
|
}
|
||||||
@@ -449,11 +479,13 @@ Item {
|
|||||||
"selectedNodes": selectedNodes, "scene": scene,
|
"selectedNodes": selectedNodes, "scene": scene,
|
||||||
"activeScene": activeScene,
|
"activeScene": activeScene,
|
||||||
"locked": _generalHelper.isLocked(obj),
|
"locked": _generalHelper.isLocked(obj),
|
||||||
"hidden": _generalHelper.isHidden(obj)});
|
"hidden": _generalHelper.isHidden(obj),
|
||||||
|
"globalShow": showIconGizmo});
|
||||||
particleSystemIconGizmos[particleSystemIconGizmos.length] = gizmo;
|
particleSystemIconGizmos[particleSystemIconGizmos.length] = gizmo;
|
||||||
gizmo.clicked.connect(handleObjectClicked);
|
gizmo.clicked.connect(handleObjectClicked);
|
||||||
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
|
gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;});
|
||||||
gizmo.activeScene = Qt.binding(function() {return activeScene;});
|
gizmo.activeScene = Qt.binding(function() {return activeScene;});
|
||||||
|
gizmo.globalShow = Qt.binding(function() {return showIconGizmo;});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -840,6 +872,13 @@ Item {
|
|||||||
camera: viewRoot.usePerspective ? overlayPerspectiveCamera : overlayOrthoCamera
|
camera: viewRoot.usePerspective ? overlayPerspectiveCamera : overlayOrthoCamera
|
||||||
importScene: overlayScene
|
importScene: overlayScene
|
||||||
z: 2
|
z: 2
|
||||||
|
|
||||||
|
environment: sceneEnv
|
||||||
|
SceneEnvironment {
|
||||||
|
id: sceneEnv
|
||||||
|
antialiasingMode: SceneEnvironment.MSAA
|
||||||
|
antialiasingQuality: SceneEnvironment.High
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Overlay2D {
|
Overlay2D {
|
||||||
|
|||||||
@@ -45,6 +45,8 @@ Item {
|
|||||||
property bool hasMouse: false
|
property bool hasMouse: false
|
||||||
property bool hidden: false
|
property bool hidden: false
|
||||||
property bool locked: false
|
property bool locked: false
|
||||||
|
property bool globalShow: true
|
||||||
|
property bool canBeVisible: activeScene === scene && !hidden && (targetNode ? targetNode.visible : false)
|
||||||
|
|
||||||
property alias iconSource: iconImage.source
|
property alias iconSource: iconImage.source
|
||||||
|
|
||||||
@@ -55,7 +57,7 @@ Item {
|
|||||||
hasMouse = false;
|
hasMouse = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
visible: activeScene === scene && !hidden && (targetNode ? targetNode.visible : false)
|
visible: canBeVisible && globalShow
|
||||||
|
|
||||||
Overlay2D {
|
Overlay2D {
|
||||||
id: iconOverlay
|
id: iconOverlay
|
||||||
|
|||||||
@@ -50,6 +50,13 @@ View3D {
|
|||||||
thresPerc = (grid_thresholds[thresIdx] - cameraZoomFactor) / (grid_thresholds[thresIdx] - grid_thresholds[thresIdx - 1]);
|
thresPerc = (grid_thresholds[thresIdx] - cameraZoomFactor) / (grid_thresholds[thresIdx] - grid_thresholds[thresIdx - 1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
environment: sceneEnv
|
||||||
|
SceneEnvironment {
|
||||||
|
id: sceneEnv
|
||||||
|
antialiasingMode: SceneEnvironment.MSAA
|
||||||
|
antialiasingQuality: SceneEnvironment.High
|
||||||
|
}
|
||||||
|
|
||||||
Node {
|
Node {
|
||||||
id: sceneHelpers
|
id: sceneHelpers
|
||||||
|
|
||||||
|
|||||||
@@ -142,6 +142,16 @@ void CameraGeometry::doUpdateGeometry()
|
|||||||
if (!QQuick3DObjectPrivate::get(m_camera)->spatialNode) {
|
if (!QQuick3DObjectPrivate::get(m_camera)->spatialNode) {
|
||||||
// Doing explicit viewport mapping forces cameraNode creation
|
// Doing explicit viewport mapping forces cameraNode creation
|
||||||
m_camera->mapToViewport({}, m_viewPortRect.width(), m_viewPortRect.height());
|
m_camera->mapToViewport({}, m_viewPortRect.width(), m_viewPortRect.height());
|
||||||
|
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
if (!m_nodeCreationUpdateDone) {
|
||||||
|
// Post-node creation update is done only once to avoid infinite loop in case the node
|
||||||
|
// creation fails.
|
||||||
|
m_nodeCreationUpdateDone = true;
|
||||||
|
m_cameraUpdatePending = true;
|
||||||
|
update();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
GeometryBase::doUpdateGeometry();
|
GeometryBase::doUpdateGeometry();
|
||||||
|
|||||||
@@ -67,6 +67,9 @@ private:
|
|||||||
QQuick3DCamera *m_camera = nullptr;
|
QQuick3DCamera *m_camera = nullptr;
|
||||||
QRectF m_viewPortRect;
|
QRectF m_viewPortRect;
|
||||||
bool m_cameraUpdatePending = false;
|
bool m_cameraUpdatePending = false;
|
||||||
|
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
bool m_nodeCreationUpdateDone = false;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -729,7 +729,8 @@ void MouseArea3D::applyFreeRotation(QQuick3DNode *node, const QVector3D &startRo
|
|||||||
if (dragVector.length() < 0.001f)
|
if (dragVector.length() < 0.001f)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const float *dataPtr(sceneTransform().data());
|
const auto &transform = sceneTransform();
|
||||||
|
const float *dataPtr(transform.data());
|
||||||
QVector3D xAxis = QVector3D(dataPtr[0], dataPtr[1], dataPtr[2]).normalized();
|
QVector3D xAxis = QVector3D(dataPtr[0], dataPtr[1], dataPtr[2]).normalized();
|
||||||
QVector3D yAxis = QVector3D(dataPtr[4], dataPtr[5], dataPtr[6]).normalized();
|
QVector3D yAxis = QVector3D(dataPtr[4], dataPtr[5], dataPtr[6]).normalized();
|
||||||
QVector3D finalAxis = (dragVector.x() * yAxis + dragVector.y() * xAxis);
|
QVector3D finalAxis = (dragVector.x() * yAxis + dragVector.y() * xAxis);
|
||||||
@@ -1029,7 +1030,8 @@ void MouseArea3D::setHovering(bool enable)
|
|||||||
|
|
||||||
QVector3D MouseArea3D::getNormal() const
|
QVector3D MouseArea3D::getNormal() const
|
||||||
{
|
{
|
||||||
const float *dataPtr(sceneTransform().data());
|
const auto &transform = sceneTransform();
|
||||||
|
const float *dataPtr(transform.data());
|
||||||
return QVector3D(dataPtr[8], dataPtr[9], dataPtr[10]).normalized();
|
return QVector3D(dataPtr[8], dataPtr[9], dataPtr[10]).normalized();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,13 @@
|
|||||||
#include <requestmodelnodepreviewimagecommand.h>
|
#include <requestmodelnodepreviewimagecommand.h>
|
||||||
#include <changelanguagecommand.h>
|
#include <changelanguagecommand.h>
|
||||||
|
|
||||||
|
// Nanotrace headers are not exported to build dir at all if the feature is disabled, so
|
||||||
|
// runtime puppet build can't find them.
|
||||||
|
#if NANOTRACE_ENABLED
|
||||||
#include "nanotrace/nanotrace.h"
|
#include "nanotrace/nanotrace.h"
|
||||||
|
#else
|
||||||
|
#define NANOTRACE_SCOPE(cat, name)
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <designersupportdelegate.h>
|
#include <designersupportdelegate.h>
|
||||||
#include <QAbstractAnimation>
|
#include <QAbstractAnimation>
|
||||||
|
|||||||
@@ -2116,6 +2116,15 @@ void Qt5InformationNodeInstanceServer::view3DAction(const View3DActionCommand &c
|
|||||||
case View3DActionCommand::ShowGrid:
|
case View3DActionCommand::ShowGrid:
|
||||||
updatedState.insert("showGrid", command.isEnabled());
|
updatedState.insert("showGrid", command.isEnabled());
|
||||||
break;
|
break;
|
||||||
|
case View3DActionCommand::ShowSelectionBox:
|
||||||
|
updatedState.insert("showSelectionBox", command.isEnabled());
|
||||||
|
break;
|
||||||
|
case View3DActionCommand::ShowIconGizmo:
|
||||||
|
updatedState.insert("showIconGizmo", command.isEnabled());
|
||||||
|
break;
|
||||||
|
case View3DActionCommand::ShowCameraFrustum:
|
||||||
|
updatedState.insert("showCameraFrustum", command.isEnabled());
|
||||||
|
break;
|
||||||
#ifdef QUICK3D_PARTICLES_MODULE
|
#ifdef QUICK3D_PARTICLES_MODULE
|
||||||
case View3DActionCommand::ParticlesPlay:
|
case View3DActionCommand::ParticlesPlay:
|
||||||
m_particleAnimationPlaying = command.isEnabled();
|
m_particleAnimationPlaying = command.isEnabled();
|
||||||
|
|||||||
@@ -38,7 +38,14 @@
|
|||||||
#include <createscenecommand.h>
|
#include <createscenecommand.h>
|
||||||
#include <reparentinstancescommand.h>
|
#include <reparentinstancescommand.h>
|
||||||
#include <clearscenecommand.h>
|
#include <clearscenecommand.h>
|
||||||
#include <nanotrace/nanotrace.h>
|
|
||||||
|
// Nanotrace headers are not exported to build dir at all if the feature is disabled, so
|
||||||
|
// runtime puppet build can't find them.
|
||||||
|
#if NANOTRACE_ENABLED
|
||||||
|
#include "nanotrace/nanotrace.h"
|
||||||
|
#else
|
||||||
|
#define NANOTRACE_SCOPE(cat, name)
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QOpenGLContext>
|
#include <QOpenGLContext>
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ int internalMain(QGuiApplication *application)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(ENABLE_CRASHPAD) && defined(Q_OS_WIN)
|
#if defined(ENABLE_CRASHPAD) && defined(Q_OS_WIN)
|
||||||
startCrashpad();
|
/* startCrashpad(); */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
new QmlDesigner::Qt5NodeInstanceClientProxy(application);
|
new QmlDesigner::Qt5NodeInstanceClientProxy(application);
|
||||||
|
|||||||
@@ -36,7 +36,9 @@ Item {
|
|||||||
|
|
||||||
property var selectedAssets: ({})
|
property var selectedAssets: ({})
|
||||||
property int allExpandedState: 0
|
property int allExpandedState: 0
|
||||||
property string delFilePath: ""
|
property string contextFilePath: ""
|
||||||
|
property var contextDir: undefined
|
||||||
|
property bool isDirContextMenu: false
|
||||||
|
|
||||||
DropArea {
|
DropArea {
|
||||||
id: dropArea
|
id: dropArea
|
||||||
@@ -67,6 +69,19 @@ Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MouseArea { // right clicking the empty area of the view
|
||||||
|
anchors.fill: parent
|
||||||
|
acceptedButtons: Qt.RightButton
|
||||||
|
onClicked: {
|
||||||
|
if (!assetsModel.isEmpty) {
|
||||||
|
contextFilePath = ""
|
||||||
|
contextDir = assetsModel.rootDir()
|
||||||
|
isDirContextMenu = false
|
||||||
|
contextMenu.popup()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// called from C++ to close context menu on focus out
|
// called from C++ to close context menu on focus out
|
||||||
function handleViewFocusOut()
|
function handleViewFocusOut()
|
||||||
{
|
{
|
||||||
@@ -75,9 +90,139 @@ Item {
|
|||||||
selectedAssetsChanged()
|
selectedAssetsChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Dialog {
|
||||||
|
id: newFolderDialog
|
||||||
|
|
||||||
|
title: qsTr("Create new folder")
|
||||||
|
anchors.centerIn: parent
|
||||||
|
closePolicy: Popup.CloseOnEscape
|
||||||
|
modal: true
|
||||||
|
|
||||||
|
contentItem: Column {
|
||||||
|
spacing: 2
|
||||||
|
|
||||||
|
Row {
|
||||||
|
Text {
|
||||||
|
text: qsTr("Folder Name: ")
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
color: StudioTheme.Values.themeTextColor
|
||||||
|
}
|
||||||
|
|
||||||
|
StudioControls.TextField {
|
||||||
|
id: folderName
|
||||||
|
|
||||||
|
actionIndicator.visible: false
|
||||||
|
translationIndicator.visible: false
|
||||||
|
|
||||||
|
Keys.onEnterPressed: btnCreate.onClicked()
|
||||||
|
Keys.onReturnPressed: btnCreate.onClicked()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: qsTr("Folder Name cannot be empty.")
|
||||||
|
color: "#ff0000"
|
||||||
|
anchors.right: parent.right
|
||||||
|
visible: folderName.text === ""
|
||||||
|
}
|
||||||
|
|
||||||
|
Item { // spacer
|
||||||
|
width: 1
|
||||||
|
height: 20
|
||||||
|
}
|
||||||
|
|
||||||
|
Row {
|
||||||
|
anchors.right: parent.right
|
||||||
|
|
||||||
|
Button {
|
||||||
|
id: btnCreate
|
||||||
|
|
||||||
|
text: qsTr("Create")
|
||||||
|
enabled: folderName.text !== ""
|
||||||
|
onClicked: {
|
||||||
|
assetsModel.addNewFolder(contextDir.dirPath + '/' + folderName.text)
|
||||||
|
newFolderDialog.accept()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button {
|
||||||
|
text: qsTr("Cancel")
|
||||||
|
onClicked: newFolderDialog.reject()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onOpened: {
|
||||||
|
folderName.text = "New folder"
|
||||||
|
folderName.selectAll()
|
||||||
|
folderName.forceActiveFocus()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Dialog {
|
||||||
|
id: confirmDeleteFolderDialog
|
||||||
|
|
||||||
|
title: qsTr("Folder not empty")
|
||||||
|
anchors.centerIn: parent
|
||||||
|
closePolicy: Popup.CloseOnEscape
|
||||||
|
implicitWidth: 300
|
||||||
|
modal: true
|
||||||
|
|
||||||
|
contentItem: Column {
|
||||||
|
spacing: 20
|
||||||
|
width: parent.width
|
||||||
|
|
||||||
|
Text {
|
||||||
|
id: folderNotEmpty
|
||||||
|
|
||||||
|
text: qsTr("Folder '%1' is not empty. Are you sure you want to delete it?")
|
||||||
|
.arg(contextDir ? contextDir.dirName : "")
|
||||||
|
color: StudioTheme.Values.themeTextColor
|
||||||
|
wrapMode: Text.WordWrap
|
||||||
|
width: confirmDeleteFolderDialog.width
|
||||||
|
leftPadding: 10
|
||||||
|
rightPadding: 10
|
||||||
|
|
||||||
|
Keys.onEnterPressed: btnDelete.onClicked()
|
||||||
|
Keys.onReturnPressed: btnDelete.onClicked()
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: qsTr("If the folder has assets in use, deleting it might cause the project to not work correctly.")
|
||||||
|
color: StudioTheme.Values.themeTextColor
|
||||||
|
wrapMode: Text.WordWrap
|
||||||
|
width: confirmDeleteFolderDialog.width
|
||||||
|
leftPadding: 10
|
||||||
|
rightPadding: 10
|
||||||
|
}
|
||||||
|
|
||||||
|
Row {
|
||||||
|
anchors.right: parent.right
|
||||||
|
Button {
|
||||||
|
id: btnDelete
|
||||||
|
|
||||||
|
text: qsTr("Delete")
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
assetsModel.deleteFolder(contextDir.dirPath)
|
||||||
|
confirmDeleteFolderDialog.accept()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button {
|
||||||
|
text: qsTr("Cancel")
|
||||||
|
onClicked: confirmDeleteFolderDialog.reject()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onOpened: folderNotEmpty.forceActiveFocus()
|
||||||
|
}
|
||||||
|
|
||||||
ScrollView { // TODO: experiment using ListView instead of ScrollView + Column
|
ScrollView { // TODO: experiment using ListView instead of ScrollView + Column
|
||||||
id: assetsView
|
id: assetsView
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
interactive: assetsView.verticalScrollBarVisible
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
StudioControls.Menu {
|
StudioControls.Menu {
|
||||||
@@ -86,7 +231,7 @@ Item {
|
|||||||
StudioControls.MenuItem {
|
StudioControls.MenuItem {
|
||||||
text: qsTr("Expand All")
|
text: qsTr("Expand All")
|
||||||
enabled: allExpandedState !== 1
|
enabled: allExpandedState !== 1
|
||||||
visible: !delFilePath
|
visible: isDirContextMenu
|
||||||
height: visible ? implicitHeight : 0
|
height: visible ? implicitHeight : 0
|
||||||
onTriggered: assetsModel.toggleExpandAll(true)
|
onTriggered: assetsModel.toggleExpandAll(true)
|
||||||
}
|
}
|
||||||
@@ -94,22 +239,51 @@ Item {
|
|||||||
StudioControls.MenuItem {
|
StudioControls.MenuItem {
|
||||||
text: qsTr("Collapse All")
|
text: qsTr("Collapse All")
|
||||||
enabled: allExpandedState !== 2
|
enabled: allExpandedState !== 2
|
||||||
visible: !delFilePath
|
visible: isDirContextMenu
|
||||||
height: visible ? implicitHeight : 0
|
height: visible ? implicitHeight : 0
|
||||||
onTriggered: assetsModel.toggleExpandAll(false)
|
onTriggered: assetsModel.toggleExpandAll(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StudioControls.MenuSeparator {
|
||||||
|
visible: isDirContextMenu
|
||||||
|
height: visible ? StudioTheme.Values.border : 0
|
||||||
|
}
|
||||||
|
|
||||||
StudioControls.MenuItem {
|
StudioControls.MenuItem {
|
||||||
text: qsTr("Delete File")
|
text: qsTr("Delete File")
|
||||||
visible: delFilePath
|
visible: contextFilePath
|
||||||
height: visible ? implicitHeight : 0
|
height: visible ? implicitHeight : 0
|
||||||
onTriggered: assetsModel.removeFile(delFilePath)
|
onTriggered: assetsModel.deleteFile(contextFilePath)
|
||||||
|
}
|
||||||
|
|
||||||
|
StudioControls.MenuSeparator {
|
||||||
|
visible: contextFilePath
|
||||||
|
height: visible ? StudioTheme.Values.border : 0
|
||||||
|
}
|
||||||
|
|
||||||
|
StudioControls.MenuItem {
|
||||||
|
text: qsTr("New Folder")
|
||||||
|
onTriggered: newFolderDialog.open()
|
||||||
|
}
|
||||||
|
|
||||||
|
StudioControls.MenuItem {
|
||||||
|
text: qsTr("Delete Folder")
|
||||||
|
visible: isDirContextMenu
|
||||||
|
height: visible ? implicitHeight : 0
|
||||||
|
onTriggered: {
|
||||||
|
var dirEmpty = !(contextDir.dirsModel && contextDir.dirsModel.rowCount() > 0)
|
||||||
|
&& !(contextDir.filesModel && contextDir.filesModel.rowCount() > 0);
|
||||||
|
|
||||||
|
if (dirEmpty)
|
||||||
|
assetsModel.deleteFolder(contextDir.dirPath)
|
||||||
|
else
|
||||||
|
confirmDeleteFolderDialog.open()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
spacing: 2
|
|
||||||
Repeater {
|
Repeater {
|
||||||
model: assetsModel // context property
|
model: assetsModel // context property
|
||||||
delegate: dirSection
|
delegate: dirSection
|
||||||
@@ -120,31 +294,35 @@ Item {
|
|||||||
|
|
||||||
Section {
|
Section {
|
||||||
width: assetsView.width -
|
width: assetsView.width -
|
||||||
(assetsView.verticalScrollBarVisible ? assetsView.verticalThickness : 0)
|
(assetsView.verticalScrollBarVisible ? assetsView.verticalThickness : 0) - 5
|
||||||
caption: dirName
|
caption: dirName
|
||||||
sectionHeight: 30
|
sectionHeight: 30
|
||||||
sectionFontSize: 15
|
sectionFontSize: 15
|
||||||
levelShift: 20
|
|
||||||
leftPadding: 0
|
leftPadding: 0
|
||||||
|
topPadding: dirDepth > 0 ? 5 : 0
|
||||||
|
bottomPadding: 0
|
||||||
hideHeader: dirDepth === 0
|
hideHeader: dirDepth === 0
|
||||||
showLeftBorder: true
|
showLeftBorder: dirDepth > 0
|
||||||
expanded: dirExpanded
|
expanded: dirExpanded
|
||||||
visible: dirVisible
|
visible: !assetsModel.isEmpty && dirVisible
|
||||||
expandOnClick: false
|
expandOnClick: false
|
||||||
useDefaulContextMenu: false
|
useDefaulContextMenu: false
|
||||||
|
|
||||||
onToggleExpand: {
|
onToggleExpand: {
|
||||||
dirExpanded = !dirExpanded
|
dirExpanded = !dirExpanded
|
||||||
}
|
}
|
||||||
|
|
||||||
onShowContextMenu: {
|
onShowContextMenu: {
|
||||||
delFilePath = ""
|
contextFilePath = ""
|
||||||
|
contextDir = model
|
||||||
|
isDirContextMenu = true
|
||||||
allExpandedState = assetsModel.getAllExpandedState()
|
allExpandedState = assetsModel.getAllExpandedState()
|
||||||
contextMenu.popup()
|
contextMenu.popup()
|
||||||
}
|
}
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
spacing: 5
|
spacing: 5
|
||||||
leftPadding: 15
|
leftPadding: 5
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
model: dirsModel
|
model: dirsModel
|
||||||
@@ -155,6 +333,25 @@ Item {
|
|||||||
model: filesModel
|
model: filesModel
|
||||||
delegate: fileSection
|
delegate: fileSection
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: qsTr("Empty folder")
|
||||||
|
color: StudioTheme.Values.themeTextColorDisabled
|
||||||
|
font.pixelSize: 12
|
||||||
|
visible: !(dirsModel && dirsModel.rowCount() > 0)
|
||||||
|
&& !(filesModel && filesModel.rowCount() > 0)
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
acceptedButtons: Qt.RightButton
|
||||||
|
onClicked: {
|
||||||
|
contextFilePath = ""
|
||||||
|
contextDir = model
|
||||||
|
isDirContextMenu = true
|
||||||
|
contextMenu.popup()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -222,8 +419,11 @@ Item {
|
|||||||
if (currFileSelected)
|
if (currFileSelected)
|
||||||
rootView.startDragAsset(selectedAssetsArr, mapToGlobal(mouse.x, mouse.y))
|
rootView.startDragAsset(selectedAssetsArr, mapToGlobal(mouse.x, mouse.y))
|
||||||
} else {
|
} else {
|
||||||
delFilePath = filePath
|
contextFilePath = filePath
|
||||||
|
contextDir = model.fileDir
|
||||||
|
|
||||||
tooltipBackend.hideTooltip()
|
tooltipBackend.hideTooltip()
|
||||||
|
isDirContextMenu = false
|
||||||
contextMenu.popup()
|
contextMenu.popup()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -263,7 +463,7 @@ Item {
|
|||||||
// Placeholder when the assets panel is empty
|
// Placeholder when the assets panel is empty
|
||||||
Column {
|
Column {
|
||||||
id: colNoAssets
|
id: colNoAssets
|
||||||
visible: assetsModel.isEmpty
|
visible: assetsModel.isEmpty && !rootView.searchActive
|
||||||
|
|
||||||
spacing: 20
|
spacing: 20
|
||||||
x: 20
|
x: 20
|
||||||
@@ -307,4 +507,13 @@ Item {
|
|||||||
wrapMode: Text.WordWrap
|
wrapMode: Text.WordWrap
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: qsTr("No match found.")
|
||||||
|
x: 20
|
||||||
|
y: 10
|
||||||
|
color: StudioTheme.Values.themeTextColor
|
||||||
|
font.pixelSize: 12
|
||||||
|
visible: assetsModel.isEmpty && rootView.searchActive
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ Item {
|
|||||||
id: leftBorder
|
id: leftBorder
|
||||||
visible: false
|
visible: false
|
||||||
width: 1
|
width: 1
|
||||||
height: parent.height - 15
|
height: parent.height - bottomPadding
|
||||||
color: header.color
|
color: header.color
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,29 +27,35 @@
|
|||||||
Metadata {
|
Metadata {
|
||||||
id: metadataFile
|
id: metadataFile
|
||||||
|
|
||||||
defaultVersion: v19
|
defaultVersion: v20
|
||||||
|
|
||||||
VersionData {
|
VersionData {
|
||||||
id: v14
|
id: v14
|
||||||
name: "QUL 1.4"
|
name: "Qt for MCUs 1.4"
|
||||||
path: "qul-14.qml"
|
path: "qul-14.qml"
|
||||||
}
|
}
|
||||||
|
|
||||||
VersionData {
|
VersionData {
|
||||||
id: v17
|
id: v17
|
||||||
name: "QUL 1.7"
|
name: "Qt for MCUs 1.7"
|
||||||
path: "qul-17.qml"
|
path: "qul-17.qml"
|
||||||
}
|
}
|
||||||
|
|
||||||
VersionData {
|
VersionData {
|
||||||
id: v18
|
id: v18
|
||||||
name: "QUL 1.8"
|
name: "Qt for MCUs 1.8"
|
||||||
path: "qul-18.qml"
|
path: "qul-18.qml"
|
||||||
}
|
}
|
||||||
|
|
||||||
VersionData {
|
VersionData {
|
||||||
id: v19
|
id: v19
|
||||||
name: "QUL 1.9"
|
name: "Qt for MCUs 1.9"
|
||||||
path: "qul-19.qml"
|
path: "qul-19.qml"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VersionData {
|
||||||
|
id: v20
|
||||||
|
name: "Qt for MCUs 2.0"
|
||||||
|
path: "qul-20.qml"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
VersionData {
|
VersionData {
|
||||||
name: "QUL 1.4"
|
name: "Qt for MCUs 1.4"
|
||||||
|
|
||||||
bannedItems: ["QtQuick.AnimatedImage",
|
bannedItems: ["QtQuick.AnimatedImage",
|
||||||
"QtQuick.FocusScope",
|
"QtQuick.FocusScope",
|
||||||
@@ -34,6 +34,7 @@ VersionData {
|
|||||||
"QtQuick.Grid",
|
"QtQuick.Grid",
|
||||||
"QtQuick.GridView",
|
"QtQuick.GridView",
|
||||||
"QtQuick.PathView",
|
"QtQuick.PathView",
|
||||||
|
"QtQuick.Loader",
|
||||||
"QtQuick.Controls",
|
"QtQuick.Controls",
|
||||||
"QtQuick.Controls.BusyIndicator",
|
"QtQuick.Controls.BusyIndicator",
|
||||||
"QtQuick.Controls.ButtonGroup",
|
"QtQuick.Controls.ButtonGroup",
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
VersionData {
|
VersionData {
|
||||||
name: "QUL 1.7"
|
name: "Qt for MCUs 1.7"
|
||||||
|
|
||||||
bannedItems: ["QtQuick.AnimatedImage",
|
bannedItems: ["QtQuick.AnimatedImage",
|
||||||
"QtQuick.FocusScope",
|
"QtQuick.FocusScope",
|
||||||
@@ -34,6 +34,7 @@ VersionData {
|
|||||||
"QtQuick.Grid",
|
"QtQuick.Grid",
|
||||||
"QtQuick.GridView",
|
"QtQuick.GridView",
|
||||||
"QtQuick.PathView",
|
"QtQuick.PathView",
|
||||||
|
"QtQuick.Loader",
|
||||||
"QtQuick.Controls",
|
"QtQuick.Controls",
|
||||||
"QtQuick.Controls.BusyIndicator",
|
"QtQuick.Controls.BusyIndicator",
|
||||||
"QtQuick.Controls.ButtonGroup",
|
"QtQuick.Controls.ButtonGroup",
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
VersionData {
|
VersionData {
|
||||||
name: "QUL 1.8"
|
name: "Qt for MCUs 1.8"
|
||||||
|
|
||||||
bannedItems: ["QtQuick.AnimatedImage",
|
bannedItems: ["QtQuick.AnimatedImage",
|
||||||
"QtQuick.FocusScope",
|
"QtQuick.FocusScope",
|
||||||
@@ -34,6 +34,7 @@ VersionData {
|
|||||||
"QtQuick.Grid",
|
"QtQuick.Grid",
|
||||||
"QtQuick.GridView",
|
"QtQuick.GridView",
|
||||||
"QtQuick.PathView",
|
"QtQuick.PathView",
|
||||||
|
"QtQuick.Loader",
|
||||||
"QtQuick.Controls",
|
"QtQuick.Controls",
|
||||||
"QtQuick.Controls.BusyIndicator",
|
"QtQuick.Controls.BusyIndicator",
|
||||||
"QtQuick.Controls.ButtonGroup",
|
"QtQuick.Controls.ButtonGroup",
|
||||||
@@ -63,7 +64,11 @@ VersionData {
|
|||||||
"QtQuick.Controls.TextArea",
|
"QtQuick.Controls.TextArea",
|
||||||
"QtQuick.Controls.TextField",
|
"QtQuick.Controls.TextField",
|
||||||
"QtQuick.Controls.ToolSeparator",
|
"QtQuick.Controls.ToolSeparator",
|
||||||
"QtQuick.Controls.Tumbler"]
|
"QtQuick.Controls.Tumbler",
|
||||||
|
"QtQuick.Shapes.ConicalGradient",
|
||||||
|
"QtQuick.Shapes.LinearGradient",
|
||||||
|
"QtQuick.Shapes.RadialGradient",
|
||||||
|
"QtQuick.Shapes.ShapeGradient"]
|
||||||
|
|
||||||
allowedImports: ["QtQuick",
|
allowedImports: ["QtQuick",
|
||||||
"QtQuick.Shapes",
|
"QtQuick.Shapes",
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
VersionData {
|
VersionData {
|
||||||
name: "QUL 1.9"
|
name: "Qt for MCUs 1.9"
|
||||||
|
|
||||||
bannedItems: ["QtQuick.AnimatedImage",
|
bannedItems: ["QtQuick.AnimatedImage",
|
||||||
"QtQuick.FocusScope",
|
"QtQuick.FocusScope",
|
||||||
@@ -34,6 +34,7 @@ VersionData {
|
|||||||
"QtQuick.Grid",
|
"QtQuick.Grid",
|
||||||
"QtQuick.GridView",
|
"QtQuick.GridView",
|
||||||
"QtQuick.PathView",
|
"QtQuick.PathView",
|
||||||
|
"QtQuick.Loader",
|
||||||
"QtQuick.Controls",
|
"QtQuick.Controls",
|
||||||
"QtQuick.Controls.BusyIndicator",
|
"QtQuick.Controls.BusyIndicator",
|
||||||
"QtQuick.Controls.ButtonGroup",
|
"QtQuick.Controls.ButtonGroup",
|
||||||
@@ -63,7 +64,11 @@ VersionData {
|
|||||||
"QtQuick.Controls.TextArea",
|
"QtQuick.Controls.TextArea",
|
||||||
"QtQuick.Controls.TextField",
|
"QtQuick.Controls.TextField",
|
||||||
"QtQuick.Controls.ToolSeparator",
|
"QtQuick.Controls.ToolSeparator",
|
||||||
"QtQuick.Controls.Tumbler"]
|
"QtQuick.Controls.Tumbler",
|
||||||
|
"QtQuick.Shapes.ConicalGradient",
|
||||||
|
"QtQuick.Shapes.LinearGradient",
|
||||||
|
"QtQuick.Shapes.RadialGradient",
|
||||||
|
"QtQuick.Shapes.ShapeGradient"]
|
||||||
|
|
||||||
allowedImports: ["QtQuick",
|
allowedImports: ["QtQuick",
|
||||||
"QtQuick.Shapes",
|
"QtQuick.Shapes",
|
||||||
|
|||||||
221
share/qtcreator/qmldesigner/qt4mcu/qul-20.qml
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator.
|
||||||
|
**
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3 as published by the Free Software
|
||||||
|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||||
|
** included in the packaging of this file. Please review the following
|
||||||
|
** information to ensure the GNU General Public License requirements will
|
||||||
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
VersionData {
|
||||||
|
name: "Qt for MCUs 2.0"
|
||||||
|
|
||||||
|
bannedItems: ["QtQuick.AnimatedImage",
|
||||||
|
"QtQuick.FocusScope",
|
||||||
|
"QtQuick.TextInput",
|
||||||
|
"QtQuick.TextEdit",
|
||||||
|
"QtQuick.Flow",
|
||||||
|
"QtQuick.Grid",
|
||||||
|
"QtQuick.GridView",
|
||||||
|
"QtQuick.PathView",
|
||||||
|
"QtQuick.Loader",
|
||||||
|
"QtQuick.Controls",
|
||||||
|
"QtQuick.Controls.BusyIndicator",
|
||||||
|
"QtQuick.Controls.ButtonGroup",
|
||||||
|
"QtQuick.Controls.CheckDelegate",
|
||||||
|
"QtQuick.Controls.Container",
|
||||||
|
"QtQuick.Controls.ComboBox",
|
||||||
|
"QtQuick.Controls.DelayButton",
|
||||||
|
"QtQuick.Controls.Frame",
|
||||||
|
"QtQuick.Controls.GroupBox",
|
||||||
|
"QtQuick.Controls.ItemDelegate",
|
||||||
|
"QtQuick.Controls.Label",
|
||||||
|
"QtQuick.Controls.Page",
|
||||||
|
"QtQuick.Controls.PageIndicator",
|
||||||
|
"QtQuick.Controls.Pane",
|
||||||
|
"QtQuick.Controls.RadioDelegate",
|
||||||
|
"QtQuick.Controls.RangeSlider",
|
||||||
|
"QtQuick.Controls.RoundButton",
|
||||||
|
"QtQuick.Controls.ScrollView",
|
||||||
|
"QtQuick.Controls.SpinBox",
|
||||||
|
"QtQuick.Controls.StackView",
|
||||||
|
"QtQuick.Controls.SwipeDelegate",
|
||||||
|
"QtQuick.Controls.SwitchDelegate",
|
||||||
|
"QtQuick.Controls.ToolBar",
|
||||||
|
"QtQuick.Controls.ToolButton",
|
||||||
|
"QtQuick.Controls.TabBar",
|
||||||
|
"QtQuick.Controls.TabButton",
|
||||||
|
"QtQuick.Controls.TextArea",
|
||||||
|
"QtQuick.Controls.TextField",
|
||||||
|
"QtQuick.Controls.ToolSeparator",
|
||||||
|
"QtQuick.Controls.Tumbler",
|
||||||
|
"QtQuick.Shapes.ConicalGradient",
|
||||||
|
"QtQuick.Shapes.LinearGradient",
|
||||||
|
"QtQuick.Shapes.RadialGradient",
|
||||||
|
"QtQuick.Shapes.ShapeGradient"]
|
||||||
|
|
||||||
|
allowedImports: ["QtQuick",
|
||||||
|
"QtQuick.Shapes",
|
||||||
|
"QtQuick.Controls",
|
||||||
|
"QtQuick.Timeline",
|
||||||
|
"QtQuickUltralite.Extras",
|
||||||
|
"QtQuickUltralite.Layers"]
|
||||||
|
|
||||||
|
bannedImports: ["FlowView"]
|
||||||
|
|
||||||
|
//ComplexProperty is not a type, it's just a way to handle bigger props
|
||||||
|
ComplexProperty {
|
||||||
|
prefix: "font"
|
||||||
|
bannedProperties: ["wordSpacing", "letterSpacing", "hintingPreference",
|
||||||
|
"kerning", "preferShaping", "capitalization",
|
||||||
|
"strikeout", "underline", "styleName"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Item {
|
||||||
|
bannedProperties: ["layer", "opacity", "smooth", "antialiasing",
|
||||||
|
"baselineOffset", "focus", "activeFocusOnTab",
|
||||||
|
"rotation", "scale", "transformOrigin"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Rectangle {
|
||||||
|
bannedProperties: ["gradient", "border"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Flickable {
|
||||||
|
bannedProperties: ["boundsBehavior", "boundsMovement", "flickDeceleration",
|
||||||
|
"flickableDirection", "leftMargin", "rightMargin", "bottomMargin", "topMargin",
|
||||||
|
"originX", "originY", "pixelAligned", "pressDelay", "synchronousDrag"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.MouseArea {
|
||||||
|
bannedProperties: ["propagateComposedEvents", "preventStealing", "cursorShape",
|
||||||
|
"scrollGestureEnabled", "drag", "acceptedButtons", "hoverEnabled"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Image {
|
||||||
|
allowChildren: false
|
||||||
|
allowedProperties: ["rotation", "scale", "transformOrigin"]
|
||||||
|
bannedProperties: ["mirror", "mipmap", "cache", "autoTransform", "asynchronous",
|
||||||
|
"sourceSize", "smooth"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.BorderImage {
|
||||||
|
bannedProperties: ["asynchronous", "cache", "currentFrame", "frameCount",
|
||||||
|
"horizontalTileMode", "mirror", "progress", "smooth", "sourceSize",
|
||||||
|
"status", "verticalTileMode"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Text {
|
||||||
|
allowChildren: false
|
||||||
|
allowedProperties: ["rotation", "scale", "transformOrigin"]
|
||||||
|
bannedProperties: ["elide", "lineHeight", "lineHeightMode", "wrapMode", "style",
|
||||||
|
"styleColor", "minimumPointSize", "minimumPixelSize",
|
||||||
|
"fontSizeMode", "renderType", "renderTypeQuality", "textFormat", "maximumLineCount"]
|
||||||
|
}
|
||||||
|
|
||||||
|
//Padding is not an actual item, but rather set of properties in Text
|
||||||
|
Padding {
|
||||||
|
bannedProperties: ["bottomPadding", "topPadding", "leftPadding", "rightPadding"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Column {
|
||||||
|
bannedProperties: ["bottomPadding", "leftPadding", "rightPadding", "topPadding"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Row {
|
||||||
|
bannedProperties: ["bottomPadding", "leftPadding", "rightPadding", "topPadding",
|
||||||
|
"effectiveLayoutDirection", "layoutDirection"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.ListView {
|
||||||
|
bannedProperties: ["cacheBuffer", "highlightRangeMode", "highlightMoveDuration",
|
||||||
|
"highlightResizeDuration", "preferredHighlightBegin", "layoutDirection",
|
||||||
|
"preferredHighlightEnd", "highlightFollowsCurrentItem", "keyNavigationWraps",
|
||||||
|
"snapMode", "highlightMoveVelocity", "highlightResizeVelocity"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Animation {
|
||||||
|
bannedProperties: ["paused"]
|
||||||
|
}
|
||||||
|
|
||||||
|
//Quick Controls2 Items and properties:
|
||||||
|
|
||||||
|
QtQuick.Controls.Control {
|
||||||
|
bannedProperties: ["focusPolicy", "hoverEnabled", "wheelEnabled"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Controls.AbstractButton {
|
||||||
|
bannedProperties: ["display", "autoExclusive"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Controls.ProgressBar {
|
||||||
|
bannedProperties: ["indeterminate"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Controls.Slider {
|
||||||
|
bannedProperties: ["live", "snapMode", "touchDragThreshold"]
|
||||||
|
}
|
||||||
|
|
||||||
|
//Path and Shapes related:
|
||||||
|
|
||||||
|
QtQuick.Path {
|
||||||
|
bannedProperties: ["scale", "pathElements"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.PathArc {
|
||||||
|
bannedProperties: ["relativeX", "relativeY"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.PathLine {
|
||||||
|
bannedProperties: ["relativeX", "relativeY"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.PathMove {
|
||||||
|
bannedProperties: ["relativeX", "relativeY"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.PathQuad {
|
||||||
|
bannedProperties: ["relativeX", "relativeY",
|
||||||
|
"relativeControlX", "relativeControlY"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.PathCubic {
|
||||||
|
bannedProperties: ["relativeX", "relativeY",
|
||||||
|
"relativeControl1X", "relativeControl1Y",
|
||||||
|
"relativeControl2X", "relativeControl2Y"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.PathElement {
|
||||||
|
//nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.PathSvg {
|
||||||
|
//nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Shapes.Shape {
|
||||||
|
bannedProperties: ["asynchronous", "containsMode", "data",
|
||||||
|
"renderType", "status", "vendorExtensionsEnabled"]
|
||||||
|
}
|
||||||
|
|
||||||
|
QtQuick.Shapes.ShapePath {
|
||||||
|
bannedProperties: ["dashOffset", "dashPattern",
|
||||||
|
"fillGradient", "strokeStyle"]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -33,11 +33,8 @@ import StudioTheme 1.0 as StudioTheme
|
|||||||
Rectangle {
|
Rectangle {
|
||||||
id: myRoot
|
id: myRoot
|
||||||
|
|
||||||
color: baseColor
|
|
||||||
|
|
||||||
property bool isBaseState
|
property bool isBaseState
|
||||||
property bool isCurrentState
|
property bool isCurrentState
|
||||||
property color baseColor
|
|
||||||
property string delegateStateName
|
property string delegateStateName
|
||||||
property string delegateStateImageSource
|
property string delegateStateImageSource
|
||||||
property bool delegateHasWhenCondition
|
property bool delegateHasWhenCondition
|
||||||
@@ -47,14 +44,14 @@ Rectangle {
|
|||||||
property int bottomAreaHeight
|
property int bottomAreaHeight
|
||||||
property int stateMargin
|
property int stateMargin
|
||||||
property int previewMargin
|
property int previewMargin
|
||||||
property int columnSpacing
|
|
||||||
|
|
||||||
readonly property bool isDefaultState: isDefault
|
readonly property bool isDefaultState: isDefault
|
||||||
|
|
||||||
property int closeButtonMargin: 6
|
property int closeButtonMargin: 6
|
||||||
property int textFieldMargin: 4
|
property int textFieldMargin: 4
|
||||||
|
|
||||||
signal delegateInteraction
|
property int scrollBarH: 0
|
||||||
|
property int listMargin: 0
|
||||||
|
|
||||||
function autoComplete(text, pos, explicitComplete, filter) {
|
function autoComplete(text, pos, explicitComplete, filter) {
|
||||||
var stringList = statesEditorModel.autoComplete(text, pos, explicitComplete)
|
var stringList = statesEditorModel.autoComplete(text, pos, explicitComplete)
|
||||||
@@ -65,14 +62,16 @@ Rectangle {
|
|||||||
return statesEditorModel.hasAnnotation(internalNodeId)
|
return statesEditorModel.hasAnnotation(internalNodeId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
color: isCurrentState ? StudioTheme.Values.themeInteraction
|
||||||
|
: StudioTheme.Values.themeControlBackgroundInteraction
|
||||||
MouseArea {
|
MouseArea {
|
||||||
id: mouseArea
|
id: mouseArea
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
focus = true
|
focus = true
|
||||||
root.currentStateInternalId = internalNodeId
|
root.currentStateInternalId = internalNodeId
|
||||||
contextMenu.dismiss() // close potentially open context menu
|
contextMenu.dismiss() // close potentially open context menu
|
||||||
myRoot.delegateInteraction()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,7 +88,6 @@ Rectangle {
|
|||||||
visible: !isBaseState && isCurrentState
|
visible: !isBaseState && isCurrentState
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
myRoot.delegateInteraction()
|
|
||||||
if (isDefaultState)
|
if (isDefaultState)
|
||||||
statesEditorModel.resetDefaultState()
|
statesEditorModel.resetDefaultState()
|
||||||
|
|
||||||
@@ -254,9 +252,8 @@ Rectangle {
|
|||||||
|
|
||||||
Rectangle { // separator
|
Rectangle { // separator
|
||||||
width: column.width
|
width: column.width
|
||||||
height: myRoot.columnSpacing
|
height: 2
|
||||||
color: StudioTheme.Values.themeStateSeparator
|
color: StudioTheme.Values.themeStateSeparator
|
||||||
visible: expanded
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
@@ -264,7 +261,6 @@ Rectangle {
|
|||||||
width: myRoot.width - 2 * myRoot.stateMargin
|
width: myRoot.width - 2 * myRoot.stateMargin
|
||||||
height: myRoot.bottomAreaHeight
|
height: myRoot.bottomAreaHeight
|
||||||
color: StudioTheme.Values.themeStateBackground
|
color: StudioTheme.Values.themeStateBackground
|
||||||
visible: expanded
|
|
||||||
|
|
||||||
Image {
|
Image {
|
||||||
anchors.fill: stateImageBackground
|
anchors.fill: stateImageBackground
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
import QtQuick 2.15
|
import QtQuick 2.15
|
||||||
import QtQuick.Controls 2.15
|
import QtQuick.Controls 2.15
|
||||||
import QtQuickDesignerTheme 1.0
|
import QtQuickDesignerTheme 1.0
|
||||||
|
import Qt.labs.qmlmodels 1.0
|
||||||
import HelperWidgets 2.0
|
import HelperWidgets 2.0
|
||||||
import StudioControls 1.0 as StudioControls
|
import StudioControls 1.0 as StudioControls
|
||||||
import StudioTheme 1.0 as StudioTheme
|
import StudioTheme 1.0 as StudioTheme
|
||||||
@@ -33,27 +34,24 @@ import StudioTheme 1.0 as StudioTheme
|
|||||||
FocusScope {
|
FocusScope {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
property int delegateTopAreaHeight: StudioTheme.Values.height + 8
|
readonly property int delegateTopAreaHeight: StudioTheme.Values.height + 8
|
||||||
property int delegateBottomAreaHeight: delegateHeight - 2 * delegateStateMargin - delegateTopAreaHeight - delegateColumnSpacing
|
readonly property int delegateBottomAreaHeight: delegateHeight - 2 * delegateStateMargin - delegateTopAreaHeight - 2
|
||||||
property int delegateColumnSpacing: 2
|
readonly property int delegateStateMargin: 16
|
||||||
property int delegateStateMargin: 16
|
readonly property int delegatePreviewMargin: 10
|
||||||
property int delegatePreviewMargin: 10
|
readonly property int effectiveHeight: root.height < 130 ? 89 : Math.min(root.height, 287)
|
||||||
property int effectiveHeight: root.expanded ? Math.max(85, Math.min(287, root.height)) : 85 // height of the states area
|
|
||||||
|
readonly property int scrollBarH: statesListView.ScrollBar.horizontal.scrollBarVisible ? StudioTheme.Values.scrollBarThickness : 0
|
||||||
|
readonly property int listMargin: 10
|
||||||
|
readonly property int delegateWidth: 264
|
||||||
|
readonly property int delegateHeight: Math.max(effectiveHeight - scrollBarH - 2 * listMargin, 69)
|
||||||
|
readonly property int innerSpacing: 2
|
||||||
|
|
||||||
|
property int currentStateInternalId: 0
|
||||||
|
|
||||||
signal createNewState
|
signal createNewState
|
||||||
signal deleteState(int internalNodeId)
|
signal deleteState(int internalNodeId)
|
||||||
signal duplicateCurrentState
|
signal duplicateCurrentState
|
||||||
|
|
||||||
property int padding: 2
|
|
||||||
property int delegateWidth: 264
|
|
||||||
property int delegateHeight: effectiveHeight
|
|
||||||
- StudioTheme.Values.scrollBarThickness
|
|
||||||
- 2 * (root.padding + StudioTheme.Values.border)
|
|
||||||
property int innerSpacing: 2
|
|
||||||
property int currentStateInternalId: 0
|
|
||||||
|
|
||||||
property bool expanded: true
|
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
target: statesEditorModel
|
target: statesEditorModel
|
||||||
function onChangedToState(n) { root.currentStateInternalId = n }
|
function onChangedToState(n) { root.currentStateInternalId = n }
|
||||||
@@ -65,92 +63,117 @@ FocusScope {
|
|||||||
color: StudioTheme.Values.themePanelBackground
|
color: StudioTheme.Values.themePanelBackground
|
||||||
}
|
}
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
|
||||||
|
|
||||||
onClicked: function(mouse) {
|
|
||||||
if (mouse.button === Qt.LeftButton) {
|
|
||||||
contextMenu.dismiss()
|
|
||||||
focus = true
|
|
||||||
} else if (mouse.button === Qt.RightButton) {
|
|
||||||
contextMenu.popup()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
StudioControls.Menu {
|
|
||||||
id: contextMenu
|
|
||||||
|
|
||||||
StudioControls.MenuItem {
|
|
||||||
text: root.expanded ? qsTr("Collapse") : qsTr("Expand")
|
|
||||||
onTriggered: root.expanded = !root.expanded
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
AbstractButton {
|
AbstractButton {
|
||||||
id: addStateButton
|
id: addStateButton
|
||||||
|
|
||||||
buttonIcon: root.expanded ? qsTr("Create New State") : StudioTheme.Constants.plus
|
buttonIcon: StudioTheme.Constants.plus
|
||||||
iconFont: root.expanded ? StudioTheme.Constants.font : StudioTheme.Constants.iconFont
|
iconFont: StudioTheme.Constants.iconFont
|
||||||
iconSize: root.expanded ? StudioTheme.Values.myFontSize : StudioTheme.Values.myIconFontSize
|
iconSize: StudioTheme.Values.myIconFontSize
|
||||||
iconItalic: root.expanded
|
|
||||||
tooltip: qsTr("Add a new state.")
|
tooltip: qsTr("Add a new state.")
|
||||||
visible: canAddNewStates
|
visible: canAddNewStates
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.rightMargin: 8
|
anchors.rightMargin: 4
|
||||||
y: (Math.min(effectiveHeight, root.height) - height) / 2
|
anchors.bottom: parent.bottom
|
||||||
width: root.expanded ? 140 : 18
|
anchors.bottomMargin: statesListView.contentWidth - statesListView.contentX - root.delegateWidth / 2 > statesListView.width ? scrollBarH + 5 : -35
|
||||||
height: root.expanded ? 60 : 18
|
width: 35
|
||||||
|
height: 35
|
||||||
|
|
||||||
onClicked: {
|
Behavior on anchors.bottomMargin {
|
||||||
contextMenu.dismiss()
|
PropertyAnimation {
|
||||||
root.createNewState()
|
duration: 700
|
||||||
|
easing.type: Easing.InOutBack
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle { // separator lines between state items
|
onClicked: root.createNewState()
|
||||||
color: StudioTheme.Values.themeStateSeparator
|
|
||||||
x: root.padding
|
|
||||||
y: root.padding
|
|
||||||
width: statesListView.width
|
|
||||||
height: root.delegateHeight
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ListView {
|
ListView {
|
||||||
id: statesListView
|
id: statesListView
|
||||||
|
|
||||||
boundsBehavior: Flickable.StopAtBounds
|
|
||||||
clip: true
|
clip: true
|
||||||
|
anchors.fill: parent
|
||||||
x: root.padding
|
anchors.topMargin: listMargin
|
||||||
y: root.padding
|
anchors.leftMargin: listMargin
|
||||||
width: Math.min(root.delegateWidth * statesListView.count + root.innerSpacing * (statesListView.count - 1),
|
anchors.rightMargin: listMargin
|
||||||
root.width - addStateButton.width - root.padding - 16) // 16 = 2 * 8 (addStateButton margin)
|
|
||||||
height: root.delegateHeight + StudioTheme.Values.scrollBarThickness
|
|
||||||
|
|
||||||
model: statesEditorModel
|
model: statesEditorModel
|
||||||
orientation: ListView.Horizontal
|
orientation: ListView.Horizontal
|
||||||
spacing: root.innerSpacing
|
spacing: root.innerSpacing
|
||||||
|
|
||||||
delegate: StatesDelegate {
|
property int prevCount: 0
|
||||||
id: statesDelegate
|
onCountChanged: {
|
||||||
width: root.delegateWidth
|
if (count > prevCount)
|
||||||
height: root.delegateHeight
|
Qt.callLater(statesListView.positionViewAtEnd)
|
||||||
isBaseState: 0 === internalNodeId
|
prevCount = count
|
||||||
isCurrentState: root.currentStateInternalId === internalNodeId
|
}
|
||||||
baseColor: isCurrentState ? StudioTheme.Values.themeInteraction : background.color
|
|
||||||
delegateStateName: stateName
|
|
||||||
delegateStateImageSource: stateImageSource
|
|
||||||
delegateHasWhenCondition: hasWhenCondition
|
|
||||||
delegateWhenConditionString: whenConditionString
|
|
||||||
onDelegateInteraction: contextMenu.dismiss()
|
|
||||||
|
|
||||||
columnSpacing: root.delegateColumnSpacing
|
delegate: DelegateChooser {
|
||||||
topAreaHeight: root.delegateTopAreaHeight
|
role: "type"
|
||||||
bottomAreaHeight: root.delegateBottomAreaHeight
|
|
||||||
stateMargin: root.delegateStateMargin
|
DelegateChoice {
|
||||||
previewMargin: root.delegatePreviewMargin
|
roleValue: "state"
|
||||||
|
|
||||||
|
StatesDelegate {
|
||||||
|
width: root.delegateWidth
|
||||||
|
height: root.delegateHeight
|
||||||
|
anchors.verticalCenter: parent ? parent.verticalCenter : undefined
|
||||||
|
anchors.verticalCenterOffset: -.5 * (scrollBarH + listMargin)
|
||||||
|
isBaseState: 0 === internalNodeId
|
||||||
|
isCurrentState: root.currentStateInternalId === internalNodeId
|
||||||
|
delegateStateName: stateName
|
||||||
|
delegateStateImageSource: stateImageSource
|
||||||
|
delegateHasWhenCondition: hasWhenCondition
|
||||||
|
delegateWhenConditionString: whenConditionString
|
||||||
|
|
||||||
|
topAreaHeight: root.delegateTopAreaHeight
|
||||||
|
bottomAreaHeight: root.delegateBottomAreaHeight
|
||||||
|
stateMargin: root.delegateStateMargin
|
||||||
|
previewMargin: root.delegatePreviewMargin
|
||||||
|
scrollBarH: root.scrollBarH
|
||||||
|
listMargin: root.listMargin
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DelegateChoice {
|
||||||
|
roleValue: "add"
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
visible: canAddNewStates
|
||||||
|
|
||||||
|
width: root.delegateWidth
|
||||||
|
height: root.delegateHeight
|
||||||
|
anchors.verticalCenter: parent ? parent.verticalCenter : undefined
|
||||||
|
anchors.verticalCenterOffset: -.5 * (scrollBarH + listMargin)
|
||||||
|
color: Qt.lighter(StudioTheme.Values.themeControlBackgroundInteraction, addState.containsMouse ? 1.5 : 1)
|
||||||
|
|
||||||
|
ToolTip.text: qsTr("Add a new state.")
|
||||||
|
ToolTip.visible: addState.containsMouse
|
||||||
|
ToolTip.delay: 1000
|
||||||
|
|
||||||
|
Rectangle { // inner rect
|
||||||
|
width: parent.width - 30
|
||||||
|
height: parent.height - 30
|
||||||
|
anchors.centerIn: parent
|
||||||
|
color: StudioTheme.Values.themeStateBackground
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: "+"
|
||||||
|
anchors.centerIn: parent
|
||||||
|
anchors.verticalCenterOffset: -5
|
||||||
|
font.pixelSize: parent.height * .5
|
||||||
|
color: Qt.lighter(StudioTheme.Values.themeControlBackgroundInteraction, addState.containsMouse ? 1.5 : 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
id: addState
|
||||||
|
hoverEnabled: true
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked: root.createNewState()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ScrollBar.horizontal: HorizontalScrollBar {}
|
ScrollBar.horizontal: HorizontalScrollBar {}
|
||||||
|
|||||||
@@ -1,27 +1,19 @@
|
|||||||
set(languages cs da de fr hr ja pl ru sl uk zh_CN zh_TW)
|
set(languages cs da de fr hr ja pl ru sl uk zh_CN zh_TW)
|
||||||
set(bad_languages hu) # Fix these before including them in languages!
|
set(bad_languages hu) # Fix these before including them in languages!
|
||||||
|
|
||||||
# TODO: Remove when cmake_minimum_required greater than 3.12
|
find_package(Python3 COMPONENTS Interpreter)
|
||||||
if (CMAKE_VERSION VERSION_GREATER 3.12)
|
|
||||||
find_package(Python3 COMPONENTS Interpreter)
|
|
||||||
set(PYTHONINTERP_FOUND ${Python3_Interpreter_FOUND})
|
|
||||||
set(PYTHON_VERSION_STRING ${Python3_VERSION})
|
|
||||||
set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
|
|
||||||
else()
|
|
||||||
find_package(PythonInterp)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(json_wizards_h "")
|
set(json_wizards_h "")
|
||||||
set(custom_wizards_h "")
|
set(custom_wizards_h "")
|
||||||
set(externaltools_h "")
|
set(externaltools_h "")
|
||||||
set(snippets_h "")
|
set(snippets_h "")
|
||||||
|
|
||||||
if (NOT PYTHONINTERP_FOUND OR NOT PYTHON_VERSION_STRING VERSION_GREATER_EQUAL "3.0.0")
|
if (NOT Python3_Interpreter_FOUND)
|
||||||
message(WARNING "No python3 interpreter found, skipping extraction of data from XML and JSON files.\n *** Please pass -DPYTHON_EXECUTABLE=/path/to/python3 to cmake.")
|
message(WARNING "No python3 interpreter found, skipping extraction of data from XML and JSON files.\n *** Please pass -DPython3_EXECUTABLE=/path/to/python3 to cmake.")
|
||||||
else()
|
else()
|
||||||
set(json_wizards_h "${CMAKE_CURRENT_BINARY_DIR}/jsonwizards_tr.h")
|
set(json_wizards_h "${CMAKE_CURRENT_BINARY_DIR}/jsonwizards_tr.h")
|
||||||
add_custom_command(OUTPUT "${json_wizards_h}"
|
add_custom_command(OUTPUT "${json_wizards_h}"
|
||||||
COMMAND "${PYTHON_EXECUTABLE}"
|
COMMAND "${Python3_EXECUTABLE}"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/extract-jsonwizards.py"
|
"${CMAKE_CURRENT_SOURCE_DIR}/extract-jsonwizards.py"
|
||||||
"${PROJECT_SOURCE_DIR}/share/qtcreator/templates/wizards" "${json_wizards_h}"
|
"${PROJECT_SOURCE_DIR}/share/qtcreator/templates/wizards" "${json_wizards_h}"
|
||||||
COMMENT Generate translation data from JSON wizards
|
COMMENT Generate translation data from JSON wizards
|
||||||
@@ -29,7 +21,7 @@ else()
|
|||||||
|
|
||||||
set(custom_wizards_h "${CMAKE_CURRENT_BINARY_DIR}/customwizards_tr.h")
|
set(custom_wizards_h "${CMAKE_CURRENT_BINARY_DIR}/customwizards_tr.h")
|
||||||
add_custom_command(OUTPUT "${custom_wizards_h}"
|
add_custom_command(OUTPUT "${custom_wizards_h}"
|
||||||
COMMAND "${PYTHON_EXECUTABLE}"
|
COMMAND "${Python3_EXECUTABLE}"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/extract-customwizards.py"
|
"${CMAKE_CURRENT_SOURCE_DIR}/extract-customwizards.py"
|
||||||
"${PROJECT_SOURCE_DIR}/share/qtcreator/templates/wizards" "${custom_wizards_h}"
|
"${PROJECT_SOURCE_DIR}/share/qtcreator/templates/wizards" "${custom_wizards_h}"
|
||||||
COMMENT Generate translation data from XML wizards
|
COMMENT Generate translation data from XML wizards
|
||||||
@@ -37,7 +29,7 @@ else()
|
|||||||
|
|
||||||
set(externaltools_h "${CMAKE_CURRENT_BINARY_DIR}/externaltools_tr.h")
|
set(externaltools_h "${CMAKE_CURRENT_BINARY_DIR}/externaltools_tr.h")
|
||||||
add_custom_command(OUTPUT "${externaltools_h}"
|
add_custom_command(OUTPUT "${externaltools_h}"
|
||||||
COMMAND "${PYTHON_EXECUTABLE}"
|
COMMAND "${Python3_EXECUTABLE}"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/extract-externaltools.py"
|
"${CMAKE_CURRENT_SOURCE_DIR}/extract-externaltools.py"
|
||||||
"${PROJECT_SOURCE_DIR}/src/share/qtcreator/externaltools" "${externaltools_h}"
|
"${PROJECT_SOURCE_DIR}/src/share/qtcreator/externaltools" "${externaltools_h}"
|
||||||
COMMENT Generate translation data from external tools definitions
|
COMMENT Generate translation data from external tools definitions
|
||||||
@@ -45,7 +37,7 @@ else()
|
|||||||
|
|
||||||
set(snippets_h "${CMAKE_CURRENT_BINARY_DIR}/snippets_tr.h")
|
set(snippets_h "${CMAKE_CURRENT_BINARY_DIR}/snippets_tr.h")
|
||||||
add_custom_command(OUTPUT "${snippets_h}"
|
add_custom_command(OUTPUT "${snippets_h}"
|
||||||
COMMAND "${PYTHON_EXECUTABLE}"
|
COMMAND "${Python3_EXECUTABLE}"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/extract-snippets.py"
|
"${CMAKE_CURRENT_SOURCE_DIR}/extract-snippets.py"
|
||||||
"${PROJECT_SOURCE_DIR}/share/qtcreator/snippets" "${snippets_h}"
|
"${PROJECT_SOURCE_DIR}/share/qtcreator/snippets" "${snippets_h}"
|
||||||
COMMENT Generate translation data from snippets definitions
|
COMMENT Generate translation data from snippets definitions
|
||||||
|
|||||||
@@ -54911,28 +54911,28 @@ Nainstalujte, prosím, jedno SDK s API verze alespoň %1.</translation>
|
|||||||
<translation><span style=" color:#ff0000;">Heslo je OK</span></translation>
|
<translation><span style=" color:#ff0000;">Heslo je OK</span></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Keystore password is too short</span></source>
|
<source>Keystore password is too short.</source>
|
||||||
<translation><span style=" color:#ff0000;">Heslo k úložišti klíče je příliš krátké</span></translation>
|
<translation>Heslo k úložišti klíče je příliš krátké.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Keystore passwords do not match</span></source>
|
<source>Keystore passwords do not match.</source>
|
||||||
<translation><span style=" color:#ff0000;">Hesla k úložišti klíče neodpovídají</span></translation>
|
<translation>Hesla k úložišti klíče neodpovídají.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate password is too short</span></source>
|
<source>Certificate password is too short.</source>
|
||||||
<translation><span style=" color:#ff0000;">Heslo k certifikátu je příliš krátké</span></translation>
|
<translation>Heslo k certifikátu je příliš krátké.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate passwords do not match</span></source>
|
<source>Certificate passwords do not match.</source>
|
||||||
<translation><span style=" color:#ff0000;">Hesla k certifikátům neodpovídají</span></translation>
|
<translation>Hesla k certifikátům neodpovídají.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate alias is missing</span></source>
|
<source>Certificate alias is missing.</source>
|
||||||
<translation><span style=" color:#ff0000;">Alias certifikátu chybí</span></translation>
|
<translation>Alias certifikátu chybí.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Invalid country code</span></source>
|
<source>Invalid country code.</source>
|
||||||
<translation><span style=" color:#ff0000;">Neplatné číslo země (mezinárodní předvolba)</span></translation>
|
<translation>Neplatné číslo země (mezinárodní předvolba).</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Keystore file name</source>
|
<source>Keystore file name</source>
|
||||||
|
|||||||
@@ -268,28 +268,28 @@ Minimum API-niveauet krævet af kittet er %1.</translation>
|
|||||||
<context>
|
<context>
|
||||||
<name>Android::Internal::AndroidCreateKeystoreCertificate</name>
|
<name>Android::Internal::AndroidCreateKeystoreCertificate</name>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Keystore password is too short</span></source>
|
<source>Keystore password is too short.</source>
|
||||||
<translation><span style=" color:#ff0000;">Keystore adgangskode er for kort</span></translation>
|
<translation>Keystore adgangskode er for kort.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Keystore passwords do not match</span></source>
|
<source>Keystore passwords do not match.</source>
|
||||||
<translation><span style=" color:#ff0000;">Keystore adgangskoder matcher ikke</span></translation>
|
<translation>Keystore adgangskoder matcher ikke.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate password is too short</span></source>
|
<source>Certificate password is too short.</source>
|
||||||
<translation><span style=" color:#ff0000;">Certifikat adgangskode er for kort</span></translation>
|
<translation>Certifikat adgangskode er for kort.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate passwords do not match</span></source>
|
<source>Certificate passwords do not match.</source>
|
||||||
<translation><span style=" color:#ff0000;">Certifikat adgangskoder matcher ikke</span></translation>
|
<translation>Certifikat adgangskoder matcher ikke.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate alias is missing</span></source>
|
<source>Certificate alias is missing.</source>
|
||||||
<translation><span style=" color:#ff0000;">Certifikat-alias mangler</span></translation>
|
<translation>Certifikat-alias mangler.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Invalid country code</span></source>
|
<source>Invalid country code.</source>
|
||||||
<translation><span style=" color:#ff0000;">Ugyldig sprogkode</span></translation>
|
<translation>Ugyldig sprogkode.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Keystore Filename</source>
|
<source>Keystore Filename</source>
|
||||||
|
|||||||
@@ -19510,28 +19510,28 @@ should a repository require SSH-authentication (see documentation on SSH and the
|
|||||||
<context>
|
<context>
|
||||||
<name>Android::Internal::AndroidCreateKeystoreCertificate</name>
|
<name>Android::Internal::AndroidCreateKeystoreCertificate</name>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Keystore password is too short</span></source>
|
<source>Keystore password is too short.</source>
|
||||||
<translation><span style=" color:#ff0000;">Das Keystore-Passwort ist zu kurz</span></translation>
|
<translation>Das Keystore-Passwort ist zu kurz.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Keystore passwords do not match</span></source>
|
<source>Keystore passwords do not match.</source>
|
||||||
<translation><span style=" color:#ff0000;">Die Keystore-Passwörter stimmen nicht überein</span></translation>
|
<translation>Die Keystore-Passwörter stimmen nicht überein.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate password is too short</span></source>
|
<source>Certificate password is too short.</source>
|
||||||
<translation><span style=" color:#ff0000;">Das Passwort des Zertifikats ist zu kurz</span></translation>
|
<translation>Das Passwort des Zertifikats ist zu kurz.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate passwords do not match</span></source>
|
<source>Certificate passwords do not match.</source>
|
||||||
<translation><span style=" color:#ff0000;">Die Passwörter des Zertifikats stimmen nicht überein</span></translation>
|
<translation>Die Passwörter des Zertifikats stimmen nicht überein.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate alias is missing</span></source>
|
<source>Certificate alias is missing.</source>
|
||||||
<translation><span style=" color:#ff0000;">Der Alias des Zertifikats fehlt</span></translation>
|
<translation>Der Alias des Zertifikats fehlt.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Invalid country code</span></source>
|
<source>Invalid country code.</source>
|
||||||
<translation><span style=" color:#ff0000;">Ungültiger Ländercode</span></translation>
|
<translation>Ungültiger Ländercode.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Keystore Filename</source>
|
<source>Keystore Filename</source>
|
||||||
|
|||||||
@@ -60828,28 +60828,28 @@ Veuillez installer un SDK supérieur à la version %1.</translation>
|
|||||||
<translation><span style=" color:#00ff00;">Mot de passe correct</span></translation>
|
<translation><span style=" color:#00ff00;">Mot de passe correct</span></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Keystore password is too short</span></source>
|
<source>Keystore password is too short.</source>
|
||||||
<translation><span style=" color:#ff0000;">Le mot de passe du trousseau de clés est trop court</span></translation>
|
<translation>Le mot de passe du trousseau de clés est trop court.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Keystore passwords do not match</span></source>
|
<source>Keystore passwords do not match.</source>
|
||||||
<translation><span style=" color:#ff0000;">Les mots de passe du trousseau de clés ne correspondent pas</span></translation>
|
<translation>Les mots de passe du trousseau de clés ne correspondent pas.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate password is too short</span></source>
|
<source>Certificate password is too short.</source>
|
||||||
<translation><span style=" color:#ff0000;">Le mot de passe du certificat est manquant</span></translation>
|
<translation>Le mot de passe du certificat est manquant.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate passwords do not match</span></source>
|
<source>Certificate passwords do not match.</source>
|
||||||
<translation><span style=" color:#ff0000;">Les mots de passe du certificat ne correspondent pas</span></translation>
|
<translation>Les mots de passe du certificat ne correspondent pas.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate alias is missing</span></source>
|
<source>Certificate alias is missing.</source>
|
||||||
<translation><span style=" color:#ff0000;">L'alias du certificat est manquant</span></translation>
|
<translation>L'alias du certificat est manquant.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Invalid country code</span></source>
|
<source>Invalid country code.</source>
|
||||||
<translation><span style=" color:#ff0000;">Le code de pays est invalide</span></translation>
|
<translation>Le code de pays est invalide.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Keystore file name</source>
|
<source>Keystore file name</source>
|
||||||
|
|||||||
@@ -14265,27 +14265,27 @@ The minimum API level required by the kit is %1.</source>
|
|||||||
<context>
|
<context>
|
||||||
<name>Android::Internal::AndroidCreateKeystoreCertificate</name>
|
<name>Android::Internal::AndroidCreateKeystoreCertificate</name>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Keystore password is too short</span></source>
|
<source>Keystore password is too short.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Keystore passwords do not match</span></source>
|
<source>Keystore passwords do not match.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate password is too short</span></source>
|
<source>Certificate password is too short.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate passwords do not match</span></source>
|
<source>Certificate passwords do not match.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate alias is missing</span></source>
|
<source>Certificate alias is missing.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Invalid country code</span></source>
|
<source>Invalid country code.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
|
|||||||
@@ -9625,28 +9625,28 @@ with a password, which you can enter below.</source>
|
|||||||
<context>
|
<context>
|
||||||
<name>Android::Internal::AndroidCreateKeystoreCertificate</name>
|
<name>Android::Internal::AndroidCreateKeystoreCertificate</name>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Keystore password is too short</span></source>
|
<source>Keystore password is too short.</source>
|
||||||
<translation><span style=" color:#ff0000;">キーストアパスワードが短すぎます</span></translation>
|
<translation>キーストアパスワードが短すぎます。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Keystore passwords do not match</span></source>
|
<source>Keystore passwords do not match.</source>
|
||||||
<translation><span style=" color:#ff0000;">キーストアパスワードが一致しません</span></translation>
|
<translation>キーストアパスワードが一致しません。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate password is too short</span></source>
|
<source>Certificate password is too short.</source>
|
||||||
<translation><span style=" color:#ff0000;">証明書のパスワードが短すぎます</span></translation>
|
<translation>証明書のパスワードが短すぎます。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate passwords do not match</span></source>
|
<source>Certificate passwords do not match.</source>
|
||||||
<translation><span style=" color:#ff0000;">証明書のパスワードが一致しません</span></translation>
|
<translation>証明書のパスワードが一致しません。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate alias is missing</span></source>
|
<source>Certificate alias is missing.</source>
|
||||||
<translation><span style=" color:#ff0000;">証明書のエイリアスが見つかりません</span></translation>
|
<translation>証明書のエイリアスが見つかりません。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Invalid country code</span></source>
|
<source>Invalid country code.</source>
|
||||||
<translation><span style=" color:#ff0000;">無効な国コードです</span></translation>
|
<translation>無効な国コードです。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Keystore file name</source>
|
<source>Keystore file name</source>
|
||||||
|
|||||||
@@ -21525,28 +21525,28 @@ Sprawdź dokumentację SSH i zmienną środowiskową SSH_ASKPASS.</translation>
|
|||||||
<context>
|
<context>
|
||||||
<name>Android::Internal::AndroidCreateKeystoreCertificate</name>
|
<name>Android::Internal::AndroidCreateKeystoreCertificate</name>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Keystore password is too short</span></source>
|
<source>Keystore password is too short.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Keystore passwords do not match</span></source>
|
<source>Keystore passwords do not match.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate password is too short</span></source>
|
<source>Certificate password is too short.</source>
|
||||||
<translation><span style=" color:#ff0000;">Hasło certyfikatu jest zbyt krótkie</span></translation>
|
<translation>Hasło certyfikatu jest zbyt krótkie.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate passwords do not match</span></source>
|
<source>Certificate passwords do not match.</source>
|
||||||
<translation><span style=" color:#ff0000;">Hasła certyfikatu nie zgadzają się</span></translation>
|
<translation>Hasła certyfikatu nie zgadzają się.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate alias is missing</span></source>
|
<source>Certificate alias is missing.</source>
|
||||||
<translation><span style=" color:#ff0000;">Brak aliasu certyfikatu</span></translation>
|
<translation>Brak aliasu certyfikatu.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Invalid country code</span></source>
|
<source>Invalid country code.</source>
|
||||||
<translation><span style=" color:#ff0000;">Niepoprawny kod kraju</span></translation>
|
<translation>Niepoprawny kod kraju.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Keystore Filename</source>
|
<source>Keystore Filename</source>
|
||||||
|
|||||||
@@ -887,28 +887,28 @@ The files in the Android package source directory are copied to the build direct
|
|||||||
<context>
|
<context>
|
||||||
<name>Android::Internal::AndroidCreateKeystoreCertificate</name>
|
<name>Android::Internal::AndroidCreateKeystoreCertificate</name>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Keystore password is too short</span></source>
|
<source>Keystore password is too short.</source>
|
||||||
<translation><span style=" color:#ff0000;">Пароль связки ключей слишком короткий</span></translation>
|
<translation>Пароль связки ключей слишком короткий.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Keystore passwords do not match</span></source>
|
<source>Keystore passwords do not match.</source>
|
||||||
<translation><span style=" color:#ff0000;">Неверный пароль связки ключей</span></translation>
|
<translation>Неверный пароль связки ключей.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate password is too short</span></source>
|
<source>Certificate password is too short.</source>
|
||||||
<translation><span style=" color:#ff0000;">Пароль сертификата слишком короткий</span></translation>
|
<translation>Пароль сертификата слишком короткий.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate passwords do not match</span></source>
|
<source>Certificate passwords do not match.</source>
|
||||||
<translation><span style=" color:#ff0000;">Неверный пароль сертификата</span></translation>
|
<translation>Неверный пароль сертификата.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate alias is missing</span></source>
|
<source>Certificate alias is missing.</source>
|
||||||
<translation><span style=" color:#ff0000;">Отсутствует алиас сертификата</span></translation>
|
<translation>Отсутствует алиас сертификата.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Invalid country code</span></source>
|
<source>Invalid country code.</source>
|
||||||
<translation><span style=" color:#ff0000;">Неверный код страны</span></translation>
|
<translation>Неверный код страны.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Keystore Filename</source>
|
<source>Keystore Filename</source>
|
||||||
|
|||||||
@@ -32522,28 +32522,28 @@ Please install an SDK of at least API version %1.</source>
|
|||||||
<translation type="vanished"><span style=" color:#00ff00;">Пароль вдалий</span></translation>
|
<translation type="vanished"><span style=" color:#00ff00;">Пароль вдалий</span></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Keystore password is too short</span></source>
|
<source>Keystore password is too short.</source>
|
||||||
<translation><span style=" color:#ff0000;">Пароль сховища ключів закороткий</span></translation>
|
<translation>Пароль сховища ключів закороткий.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Keystore passwords do not match</span></source>
|
<source>Keystore passwords do not match.</source>
|
||||||
<translation><span style=" color:#ff0000;">Паролі сховища ключів не співпадають</span></translation>
|
<translation>Паролі сховища ключів не співпадають.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate password is too short</span></source>
|
<source>Certificate password is too short.</source>
|
||||||
<translation><span style=" color:#ff0000;">Пароль сертифіката закороткий</span></translation>
|
<translation>Пароль сертифіката закороткий.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate passwords do not match</span></source>
|
<source>Certificate passwords do not match.</source>
|
||||||
<translation><span style=" color:#ff0000;">Паролі сертифіката не співпадають</span></translation>
|
<translation>Паролі сертифіката не співпадають.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Certificate alias is missing</span></source>
|
<source>Certificate alias is missing.</source>
|
||||||
<translation><span style=" color:#ff0000;">Відсутній псевдонім сертифіката</span></translation>
|
<translation>Відсутній псевдонім сертифіката.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><span style=" color:#ff0000;">Invalid country code</span></source>
|
<source>Invalid country code.</source>
|
||||||
<translation><span style=" color:#ff0000;">Неправильний код країни</span></translation>
|
<translation>Неправильний код країни.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Keystore file name</source>
|
<source>Keystore file name</source>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../../cmake")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../../cmake")
|
||||||
|
|
||||||
@@ -60,17 +60,9 @@ add_qtc_library(qtcreatorcdbext
|
|||||||
|
|
||||||
qtc_library_enabled(_library_enabled qtcreatorcdbext)
|
qtc_library_enabled(_library_enabled qtcreatorcdbext)
|
||||||
if (_library_enabled)
|
if (_library_enabled)
|
||||||
# TODO: Remove when cmake_minimum_required greater than 3.12
|
find_package(Python3 3.8 COMPONENTS Development)
|
||||||
if (CMAKE_VERSION VERSION_GREATER 3.12)
|
|
||||||
find_package(Python3 3.8 COMPONENTS Development)
|
|
||||||
set(PYTHONLIBS_FOUND ${Python3_Development_FOUND})
|
|
||||||
set(PYTHON_LIBRARIES ${Python3_LIBRARIES})
|
|
||||||
set(PYTHON_INCLUDE_DIR ${Python3_INCLUDE_DIRS})
|
|
||||||
else()
|
|
||||||
find_package(PythonLibs 3.8)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT ${PYTHONLIBS_FOUND})
|
if (NOT ${Python3_Development_FOUND})
|
||||||
message(WARNING "PythonLibs (at least version 3.8) not found. qtcreatorcdbext will be built without Python support.")
|
message(WARNING "PythonLibs (at least version 3.8) not found. qtcreatorcdbext will be built without Python support.")
|
||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
@@ -80,7 +72,7 @@ if (_library_enabled)
|
|||||||
set(PythonRegex "^(.*)/(.*)/(python([0-9]+)_d)${CMAKE_IMPORT_LIBRARY_SUFFIX}$")
|
set(PythonRegex "^(.*)/(.*)/(python([0-9]+)_d)${CMAKE_IMPORT_LIBRARY_SUFFIX}$")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
foreach(lib IN LISTS PYTHON_LIBRARIES)
|
foreach(lib IN LISTS Python3_LIBRARIES)
|
||||||
if (lib MATCHES ${PythonRegex})
|
if (lib MATCHES ${PythonRegex})
|
||||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
set(PythonZipFileName "python${CMAKE_MATCH_4}_d.zip")
|
set(PythonZipFileName "python${CMAKE_MATCH_4}_d.zip")
|
||||||
@@ -105,8 +97,8 @@ if (_library_enabled)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
extend_qtc_library(qtcreatorcdbext
|
extend_qtc_library(qtcreatorcdbext
|
||||||
DEPENDS "${PYTHON_LIBRARIES}"
|
DEPENDS "${Python3_LIBRARIES}"
|
||||||
INCLUDES "${PYTHON_INCLUDE_DIR}"
|
INCLUDES "${Python3_INCLUDE_DIRS}"
|
||||||
DEFINES WITH_PYTHON=1
|
DEFINES WITH_PYTHON=1
|
||||||
SOURCES
|
SOURCES
|
||||||
pycdbextmodule.cpp pycdbextmodule.h
|
pycdbextmodule.cpp pycdbextmodule.h
|
||||||
|
|||||||
@@ -126,8 +126,8 @@ public:
|
|||||||
void setAbortOnMetaChars(bool abort);
|
void setAbortOnMetaChars(bool abort);
|
||||||
|
|
||||||
void start();
|
void start();
|
||||||
void terminate();
|
virtual void terminate();
|
||||||
void interrupt();
|
virtual void interrupt();
|
||||||
|
|
||||||
static bool startDetached(const CommandLine &cmd, const FilePath &workingDirectory = {},
|
static bool startDetached(const CommandLine &cmd, const FilePath &workingDirectory = {},
|
||||||
qint64 *pid = nullptr);
|
qint64 *pid = nullptr);
|
||||||
@@ -175,7 +175,7 @@ public:
|
|||||||
|
|
||||||
QByteArray rawStdOut() const;
|
QByteArray rawStdOut() const;
|
||||||
|
|
||||||
int exitCode() const;
|
virtual int exitCode() const;
|
||||||
|
|
||||||
QString exitMessage();
|
QString exitMessage();
|
||||||
|
|
||||||
@@ -195,10 +195,10 @@ public:
|
|||||||
void setProcessChannelMode(QProcess::ProcessChannelMode mode);
|
void setProcessChannelMode(QProcess::ProcessChannelMode mode);
|
||||||
|
|
||||||
QProcess::ProcessError error() const;
|
QProcess::ProcessError error() const;
|
||||||
QProcess::ProcessState state() const;
|
virtual QProcess::ProcessState state() const;
|
||||||
bool isRunning() const; // Short for state() == QProcess::Running.
|
bool isRunning() const; // Short for state() == QProcess::Running.
|
||||||
|
|
||||||
QString errorString() const;
|
virtual QString errorString() const;
|
||||||
void setErrorString(const QString &str);
|
void setErrorString(const QString &str);
|
||||||
|
|
||||||
qint64 processId() const;
|
qint64 processId() const;
|
||||||
@@ -207,14 +207,14 @@ public:
|
|||||||
bool waitForReadyRead(int msecs = 30000);
|
bool waitForReadyRead(int msecs = 30000);
|
||||||
bool waitForFinished(int msecs = 30000);
|
bool waitForFinished(int msecs = 30000);
|
||||||
|
|
||||||
QByteArray readAllStandardOutput();
|
virtual QByteArray readAllStandardOutput();
|
||||||
QByteArray readAllStandardError();
|
virtual QByteArray readAllStandardError();
|
||||||
|
|
||||||
QProcess::ExitStatus exitStatus() const;
|
virtual QProcess::ExitStatus exitStatus() const;
|
||||||
|
|
||||||
void kill();
|
virtual void kill();
|
||||||
|
|
||||||
qint64 write(const QByteArray &input);
|
virtual qint64 write(const QByteArray &input);
|
||||||
void close();
|
void close();
|
||||||
|
|
||||||
void setStandardInputFile(const QString &inputFile);
|
void setStandardInputFile(const QString &inputFile);
|
||||||
|
|||||||
@@ -54,3 +54,9 @@ add_qtc_plugin(Android
|
|||||||
splashscreencontainerwidget.cpp splashscreencontainerwidget.h
|
splashscreencontainerwidget.cpp splashscreencontainerwidget.h
|
||||||
splashscreenwidget.cpp splashscreenwidget.h
|
splashscreenwidget.cpp splashscreenwidget.h
|
||||||
)
|
)
|
||||||
|
|
||||||
|
extend_qtc_plugin(Android
|
||||||
|
CONDITION WITH_TESTS
|
||||||
|
SOURCES
|
||||||
|
android_tst.qrc
|
||||||
|
)
|
||||||
|
|||||||
@@ -120,5 +120,13 @@ Project {
|
|||||||
"splashscreenwidget.cpp",
|
"splashscreenwidget.cpp",
|
||||||
"splashscreenwidget.h"
|
"splashscreenwidget.h"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
Group {
|
||||||
|
name: "Unit tests"
|
||||||
|
condition: qtc.testsEnabled
|
||||||
|
files: [
|
||||||
|
"android_tst.qrc",
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||