Merge remote-tracking branch 'origin/7.0'

Change-Id: Ic646cdb2a14e5a2638ff88a922067dcf378dde5b
This commit is contained in:
Eike Ziller
2022-02-02 10:47:20 +01:00
191 changed files with 2606 additions and 1601 deletions

View File

@@ -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}

View File

@@ -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)

View File

@@ -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}

View File

@@ -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")

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -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.

View File

@@ -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.

View File

@@ -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
*/

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -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}.

View File

@@ -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

View File

@@ -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.

View File

@@ -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

View File

@@ -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.

View File

@@ -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"
} }
} }
] ]

View File

@@ -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}
}
##^##*/

View File

@@ -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}
} }
##^##*/ ##^##*/

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

View File

@@ -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"
}
}

View File

@@ -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()
}
}

View File

@@ -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

View File

@@ -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 {
}
}

View File

@@ -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
} }

View File

@@ -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

View File

@@ -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");
} }

View File

@@ -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)

View 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();
}

View 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
}

View File

@@ -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}
} }
##^##*/ ##^##*/

View File

@@ -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
}
}

View File

@@ -1,2 +0,0 @@
singleton Constants 1.0 Constants.qml
EventListSimulator 1.0 EventListSimulator.qml

View File

@@ -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 {
}
}

View File

@@ -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"
}

View File

@@ -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

View 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
}

View File

@@ -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}
} }
##^##*/ ##^##*/

View File

@@ -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
}
}

View File

@@ -1,2 +0,0 @@
singleton Constants 1.0 Constants.qml
EventListSimulator 1.0 EventListSimulator.qml

View File

@@ -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 {
}
}

View File

@@ -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"
}

View File

@@ -1,2 +0,0 @@
[Controls]
Style=Default

View 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
}

View File

@@ -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}
} }
##^##*/ ##^##*/

View File

@@ -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
}
}

View File

@@ -1,2 +0,0 @@
singleton Constants 1.0 Constants.qml
EventListSimulator 1.0 EventListSimulator.qml

View File

@@ -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"
}

View File

@@ -1,2 +0,0 @@
[Controls]
Style=Default

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -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

View File

@@ -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"
}, },
{ {

View File

@@ -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)

View File

@@ -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 \

View File

@@ -47,6 +47,9 @@ public:
OrientationToggle, OrientationToggle,
EditLightToggle, EditLightToggle,
ShowGrid, ShowGrid,
ShowSelectionBox,
ShowIconGizmo,
ShowCameraFrustum,
Edit3DParticleModeToggle, Edit3DParticleModeToggle,
ParticlesPlay, ParticlesPlay,
ParticlesRestart, ParticlesRestart,

View File

@@ -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 {

View File

@@ -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: {

View File

@@ -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);
} }

View File

@@ -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

View File

@@ -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: {

View File

@@ -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 {

View File

@@ -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

View File

@@ -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

View File

@@ -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();

View File

@@ -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
}; };
} }

View File

@@ -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();
} }

View File

@@ -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>

View File

@@ -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();

View File

@@ -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>

View File

@@ -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);

View File

@@ -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
}
} }

View File

@@ -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
} }

View File

@@ -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"
}
} }

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View 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"]
}
}

View File

@@ -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

View File

@@ -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 {}

View File

@@ -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

View File

