Merge remote-tracking branch 'origin/master' into 4.12

Change-Id: I091e191d1a9398cacd0ff0e063f89ffbe308189f
This commit is contained in:
Eike Ziller
2020-02-17 10:28:08 +01:00
38 changed files with 956 additions and 314 deletions

View File

@@ -75,7 +75,7 @@
To use \e {Bluebubble.svg} in your project, To use \e {Bluebubble.svg} in your project,
copy it to the project directory (same subdirectory as the QML file). copy it to the project directory (same subdirectory as the QML file).
The image appears in \uicontrol Resources. You can also use any other The image appears in \uicontrol Assets. You can also use any other
image or a QML type, instead. image or a QML type, instead.
To create the UI in the Design mode: To create the UI in the Design mode:
@@ -106,7 +106,7 @@
\endlist \endlist
\li In \uicontrol Library > \uicontrol Resources, select Bluebubble.svg \li In \uicontrol Library > \uicontrol Assets, select Bluebubble.svg
and drag and drop it to \e mainWindow in the navigator. and drag and drop it to \e mainWindow in the navigator.
\li In the \uicontrol Properties pane, \uicontrol Id field, enter \li In the \uicontrol Properties pane, \uicontrol Id field, enter
@@ -257,15 +257,15 @@
After adding the dependencies, select \uicontrol Build > \uicontrol {Run qmake} to apply After adding the dependencies, select \uicontrol Build > \uicontrol {Run qmake} to apply
the changes to the Makefile of the project. the changes to the Makefile of the project.
\section1 Adding Resources \section1 Adding Assets
You need to add the Bluebubble.svg image file to the application resources You need to add the Bluebubble.svg image file to the application assets
for deployment to mobile devices: for deployment to mobile devices:
\list 1 \list 1
\li In the \uicontrol Projects view, double-click the qml.qrc file to open it \li In the \uicontrol Projects view, double-click the qml.qrc file to open it
in the resource editor. in the assets editor.
\li Select \uicontrol Add to add Bluebubble.svg. \li Select \uicontrol Add to add Bluebubble.svg.

View File

@@ -62,7 +62,7 @@
To use the \e qt-logo.png image in your application, you must copy it from To use the \e qt-logo.png image in your application, you must copy it from
the Qt examples directory to the project directory (same subdirectory as the Qt examples directory to the project directory (same subdirectory as
the QML file). The image appears in \uicontrol Resources. You can also use the QML file). The image appears in \uicontrol Assets. You can also use
any other image or a QML type, instead. any other image or a QML type, instead.
\list 1 \list 1
@@ -78,7 +78,7 @@
\li Select \uicontrol Page in the navigator, and enter \e page in the \li Select \uicontrol Page in the navigator, and enter \e page in the
\uicontrol Id field. \uicontrol Id field.
\li In \uicontrol Library > \uicontrol Resources, select qt-logo.png and \li In \uicontrol Library > \uicontrol Assets, select qt-logo.png and
drag and drop it to the \e page in the navigator. drag and drop it to the \e page in the navigator.
\image qmldesigner-tutorial-user-icon.png "Image properties" \image qmldesigner-tutorial-user-icon.png "Image properties"

View File

@@ -48,7 +48,7 @@
applications. applications.
The \uicontrol {Library} pane lists the available QML types, UI The \uicontrol {Library} pane lists the available QML types, UI
components, resources, and imports. components, assets, and imports.
\image qmldesigner-qml-components.png "QML Components" \image qmldesigner-qml-components.png "QML Components"
@@ -66,7 +66,7 @@
the import statements automatically. You can remove import statements in the import statements automatically. You can remove import statements in
\uicontrol Imports \uicontrol Imports
\uicontrol {Resources} displays the images and other files that you copy \uicontrol {Assets} displays the images and other files that you copy
to the project folder (to the same subfolder as the QML files). to the project folder (to the same subfolder as the QML files).
\section1 Adding Components to Designs \section1 Adding Components to Designs

View File

@@ -42,8 +42,8 @@
To add fonts: To add fonts:
\list 1 \list 1
\li Select \uicontrol Library > \uicontrol Resources > \li Select \uicontrol Library > \uicontrol Assets >
\uicontrol {Add New Resources}. \uicontrol {Add New Assets}.
\li Browse to the folder that contains the font files and select them. \li Browse to the folder that contains the font files and select them.
\li Enter the name of the directory to save the fonts. By default, \QDS \li Enter the name of the directory to save the fonts. By default, \QDS
suggests the project directory. suggests the project directory.

View File

@@ -77,8 +77,8 @@
instructions of the wizard to create an empty project. instructions of the wizard to create an empty project.
\li In \uicontrol Projects, double-click \e Screen01.ui.qml to move to \li In \uicontrol Projects, double-click \e Screen01.ui.qml to move to
the Design mode. the Design mode.
\li Select \uicontrol Library > \uicontrol Resources > \li Select \uicontrol Library > \uicontrol Assets >
\uicontrol {Add New Resources}. \uicontrol {Add New Assets}.
\li Select the folder where you exported the assets. \li Select the folder where you exported the assets.
\li Select \uicontrol {Exported Assets (*.metadata)} in the dropdown \li Select \uicontrol {Exported Assets (*.metadata)} in the dropdown
menu to filter \e .metadata files. menu to filter \e .metadata files.
@@ -106,7 +106,7 @@
might take a little while for complex projects. might take a little while for complex projects.
\endlist \endlist
The imported assets are displayed in the \uicontrol Resources tab in the The imported assets are displayed in the \uicontrol Assets tab in the
\uicontrol Library as PNG images. The components that you specified in \uicontrol Library as PNG images. The components that you specified in
the design tool are displayed in the \uicontrol {My QML Components} tab, the design tool are displayed in the \uicontrol {My QML Components} tab,
as well as in the \uicontrol Project tab of the \uicontrol Navigator as as well as in the \uicontrol Project tab of the \uicontrol Navigator as
@@ -161,8 +161,8 @@
To import 3D assets to \QDS projects: To import 3D assets to \QDS projects:
\list 1 \list 1
\li In the Design mode, select \uicontrol Library > \uicontrol Resources \li In the Design mode, select \uicontrol Library > \uicontrol Assets
> \uicontrol {Add New Resources}. > \uicontrol {Add New Assets}.
\li Select \uicontrol {3D Assets} in the dropdown menu to filter 3D \li Select \uicontrol {3D Assets} in the dropdown menu to filter 3D
graphics files. graphics files.
\li Select a file to import, and then select \uicontrol Open. \li Select a file to import, and then select \uicontrol Open.

View File

