diff options
Diffstat (limited to 'src/Authoring/Qt3DStudio/Palettes/Slide/SlideView.qml')
-rw-r--r-- | src/Authoring/Qt3DStudio/Palettes/Slide/SlideView.qml | 416 |
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" + } + } + } +} |