lumina/src/qml/presenter/MainWindow.qml
2022-12-13 09:33:47 -06:00

271 lines
7.9 KiB
QML

import QtQuick 2.15
import QtQuick.Dialogs 1.0
import QtQuick.Controls 2.15 as Controls
import QtQuick.Window 2.13
import QtQuick.Layouts 1.2
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 url imageBackground: presentation.imageBackground
property url videoBackground: presentation.vidBackground
property string currentText: presentation.text
property int blurRadius: 0
property int totalServiceItems
/* 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 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: 6
Rectangle {
height: parent.height
anchors.horizontalCenter: parent.horizontalCenter
width: 1
color: Controls.SplitHandle.hovered ? Kirigami.Theme.hoverColor : Kirigami.Theme.backgroundColor
}
}
Presenter.ServiceList {
id: leftDock
Controls.SplitView.preferredWidth: 200
Controls.SplitView.maximumWidth: 300
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 ? 200 : 0
Controls.SplitView.maximumWidth: 350
visible: libraryOpen ? true : false
}
}
}
Presenter.PresentationWindow {
id: pWindow
}
SongSqlModel {
id: songsqlmodel
}
VideoSqlModel {
id: videosqlmodel
}
ImageSqlModel {
id: imagesqlmodel
}
PresentationSqlModel {
id: pressqlmodel
}
ServiceItemModel {
id: serviceItemModel
}
ServiceThing {
id: serviceThing
}
function changeServiceItem(index) {
const item = serviceItemModel.getItem(index);
currentServiceItem = index;
print("index grabbed: " + index);
print(item);
presentation.stopVideo();
pWindow.stopVideo();
/* presentation.itemType = item.type; */
print("Time to start changing");
serviceItemModel.activate(index);
SlideObject.changeSlide(item);
/* if (item.backgroundType === "video") */
/* { */
/* presentation.loadVideo(); */
/* } */
presentation.textIndex = 0;
/* serviceItemModel.select(index); */
/* presentation.changeSlide(); */
print("Slide changed to: " + item.name);
}
function loopVideo() {
presentation.loopVideo();
pWindow.loopVideo();
}
function editSwitch(item) {
if (editMode) {
switch (editType) {
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;
presentation.focusTimer = true;
currentWindow = presentation;
editMode = false;
}
} else {
videoEditor.visible = false;
videoEditor.stop();
songEditor.visible = false;
imageEditor.visible = false;
presentationEditor.visible = false;
presentation.visible = true;
presentation.focusTimer = true;
currentWindow = presentation;
editMode = false;
presenting = true;
}
}
function present(present) {
if (present)
{
presentation.loadVideo();
print("For window: Screen is: " + pWindow.screen + " And selected screen is: " + presentationScreen);
pWindow.showFullScreen();
/* pWindow.screen = presentationScreen; */
print("For window: Screen is: " + pWindow.screen + " And selected screen is: " + presentationScreen);
}
else
pWindow.close();
}
function changeVidPos(pos) {
presentation.slide.seek(pos);
pWindow.slide.seek(pos);
}
}