@@ -36,7 +36,7 @@
\list \list
\li Group files together \li Group files together
\li Include forms and resource files \li Include forms and assets files
\li Specify settings for previewing UIs \li Specify settings for previewing UIs
\endlist \endlist

View File

@@ -32,7 +32,7 @@
\title Editing 3D Assets in Design Mode \title Editing 3D Assets in Design Mode
\QDS opens QML files that contain 3D scenes in the Design mode and the \QDS opens QML files that contain 3D scenes in the Design mode and the
scenes in the 3D editor. You can add imported 3D assets as resources scenes in the 3D editor. You can add imported 3D assets
to projects and edit them to create scenes and states, as well as the to projects and edit them to create scenes and states, as well as the
transitions between them. transitions between them.
@@ -55,7 +55,7 @@
\li \uicontrol {Library} (3) displays the building blocks that you \li \uicontrol {Library} (3) displays the building blocks that you
can use to create scenes: predefined Qt Quick 3D Components, can use to create scenes: predefined Qt Quick 3D Components,
Qt Quick Controls, your own 3D assets that you import to the Qt Quick Controls, your own 3D assets that you import to the
project, and other resources. For more information, see project, and other assets. For more information, see
\l {Adding 3D Views}. \l {Adding 3D Views}.
\li \uicontrol {Navigator} (4) displays the items in the current QML \li \uicontrol {Navigator} (4) displays the items in the current QML
file as a tree structure. For more information, see file as a tree structure. For more information, see

View File

@@ -48,8 +48,8 @@
\li \l {Editing 3D Assets in Design Mode} \li \l {Editing 3D Assets in Design Mode}
\QDS opens QML files that contain 3D scenes in the Design mode and \QDS opens QML files that contain 3D scenes in the Design mode and
the scenes in the 3D editor. You can add imported 3D assets as the scenes in the 3D editor. You can add imported 3D assets
resources to projects as 3D components. to projects as 3D components.
\li \l {Working in the 3D Editor} \li \l {Working in the 3D Editor}
You can select 3D components in the 3D editor to move, rotate, and You can select 3D components in the 3D editor to move, rotate, and

View File

@@ -0,0 +1,104 @@
/****************************************************************************
**
** Copyright (C) 2020 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.
**
****************************************************************************/
import HelperWidgets 2.0
import QtQuick 2.1
import QtQuick.Layouts 1.1
Section {
id: section
caption: qsTr("Animation")
anchors.left: parent.left
anchors.right: parent.right
property bool showDuration: true
SectionLayout {
Label {
text: qsTr("Running")
tooltip: qsTr("Sets whether the animation should run to completion when it is stopped.")
}
CheckBox {
text: backendValues.running.valueToString
backendValue: backendValues.running
}
Label {
text: qsTr("Paused")
tooltip: qsTr("Sets whether the animation is currently paused.")
}
CheckBox {
text: backendValues.paused.valueToString
backendValue: backendValues.paused
}
Label {
text: qsTr("Loops")
tooltip: qsTr("Sets the number of times the animation should play.")
}
SecondColumnLayout {
SpinBox {
maximumValue: 9999999
minimumValue: -1
backendValue: backendValues.loops
Layout.fillWidth: true
Layout.maximumWidth: 100
}
ExpandingSpacer {
}
}
Label {
visible: section.showDuration
text: qsTr("Duration")
tooltip: qsTr("Sets the duration of the animation, in milliseconds.")
}
SecondColumnLayout {
visible: section.showDuration
SpinBox {
maximumValue: 9999999
minimumValue: -9999999
backendValue: backendValues.duration
Layout.fillWidth: true
Layout.maximumWidth: 100
}
ExpandingSpacer {
}
}
Label {
text: qsTr("Always Run To End")
tooltip: qsTr("Sets whether the animation should run to completion when it is stopped.")
}
CheckBox {
text: backendValues.alwaysRunToEnd.valueToString
backendValue: backendValues.alwaysRunToEnd
}
}
}

View File

@@ -0,0 +1,70 @@
/****************************************************************************
**
** Copyright (C) 2020 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.
**
****************************************************************************/
import HelperWidgets 2.0
import QtQuick 2.1
import QtQuick.Layouts 1.1
Section {
id: section
caption: qsTr("Animation Targets")
anchors.left: parent.left
anchors.right: parent.right
SectionLayout {
Label {
text: qsTr("Target")
tooltip: qsTr("Sets the target to animate the properties of.")
}
SecondColumnLayout {
ItemFilterComboBox {
typeFilter: "QtQuick.QtObject"
validator: RegExpValidator { regExp: /(^$|^[a-z_]\w*)/ }
backendValue: backendValues.target
Layout.fillWidth: true
}
ExpandingSpacer {
}
}
Label {
text: qsTr("Property")
tooltip: qsTr("Sets the property to animate.")
}
LineEdit {
backendValue: backendValues.property
Layout.fillWidth: true
}
Label {
text: qsTr("Properties")
tooltip: qsTr("Sets the properties to animate.")
}
LineEdit {
backendValue: backendValues.properties
Layout.fillWidth: true
}
}
}

View File

@@ -0,0 +1,62 @@
/****************************************************************************
**
** Copyright (C) 2020 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.
**
****************************************************************************/
import HelperWidgets 2.0
import QtQuick 2.1
import QtQuick.Layouts 1.1
Column {
anchors.left: parent.left
anchors.right: parent.right
Section {
anchors.left: parent.left
anchors.right: parent.right
caption: qsTr("To Color")
ColorEditor {
backendValue: backendValues.to
supportGradient: false
}
}
Section {
anchors.left: parent.left
anchors.right: parent.right
caption: qsTr("From Color")
ColorEditor {
backendValue: backendValues.from
supportGradient: false
}
}
AnimationTargetSection {
}
AnimationSection {
}
}

View File

@@ -0,0 +1,84 @@
/****************************************************************************
**
** Copyright (C) 2020 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.
**
****************************************************************************/
import HelperWidgets 2.0
import QtQuick 2.1
import QtQuick.Layouts 1.1
Column {
anchors.left: parent.left
anchors.right: parent.right
Section {
caption: qsTr("Number Animation")
anchors.left: parent.left
anchors.right: parent.right
SectionLayout {
Label {
text: qsTr("From")
tooltip: qsTr("Sets the starting value for the animation.")
}
SecondColumnLayout {
SpinBox {
maximumValue: 9999999
minimumValue: -1
backendValue: backendValues.from
Layout.fillWidth: true
Layout.maximumWidth: 100
}
ExpandingSpacer {
}
}
Label {
text: qsTr("To")
tooltip: qsTr("Sets the end value for the animation.")
}
SecondColumnLayout {
SpinBox {
maximumValue: 9999999
minimumValue: -1
backendValue: backendValues.to
Layout.fillWidth: true
Layout.maximumWidth: 100
}
ExpandingSpacer {
}
}
}
}
AnimationTargetSection {
}
AnimationSection {
}
}