@@ -54911,28 +54911,28 @@ Nainstalujte, prosím, jedno SDK s API verze alespoň %1.</translation>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Heslo je OK&lt;/span&gt;</translation> <translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Heslo je OK&lt;/span&gt;</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore password is too short&lt;/span&gt;</source> <source>Keystore password is too short.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Heslo k úložišti klíče je příliš krátké&lt;/span&gt;</translation> <translation>Heslo k úložišti klíče je příliš krátké.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore passwords do not match&lt;/span&gt;</source> <source>Keystore passwords do not match.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Hesla k úložišti klíče neodpovídají&lt;/span&gt;</translation> <translation>Hesla k úložišti klíče neodpovídají.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate password is too short&lt;/span&gt;</source> <source>Certificate password is too short.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Heslo k certifikátu je příliš krátké&lt;/span&gt;</translation> <translation>Heslo k certifikátu je příliš krátké.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate passwords do not match&lt;/span&gt;</source> <source>Certificate passwords do not match.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Hesla k certifikátům neodpovídají&lt;/span&gt;</translation> <translation>Hesla k certifikátům neodpovídají.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate alias is missing&lt;/span&gt;</source> <source>Certificate alias is missing.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Alias certifikátu chybí&lt;/span&gt;</translation> <translation>Alias certifikátu chybí.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Invalid country code&lt;/span&gt;</source> <source>Invalid country code.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Neplatné číslo země (mezinárodní předvolba)&lt;/span&gt;</translation> <translation>Neplatné číslo země (mezinárodní předvolba).</translation>
</message> </message>
<message> <message>
<source>Keystore file name</source> <source>Keystore file name</source>

View File

@@ -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>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore password is too short&lt;/span&gt;</source> <source>Keystore password is too short.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore adgangskode er for kort&lt;/span&gt;</translation> <translation>Keystore adgangskode er for kort.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore passwords do not match&lt;/span&gt;</source> <source>Keystore passwords do not match.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore adgangskoder matcher ikke&lt;/span&gt;</translation> <translation>Keystore adgangskoder matcher ikke.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate password is too short&lt;/span&gt;</source> <source>Certificate password is too short.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certifikat adgangskode er for kort&lt;/span&gt;</translation> <translation>Certifikat adgangskode er for kort.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate passwords do not match&lt;/span&gt;</source> <source>Certificate passwords do not match.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certifikat adgangskoder matcher ikke&lt;/span&gt;</translation> <translation>Certifikat adgangskoder matcher ikke.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate alias is missing&lt;/span&gt;</source> <source>Certificate alias is missing.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certifikat-alias mangler&lt;/span&gt;</translation> <translation>Certifikat-alias mangler.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Invalid country code&lt;/span&gt;</source> <source>Invalid country code.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Ugyldig sprogkode&lt;/span&gt;</translation> <translation>Ugyldig sprogkode.</translation>
</message> </message>
<message> <message>
<source>Keystore Filename</source> <source>Keystore Filename</source>

View File

@@ -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>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore password is too short&lt;/span&gt;</source> <source>Keystore password is too short.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Das Keystore-Passwort ist zu kurz&lt;/span&gt;</translation> <translation>Das Keystore-Passwort ist zu kurz.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore passwords do not match&lt;/span&gt;</source> <source>Keystore passwords do not match.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Die Keystore-Passwörter stimmen nicht überein&lt;/span&gt;</translation> <translation>Die Keystore-Passwörter stimmen nicht überein.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate password is too short&lt;/span&gt;</source> <source>Certificate password is too short.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Das Passwort des Zertifikats ist zu kurz&lt;/span&gt;</translation> <translation>Das Passwort des Zertifikats ist zu kurz.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate passwords do not match&lt;/span&gt;</source> <source>Certificate passwords do not match.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Die Passwörter des Zertifikats stimmen nicht überein&lt;/span&gt;</translation> <translation>Die Passwörter des Zertifikats stimmen nicht überein.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate alias is missing&lt;/span&gt;</source> <source>Certificate alias is missing.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Der Alias des Zertifikats fehlt&lt;/span&gt;</translation> <translation>Der Alias des Zertifikats fehlt.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Invalid country code&lt;/span&gt;</source> <source>Invalid country code.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Ungültiger Ländercode&lt;/span&gt;</translation> <translation>Ungültiger Ländercode.</translation>
</message> </message>
<message> <message>
<source>Keystore Filename</source> <source>Keystore Filename</source>

View File

