From ed58e2cda14c5251132902fa65c10044c60ceb71 Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Fri, 23 Sep 2022 06:20:43 -0500 Subject: [PATCH] adding a presentation editor and ui to get there --- src/qml/presenter/Library.qml | 4 +- src/qml/presenter/MainWindow.qml | 19 +++ src/qml/presenter/PresentationEditor.qml | 190 +++++++++++++++++++++++ src/resources.qrc | 1 + 4 files changed, 212 insertions(+), 2 deletions(-) create mode 100644 src/qml/presenter/PresentationEditor.qml diff --git a/src/qml/presenter/Library.qml b/src/qml/presenter/Library.qml index c0be45c..2c54457 100644 --- a/src/qml/presenter/Library.qml +++ b/src/qml/presenter/Library.qml @@ -845,7 +845,7 @@ Item { dragItemTitle = title; dragItemType = "pres"; dragItemText = ""; - dragItemBackgroundType = "pres"; + dragItemBackgroundType = "image"; dragItemBackground = filePath; } else { presListItem.Drag.drop() @@ -866,7 +866,7 @@ Item { const pres = pressqlmodel.getPresentation(presentationLibraryList.currentIndex); if (!editMode) editMode = true; - editType = "pres"; + editType = "presentation"; editSwitch(pres); } } diff --git a/src/qml/presenter/MainWindow.qml b/src/qml/presenter/MainWindow.qml index d784152..c483b66 100644 --- a/src/qml/presenter/MainWindow.qml +++ b/src/qml/presenter/MainWindow.qml @@ -88,6 +88,12 @@ Controls.Page { visible: false anchors.fill: parent } + + Presenter.PresentationEditor { + id: presentationEditor + visible: false + anchors.fill: parent + } } Presenter.Library { @@ -153,6 +159,7 @@ Controls.Page { videoEditor.visible = false; videoEditor.stop(); imageEditor.visible = false; + presentationEditor.visible = false; songEditor.visible = true; songEditor.changeSong(item); break; @@ -160,6 +167,7 @@ Controls.Page { presentation.visible = false; songEditor.visible = false; imageEditor.visible = false; + presentationEditor.visible = false; videoEditor.visible = true; videoEditor.changeVideo(item); break; @@ -168,14 +176,25 @@ Controls.Page { videoEditor.visible = false; videoEditor.stop(); songEditor.visible = false; + presentationEditor.visible = false; imageEditor.visible = true; imageEditor.changeImage(item); break; + case "presentation" : + presentation.visible = false; + videoEditor.visible = false; + videoEditor.stop(); + songEditor.visible = false; + imageEditor.visible = false; + presentationEditor.visible = true; + presentationEditor.changePresentation(item); + break; default: videoEditor.visible = false; videoEditor.stop(); songEditor.visible = false; imageEditor.visible = false; + presentationEditor.visible = false; presentation.visible = true; editMode = false; } diff --git a/src/qml/presenter/PresentationEditor.qml b/src/qml/presenter/PresentationEditor.qml new file mode 100644 index 0000000..1ca01b3 --- /dev/null +++ b/src/qml/presenter/PresentationEditor.qml @@ -0,0 +1,190 @@ +import QtQuick 2.13 +import QtQuick.Controls 2.15 as Controls +import QtQuick.Dialogs 1.3 +import QtQuick.Layouts 1.2 +import org.kde.kirigami 2.13 as Kirigami +import "./" as Presenter + +Item { + id: root + + property string type: "presentation" + property var presentation + + GridLayout { + id: mainLayout + anchors.fill: parent + columns: 2 + rowSpacing: 5 + columnSpacing: 0 + + Controls.ToolBar { + Layout.fillWidth: true + Layout.columnSpan: 2 + id: toolbar + RowLayout { + anchors.fill: parent + + Controls.ComboBox { + model: Qt.fontFamilies() + implicitWidth: 300 + editable: true + hoverEnabled: true + /* onCurrentTextChanged: showPassiveNotification(currentText) */ + } + Controls.SpinBox { + editable: true + from: 5 + to: 72 + hoverEnabled: true + } + Controls.ComboBox { + model: ["PRESENTATIONS", "Center", "Right", "Justify"] + implicitWidth: 100 + hoverEnabled: true + } + Controls.ToolSeparator {} + Item { Layout.fillWidth: true } + Controls.ToolSeparator {} + Controls.ToolButton { + text: "Effects" + icon.name: "presentation-auto-adjust" + hoverEnabled: true + onClicked: {} + } + Controls.ToolButton { + id: backgroundButton + text: "Select Presentation" + icon.name: "fileopen" + hoverEnabled: true + onClicked: backgroundType.open() + } + + Controls.Popup { + id: backgroundType + x: backgroundButton.x + y: backgroundButton.y + backgroundButton.height + 20 + modal: true + focus: true + dim: false + background: Rectangle { + Kirigami.Theme.colorSet: Kirigami.Theme.Tooltip + color: Kirigami.Theme.backgroundColor + radius: 10 + border.color: Kirigami.Theme.activeBackgroundColor + border.width: 2 + } + closePolicy: Controls.Popup.CloseOnEscape | Controls.Popup.CloseOnPressOutsideParent + ColumnLayout { + anchors.fill: parent + Controls.ToolButton { + Layout.fillHeight: true + Layout.fillWidth: true + text: "Presentation" + icon.name: "emblem-presentations-symbolic" + onClicked: presentationFileDialog.open() & backgroundType.close() + } + Controls.ToolButton { + Layout.fillWidth: true + Layout.fillHeight: true + text: "Presentation" + icon.name: "folder-pictures-symbolic" + onClicked: presentationFileDialog.open() & backgroundType.close() + } + } + } + } + } + + Controls.SplitView { + Layout.fillHeight: true + Layout.fillWidth: true + Layout.columnSpan: 2 + handle: Item{ + implicitWidth: 6 + Rectangle { + height: parent.height + anchors.horizontalCenter: parent.horizontalCenter + width: 1 + color: Controls.SplitHandle.hovered ? Kirigami.Theme.hoverColor : Kirigami.Theme.backgroundColor + } + } + + ColumnLayout { + Controls.SplitView.fillHeight: true + Controls.SplitView.preferredWidth: 300 + Controls.SplitView.minimumWidth: 100 + + Controls.TextField { + id: presentationTitleField + + Layout.preferredWidth: 300 + Layout.fillWidth: true + Layout.leftMargin: 20 + Layout.rightMargin: 20 + + placeholderText: "Title..." + text: presentation.title + padding: 10 + /* onEditingFinished: updateTitle(text); */ + } + + Item { + id: empty + Layout.fillHeight: true + } + } + ColumnLayout { + Controls.SplitView.fillHeight: true + Controls.SplitView.preferredWidth: 700 + Controls.SplitView.minimumWidth: 300 + spacing: 5 + + Item { + id: topEmpty + Layout.fillHeight: true + } + + Image { + id: presentationPreview + Layout.preferredWidth: 600 + Layout.preferredHeight: Layout.preferredWidth / 16 * 9 + Layout.alignment: Qt.AlignCenter + fillMode: Image.PreserveAspectFit + source: presentation.filePath + } + RowLayout { + Layout.fillWidth: true; + Layout.alignment: Qt.AlignCenter + Layout.leftMargin: 50 + Layout.rightMargin: 50 + Controls.ToolButton { + id: leftArrow + text: "Back" + icon.name: "back" + onClicked: presentationPreview.currentFrame = presentationPreview.currentFrame - 1 + } + Item { + Layout.fillWidth: true + } + Controls.ToolButton { + id: rightArrow + text: "Next" + icon.name: "next" + onClicked: presentationPreview.currentFrame = presentationPreview.currentFrame + 1 + } + } + Item { + id: botEmpty + Layout.fillHeight: true + } + + } + } + } + + function changePresentation(presentation) { + root.presentation = presentation; + print(presentation.filePath.toString()); + } +} diff --git a/src/resources.qrc b/src/resources.qrc index 7866e05..909aca4 100644 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -12,6 +12,7 @@ qml/presenter/SongEditor.qml qml/presenter/VideoEditor.qml qml/presenter/ImageEditor.qml + qml/presenter/PresentationEditor.qml qml/presenter/Slide.qml qml/presenter/SlideEditor.qml qml/presenter/DragHandle.qml