View File

@@ -0,0 +1,37 @@
/****************************************************************************
**
** Copyright (C) 2016 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.
**
****************************************************************************/
import HelperWidgets 2.0
import QtQuick 2.1
import QtQuick.Layouts 1.1
Column {
anchors.left: parent.left
anchors.right: parent.right
AnimationSection {
showDuration: false
}
}

View File

@@ -0,0 +1,36 @@
/****************************************************************************
**
** Copyright (C) 2020 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.
**
****************************************************************************/
import HelperWidgets 2.0
import QtQuick 2.1
import QtQuick.Layouts 1.1
Column {
anchors.left: parent.left
anchors.right: parent.right
AnimationSection {
}
}

View File

@@ -0,0 +1,60 @@
/****************************************************************************
**
** Copyright (C) 2020 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.
**
****************************************************************************/
import HelperWidgets 2.0
import QtQuick 2.1
import QtQuick.Layouts 1.1
Column {
anchors.left: parent.left
anchors.right: parent.right
Section {
id: section
caption: qsTr("Property Action")
anchors.left: parent.left
anchors.right: parent.right
SectionLayout {
Label {
text: qsTr("Value")
tooltip: qsTr("Sets the value of the property.")
}
LineEdit {
backendValue: backendValues.value
Layout.fillWidth: true
}
}
}
AnimationTargetSection {
}
AnimationSection {
showDuration: false
}
}

View File

@@ -0,0 +1,40 @@
/****************************************************************************
**
** Copyright (C) 2016 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.
**
****************************************************************************/
import HelperWidgets 2.0
import QtQuick 2.1
import QtQuick.Layouts 1.1
Column {
anchors.left: parent.left
anchors.right: parent.right
AnimationTargetSection {
}
AnimationSection {
}
}

View File

@@ -0,0 +1,37 @@
/****************************************************************************
**
** Copyright (C) 2020 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.
**
****************************************************************************/
import HelperWidgets 2.0
import QtQuick 2.1
import QtQuick.Layouts 1.1
Column {
anchors.left: parent.left
anchors.right: parent.right
AnimationSection {
showDuration: false
}
}

View File

@@ -0,0 +1,37 @@
/****************************************************************************
**
** Copyright (C) 2020 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.
**
****************************************************************************/
import HelperWidgets 2.0
import QtQuick 2.1
import QtQuick.Layouts 1.1
Column {
anchors.left: parent.left
anchors.right: parent.right
AnimationSection {
showDuration: false
}
}

View File