@@ -60828,28 +60828,28 @@ Veuillez installer un SDK supérieur à la version %1.</translation>
<translation>&lt;span style=&quot; color:#00ff00;&quot;&gt;Mot de passe correct&lt;/span&gt;</translation> <translation>&lt;span style=&quot; color:#00ff00;&quot;&gt;Mot de passe correct&lt;/span&gt;</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore password is too short&lt;/span&gt;</source> <source>Keystore password is too short.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Le mot de passe du trousseau de clés est trop court&lt;/span&gt;</translation> <translation>Le mot de passe du trousseau de clés est trop court.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore passwords do not match&lt;/span&gt;</source> <source>Keystore passwords do not match.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Les mots de passe du trousseau de clés ne correspondent pas&lt;/span&gt;</translation> <translation>Les mots de passe du trousseau de clés ne correspondent pas.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate password is too short&lt;/span&gt;</source> <source>Certificate password is too short.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Le mot de passe du certificat est manquant&lt;/span&gt;</translation> <translation>Le mot de passe du certificat est manquant.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate passwords do not match&lt;/span&gt;</source> <source>Certificate passwords do not match.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Les mots de passe du certificat ne correspondent pas&lt;/span&gt;</translation> <translation>Les mots de passe du certificat ne correspondent pas.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate alias is missing&lt;/span&gt;</source> <source>Certificate alias is missing.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;L&apos;alias du certificat est manquant&lt;/span&gt;</translation> <translation>L&apos;alias du certificat est manquant.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Invalid country code&lt;/span&gt;</source> <source>Invalid country code.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Le code de pays est invalide&lt;/span&gt;</translation> <translation>Le code de pays est invalide.</translation>
</message> </message>
<message> <message>
<source>Keystore file name</source> <source>Keystore file name</source>

View File

@@ -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>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore password is too short&lt;/span&gt;</source> <source>Keystore password is too short.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore passwords do not match&lt;/span&gt;</source> <source>Keystore passwords do not match.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate password is too short&lt;/span&gt;</source> <source>Certificate password is too short.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate passwords do not match&lt;/span&gt;</source> <source>Certificate passwords do not match.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate alias is missing&lt;/span&gt;</source> <source>Certificate alias is missing.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Invalid country code&lt;/span&gt;</source> <source>Invalid country code.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>

View File

@@ -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>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore password is too short&lt;/span&gt;</source> <source>Keystore password is too short.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;&lt;/span&gt;</translation> <translation></translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore passwords do not match&lt;/span&gt;</source> <source>Keystore passwords do not match.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;&lt;/span&gt;</translation> <translation></translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate password is too short&lt;/span&gt;</source> <source>Certificate password is too short.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;&lt;/span&gt;</translation> <translation></translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate passwords do not match&lt;/span&gt;</source> <source>Certificate passwords do not match.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;&lt;/span&gt;</translation> <translation></translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate alias is missing&lt;/span&gt;</source> <source>Certificate alias is missing.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;&lt;/span&gt;</translation> <translation></translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Invalid country code&lt;/span&gt;</source> <source>Invalid country code.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;&lt;/span&gt;</translation> <translation></translation>
</message> </message>
<message> <message>
<source>Keystore file name</source> <source>Keystore file name</source>

View File

@@ -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>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore password is too short&lt;/span&gt;</source> <source>Keystore password is too short.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore passwords do not match&lt;/span&gt;</source> <source>Keystore passwords do not match.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate password is too short&lt;/span&gt;</source> <source>Certificate password is too short.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Hasło certyfikatu jest zbyt krótkie&lt;/span&gt;</translation> <translation>Hasło certyfikatu jest zbyt krótkie.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate passwords do not match&lt;/span&gt;</source> <source>Certificate passwords do not match.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Hasła certyfikatu nie zgadzają się&lt;/span&gt;</translation> <translation>Hasła certyfikatu nie zgadzają się.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate alias is missing&lt;/span&gt;</source> <source>Certificate alias is missing.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Brak aliasu certyfikatu&lt;/span&gt;</translation> <translation>Brak aliasu certyfikatu.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Invalid country code&lt;/span&gt;</source> <source>Invalid country code.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Niepoprawny kod kraju&lt;/span&gt;</translation> <translation>Niepoprawny kod kraju.</translation>
</message> </message>
<message> <message>
<source>Keystore Filename</source> <source>Keystore Filename</source>

