From deb620a2eb7bdeea7e175061ab093d70a62f8047 Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Tue, 5 Apr 2022 08:21:16 -0500 Subject: [PATCH] adding some more todos and refactoring getSong so it's more future proof --- TODO.org | 55 +++++++++++++++++-------------- src/qml/presenter/Slide.qml | 10 ++++-- src/qml/presenter/SlideEditor.qml | 5 +++ src/qml/presenter/SongEditor.qml | 19 ++++++----- src/songsqlmodel.cpp | 53 ++++++++++++++++++----------- src/songsqlmodel.h | 2 +- 6 files changed, 89 insertions(+), 55 deletions(-) diff --git a/TODO.org b/TODO.org index 418883d..13e5a4e 100644 --- a/TODO.org +++ b/TODO.org @@ -1,7 +1,38 @@ #+TITLE: Todo List * Inbox +** TODO BUG in dropping and then selecting song will duplicate entries +[[file:~/dev/church-presenter/src/qml/presenter/LeftDock.qml::Layout.fillHeight: true]] + +or at least turns the entry above it into the same as itself while retaining it's title. + ** TODO Build out a slide preview system so we can see each slide in the song or image slideshow [[file:~/dev/church-presenter/src/qml/presenter/SongEditor.qml::Presenter.SlideEditor {]] + +** TODO Fix possible bug in arrangingItems in draghandler +[[file:~/dev/church-presenter/src/qml/presenter/DragHandle.qml::function arrangeItem() {]] + +** TODO [#A] Make Presentation Window follow the presenter component +[[file:~/dev/church-presenter/src/qml/presenter/MainWindow.qml::Presenter.Slide {]] + +** TODO Make toolbar functional for songeditor +[[file:~/dev/church-presenter/src/qml/presenter/SongEditor.qml::Controls.ToolBar {]] + +- [ ] Will likely need to modify the model to persist the effects stored to the songs. Alignment is done, need vertical alignment, font, and effects + +** TODO Finish toolbar +[[file:~/dev/church-presenter/src/qml/presenter/Presentation.qml::Controls.ToolBar {]] + +** TODO Find a way to maths the textsize +[[file:~/dev/church-presenter/src/qml/presenter/Slide.qml::property real textSize: 50]] + +** TODO Fix broken append when importing River song +[[file:~/dev/church-presenter/src/qml/presenter/LeftDock.qml::function appendItem(name, type, background, backgroundType, text, itemID) {]] + +** TODO Create a nextslide function to be used after the end of the list of slides +[[file:~/dev/church-presenter/src/qml/presenter/Presentation.qml::function nextSlide() {]] + +- [ ] Check to make sure this works in all conditions but I believe it works ok. + ** TODO Make sure the video gets changed in a proper manner to not have left over video showing from previous items [[file:~/dev/church-presenter/src/qml/presenter/Presentation.qml::currentServiceItem++;]] @@ -10,30 +41,6 @@ The second option is the best, but requires a lot more work. I have the first already working so I'll come back to this once I have more of an idea of how to do it. -** TODO Fix possible bug in arrangingItems in draghandler -[[file:~/dev/church-presenter/src/qml/presenter/DragHandle.qml::function arrangeItem() {]] -** TODO [#A] Make Presentation Window follow the presenter component -[[file:~/dev/church-presenter/src/qml/presenter/MainWindow.qml::Presenter.Slide {]] - -** TODO Make toolbar functional for songeditor -[[file:~/dev/church-presenter/src/qml/presenter/SongEditor.qml::Controls.ToolBar {]] - -- [ ] Will likely need to modify the model to persist the effects stored to the songs -** TODO Finish toolbar -[[file:~/dev/church-presenter/src/qml/presenter/Presentation.qml::Controls.ToolBar {]] - - -** TODO Find a way to maths the textsize -[[file:~/dev/church-presenter/src/qml/presenter/Slide.qml::property real textSize: 50]] - -** TODO Create a nextslide function to be used after the end of the list of slides -[[file:~/dev/church-presenter/src/qml/presenter/Presentation.qml::function nextSlide() {]] - -- [ ] Check to make sure this works in all conditions but I believe it works ok. - -** TODO Fix broken append when importing River song -[[file:~/dev/church-presenter/src/qml/presenter/LeftDock.qml::function appendItem(name, type, background, backgroundType, text, itemID) {]] - ** DONE Need to make ListModel capable of bringing in a string list [2/2] [100%] - [X] Create a Model - [X] Create a class that we'll make a list of in the model diff --git a/src/qml/presenter/Slide.qml b/src/qml/presenter/Slide.qml index b7aca7b..9208444 100644 --- a/src/qml/presenter/Slide.qml +++ b/src/qml/presenter/Slide.qml @@ -47,10 +47,12 @@ Item { enableAudio: !preview Component.onCompleted: mpvLoadingTimer.start() onFileLoaded: { - showPassiveNotification(videoSource + " has been loaded"); + /* showPassiveNotification(videoSource + " has been loaded"); */ if (itemType == "song") mpv.setProperty("loop", "inf"); - showPassiveNotification(mpv.getProperty("loop")); + else + mpv.setProperty("loop", "no"); + /* showPassiveNotification(mpv.getProperty("loop")); */ } MouseArea { @@ -148,4 +150,8 @@ Item { black.visible = true; showPassiveNotification("Black is: " + black.visible); } + + function pauseVideo() { + mpv.pause(); + } } diff --git a/src/qml/presenter/SlideEditor.qml b/src/qml/presenter/SlideEditor.qml index fcd3560..71754e7 100644 --- a/src/qml/presenter/SlideEditor.qml +++ b/src/qml/presenter/SlideEditor.qml @@ -27,6 +27,11 @@ Item { Component.onCompleted: updateHAlignment(textAlignment) + function loadVideo() { + representation.loadVideo(); + representation.pause(); + } + function updateHAlignment(alignment) { switch (alignment) { case "left" : diff --git a/src/qml/presenter/SongEditor.qml b/src/qml/presenter/SongEditor.qml index 5083fe0..3de1da3 100644 --- a/src/qml/presenter/SongEditor.qml +++ b/src/qml/presenter/SongEditor.qml @@ -277,21 +277,22 @@ Item { function changeSong(index) { const song = songsqlmodel.getSong(index); songIndex = index; - songTitle = song[0]; - songLyrics = song[1]; - songAuthor = song[2]; - songCcli = song[3]; - songAudio = song[4]; - songVorder = song[5]; - songBackground = song[6]; - songBackgroundType = song[7]; - songHAlignment = song[8]; + songTitle = song.title; + songLyrics = song.lyrics; + songAuthor = song.author; + songCcli = song.ccli; + songAudio = song.audio; + songVorder = song.vorder; + songBackground = song.background; + songBackgroundType = song.backgroundType; + songHAlignment = song.textAlignment; if (songBackgroundType == "image") { slideEditor.videoBackground = ""; slideEditor.imageBackground = songBackground; } else { slideEditor.imageBackground = ""; slideEditor.videoBackground = songBackground; + slideEditor.loadVideo(); } print(song); } diff --git a/src/songsqlmodel.cpp b/src/songsqlmodel.cpp index 61e7c6c..fd94159 100644 --- a/src/songsqlmodel.cpp +++ b/src/songsqlmodel.cpp @@ -122,26 +122,41 @@ void SongSqlModel::deleteSong(const int &row) { submitAll(); } -QVariantList SongSqlModel::getSong(const int &row) { - QSqlRecord recordData = record(row); - if (recordData.isEmpty()) { - qDebug() << "this is not a song"; - QVariantList empty; - return empty; +QVariantMap SongSqlModel::getSong(const int &row) { + // QSqlRecord recordData = record(row); + // if (recordData.isEmpty()) { + // qDebug() << "this is not a song"; + // QVariantList empty; + // return empty; + // } + + // QVariantList song; + // song.append(recordData.value("title")); + // song.append(recordData.value("lyrics")); + // song.append(recordData.value("author")); + // song.append(recordData.value("ccli")); + // song.append(recordData.value("audio")); + // song.append(recordData.value("vorder")); + // song.append(recordData.value("background")); + // song.append(recordData.value("backgroundType")); + // song.append(recordData.value("textAlignment")); + + // return song; + + QVariantMap data; + const QModelIndex idx = this->index(row,0); + // qDebug() << idx; + if( !idx.isValid() ) + return data; + const QHash rn = roleNames(); + // qDebug() << rn; + QHashIterator it(rn); + while (it.hasNext()) { + it.next(); + qDebug() << it.key() << ":" << it.value(); + data[it.value()] = idx.data(it.key()); } - - QVariantList song; - song.append(recordData.value("title")); - song.append(recordData.value("lyrics")); - song.append(recordData.value("author")); - song.append(recordData.value("ccli")); - song.append(recordData.value("audio")); - song.append(recordData.value("vorder")); - song.append(recordData.value("background")); - song.append(recordData.value("backgroundType")); - song.append(recordData.value("textAlignment")); - - return song; + return data; } QStringList SongSqlModel::getLyricList(const int &row) { diff --git a/src/songsqlmodel.h b/src/songsqlmodel.h index b90dd60..7e7d980 100644 --- a/src/songsqlmodel.h +++ b/src/songsqlmodel.h @@ -57,7 +57,7 @@ public: Q_INVOKABLE void newSong(); Q_INVOKABLE void deleteSong(const int &row); - Q_INVOKABLE QVariantList getSong(const int &row); + Q_INVOKABLE QVariantMap getSong(const int &row); Q_INVOKABLE QStringList getLyricList(const int &row); QVariant data(const QModelIndex &index, int role) const override;