@@ -45,7 +45,7 @@ namespace Internal {
class ActionHandler::ActionHandlerPrivate { class ActionHandler::ActionHandlerPrivate {
public: public:
Core::Context context; Core::Context context{Constants::MODEL_EDITOR_ID};
QAction *undoAction = nullptr; QAction *undoAction = nullptr;
QAction *redoAction = nullptr; QAction *redoAction = nullptr;
QAction *cutAction = nullptr; QAction *cutAction = nullptr;
@@ -60,11 +60,9 @@ public:
QAction *exportSelectedElementsAction = nullptr; QAction *exportSelectedElementsAction = nullptr;
}; };
ActionHandler::ActionHandler(const Core::Context &context, QObject *parent) ActionHandler::ActionHandler()
: QObject(parent), : d(new ActionHandlerPrivate)
d(new ActionHandlerPrivate)
{ {
d->context = context;
} }
ActionHandler::~ActionHandler() ActionHandler::~ActionHandler()

View File

@@ -52,7 +52,7 @@ class ActionHandler :
class ActionHandlerPrivate; class ActionHandlerPrivate;
public: public:
ActionHandler(const Core::Context &context, QObject *parent = nullptr); ActionHandler();
~ActionHandler(); ~ActionHandler();
public: public:

View File

@@ -32,6 +32,7 @@
#include "modelsmanager.h" #include "modelsmanager.h"
#include "settingscontroller.h" #include "settingscontroller.h"
#include "uicontroller.h" #include "uicontroller.h"
#include "actionhandler.h"
#include "qmt/infrastructure/uid.h" #include "qmt/infrastructure/uid.h"
@@ -59,7 +60,8 @@ class ModelEditorPluginPrivate final
public: public:
ModelsManager modelsManager; ModelsManager modelsManager;
UiController uiController; UiController uiController;
ModelEditorFactory modelFactory{&uiController}; ActionHandler actionHandler;
ModelEditorFactory modelFactory{&uiController, &actionHandler};
SettingsController settingsController; SettingsController settingsController;
}; };
@@ -93,10 +95,7 @@ bool ModelEditorPlugin::initialize(const QStringList &arguments, QString *errorS
void ModelEditorPlugin::extensionsInitialized() void ModelEditorPlugin::extensionsInitialized()
{ {
// Retrieve objects from the plugin manager's object pool d->actionHandler.createActions();
// In the extensionsInitialized method, a plugin can be sure that all
// plugins that depend on it are completely initialized.
d->modelFactory.extensionsInitialized();
d->settingsController.load(Core::ICore::settings()); d->settingsController.load(Core::ICore::settings());
} }

View File

@@ -34,24 +34,12 @@
namespace ModelEditor { namespace ModelEditor {
namespace Internal { namespace Internal {
ModelEditorFactory::ModelEditorFactory(UiController *uiController) ModelEditorFactory::ModelEditorFactory(UiController *uiController, ActionHandler *actionHandler)
{ {
setId(Constants::MODEL_EDITOR_ID); setId(Constants::MODEL_EDITOR_ID);
setDisplayName(QCoreApplication::translate("OpenWith::Editors", Constants::MODEL_EDITOR_DISPLAY_NAME)); setDisplayName(QCoreApplication::translate("OpenWith::Editors", Constants::MODEL_EDITOR_DISPLAY_NAME));
addMimeType(Constants::MIME_TYPE_MODEL); addMimeType(Constants::MIME_TYPE_MODEL);
m_uiController = uiController; setEditorCreator([uiController, actionHandler] { return new ModelEditor(uiController, actionHandler); });
m_actionHandler = new ActionHandler(Core::Context(Constants::MODEL_EDITOR_ID), this);
setEditorCreator([this] { return new ModelEditor(m_uiController, m_actionHandler); });
}
ModelEditorFactory::~ModelEditorFactory()
{
delete m_actionHandler;
}
void ModelEditorFactory::extensionsInitialized()
{
m_actionHandler->createActions();
} }
} // namespace Internal } // namespace Internal

View File

@@ -37,14 +37,7 @@ class UiController;
class ModelEditorFactory : public Core::IEditorFactory class ModelEditorFactory : public Core::IEditorFactory
{ {
public: public:
explicit ModelEditorFactory(UiController *uiController); ModelEditorFactory(UiController *uiController, ActionHandler *actionHandler);
~ModelEditorFactory();
void extensionsInitialized();
private:
UiController *m_uiController = nullptr;
ActionHandler *m_actionHandler = nullptr;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -261,84 +261,7 @@ QString QbsBuildConfiguration::configurationName() const
return m_configurationName->value(); return m_configurationName->value();
} }
class StepProxy QString QbsBuildConfiguration::equivalentCommandLine(const QbsBuildStepData &stepData) const
{
public:
StepProxy(const BuildStep *buildStep)
: m_qbsBuildStep(qobject_cast<const QbsBuildStep *>(buildStep))
, m_qbsCleanStep(qobject_cast<const QbsCleanStep *>(buildStep))
, m_qbsInstallStep(qobject_cast<const QbsInstallStep *>(buildStep))
{
}
QString command() const {
if (m_qbsBuildStep)
return QLatin1String("build");
if (m_qbsInstallStep)
return QLatin1String("install");
return QLatin1String("clean");
}
bool dryRun() const {
if (m_qbsBuildStep)
return false;
if (m_qbsInstallStep)
return m_qbsInstallStep->dryRun();
return m_qbsCleanStep->dryRun();
}
bool keepGoing() const {
if (m_qbsBuildStep)
return m_qbsBuildStep->keepGoing();
if (m_qbsInstallStep)
return m_qbsInstallStep->keepGoing();
return m_qbsCleanStep->keepGoing();
}
bool forceProbeExecution() const { return m_qbsBuildStep && m_qbsBuildStep->forceProbes(); }
bool showCommandLines() const {
return m_qbsBuildStep ? m_qbsBuildStep->showCommandLines() : false;
}
bool noInstall() const {
return m_qbsBuildStep ? !m_qbsBuildStep->install() : false;
}
bool noBuild() const { return m_qbsInstallStep; }
bool cleanInstallRoot() const {
if (m_qbsBuildStep)
return m_qbsBuildStep->cleanInstallRoot();
if (m_qbsInstallStep)
return m_qbsInstallStep->removeFirst();
return false;
}
int jobCount() const {
return m_qbsBuildStep ? m_qbsBuildStep->maxJobs() : 0;
}
Utils::FilePath installRoot() const {
const QbsBuildStep *bs = nullptr;
if (m_qbsBuildStep) {
bs = m_qbsBuildStep;
} else if (m_qbsInstallStep) {
bs = static_cast<QbsBuildConfiguration *>(m_qbsInstallStep->deployConfiguration()
->target()->activeBuildConfiguration())->qbsStep();
}
if (bs)
return bs->installRoot();
return Utils::FilePath();
}
private:
const QbsBuildStep * const m_qbsBuildStep;
const QbsCleanStep * const m_qbsCleanStep;
const QbsInstallStep * const m_qbsInstallStep;
};
QString QbsBuildConfiguration::equivalentCommandLine(const BuildStep *buildStep) const
{ {
CommandLine commandLine; CommandLine commandLine;
const QString qbsInstallDir = QString::fromLocal8Bit(qgetenv("QBS_INSTALL_DIR")); const QString qbsInstallDir = QString::fromLocal8Bit(qgetenv("QBS_INSTALL_DIR"));
@@ -346,42 +269,41 @@ QString QbsBuildConfiguration::equivalentCommandLine(const BuildStep *buildStep)
? qbsInstallDir + QLatin1String("/bin/qbs") ? qbsInstallDir + QLatin1String("/bin/qbs")
: QCoreApplication::applicationDirPath() + QLatin1String("/qbs")); : QCoreApplication::applicationDirPath() + QLatin1String("/qbs"));
commandLine.addArg(QDir::toNativeSeparators(qbsFilePath)); commandLine.addArg(QDir::toNativeSeparators(qbsFilePath));
const StepProxy stepProxy(buildStep); commandLine.addArg(stepData.command);
commandLine.addArg(stepProxy.command());
const QString buildDir = buildDirectory().toUserOutput(); const QString buildDir = buildDirectory().toUserOutput();
commandLine.addArgs({"-d", buildDir}); commandLine.addArgs({"-d", buildDir});
commandLine.addArgs({"-f", buildStep->project()->projectFilePath().toUserOutput()}); commandLine.addArgs({"-f", project()->projectFilePath().toUserOutput()});
if (QbsSettings::useCreatorSettingsDirForQbs()) { if (QbsSettings::useCreatorSettingsDirForQbs()) {
commandLine.addArgs({"--settings-dir", commandLine.addArgs({"--settings-dir",
QDir::toNativeSeparators(QbsSettings::qbsSettingsBaseDir())}); QDir::toNativeSeparators(QbsSettings::qbsSettingsBaseDir())});
} }
if (stepProxy.dryRun()) if (stepData.dryRun)
commandLine.addArg("--dry-run"); commandLine.addArg("--dry-run");
if (stepProxy.keepGoing()) if (stepData.keepGoing)
commandLine.addArg("--keep-going"); commandLine.addArg("--keep-going");
if (stepProxy.forceProbeExecution()) if (stepData.forceProbeExecution)
commandLine.addArg("--force-probe-execution"); commandLine.addArg("--force-probe-execution");
if (stepProxy.showCommandLines()) if (stepData.showCommandLines)
commandLine.addArgs({"--command-echo-mode", "command-line"}); commandLine.addArgs({"--command-echo-mode", "command-line"});
if (stepProxy.noInstall()) if (stepData.noInstall)
commandLine.addArg("--no-install"); commandLine.addArg("--no-install");
if (stepProxy.noBuild()) if (stepData.noBuild)
commandLine.addArg("--no-build"); commandLine.addArg("--no-build");
if (stepProxy.cleanInstallRoot()) if (stepData.cleanInstallRoot)
commandLine.addArg("--clean-install-root"); commandLine.addArg("--clean-install-root");
const int jobCount = stepProxy.jobCount(); const int jobCount = stepData.jobCount;
if (jobCount > 0) if (jobCount > 0)
commandLine.addArgs({"--jobs", QString::number(jobCount)}); commandLine.addArgs({"--jobs", QString::number(jobCount)});
const QString profileName = QbsProfileManager::profileNameForKit(buildStep->target()->kit()); const QString profileName = QbsProfileManager::profileNameForKit(target()->kit());
const QString buildVariant = qbsConfiguration() const QString buildVariant = qbsConfiguration()
.value(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY)).toString(); .value(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY)).toString();
commandLine.addArg("config:" + configurationName()); commandLine.addArg("config:" + configurationName());
commandLine.addArg(QString(Constants::QBS_CONFIG_VARIANT_KEY) + ':' + buildVariant); commandLine.addArg(QString(Constants::QBS_CONFIG_VARIANT_KEY) + ':' + buildVariant);
const FilePath installRoot = stepProxy.installRoot(); const FilePath installRoot = stepData.installRoot;
if (!installRoot.isEmpty()) { if (!installRoot.isEmpty()) {
commandLine.addArg(QString(Constants::QBS_INSTALL_ROOT_KEY) + ':' + installRoot.toUserOutput()); commandLine.addArg(QString(Constants::QBS_INSTALL_ROOT_KEY) + ':' + installRoot.toUserOutput());
if (qobject_cast<const QbsInstallStep *>(buildStep)) if (stepData.isInstallStep)
commandLine.addArgs({"--installRoot", installRoot.toUserOutput()}); commandLine.addArgs({"--installRoot", installRoot.toUserOutput()});
} }
commandLine.addArg("profile:" + profileName); commandLine.addArg("profile:" + profileName);

View File

@@ -40,7 +40,22 @@ namespace QbsProjectManager {
namespace Internal { namespace Internal {
class QbsBuildStep; class QbsBuildStep;
class QbsProject;
class QbsBuildStepData
{
public:
QString command;
bool dryRun = false;
bool keepGoing = false;
bool forceProbeExecution = false;
bool showCommandLines = false;
bool noInstall = false;
bool noBuild = false;
bool cleanInstallRoot = false;
bool isInstallStep = false;
int jobCount = 0;
Utils::FilePath installRoot;
};
class QbsBuildConfiguration final : public ProjectExplorer::BuildConfiguration class QbsBuildConfiguration final : public ProjectExplorer::BuildConfiguration
{ {
@@ -73,7 +88,7 @@ public:
QStringList products() const; QStringList products() const;
QString configurationName() const; QString configurationName() const;
QString equivalentCommandLine(const ProjectExplorer::BuildStep *buildStep) const; QString equivalentCommandLine(const QbsBuildStepData &stepData) const;
bool isQmlDebuggingEnabled() const; bool isQmlDebuggingEnabled() const;
ProjectExplorer::TriState qmlDebuggingSetting() const; ProjectExplorer::TriState qmlDebuggingSetting() const;

View File

@@ -523,6 +523,23 @@ void QbsBuildStep::finish()
emit finished(m_lastWasSuccess); emit finished(m_lastWasSuccess);
} }
QbsBuildStepData QbsBuildStep::stepData() const
{
QbsBuildStepData data;
data.command = "build";
data.dryRun = false;
data.keepGoing = m_keepGoing;
data.forceProbeExecution = m_forceProbes;
data.showCommandLines = m_showCommandLines;
data.noInstall = !m_install;
data.noBuild = false;
data.cleanInstallRoot = m_cleanInstallDir;
data.jobCount = maxJobs();
data.installRoot = installRoot();
return data;
}
// -------------------------------------------------------------------- // --------------------------------------------------------------------
// QbsBuildStepConfigWidget: // QbsBuildStepConfigWidget:
// -------------------------------------------------------------------- // --------------------------------------------------------------------
@@ -674,7 +691,8 @@ void QbsBuildStepConfigWidget::updateState()
const int idx = (buildVariant == Constants::QBS_VARIANT_DEBUG) ? 0 : 1; const int idx = (buildVariant == Constants::QBS_VARIANT_DEBUG) ? 0 : 1;
buildVariantComboBox->setCurrentIndex(idx); buildVariantComboBox->setCurrentIndex(idx);
const auto qbsBuildConfig = static_cast<QbsBuildConfiguration *>(step()->buildConfiguration()); const auto qbsBuildConfig = static_cast<QbsBuildConfiguration *>(step()->buildConfiguration());
QString command = qbsBuildConfig->equivalentCommandLine(qbsStep());
QString command = qbsBuildConfig->equivalentCommandLine(qbsStep()->stepData());
for (int i = 0; i < m_propertyCache.count(); ++i) { for (int i = 0; i < m_propertyCache.count(); ++i) {
command += ' ' + m_propertyCache.at(i).name + ':' + m_propertyCache.at(i).effectiveValue; command += ' ' + m_propertyCache.at(i).name + ':' + m_propertyCache.at(i).effectiveValue;

View File

@@ -70,6 +70,7 @@ public:
bool forceProbes() const { return m_forceProbes; } bool forceProbes() const { return m_forceProbes; }
QbsBuildSystem *qbsBuildSystem() const; QbsBuildSystem *qbsBuildSystem() const;
QbsBuildStepData stepData() const;
signals: signals:
void qbsConfigurationChanged(); void qbsConfigurationChanged();

View File

@@ -67,8 +67,12 @@ QbsCleanStep::QbsCleanStep(BuildStepList *bsl, Core::Id id)
effectiveCommandAspect->setLabelText(tr("Equivalent command line:")); effectiveCommandAspect->setLabelText(tr("Equivalent command line:"));
setSummaryUpdater([this, effectiveCommandAspect] { setSummaryUpdater([this, effectiveCommandAspect] {
QbsBuildStepData data;
data.command = "clean";
data.dryRun = m_dryRunAspect->value();
data.keepGoing = m_keepGoingAspect->value();
QString command = static_cast<QbsBuildConfiguration *>(buildConfiguration()) QString command = static_cast<QbsBuildConfiguration *>(buildConfiguration())
->equivalentCommandLine(this); ->equivalentCommandLine(data);
effectiveCommandAspect->setValue(command); effectiveCommandAspect->setValue(command);
return tr("<b>Qbs:</b> %1").arg(command); return tr("<b>Qbs:</b> %1").arg(command);
}); });

View File

@@ -44,8 +44,7 @@ public:
QbsCleanStep(ProjectExplorer::BuildStepList *bsl, Core::Id id); QbsCleanStep(ProjectExplorer::BuildStepList *bsl, Core::Id id);
~QbsCleanStep() override; ~QbsCleanStep() override;
bool dryRun() const { return m_dryRunAspect->value(); } QbsBuildStepData stepData() const;
bool keepGoing() const { return m_keepGoingAspect->value(); }
private: private:
bool init() override; bool init() override;

View File

@@ -182,7 +182,7 @@ void QbsInstallStep::installDone(const ErrorInfo &error)
m_session = nullptr; m_session = nullptr;
for (const ErrorInfoItem &item : error.items) for (const ErrorInfoItem &item : error.items)
createTaskAndOutput(Task::Error, item.description, item.filePath.toString(), item.line); createTaskAndOutput(Task::Error, item.description, item.filePath, item.line);
emit finished(!error.hasError()); emit finished(!error.hasError());
} }
@@ -199,10 +199,10 @@ void QbsInstallStep::handleProgress(int value)
emit progress(value * 100 / m_maxProgress, m_description); emit progress(value * 100 / m_maxProgress, m_description);
} }
void QbsInstallStep::createTaskAndOutput(ProjectExplorer::Task::TaskType type, void QbsInstallStep::createTaskAndOutput(Task::TaskType type, const QString &message,
const QString &message, const QString &file, int line) const Utils::FilePath &file, int line)
{ {
const CompileTask task(type, message, Utils::FilePath::fromString(file), line); const CompileTask task(type, message, file, line);
emit addTask(task, 1); emit addTask(task, 1);
emit addOutput(message, OutputFormat::Stdout); emit addOutput(message, OutputFormat::Stdout);
} }
@@ -231,6 +231,21 @@ void QbsInstallStep::setKeepGoing(bool kg)
emit changed(); emit changed();
} }
QbsBuildStepData QbsInstallStep::stepData() const
{
QbsBuildStepData data;
data.command = "install";
data.dryRun = dryRun();
data.keepGoing = keepGoing();
data.noBuild = true;
data.cleanInstallRoot = removeFirst();
data.isInstallStep = true;
auto bs = static_cast<QbsBuildConfiguration *>(target()->activeBuildConfiguration())->qbsStep();
if (bs)
data.installRoot = bs->installRoot();
return data;
};
// -------------------------------------------------------------------- // --------------------------------------------------------------------
// QbsInstallStepConfigWidget: // QbsInstallStepConfigWidget:
// -------------------------------------------------------------------- // --------------------------------------------------------------------
@@ -320,7 +335,7 @@ void QbsInstallStepConfigWidget::updateState()
m_keepGoingCheckBox->setChecked(m_step->keepGoing()); m_keepGoingCheckBox->setChecked(m_step->keepGoing());
} }
QString command = m_step->buildConfig()->equivalentCommandLine(m_step); QString command = m_step->buildConfig()->equivalentCommandLine(m_step->stepData());
m_commandLineTextEdit->setPlainText(command); m_commandLineTextEdit->setPlainText(command);