View File

@@ -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>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore password is too short&lt;/span&gt;</source> <source>Keystore password is too short.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Пароль связки ключей слишком короткий&lt;/span&gt;</translation> <translation>Пароль связки ключей слишком короткий.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore passwords do not match&lt;/span&gt;</source> <source>Keystore passwords do not match.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Неверный пароль связки ключей&lt;/span&gt;</translation> <translation>Неверный пароль связки ключей.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate password is too short&lt;/span&gt;</source> <source>Certificate password is too short.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Пароль сертификата слишком короткий&lt;/span&gt;</translation> <translation>Пароль сертификата слишком короткий.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate passwords do not match&lt;/span&gt;</source> <source>Certificate passwords do not match.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Неверный пароль сертификата&lt;/span&gt;</translation> <translation>Неверный пароль сертификата.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate alias is missing&lt;/span&gt;</source> <source>Certificate alias is missing.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Отсутствует алиас сертификата&lt;/span&gt;</translation> <translation>Отсутствует алиас сертификата.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Invalid country code&lt;/span&gt;</source> <source>Invalid country code.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Неверный код страны&lt;/span&gt;</translation> <translation>Неверный код страны.</translation>
</message> </message>
<message> <message>
<source>Keystore Filename</source> <source>Keystore Filename</source>

View File

@@ -32522,28 +32522,28 @@ Please install an SDK of at least API version %1.</source>
<translation type="vanished">&lt;span style=&quot; color:#00ff00;&quot;&gt;Пароль вдалий&lt;/span&gt;</translation> <translation type="vanished">&lt;span style=&quot; color:#00ff00;&quot;&gt;Пароль вдалий&lt;/span&gt;</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore password is too short&lt;/span&gt;</source> <source>Keystore password is too short.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Пароль сховища ключів закороткий&lt;/span&gt;</translation> <translation>Пароль сховища ключів закороткий.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Keystore passwords do not match&lt;/span&gt;</source> <source>Keystore passwords do not match.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Паролі сховища ключів не співпадають&lt;/span&gt;</translation> <translation>Паролі сховища ключів не співпадають.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate password is too short&lt;/span&gt;</source> <source>Certificate password is too short.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Пароль сертифіката закороткий&lt;/span&gt;</translation> <translation>Пароль сертифіката закороткий.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate passwords do not match&lt;/span&gt;</source> <source>Certificate passwords do not match.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Паролі сертифіката не співпадають&lt;/span&gt;</translation> <translation>Паролі сертифіката не співпадають.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Certificate alias is missing&lt;/span&gt;</source> <source>Certificate alias is missing.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Відсутній псевдонім сертифіката&lt;/span&gt;</translation> <translation>Відсутній псевдонім сертифіката.</translation>
</message> </message>
<message> <message>
<source>&lt;span style=&quot; color:#ff0000;&quot;&gt;Invalid country code&lt;/span&gt;</source> <source>Invalid country code.</source>
<translation>&lt;span style=&quot; color:#ff0000;&quot;&gt;Неправильний код країни&lt;/span&gt;</translation> <translation>Неправильний код країни.</translation>
</message> </message>
<message> <message>
<source>Keystore file name</source> <source>Keystore file name</source>

View File

@@ -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

View File

@@ -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);

View File

@@ -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
)

View File

@@ -120,5 +120,13 @@ Project {
"splashscreenwidget.cpp", "splashscreenwidget.cpp",
"splashscreenwidget.h" "splashscreenwidget.h"
] ]
Group {
name: "Unit tests"
condition: qtc.testsEnabled
files: [
"android_tst.qrc",
]
}
} }
} }

Some files were not shown because too many files have changed in this diff Show More