lumina/src/qml/presenter/MainWindow.qml

310 lines
10 KiB
QML

import QtQuick 2.15
import QtQuick.Dialogs 1.0
import QtQuick.Controls 2.15 as Controls
import QtQuick.Window 2.15
import QtQuick.Layouts 1.15
import org.kde.kirigami 2.13 as Kirigami
import "./" as Presenter
import org.presenter 1.0
Controls.Page {
id: mainPage
padding: 0
// properties passed around for the slides
property int currentServiceItem
property int currentSlide
property int totalServiceItems: ServiceItemModel.rowCount()
property int totalSlides: SlideMod.count()
property url imageBackground: presentation.imageBackground
property url videoBackground: presentation.vidBackground
property string currentText: presentation.text
property int blurRadius: 0
/* property var video */
property int dragItemIndex
property string dragItemTitle: ""
property string dragItemType: ""
property string dragItemText: ""
property string dragItemAudio: ""
property string dragItemBackgroundType: ""
property string dragItemBackground: ""
property string dragItemFont: ""
property string dragItemFontSize
property int dragItemSlideNumber
property bool editing: true
property Item slideItem
property var song
property var draggedLibraryItem
property var serviceItems: ServiceItemModel
property bool songDragged: false
property string editType
property var currentWindow: presentation
property var dragHighlightLine
Component.onCompleted: {
changeServiceItem(0);
presentation.forceActiveFocus();
/* const loaded = ServiceItemModel.loadLastSaved(); */
/* if (!loaded) */
/* showPassiveNotification("Failed loading last file"); */
}
Item {
id: mainItem
anchors.fill: parent
Controls.SplitView {
id: splitMainView
anchors.fill: parent
handle: Item{
implicitWidth: Kirigami.Units.gridUnit / 2
Rectangle {
height: parent.height
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width / 4
color: parent.Controls.SplitHandle.hovered ? Kirigami.Theme.hoverColor : "#00000000"
}
}
Presenter.ServiceList {
id: leftDock
Controls.SplitView.preferredWidth: Kirigami.Units.largeSpacing * 25
Controls.SplitView.maximumWidth: Kirigami.Units.largeSpacing * 50
z: 1
}
FocusScope {
id: mainPageArea
Controls.SplitView.fillWidth: true
Controls.SplitView.fillHeight: true
Controls.SplitView.minimumWidth: 100
Presenter.Presentation {
id: presentation
anchors.fill: parent
focus: true
}
Presenter.SongEditor {
id: songEditor
visible: false
anchors.fill: parent
}
Presenter.VideoEditor {
id: videoEditor
visible: false
anchors.fill: parent
}
Presenter.ImageEditor {
id: imageEditor
visible: false
anchors.fill: parent
}
Presenter.PresentationEditor {
id: presentationEditor
visible: false
anchors.fill: parent
}
}
Presenter.Library {
id: library
Controls.SplitView.preferredWidth: libraryOpen ? Kirigami.Units.largeSpacing * 25 : 0
Controls.SplitView.maximumWidth: Kirigami.Units.largeSpacing * 50
visible: libraryOpen ? true : false
}
}
}
/* Loader { */
/* id: presWinLoader */
/* active: false */
/* sourceComponent: Presenter.PresentationWindow {} */
/* } */
/* Presenter.PresentationWindow { */
/* id: pWindow */
/* } */
SongProxyModel { id: songProxyModel }
ImageProxyModel { id: imageProxyModel }
PresentationProxyModel { id: presProxyModel }
VideoProxyModel { id: videoProxyModel }
ServiceThing { id: serviceThing }
FileHelper { id: fileHelper }
SlideHelper { id: slideHelper }
SongEditor {
id: songEditor
songModel: songProxyModel.songModel()
}
function changeServiceItem(index) {
console.log("change-service-item: " + index);
const item = ServiceItemC.getRust(index, ServiceItemModel);
currentServiceItem = index;
const slideId = SlideModel.findSlideIdFromServItm(index);
currentSlide = slideId;
const slide = SlideModel.getItemRust(slideId, SlideMod);
console.log("index grabbed: " + index);
console.log(slideId);
console.log("Time to start changing");
/* presentation.stopVideo(); */
/* pWindow.stopVideo(); */
/* presentation.itemType = item.type; */
ServiceItemModel.activate(index);
console.log("%%%%%%%%%");
console.log(slide);
/* SlideObject.changeSlide(slide, slideId); */
slideHelper.chngSlide(slide, slideId, SlideObject);
console.log("%%%%%%%%%");
/* SlideObject.changeSlide(slide, slideId); */
/* if (item.backgroundType === "video") */
/* { */
/* presentation.loadVideo(); */
/* } */
presentation.textIndex = 0;
/* ServiceItemModel.select(index); */
/* presentation.changeSlide(); */
console.log("Slide changed to: " + item.name);
}
function changeSlide(index) {
console.log("index grabbed: " + index);
const item = SlideModel.getItemRust(index, SlideMod);
currentSlide = index;
currentServiceItem = item.serviceItemId;
console.log("index grabbed: " + index);
console.log(item);
/* presentation.stopVideo(); */
/* pWindow.stopVideo(); */
/* presentation.itemType = item.type; */
console.log("Time to start changing");
ServiceItemModel.activate(currentServiceItem);
/* SlideObject.changeSlide(slide, slideId); */
slideHelper.chngSlide(item, index, SlideObject);
/* SlideMod.activate(index); */
presentation.textIndex = 0;
console.log("Slide changed to: ", item.imageBackground);
activeServiceItem = ServiceItemC.getRust(currentServiceItem, ServiceItemModel).name;
}
function loopVideo() {
presentation.loopVideo();
pWindow.loopVideo();
}
function editSwitch(item, mode) {
if (editMode) {
switch (mode) {
case "song" :
presentation.visible = false;
videoEditor.visible = false;
videoEditor.stop();
imageEditor.visible = false;
presentationEditor.visible = false;
songEditor.visible = true;
songEditor.changeSong(item);
currentWindow = songEditor;
break;
case "video" :
presentation.visible = false;
songEditor.visible = false;
imageEditor.visible = false;
presentationEditor.visible = false;
videoEditor.visible = true;
videoEditor.changeVideo(item);
currentWindow = videoEditor;
break;
case "image" :
presentation.visible = false;
videoEditor.visible = false;
videoEditor.stop();
songEditor.visible = false;
presentationEditor.visible = false;
imageEditor.visible = true;
imageEditor.changeImage(item);
currentWindow = imageEditor;
break;
case "presentation" :
presentation.visible = false;
videoEditor.visible = false;
videoEditor.stop();
songEditor.visible = false;
imageEditor.visible = false;
presentationEditor.visible = true;
presentationEditor.changePresentation(item);
currentWindow = presentationEditor;
break;
default:
videoEditor.visible = false;
videoEditor.stop();
songEditor.visible = false;
imageEditor.visible = false;
presentationEditor.visible = false;
presentation.visible = true;
currentWindow = presentation;
editMode = false;
refocusPresentation();
footerFirstText = presenting ? "Presenting..." : "Presentation Preview";
footerSecondText = "";
}
} else {
videoEditor.visible = false;
videoEditor.stop();
songEditor.visible = false;
imageEditor.visible = false;
presentationEditor.visible = false;
presentation.visible = true;
currentWindow = presentation;
editMode = false;
refocusPresentation();
footerFirstText = presenting ? "Presenting..." : "Presentation Preview"
footerSecondText = "";
}
}
function present(present) {
if (present)
{
PresWindow.showFullScreen();
PresWindow.setSource("qrc:qml/presenter/PresentationWindow.qml")
console.log(PresWindow);
/* presWinLoader.active = true; */
}
else {
PresWindow.close();
/* presWinLoader.active = false; */
}
}
function closeAll() { PresWindow.close() }
function changeVidPos(pos) {
presentation.slide.seek(pos);
pWindow.slide.seek(pos);
}
function refocusPresentation() {
presentation.forceActiveFocus();
presentation.focusTimer = true;
}
}