View File

@@ -48,6 +48,7 @@ public:
bool removeFirst() const { return m_cleanInstallRoot; } bool removeFirst() const { return m_cleanInstallRoot; }
bool dryRun() const { return m_dryRun; } bool dryRun() const { return m_dryRun; }
bool keepGoing() const { return m_keepGoing; } bool keepGoing() const { return m_keepGoing; }
QbsBuildStepData stepData() const;
signals: signals:
void changed(); void changed();
@@ -66,7 +67,7 @@ private:
void handleProgress(int value); void handleProgress(int value);
void createTaskAndOutput(ProjectExplorer::Task::TaskType type, void createTaskAndOutput(ProjectExplorer::Task::TaskType type,
const QString &message, const QString &file, int line); const QString &message, const Utils::FilePath &file, int line);
void setRemoveFirst(bool rf); void setRemoveFirst(bool rf);
void setDryRun(bool dr); void setDryRun(bool dr);

View File

@@ -33,6 +33,7 @@
#include <nodeabstractproperty.h> #include <nodeabstractproperty.h>
#include <exception.h> #include <exception.h>
#include <nodemetainfo.h> #include <nodemetainfo.h>
#include <nodelistproperty.h>
#include <QStandardItemModel> #include <QStandardItemModel>
#include <QMessageBox> #include <QMessageBox>
@@ -210,6 +211,10 @@ void ConnectionModel::updateTargetNode(int rowNumber)
ModelNode connectionNode = signalHandlerProperty.parentModelNode(); ModelNode connectionNode = signalHandlerProperty.parentModelNode();
if (!newTarget.isEmpty()) { if (!newTarget.isEmpty()) {
const ModelNode parent = connectionView()->modelNodeForId(newTarget);
if (parent.isValid() && QmlItemNode::isValidQmlItemNode(parent))
parent.nodeListProperty("data").reparentHere(connectionNode);
connectionView()->executeInTransaction("ConnectionModel::updateTargetNode", [= ,&connectionNode](){ connectionView()->executeInTransaction("ConnectionModel::updateTargetNode", [= ,&connectionNode](){
connectionNode.bindingProperty("target").setExpression(newTarget); connectionNode.bindingProperty("target").setExpression(newTarget);
}); });
@@ -255,14 +260,21 @@ void ConnectionModel::addConnection()
nodeMetaInfo.majorVersion(), nodeMetaInfo.majorVersion(),
nodeMetaInfo.minorVersion()); nodeMetaInfo.minorVersion());
rootModelNode.nodeAbstractProperty(rootModelNode.metaInfo().defaultPropertyName()).reparentHere(newNode);
newNode.signalHandlerProperty("onClicked").setSource(QLatin1String("print(\"clicked\")")); newNode.signalHandlerProperty("onClicked").setSource(QLatin1String("print(\"clicked\")"));
if (connectionView()->selectedModelNodes().count() == 1 if (connectionView()->selectedModelNodes().count() == 1) {
&& !connectionView()->selectedModelNodes().constFirst().id().isEmpty()) {
const ModelNode selectedNode = connectionView()->selectedModelNodes().constFirst(); const ModelNode selectedNode = connectionView()->selectedModelNodes().constFirst();
if (QmlItemNode::isValidQmlItemNode(selectedNode))
selectedNode.nodeAbstractProperty("data").reparentHere(newNode);
else
rootModelNode.nodeAbstractProperty(rootModelNode.metaInfo().defaultPropertyName()).reparentHere(newNode);
if (!connectionView()->selectedModelNodes().constFirst().id().isEmpty())
newNode.bindingProperty("target").setExpression(selectedNode.id()); newNode.bindingProperty("target").setExpression(selectedNode.id());
else
newNode.bindingProperty("target").setExpression(QLatin1String("parent"));
} else { } else {
rootModelNode.nodeAbstractProperty(rootModelNode.metaInfo().defaultPropertyName()).reparentHere(newNode);
newNode.bindingProperty("target").setExpression(QLatin1String("parent")); newNode.bindingProperty("target").setExpression(QLatin1String("parent"));
} }
}); });

