summaryrefslogtreecommitdiffstats
path: root/src/Authoring/Qt3DStudio/Palettes/Slide/SlideView.qml
diff options
context:
space:
mode:
Diffstat (limited to 'src/Authoring/Qt3DStudio/Palettes/Slide/SlideView.qml')
-rw-r--r--src/Authoring/Qt3DStudio/Palettes/Slide/SlideView.qml416
1 files changed, 416 insertions, 0 deletions
diff --git a/src/Authoring/Qt3DStudio/Palettes/Slide/SlideView.qml b/src/Authoring/Qt3DStudio/Palettes/Slide/SlideView.qml
new file mode 100644
index 00000000..7100ed8a
--- /dev/null
+++ b/src/Authoring/Qt3DStudio/Palettes/Slide/SlideView.qml
@@ -0,0 +1,416 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** 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.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.8
+import QtQuick.Controls 2.2
+import QtQuick.Layouts 1.3
+import "../controls"
+
+Rectangle {
+
+ id: root
+
+ readonly property bool masterSlide: _parentView.showMasterSlide
+
+ function handleMouseClicks(mouse, mappedCoords) {
+ if (mouse.button === Qt.RightButton) {
+ _parentView.showContextMenu(mappedCoords.x, mappedCoords.y, -1);
+ } else {
+ root.focus = true;
+ //Unselect All element when we click outside slider item in listView.
+ //It worked as it in old version.
+ _parentView.deselectAll();
+ mouse.accepted = false
+ }
+ }
+
+ Connections {
+ target: _parentView
+ onDockAreaChanged: diIndicator.reAnchor();
+ }
+
+ color: _backgroundColor
+
+ Column {
+ anchors {
+ top: parent.top
+ topMargin: 5
+ horizontalCenter: parent.horizontalCenter
+ }
+
+ spacing: 5
+ width: parent.width
+
+ MouseArea {
+ id: masterMouseArea
+
+ width: parent.width
+ height: childrenRect.height
+
+ propagateComposedEvents: true
+ acceptedButtons: Qt.AllButtons
+ onClicked: {
+ const coords = mapToItem(root, mouse.x, mouse.y);
+ root.handleMouseClicks(mouse, coords);
+ }
+
+ Column {
+ id: masterButtonColumn
+ spacing: -4
+ anchors.horizontalCenter: parent.horizontalCenter
+ Button {
+ id: masterEditButton
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ onClicked: _parentView.showMasterSlide = !_parentView.showMasterSlide
+
+ background: Rectangle {
+ color: "transparent"
+ }
+ contentItem: Image {
+ source: _parentView.showMasterSlide ? _resDir + "Slide-Normal.png"
+ : _resDir + "Slide-Master-Active.png"
+ }
+ }
+
+ StyledLabel {
+ id: masterEditLabel
+ text: _parentView.showMasterSlide ? qsTr("Leave Master") : qsTr("Edit Master")
+ font.pixelSize: _fontSize
+ color: _masterColor
+ verticalAlignment: Text.AlignVCenter
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+ }
+ StyledMenuSeparator {
+ id: separator
+ leftPadding: 12
+ rightPadding: 12
+ }
+
+ ListView {
+ id: slideList
+
+ ScrollBar.vertical: ScrollBar {}
+
+ width: root.width
+ property int listItemHeight: root.height - masterButtonColumn.height
+ - separator.height - separator2.height
+ - parent.spacing * 2 - 14 - slideControlButton.height
+ - slideControlButton.spacing * 2
+ // DockWidgetArea is enum; value 0x2 denotes right edge
+ property int area: _parentView.dockArea
+ height: listItemHeight > 0 ? listItemHeight : 0
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ boundsBehavior: Flickable.StopAtBounds
+ clip: true
+
+ model: _parentView.currentModel
+ spacing: 10
+
+ Rectangle {
+ id: diIndicator
+ height: slideList.listItemHeight
+ width: dataInputImage2.height
+
+ function reAnchor() {
+ // reset anchors before setting new value
+ anchors.right = undefined
+ anchors.left = undefined
+ // default position for indicator is right edge
+ // except when slide panel is attached to window right side
+ if (parent.area === 2)
+ anchors.left = parent.left
+ else
+ anchors.right = parent.right
+ }
+
+ color: _parentView.controlled ? _dataInputColor : "transparent"
+ Row {
+ rotation: 90
+ anchors.centerIn: parent
+ spacing: 5
+ Image {
+ id: dataInputImage2
+ fillMode: Image.Pad
+ visible: _parentView.controlled
+ source: _resDir + "Objects-DataInput-White.png"
+
+ }
+ StyledLabel {
+ text: _parentView.currController
+ anchors.margins: 16
+ color: "#ffffff"
+ }
+ }
+ }
+
+ MouseArea {
+ // mouse handling for the area not covered by the delegates
+ propagateComposedEvents: true
+ anchors.fill: parent
+ z: -1 // Only reached when clicking outside delegates
+ acceptedButtons: Qt.AllButtons
+ onClicked: {
+ if (slideList.indexAt(mouse.x, mouse.y) === -1) {
+ const coords = mapToItem(root, mouse.x, mouse.y);
+ root.handleMouseClicks(mouse, coords);
+ } else {
+ mouse.accepted = false;
+ }
+ }
+ onPressed: {
+ if (slideList.indexAt(mouse.x, mouse.y) !== -1)
+ mouse.accepted = false;
+ }
+ }
+
+ delegate: MouseArea {
+ id: delegateArea
+
+ property int dragIndex
+ property bool held : false
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ height: delegateItem.height
+ width: parent.width
+
+ acceptedButtons: Qt.RightButton | Qt.LeftButton
+ drag.target: held ? delegateItem : null
+ drag.axis: Drag.YAxis
+
+ onPressed: {
+ dragIndex = model.index;
+ _parentView.startSlideRearrange(model.index);
+ if (mouse.x > delegateItem.x && mouse.x < delegateItem.x + delegateItem.width)
+ held = true;
+ }
+
+ onReleased: {
+ held = false;
+ _parentView.finishSlideRearrange(true);
+ }
+
+ onCanceled: {
+ held = false;
+ _parentView.finishSlideRearrange(false);
+ }
+
+ onClicked: {
+ _parentView.deselectAll();
+ if (mouse.button === Qt.LeftButton) {
+ root.focus = true;
+ model.selected = true;
+ }
+ if (mouse.button === Qt.RightButton) {
+ const coords = mapToItem(root, mouse.x, mouse.y);
+ _parentView.showContextMenu(coords.x, coords.y, model.index);
+ }
+ }
+
+ Item {
+ id: delegateItem
+
+ anchors.centerIn: parent
+ height: column.implicitHeight
+ width: 100
+
+ Drag.keys: "application/x-slide"
+ Drag.active: delegateArea.held
+ Drag.hotSpot.x: width / 2
+ Drag.hotSpot.y: height / 2
+ Drag.source: delegateArea
+
+ Column {
+ id: column
+ spacing: 2
+ anchors.fill: parent
+ Image {
+ id: slideImage
+
+ source: {
+ if (masterSlide)
+ return _resDir + "Slide-Master-Active.png"
+ return model.selected ? _resDir + "Slide-Active.png"
+ : _resDir + "Slide-Normal.png";
+ }
+ }
+
+ Label { // variants
+ width: slideImage.width
+ font.pixelSize: 14
+ font.letterSpacing: 2
+ leftPadding: 3
+ topPadding: -3
+ bottomPadding: 8
+ background: Rectangle { color: _variantsSlideViewBGColor }
+ wrapMode: Text.WrapAnywhere
+ lineHeight: .6
+ visible: model.variants !== undefined && model.variants !== ""
+ text: model.variants ? model.variants : ""
+
+ MouseArea {
+ anchors.fill: parent
+ hoverEnabled: true
+ onEntered: {
+ _parentView.showVariantsTooltip(
+ model.index, mapToGlobal(x + width + 2, y));
+ }
+ onExited : {
+ _parentView.hideVariantsTooltip();
+ }
+ }
+ }
+
+ Item {
+ anchors.horizontalCenter: slideImage.horizontalCenter
+
+ height: childrenRect.height
+ width: childrenRect.width
+ Row {
+ StyledLabel {
+ visible: !masterSlide
+ text: model.index + 1 + ": "
+ }
+
+ TextInput {
+ id: slideName
+
+ property bool ignoreHotkeys: true
+
+ readOnly: masterSlide
+ selectByMouse: !readOnly
+ color: _textColor
+ text: model.name
+ font.pixelSize: _fontSize
+
+ onFocusChanged: {
+ if (focus && !readOnly)
+ selectAll();
+ }
+
+ onEditingFinished: {
+ model.name = text;
+ slideName.focus = false;
+ }
+
+ Keys.onEscapePressed: {
+ slideName.undo();
+ slideName.focus = false;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ DropArea {
+ anchors.fill: parent
+ keys: "application/x-slide"
+ onEntered: {
+ var oldIndex = drag.source.dragIndex
+ var newIndex = model.index
+ _parentView.moveSlide(oldIndex, newIndex)
+ drag.source.dragIndex = newIndex
+ }
+ }
+
+ states: State {
+ when: held
+
+ ParentChange {
+ target: delegateItem
+ parent: slideList
+ }
+
+ PropertyChanges {
+ target: delegateItem
+ anchors.centerIn: null
+ }
+ }
+ }
+ }
+
+ StyledMenuSeparator {
+ id: separator2
+ leftPadding: 12
+ rightPadding: 12
+ }
+ // RowLayout for possible addition and positioning of label
+ // showing the controller name
+ RowLayout {
+ Layout.rightMargin: 12
+ Layout.leftMargin: 12
+ anchors.left: parent.left
+ Button {
+ id: slideControlButton
+ width: dataInputImage.sourceSize.width
+ height: dataInputImage.sourceSize.height
+ Layout.leftMargin: 12
+ property bool controlled: _parentView.controlled
+ property string currentController: _parentView.currController
+ property string toolTip: _parentView.toolTip
+ background: Rectangle {
+ color: controlButtonArea.containsMouse ? _studioColor1 : _backgroundColor
+ }
+ MouseArea {
+ id: controlButtonArea
+ anchors.fill: parent
+ hoverEnabled: true
+ acceptedButtons: Qt.LeftButton
+ onClicked: {
+ _parentView.showControllerDialog(mapToGlobal(x + width, y + height));
+ }
+ }
+ Image {
+ id: dataInputImage
+ anchors.fill: parent
+ fillMode: Image.Pad
+ property bool controlled: parent.controlled
+ source: {
+ _resDir + (controlled
+ ? "Objects-DataInput-Active.png"
+ : "Objects-DataInput-Inactive.png")
+ }
+ }
+ StyledTooltip {
+ id: tooltip
+ enabled: controlButtonArea.containsMouse
+ text: parent.toolTip
+ }
+ }
+ StyledLabel {
+ id: dataInputName
+ text: _parentView.currController
+ color: _parentView.controlled ? _dataInputColor : "transparent"
+ }
+ }
+ }
+}