Merge remote-tracking branch 'origin/4.10'

Change-Id: Ida1659af5c9c72b67b01645c88aea4ea60e09b7f
This commit is contained in:
Eike Ziller
2019-09-05 09:53:33 +02:00
31 changed files with 260 additions and 96 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2017 The Qt Company Ltd. ** Copyright (C) 2019 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.
@@ -73,9 +73,42 @@
\image qtcreator-cmake-build-steps.png \image qtcreator-cmake-build-steps.png
\note While the other CMake generators are installed together with Qt,
you usually need to install Ninja yourself. For more information, see
\l {Using Ninja as a CMake Generator}.
//! [cmake build steps] //! [cmake build steps]
//! [cmake ninja]
\section2 Using Ninja as a CMake Generator
To use \l {https://ninja-build.org/}{Ninja} with CMake, you must install it
and select it as the CMake generator in the build and run kit:
\list 1
\li Install Ninja.
\li Add the path to the Ninja executable to the value of the PATH system
variable.
\li Select \uicontrol Tools > \uicontrol Options > \uicontrol Kits, and
then select the build and run kit for the project.
\li Select \uicontrol Change next to the \uicontrol {CMake generator}
field to open the \uicontrol {CMake Generator} dialog.
\image qtcreator-build-steps-cmake-ninja.png
\li In the \uicontrol Generator field, select \uicontrol Ninja.
\li Select \uicontrol OK to return to the \uicontrol Kits tab.
\li Select \uicontrol OK or \uicontrol Apply to save your changes.
\endlist
\note To make sure that old build artifacts don't get in the way
the first time you build the project after the change, select
\uicontrol Build > \uicontrol {Rebuild Project}. This cleans up the
build directory and performs a new build.
//! [cmake ninja]
//! [cmake clean steps] //! [cmake clean steps]
\section2 CMake Clean Steps \section2 CMake Clean Steps

View File

@@ -194,6 +194,8 @@
choose the kit to use. To set the selected kit as the default kit, choose the kit to use. To set the selected kit as the default kit,
select \uicontrol {Make Default}. select \uicontrol {Make Default}.
\include creator-projects-cmake-building.qdocinc cmake ninja
\section1 Editing Qbs Profiles \section1 Editing Qbs Profiles
To view the Qbs profile associated with the kit, select \uicontrol Tools > To view the Qbs profile associated with the kit, select \uicontrol Tools >

View File

@@ -245,8 +245,11 @@
components can appear to pick up speed, slow down, or bounce back at the components can appear to pick up speed, slow down, or bounce back at the
end of the animation. By default, the animations you specify on the end of the animation. By default, the animations you specify on the
timeline are \e linear, which means that they move from the beginning to timeline are \e linear, which means that they move from the beginning to
the end at a constant speed. You can use the curve picker to edit the the end at a constant speed. You can use the \e {curve picker} to edit the
easing curve at a keyframe. easing curve between two keyframes. You can also use the more advanced
\e {curve editor} to edit the curves for the whole animation.
\section2 Attaching Easing Curves to Keyframes
\image studio-curve-picker.png \image studio-curve-picker.png
@@ -256,16 +259,16 @@
custom curve. For more information about easing curve types, see the custom curve. For more information about easing curve types, see the
documentation for \l [QML] {PropertyAnimation}{easing curves}. documentation for \l [QML] {PropertyAnimation}{easing curves}.
To zoom into and out of the easing curve editor, use the mouse roller. To To zoom into and out of the easing curve picker, use the mouse roller. To
reset the zoom factor, right-click in the editor and select reset the zoom factor, right-click in the picker and select
\uicontrol {Reset Zoom}. \uicontrol {Reset Zoom}.
To select easing curves: To attach easing curves to keyframes:
\list 1 \list 1
\li Select a keyframe on the timeline. \li Select a keyframe on the timeline.
\li Select \uicontrol {Curve Picker (C)} on the toolbar, or press \li Select \uicontrol {Curve Picker (C)} on the toolbar, or press
\key C to open the \uicontrol {Easing Curve Editor} dialog. \key C to open the curve picker.
\li Select an easing curve in the \uicontrol Presets tab. \li Select an easing curve in the \uicontrol Presets tab.
\li In the \uicontrol {Duration (ms)} field, select the duration of the \li In the \uicontrol {Duration (ms)} field, select the duration of the
easing function in milliseconds. easing function in milliseconds.
@@ -279,11 +282,13 @@
to \inlineimage keyframe_manualbezier_inactive.png to \inlineimage keyframe_manualbezier_inactive.png
. .
\section2 Customizing Easing Curves
To customize easing curves: To customize easing curves:
\list 1 \list 1
\li In the \uicontrol {Easing Curve Editor} dialog, select an easing \li In the curve picker, select an easing curve in the
curve in the \uicontrol Presets tab. \uicontrol Presets tab.
\li Drag the curve handlers to modify the curve. \li Drag the curve handlers to modify the curve.
\li Right-click in the editor, and select \uicontrol {Add Point} to add \li Right-click in the editor, and select \uicontrol {Add Point} to add
points to the curve. points to the curve.
@@ -299,6 +304,32 @@
To paste easing curve definitions to the curve picker as text, select To paste easing curve definitions to the curve picker as text, select
the \uicontrol Text tab. the \uicontrol Text tab.
\section1 Editing Animation Curves
In the curve editor, you can view and modify the whole animation curve. You
can insert keyframes to the curve and drag them and the point handlers to
modify the curve. You can modify the appearance of the curve in the style
editor.
You can also edit easing curves that you added with the curve picker.
\image studio-curve-editor.png
To edit animation curves:
\list 1
\li In the \uicontrol Timeline view, insert at least one keyframe.
\li Select \inlineimage curveGraphIcon.png
(\uicontrol {Curve Editor (C)} on the toolbar or press \key C
to open the curve editor.
\li Right-click in the curve editor, and select
\uicontrol {Insert Keyframe} to add a keyframe.
\li Select keyframes to display the easing curves attached to them.
To select multiple keyframes, press and hold \key Ctrl.
\endlist
Your changes are automatically saved when you close the editor.
\section1 Rotating Items \section1 Rotating Items
To animate components that rotate around a central point, you can use the To animate components that rotate around a central point, you can use the

View File

@@ -53,8 +53,8 @@ Section {
backendValue: backendValues.scale backendValue: backendValues.scale
hasSlider: true hasSlider: true
decimals: 2 decimals: 2
minimumValue: 0.01
stepSize: 0.1 stepSize: 0.1
minimumValue: -10
maximumValue: 10 maximumValue: 10
Layout.preferredWidth: 140 Layout.preferredWidth: 140
} }

View File

@@ -62,7 +62,7 @@ RowLayout {
property alias buttonRow: buttonRow property alias buttonRow: buttonRow
readonly property color __defaultTextColor: Theme.color(Theme.PanelTextColorLight) readonly property color __defaultTextColor: StudioTheme.Values.themeTextColor
IconLabel { IconLabel {
id: icon id: icon
@@ -135,13 +135,13 @@ RowLayout {
id: group id: group
} }
StudioControls.AbstractButton { AbstractButton {
id: buttonSameEdge id: buttonSameEdge
buttonIcon: verticalAnchor ? StudioTheme.Constants.anchorTop : StudioTheme.Constants.anchorLeft buttonIcon: verticalAnchor ? StudioTheme.Constants.anchorTop : StudioTheme.Constants.anchorLeft
checkable: true checkable: true
autoExclusive: true autoExclusive: true
StudioControls.ButtonGroup.group: group StudioControls.ButtonGroup.group: group
//tooltip: verticalAnchor ? qsTr("Anchor to the top of the target.") : qsTr("Anchor to the left of the target.") tooltip: verticalAnchor ? qsTr("Anchor to the top of the target.") : qsTr("Anchor to the left of the target.")
onClicked: { onClicked: {
if (!invertRelativeTargets) if (!invertRelativeTargets)
sameEdgeButtonClicked(); sameEdgeButtonClicked();
@@ -149,22 +149,22 @@ RowLayout {
oppositeEdgeButtonClicked(); oppositeEdgeButtonClicked();
} }
} }
StudioControls.AbstractButton { AbstractButton {
id: buttonCenter id: buttonCenter
buttonIcon: verticalAnchor ? StudioTheme.Constants.centerVertical : StudioTheme.Constants.centerHorizontal buttonIcon: verticalAnchor ? StudioTheme.Constants.centerVertical : StudioTheme.Constants.centerHorizontal
checkable: true checkable: true
autoExclusive: true autoExclusive: true
StudioControls.ButtonGroup.group: group StudioControls.ButtonGroup.group: group
//tooltip: verticalAnchor ? qsTr("Anchor to the vertical center of the target.") : qsTr("Anchor to the horizontal center of the target.") tooltip: verticalAnchor ? qsTr("Anchor to the vertical center of the target.") : qsTr("Anchor to the horizontal center of the target.")
onClicked: centerButtonClicked(); onClicked: centerButtonClicked();
} }
StudioControls.AbstractButton { AbstractButton {
id: buttonOppositeEdge id: buttonOppositeEdge
buttonIcon: verticalAnchor ? StudioTheme.Constants.anchorBottom : StudioTheme.Constants.anchorRight buttonIcon: verticalAnchor ? StudioTheme.Constants.anchorBottom : StudioTheme.Constants.anchorRight
checkable: true checkable: true
autoExclusive: true autoExclusive: true
StudioControls.ButtonGroup.group: group StudioControls.ButtonGroup.group: group
//tooltip: verticalAnchor ? qsTr("Anchor to the bottom of the target.") : qsTr("Anchor to the right of the target.") tooltip: verticalAnchor ? qsTr("Anchor to the bottom of the target.") : qsTr("Anchor to the right of the target.")
onClicked: { onClicked: {
if (!invertRelativeTargets) if (!invertRelativeTargets)
oppositeEdgeButtonClicked(); oppositeEdgeButtonClicked();

View File

@@ -158,8 +158,8 @@ Section {
} }
SecondColumnLayout { SecondColumnLayout {
SpinBox { SpinBox {
maximumValue: 9999999 minimumValue: -4000
minimumValue: -9999999 maximumValue: 4000
decimals: 0 decimals: 0
backendValue: backendValues.spacing backendValue: backendValues.spacing
Layout.fillWidth: true Layout.fillWidth: true

View File

@@ -80,8 +80,8 @@ Column {
SpinBox { SpinBox {
backendValue: backendValues.sourceSize_width backendValue: backendValues.sourceSize_width
minimumValue: -2000 minimumValue: 0
maximumValue: 2000 maximumValue: 8192
decimals: 0 decimals: 0
} }
@@ -97,8 +97,8 @@ Column {
SpinBox { SpinBox {
backendValue: backendValues.sourceSize_height backendValue: backendValues.sourceSize_height
minimumValue: -2000 minimumValue: 0
maximumValue: 2000 maximumValue: 8192
decimals: 0 decimals: 0
} }

View File

@@ -130,8 +130,8 @@ Column {
SectionLayout { SectionLayout {
SpinBox { SpinBox {
backendValue: backendValues.spacing backendValue: backendValues.spacing
minimumValue: 0 minimumValue: -4000
maximumValue: 1000 maximumValue: 4000
decimals: 0 decimals: 0
} }
ExpandingSpacer { ExpandingSpacer {

View File

@@ -166,6 +166,7 @@ Column {
backendValue: backendValues.preferredHighlightBegin backendValue: backendValues.preferredHighlightBegin
minimumValue: 0 minimumValue: 0
maximumValue: 1 maximumValue: 1
stepSize: 0.1
decimals: 2 decimals: 2
} }
ExpandingSpacer { ExpandingSpacer {
@@ -182,6 +183,7 @@ Column {
backendValue: backendValues.preferredHighlightEnd backendValue: backendValues.preferredHighlightEnd
minimumValue: 0 minimumValue: 0
maximumValue: 1 maximumValue: 1
stepSize: 0.1
decimals: 2 decimals: 2
} }
ExpandingSpacer { ExpandingSpacer {

View File

@@ -43,6 +43,7 @@ Item {
property bool block: false property bool block: false
signal clicked signal clicked
signal rightMouseButtonClicked
onAlphaChanged: invalidateColor(); onAlphaChanged: invalidateColor();
onSaturationChanged: invalidateColor(); onSaturationChanged: invalidateColor();
@@ -202,7 +203,7 @@ Item {
id: mapMouseArea id: mapMouseArea
anchors.fill: parent anchors.fill: parent
onPositionChanged: { onPositionChanged: {
if (pressed) { if (pressed && mouse.button === Qt.LeftButton) {
var xx = Math.max(0, Math.min(mouse.x, parent.width)) var xx = Math.max(0, Math.min(mouse.x, parent.width))
var yy = Math.max(0, Math.min(mouse.y, parent.height)) var yy = Math.max(0, Math.min(mouse.y, parent.height))
@@ -210,8 +211,21 @@ Item {
colorButton.saturation = xx / parent.width; colorButton.saturation = xx / parent.width;
} }
} }
onPressed: positionChanged(mouse) onPressed: {
onReleased: colorButton.clicked() if (mouse.button === Qt.LeftButton)
positionChanged(mouse)
}
onReleased: {
if (mouse.button === Qt.LeftButton)
colorButton.clicked()
}
acceptedButtons: Qt.LeftButton | Qt.RightButton
onClicked: {
if (mouse.button === Qt.RightButton)
colorButton.rightMouseButtonClicked()
}
} }
Rectangle { Rectangle {
anchors.fill: parent anchors.fill: parent

View File

@@ -26,12 +26,13 @@
import QtQuick 2.1 import QtQuick 2.1
Item { Item {
id: colorCheckButtonRoot id: root
property bool checked: false property bool checked: false
property alias buttonColor: checkBox.color property alias buttonColor: checkBox.color
width: 30 width: 30
height: 24 height: 24
signal rightMouseButtonClicked
Rectangle { Rectangle {
id: backgroundBox id: backgroundBox
@@ -63,13 +64,20 @@ Item {
anchors.right: backgroundBox.left anchors.right: backgroundBox.left
anchors.rightMargin: 2 anchors.rightMargin: 2
opacity: colorToolTip.containsMouse ? 1 : 0.8 opacity: colorToolTip.containsMouse ? 1 : 0.8
rotation: colorCheckButtonRoot.checked ? 0.0 : 270.0 rotation: root.checked ? 0.0 : 270.0
} }
ToolTipArea { ToolTipArea {
id: colorToolTip id: colorToolTip
onClicked: checked = !checked acceptedButtons: Qt.LeftButton | Qt.RightButton
onClicked: {
if (mouse.button === Qt.RightButton)
root.rightMouseButtonClicked()
else
root.checked = !root.checked
}
hoverEnabled: true hoverEnabled: true
anchors.fill: parent anchors.fill: parent
anchors.leftMargin: -arrowImage.width anchors.leftMargin: -arrowImage.width

View File

@@ -26,6 +26,8 @@
import QtQuick 2.1 import QtQuick 2.1
import QtQuick.Layouts 1.0 import QtQuick.Layouts 1.0
import QtQuickDesignerTheme 1.0 import QtQuickDesignerTheme 1.0
import QtQuick.Dialogs 1.3
import StudioControls 1.0 as StudioControls
Column { Column {
id: colorEditor id: colorEditor
@@ -198,6 +200,12 @@ Column {
ColorCheckButton { ColorCheckButton {
id: checkButton id: checkButton
buttonColor: colorEditor.color buttonColor: colorEditor.color
onCheckedChanged: {
if (contextMenu.opened)
contextMenu.close()
}
onRightMouseButtonClicked: contextMenu.popup(checkButton)
} }
LineEdit { LineEdit {
@@ -615,7 +623,13 @@ Column {
sliderMargins: 4 sliderMargins: 4
onClicked: colorEditor.color = colorButton.color onClicked: {
colorEditor.color = colorButton.color
if (contextMenu.opened)
contextMenu.close()
}
onRightMouseButtonClicked: contextMenu.popup(colorButton)
} }
Item { Item {
@@ -702,13 +716,23 @@ Column {
clickable: !colorEditor.transparent clickable: !colorEditor.transparent
onSelectedColorChanged: { onSelectedColorChanged: colorEditor.color = colorPalette.selectedColor
colorEditor.color = colorPalette.selectedColor;
}
onDialogColorChanged: colorEditor.color = colorPalette.selectedColor
} }
} }
} }
} }
} }
StudioControls.Menu {
id: contextMenu
StudioControls.MenuItem {
text: qsTr("Open Color Dialog")
onTriggered: colorPalette.showColorDialog(colorEditor.color)
}
}
} }

View File

@@ -34,6 +34,7 @@ Section {
id: root id: root
property int labelWidth: 42
property int spinBoxWidth: 96 property int spinBoxWidth: 96
SectionLayout { SectionLayout {
@@ -173,13 +174,13 @@ Section {
Label { Label {
text: "W" text: "W"
width: 42 width: root.labelWidth
} }
SpinBox { SpinBox {
backendValue: backendValues.contentWidth backendValue: backendValues.contentWidth
minimumValue: 0 minimumValue: 0
maximumValue: 8000 maximumValue: 10000
implicitWidth: root.spinBoxWidth implicitWidth: root.spinBoxWidth
Layout.fillWidth: true Layout.fillWidth: true
} }
@@ -191,13 +192,13 @@ Section {
Label { Label {
text: "H" text: "H"
width: 42 width: root.labelWidth
} }
SpinBox { SpinBox {
backendValue: backendValues.contentHeight backendValue: backendValues.contentHeight
minimumValue: 0 minimumValue: 0
maximumValue: 8000 maximumValue: 10000
implicitWidth: root.spinBoxWidth implicitWidth: root.spinBoxWidth
Layout.fillWidth: true Layout.fillWidth: true
} }
@@ -213,12 +214,12 @@ Section {
Label { Label {
text: "X" text: "X"
width: 42 width: root.labelWidth
} }
SpinBox { SpinBox {
backendValue: backendValues.contentX backendValue: backendValues.contentX
minimumValue: 0 minimumValue: -8000
maximumValue: 8000 maximumValue: 8000
implicitWidth: root.spinBoxWidth implicitWidth: root.spinBoxWidth
Layout.fillWidth: true Layout.fillWidth: true
@@ -231,12 +232,12 @@ Section {
Label { Label {
text: "Y" text: "Y"
width: 42 width: root.labelWidth
} }
SpinBox { SpinBox {
backendValue: backendValues.contentY backendValue: backendValues.contentY
minimumValue: 0 minimumValue: -8000
maximumValue: 8000 maximumValue: 8000
implicitWidth: root.spinBoxWidth implicitWidth: root.spinBoxWidth
Layout.fillWidth: true Layout.fillWidth: true
@@ -254,13 +255,13 @@ Section {
Label { Label {
text: "Top" text: "Top"
width: 42 width: root.labelWidth
} }
SpinBox { SpinBox {
backendValue: backendValues.topMargin backendValue: backendValues.topMargin
maximumValue: 0xffff minimumValue: -10000
minimumValue: 0 maximumValue: 10000
decimals: 0 decimals: 0
implicitWidth: root.spinBoxWidth implicitWidth: root.spinBoxWidth
Layout.fillWidth: true Layout.fillWidth: true
@@ -273,13 +274,13 @@ Section {
Label { Label {
text: "Bottom" text: "Bottom"
width: 42 width: root.labelWidth
} }
SpinBox { SpinBox {
backendValue: backendValues.bottomMargin backendValue: backendValues.bottomMargin
maximumValue: 0xffff minimumValue: -10000
minimumValue: 0 maximumValue: 10000
decimals: 0 decimals: 0
implicitWidth: root.spinBoxWidth implicitWidth: root.spinBoxWidth
Layout.fillWidth: true Layout.fillWidth: true
@@ -297,13 +298,13 @@ Section {
Label { Label {
text: "Left" text: "Left"
width: 42 width: root.labelWidth
} }
SpinBox { SpinBox {
backendValue: backendValues.leftMargin backendValue: backendValues.leftMargin
maximumValue: 0xffff minimumValue: -10000
minimumValue: 0 maximumValue: 10000
decimals: 0 decimals: 0
implicitWidth: root.spinBoxWidth implicitWidth: root.spinBoxWidth
Layout.fillWidth: true Layout.fillWidth: true
@@ -316,13 +317,13 @@ Section {
Label { Label {
text: "Right" text: "Right"
width: 42 width: root.labelWidth
} }
SpinBox { SpinBox {
backendValue: backendValues.rightMargin backendValue: backendValues.rightMargin
maximumValue: 0xffff minimumValue: -10000
minimumValue: 0 maximumValue: 10000
decimals: 0 decimals: 0
implicitWidth: root.spinBoxWidth implicitWidth: root.spinBoxWidth
Layout.fillWidth: true Layout.fillWidth: true

View File

@@ -38,7 +38,7 @@ Controls.Label {
property alias toolTip: toolTipArea.tooltip property alias toolTip: toolTipArea.tooltip
width: Math.max(Math.min(240, parent.width - 280), 50) width: Math.max(Math.min(240, parent.width - 280), 50)
color: Theme.color(Theme.PanelTextColorLight) color: StudioTheme.Values.themeTextColor
elide: Text.ElideRight elide: Text.ElideRight
font.pixelSize: StudioTheme.Values.myFontSize font.pixelSize: StudioTheme.Values.myFontSize

View File

@@ -45,8 +45,8 @@ Section {
width: 42 width: 42
} }
SpinBox { SpinBox {
maximumValue: 9999999 minimumValue: -10000
minimumValue: -9999999 maximumValue: 10000
decimals: 0 decimals: 0
backendValue: backendValues.topMargin backendValue: backendValues.topMargin
Layout.fillWidth: true Layout.fillWidth: true
@@ -62,8 +62,8 @@ Section {
width: 42 width: 42
} }
SpinBox { SpinBox {
maximumValue: 9999999 minimumValue: -10000
minimumValue: -9999999 maximumValue: 10000
decimals: 0 decimals: 0
backendValue: backendValues.bottomMargin backendValue: backendValues.bottomMargin
Layout.fillWidth: true Layout.fillWidth: true
@@ -80,8 +80,8 @@ Section {
width: 42 width: 42
} }
SpinBox { SpinBox {
maximumValue: 9999999 minimumValue: -10000
minimumValue: -9999999 maximumValue: 10000
decimals: 0 decimals: 0
backendValue: backendValues.leftMargin backendValue: backendValues.leftMargin
Layout.fillWidth: true Layout.fillWidth: true
@@ -97,8 +97,8 @@ Section {
width: 42 width: 42
} }
SpinBox { SpinBox {
maximumValue: 9999999 minimumValue: -10000
minimumValue: -9999999 maximumValue: 10000
decimals: 0 decimals: 0
backendValue: backendValues.rightMargin backendValue: backendValues.rightMargin
Layout.fillWidth: true Layout.fillWidth: true
@@ -111,8 +111,8 @@ Section {
} }
SecondColumnLayout { SecondColumnLayout {
SpinBox { SpinBox {
maximumValue: 9999999 minimumValue: -10000
minimumValue: -9999999 maximumValue: 10000
decimals: 0 decimals: 0
backendValue: backendValues.margins backendValue: backendValues.margins
Layout.fillWidth: true Layout.fillWidth: true

View File

@@ -24,7 +24,7 @@
****************************************************************************/ ****************************************************************************/
import QtQuick 2.1 import QtQuick 2.1
import QtQuick.Controls 1.1 as Controls import QtQuick.Controls 2.12 as Controls
import QtQuick.Layouts 1.0 import QtQuick.Layouts 1.0
import QtQuickDesignerTheme 1.0 import QtQuickDesignerTheme 1.0
import StudioTheme 1.0 as StudioTheme import StudioTheme 1.0 as StudioTheme
@@ -52,7 +52,7 @@ Item {
Controls.Label { Controls.Label {
id: label id: label
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
color: Theme.color(Theme.PanelTextColorLight) color: StudioTheme.Values.themeTextColor
x: 22 x: 22
font.bold: true font.bold: true
font.pixelSize: StudioTheme.Values.myFontSize font.pixelSize: StudioTheme.Values.myFontSize
@@ -75,7 +75,7 @@ Item {
} }
color: Theme.color(Theme.BackgroundColorDark) color: StudioTheme.Values.themeSectionHeadBackground
Rectangle { Rectangle {
visible: false visible: false

View File

@@ -32,7 +32,12 @@ import QtQuick.Controls.Private 1.0 // showing a ToolTip
Item { Item {
property color selectedColor property color selectedColor
property bool clickable : true property bool clickable : true
property color oldColor
function showColorDialog(color) {
oldColor = color
paletteModel.showDialog(color)
}
width: 200 width: 200
height: 40 height: 40
@@ -43,6 +48,8 @@ Item {
paletteModel.addItem(colorCode) paletteModel.addItem(colorCode)
} }
signal dialogColorChanged
Component { Component {
id: colorItemDelegate id: colorItemDelegate
@@ -94,7 +101,20 @@ Item {
} }
} }
SimpleColorPaletteModel { id: paletteModel } SimpleColorPaletteModel {
id: paletteModel
onCurrentColorChanged: {
selectedColor = color
dialogColorChanged()
}
onColorDialogRejected: {
selectedColor = oldColor
dialogColorChanged()
}
}
ListView { ListView {
id: colorPaletteView id: colorPaletteView
model: paletteModel model: paletteModel

View File

@@ -81,10 +81,7 @@ T.Popup {
} }
onMoved: { onMoved: {
var currValue = myControl.value
myControl.realValue = slider.value myControl.realValue = slider.value
if (currValue !== myControl.realValue)
myControl.realValueModified() myControl.realValueModified()
} }
} }

View File

@@ -71,6 +71,8 @@ T.SpinBox {
property real __sliderIndicatorWidth: StudioTheme.Values.squareComponentWidth property real __sliderIndicatorWidth: StudioTheme.Values.squareComponentWidth
property real __sliderIndicatorHeight: StudioTheme.Values.height property real __sliderIndicatorHeight: StudioTheme.Values.height
property alias compressedValueTimer: myTimer
signal realValueModified signal realValueModified
signal compressedRealValueModified signal compressedRealValueModified
signal dragStarted signal dragStarted

View File

@@ -88,6 +88,10 @@ TextInput {
// Force focus on the non visible component to receive key events // Force focus on the non visible component to receive key events
dragModifierWorkaround.forceActiveFocus() dragModifierWorkaround.forceActiveFocus()
} else { } else {
if (myControl.compressedValueTimer.running) {
myControl.compressedValueTimer.stop()
calcValue(myControl.compressedRealValueModified)
}
mouseArea.cursorShape = Qt.PointingHandCursor // TODO mouseArea.cursorShape = Qt.PointingHandCursor // TODO
myControl.drag = false myControl.drag = false
myControl.dragEnded() myControl.dragEnded()
@@ -97,15 +101,13 @@ TextInput {
myControl.focus = false myControl.focus = false
} }
} }
onTranslationChanged: calcValue() onTranslationChanged: calcValue(myControl.realValueModified)
onMultiplierChanged: calcValue() onMultiplierChanged: calcValue(myControl.realValueModified)
function calcValue() { function calcValue(callback) {
var tmp = myControl.realDragRange / StudioTheme.Values.dragLength var tmp = myControl.realDragRange / StudioTheme.Values.dragLength
var currValue = myControl.realValue
myControl.setRealValue(dragHandler.initialValue + (tmp * dragHandler.translation.x * dragHandler.multiplier)) myControl.setRealValue(dragHandler.initialValue + (tmp * dragHandler.translation.x * dragHandler.multiplier))
if (currValue !== myControl.realValue) callback()
myControl.realValueModified()
} }
} }
@@ -161,11 +163,8 @@ TextInput {
if (wheel.modifiers & Qt.ShiftModifier) if (wheel.modifiers & Qt.ShiftModifier)
mouseArea.stepSize = myControl.maxStepSize mouseArea.stepSize = myControl.maxStepSize
var currValue = myControl.realValue
myControl.valueFromText(textInput.text, myControl.locale) myControl.valueFromText(textInput.text, myControl.locale)
myControl.setRealValue(myControl.realValue + (wheel.angleDelta.y / 120.0 * mouseArea.stepSize)) myControl.setRealValue(myControl.realValue + (wheel.angleDelta.y / 120.0 * mouseArea.stepSize))
if (currValue !== myControl.realValue)
myControl.realValueModified() myControl.realValueModified()
// Reset stepSize // Reset stepSize

View File

@@ -123,6 +123,8 @@ QtObject {
property string themeTranslationIndicatorBorder: "#7f7f7f" property string themeTranslationIndicatorBorder: "#7f7f7f"
property string themeSectionHeadBackground: "#191919"
// Taken out of Constants.js // Taken out of Constants.js
property string themeChangedStateText: "#99ccff" property string themeChangedStateText: "#99ccff"
} }

View File

@@ -220,12 +220,17 @@ static PyObject *cdbext_listOfLocals(PyObject *, PyObject *args) // -> [ Value ]
++currentPartialIname; // skip "local" part ++currentPartialIname; // skip "local" part
ULONG symbolGroupIndex = 0; ULONG symbolGroupIndex = 0;
ULONG childEndIndex = 0;
for (;symbolGroupIndex < scopeEnd; ++symbolGroupIndex) { for (;symbolGroupIndex < scopeEnd; ++symbolGroupIndex) {
const PyValue value(symbolGroupIndex, symbolGroup); PyValue value(symbolGroupIndex, symbolGroup);
if (childEndIndex <= symbolGroupIndex) { // do not return a child value
if (value.name() == *currentPartialIname) { if (value.name() == *currentPartialIname) {
PyList_Append(locals, createPythonObject(value)); PyList_Append(locals, createPythonObject(value));
return locals; return locals;
} }
++childEndIndex;
}
childEndIndex += ULONG(value.childCount());
} }
} }

View File

@@ -296,8 +296,11 @@ void GraphicsView::contextMenuEvent(QContextMenuEvent *event)
auto openStyleEditor = [this]() { m_dialog.show(); }; auto openStyleEditor = [this]() { m_dialog.show(); };
QMenu menu; QMenu menu;
if (qEnvironmentVariableIsSet("QTC_STYLE_CURVE_EDITOR")) {
QAction *openEditorAction = menu.addAction(tr("Open Style Editor")); QAction *openEditorAction = menu.addAction(tr("Open Style Editor"));
connect(openEditorAction, &QAction::triggered, openStyleEditor); connect(openEditorAction, &QAction::triggered, openStyleEditor);
}
menu.addSeparator(); menu.addSeparator();
auto insertKeyframes = [this, event]() { auto insertKeyframes = [this, event]() {

View File

@@ -29,10 +29,14 @@
#include "designersettings.h" #include "designersettings.h"
#include <coreplugin/icore.h>
#include <QColorDialog>
#include <QHash> #include <QHash>
#include <QByteArray> #include <QByteArray>
#include <QDebug> #include <QDebug>
#include <QSettings> #include <QSettings>
#include <QTimer>
namespace QmlDesigner { namespace QmlDesigner {
@@ -143,4 +147,16 @@ void SimpleColorPaletteModel::write()
SimpleColorPaletteSingleton::getInstance().writePalette(); SimpleColorPaletteSingleton::getInstance().writePalette();
} }
void SimpleColorPaletteModel::showDialog(QColor color)
{
auto colorDialog = new QColorDialog(Core::ICore::dialogParent());
colorDialog->setCurrentColor(color);
colorDialog->setAttribute(Qt::WA_DeleteOnClose);
connect(colorDialog, &QDialog::rejected, this, &SimpleColorPaletteModel::colorDialogRejected);
connect(colorDialog, &QColorDialog::currentColorChanged, this, &SimpleColorPaletteModel::currentColorChanged);
QTimer::singleShot(0, [colorDialog](){ colorDialog->exec(); });
}
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -28,6 +28,7 @@
#include <QAbstractListModel> #include <QAbstractListModel>
#include <QtQml/qqml.h> #include <QtQml/qqml.h>
#include <QList> #include <QList>
#include <QColor>
namespace QmlDesigner { namespace QmlDesigner {
@@ -59,6 +60,12 @@ public:
bool read(); bool read();
void write(); void write();
Q_INVOKABLE void showDialog(QColor color);
signals:
void colorDialogRejected();
void currentColorChanged(const QColor &color);
private slots: private slots:
void setPalette(); void setPalette();

View File

@@ -29,7 +29,6 @@
#include <QAbstractListModel> #include <QAbstractListModel>
#include <QtQml/qqml.h> #include <QtQml/qqml.h>
#include <QList> #include <QList>
#include <QColor>
#include <simplecolorpalette.h> #include <simplecolorpalette.h>
namespace QmlDesigner { namespace QmlDesigner {

View File

@@ -33,7 +33,6 @@ AnimationCurveDialog::AnimationCurveDialog(QWidget *parent)
: QDialog(parent) : QDialog(parent)
, m_editor(nullptr) , m_editor(nullptr)
{ {
setWindowFlag(Qt::WindowStaysOnTopHint, true);
setWindowFlag(Qt::WindowContextHelpButtonHint, false); setWindowFlag(Qt::WindowContextHelpButtonHint, false);
} }
@@ -41,7 +40,6 @@ AnimationCurveDialog::AnimationCurveDialog(DesignTools::CurveEditorModel *model,
: QDialog(parent) : QDialog(parent)
, m_editor(nullptr) , m_editor(nullptr)
{ {
setWindowFlag(Qt::WindowStaysOnTopHint, true);
setWindowFlag(Qt::WindowContextHelpButtonHint, false); setWindowFlag(Qt::WindowContextHelpButtonHint, false);
setModel(model); setModel(model);
} }

View File

@@ -40,6 +40,7 @@
#include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/actionmanager/command.h> #include <coreplugin/actionmanager/command.h>
#include <coreplugin/icore.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
@@ -101,7 +102,7 @@ QAction *createAction(const Core::Id &id,
TimelineToolBar::TimelineToolBar(QWidget *parent) TimelineToolBar::TimelineToolBar(QWidget *parent)
: QToolBar(parent) : QToolBar(parent)
, m_grp() , m_grp()
, m_dialog() , m_dialog(Core::ICore::dialogParent())
, m_curveModel(new AnimationCurveEditorModel(0., 500.)) , m_curveModel(new AnimationCurveEditorModel(0., 500.))
{ {
m_dialog.setModel(m_curveModel); m_dialog.setModel(m_curveModel);
@@ -221,7 +222,7 @@ void TimelineToolBar::removeTimeline(const QmlTimeline &timeline)
void TimelineToolBar::openAnimationCurveEditor() void TimelineToolBar::openAnimationCurveEditor()
{ {
m_dialog.open(); m_dialog.show();
} }
void TimelineToolBar::updateCurve(DesignTools::PropertyTreeItem *item) void TimelineToolBar::updateCurve(DesignTools::PropertyTreeItem *item)