View File

@@ -394,6 +394,9 @@ static void scatterItem(const ModelNode &pastedNode, const ModelNode &targetNode
if (targetNode.metaInfo().isValid() && targetNode.metaInfo().isLayoutable()) if (targetNode.metaInfo().isValid() && targetNode.metaInfo().isLayoutable())
return; return;
if (!(pastedNode.hasVariantProperty("x") && pastedNode.hasVariantProperty("y")))
return;
bool scatter = false; bool scatter = false;
foreach (const ModelNode &childNode, targetNode.directSubModelNodes()) { foreach (const ModelNode &childNode, targetNode.directSubModelNodes()) {
if ((childNode.variantProperty("x").value() == pastedNode.variantProperty("x").value()) && if ((childNode.variantProperty("x").value() == pastedNode.variantProperty("x").value()) &&

View File

@@ -120,7 +120,7 @@ ItemLibraryWidget::ItemLibraryWidget(QWidget *parent) :
/* other widgets */ /* other widgets */
auto tabBar = new QTabBar(this); auto tabBar = new QTabBar(this);
tabBar->addTab(tr("QML Types", "Title of library QML types view")); tabBar->addTab(tr("QML Types", "Title of library QML types view"));
tabBar->addTab(tr("Resources", "Title of library resources view")); tabBar->addTab(tr("Assets", "Title of library assets view"));
tabBar->addTab(tr("Imports", "Title of library imports view")); tabBar->addTab(tr("Imports", "Title of library imports view"));
tabBar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); tabBar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
connect(tabBar, &QTabBar::currentChanged, this, &ItemLibraryWidget::setCurrentIndexOfStackedWidget); connect(tabBar, &QTabBar::currentChanged, this, &ItemLibraryWidget::setCurrentIndexOfStackedWidget);
@@ -184,8 +184,8 @@ ItemLibraryWidget::ItemLibraryWidget(QWidget *parent) :
font.setPixelSize(Theme::instance()->smallFontPixelSize()); font.setPixelSize(Theme::instance()->smallFontPixelSize());
button->setFont(font); button->setFont(font);
button->setIcon(Utils::Icons::PLUS.icon()); button->setIcon(Utils::Icons::PLUS.icon());
button->setText(tr("Add New Resources...")); button->setText(tr("Add New Assets..."));
button->setToolTip(tr("Add new resources to project.")); button->setToolTip(tr("Add new assets to project."));
button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
flowLayout->addWidget(button); flowLayout->addWidget(button);
connect(button, &QToolButton::clicked, this, &ItemLibraryWidget::addResources); connect(button, &QToolButton::clicked, this, &ItemLibraryWidget::addResources);
@@ -511,7 +511,7 @@ void ItemLibraryWidget::addResources()
const QString currentDir = lastDir.isEmpty() ? document->fileName().parentDir().toString() : lastDir; const QString currentDir = lastDir.isEmpty() ? document->fileName().parentDir().toString() : lastDir;
const auto fileNames = QFileDialog::getOpenFileNames(Core::ICore::mainWindow(), const auto fileNames = QFileDialog::getOpenFileNames(Core::ICore::mainWindow(),
tr("Add Resources"), tr("Add Assets"),
currentDir, currentDir,
filters.join(";;")); filters.join(";;"));

View File

@@ -149,10 +149,10 @@
</size> </size>
</property> </property>
<property name="minimum"> <property name="minimum">
<number>-10000</number> <number>0</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>10000</number> <number>100000</number>
</property> </property>
</widget> </widget>
</item> </item>
@@ -244,10 +244,10 @@
</size> </size>
</property> </property>
<property name="minimum"> <property name="minimum">
<number>-10000</number> <number>-100000</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>10000</number> <number>100000</number>
</property> </property>
</widget> </widget>
</item> </item>
@@ -313,10 +313,10 @@
</size> </size>
</property> </property>
<property name="minimum"> <property name="minimum">
<number>-10000</number> <number>-100000</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>10000</number> <number>100000</number>
</property> </property>
</widget> </widget>
</item> </item>

View File

@@ -47,8 +47,6 @@ TimelineForm::TimelineForm(QWidget *parent)
{ {
ui->setupUi(this); ui->setupUi(this);
ui->duration->setVisible(false);
connect(ui->expressionBindingLineEdit, &QLineEdit::editingFinished, [this]() { connect(ui->expressionBindingLineEdit, &QLineEdit::editingFinished, [this]() {
QTC_ASSERT(m_timeline.isValid(), return ); QTC_ASSERT(m_timeline.isValid(), return );
@@ -135,13 +133,10 @@ void TimelineForm::setTimeline(const QmlTimeline &timeline)
if (m_timeline.isValid()) { if (m_timeline.isValid()) {
ui->idLineEdit->setText(m_timeline.modelNode().displayName()); ui->idLineEdit->setText(m_timeline.modelNode().displayName());
ui->duration->setValue(qRound(m_timeline.duration()));
ui->startFrame->setValue( ui->startFrame->setValue(
m_timeline.modelNode().variantProperty("startFrame").value().toInt()); m_timeline.modelNode().variantProperty("startFrame").value().toInt());
ui->endFrame->setValue(m_timeline.modelNode().variantProperty("endFrame").value().toInt()); ui->endFrame->setValue(m_timeline.modelNode().variantProperty("endFrame").value().toInt());
ui->duration->setValue(qRound(m_timeline.duration()));
if (m_timeline.modelNode().hasBindingProperty("currentFrame")) { if (m_timeline.modelNode().hasBindingProperty("currentFrame")) {
ui->expressionBindingLineEdit->setText( ui->expressionBindingLineEdit->setText(
m_timeline.modelNode().bindingProperty("currentFrame").expression()); m_timeline.modelNode().bindingProperty("currentFrame").expression());
@@ -173,7 +168,6 @@ void TimelineForm::setProperty(const PropertyName &propertyName, const QVariant
} catch (const Exception &e) { } catch (const Exception &e) {
e.showException(); e.showException();
} }
ui->duration->setValue(qRound(m_timeline.duration()));
} }
void TimelineForm::connectSpinBox(QSpinBox *spinBox, const PropertyName &propertyName) void TimelineForm::connectSpinBox(QSpinBox *spinBox, const PropertyName &propertyName)

View File

@@ -6,16 +6,19 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>627</width> <width>641</width>
<height>170</height> <height>170</height>
</rect> </rect>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="1" column="8" colspan="2"> <item row="3" column="6" colspan="2">
<spacer name="horizontalSpacer_11"> <spacer name="horizontalSpacer_12">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
<width>49</width> <width>49</width>
@@ -24,72 +27,8 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="2" column="5"> <item row="1" column="6" colspan="2">
<widget class="QSpinBox" name="endFrame"> <spacer name="horizontalSpacer_11">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>80</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-10000</number>
</property>
<property name="maximum">
<number>10000</number>
</property>
</widget>
</item>
<item row="2" column="2" colspan="2">
<widget class="QSpinBox" name="startFrame">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>80</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-10000</number>
</property>
<property name="maximum">
<number>10000</number>
</property>
</widget>
</item>
<item row="2" column="6">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Duration</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Expression binding:</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="8" colspan="2">
<spacer name="horizontalSpacer_10">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
@@ -111,66 +50,18 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="3" colspan="2"> <item row="2" column="1">
<widget class="QRadioButton" name="animation"> <widget class="QLabel" name="label_6">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text"> <property name="text">
<string>Animation</string> <string>Start frame:</string>
</property> </property>
<property name="checked"> <property name="alignment">
<bool>true</bool> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="8" colspan="2"> <item row="2" column="2" colspan="2">
<spacer name="horizontalSpacer_12"> <widget class="QSpinBox" name="startFrame">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>49</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="4" column="1" colspan="5">
<widget class="QLineEdit" name="expressionBindingLineEdit">
<property name="enabled">
<bool>true</bool>
</property>
<property name="minimumSize">
<size>
<width>240</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item row="4" column="8" colspan="2">
<spacer name="horizontalSpacer_9">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>49</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="7">
<widget class="QSpinBox" name="duration">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>80</width> <width>80</width>
@@ -183,11 +74,11 @@
<height>16777215</height> <height>16777215</height>
</size> </size>
</property> </property>
<property name="readOnly"> <property name="minimum">
<bool>true</bool> <number>-100000</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>20000</number> <number>100000</number>
</property> </property>
</widget> </widget>
</item> </item>
@@ -201,13 +92,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1" colspan="5">
<widget class="QLineEdit" name="idLineEdit">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_5"> <widget class="QLabel" name="label_5">
<property name="text"> <property name="text">
@@ -237,16 +121,100 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1"> <item row="3" column="3" colspan="2">
<widget class="QLabel" name="label_6"> <widget class="QRadioButton" name="animation">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text"> <property name="text">
<string>Start frame:</string> <string>Animation</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="6" colspan="2">
<spacer name="horizontalSpacer_9">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>49</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Expression binding:</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="5">
<widget class="QSpinBox" name="endFrame">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>80</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>-100000</number>
</property>
<property name="maximum">
<number>100000</number>
</property>
</widget>
</item>
<item row="1" column="1" colspan="5">
<widget class="QLineEdit" name="idLineEdit">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="4" column="1" colspan="5">
<widget class="QLineEdit" name="expressionBindingLineEdit">
<property name="enabled">
<bool>true</bool>
</property>
<property name="minimumSize">
<size>
<width>240</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item row="2" column="6" colspan="2">
<spacer name="horizontalSpacer_10">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>49</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout> </layout>
</widget> </widget>
<resources/> <resources/>

View File

@@ -275,4 +275,149 @@ MetaInfo {
Property { name: "height"; type: "int"; value: 400; } Property { name: "height"; type: "int"; value: 400; }
} }
} }
Type {
name: "QtQuick.PropertyAnimation"
icon: ":/qtquickplugin/images/item-icon16.png"
Hints {
visibleInNavigator: true
canBeDroppedInNavigator: true
canBeDroppedInFormEditor: false
}
ItemLibraryEntry {
name: "Property Animation"
category: "Qt Quick - Animation"
libraryIcon: ":/qtquickplugin/images/item-icon.png"
version: "2.0"
}
}
Type {
name: "QtQuick.PauseAnimation"
icon: ":/qtquickplugin/images/item-icon16.png"
Hints {
visibleInNavigator: true
canBeDroppedInNavigator: true
canBeDroppedInFormEditor: false
}
ItemLibraryEntry {
name: "Pause Animation"
category: "Qt Quick - Animation"
libraryIcon: ":/qtquickplugin/images/item-icon.png"
version: "2.0"
}
}
Type {
name: "QtQuick.SequentialAnimation"
icon: ":/qtquickplugin/images/item-icon16.png"
Hints {
visibleInNavigator: true
canBeDroppedInNavigator: true
canBeDroppedInFormEditor: false
}
ItemLibraryEntry {
name: "Sequential Animation"
category: "Qt Quick - Animation"
libraryIcon: ":/qtquickplugin/images/item-icon.png"
version: "2.0"
}
}
Type {
name: "QtQuick.ParallelAnimation"
icon: ":/qtquickplugin/images/item-icon16.png"
Hints {
visibleInNavigator: true
canBeDroppedInNavigator: true
canBeDroppedInFormEditor: false
}
ItemLibraryEntry {
name: "Parallel Animation"
category: "Qt Quick - Animation"
libraryIcon: ":/qtquickplugin/images/item-icon.png"
version: "2.0"
}
}
Type {
name: "QtQuick.PropertyAction"
icon: ":/qtquickplugin/images/item-icon16.png"
Hints {
visibleInNavigator: true
canBeDroppedInNavigator: true
canBeDroppedInFormEditor: false
}
ItemLibraryEntry {
name: "Property Action"
category: "Qt Quick - Animation"
libraryIcon: ":/qtquickplugin/images/item-icon.png"
version: "2.0"
}
}
Type {
name: "QtQuick.ScriptAction"
icon: ":/qtquickplugin/images/item-icon16.png"
Hints {
visibleInNavigator: true
canBeDroppedInNavigator: true
canBeDroppedInFormEditor: false
}
ItemLibraryEntry {
name: "Script Action"
category: "Qt Quick - Animation"
libraryIcon: ":/qtquickplugin/images/item-icon.png"
version: "2.0"
}
}
Type {
name: "QtQuick.ColorAnimation"
icon: ":/qtquickplugin/images/item-icon16.png"
Hints {
visibleInNavigator: true
canBeDroppedInNavigator: true
canBeDroppedInFormEditor: false
}
ItemLibraryEntry {
name: "ColorAnimation"
category: "Qt Quick - Animation"
libraryIcon: ":/qtquickplugin/images/item-icon.png"
version: "2.0"
}
}
Type {
name: "QtQuick.NumberAnimation"
icon: ":/qtquickplugin/images/item-icon16.png"
Hints {
visibleInNavigator: true
canBeDroppedInNavigator: true
canBeDroppedInFormEditor: false
}
ItemLibraryEntry {
name: "Number Animation"
category: "Qt Quick - Animation"
libraryIcon: ":/qtquickplugin/images/item-icon.png"
version: "2.0"
}
}
} }