From f34e8cbd7e9af7247c4b0ffe258f0f27980733e4 Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Mon, 9 Oct 2023 15:11:55 -0500 Subject: [PATCH] adding some tweaks to making song_editor working better --- src/cpp/songsqlmodel.cpp | 1 + src/qml/presenter/SongEditor.qml | 73 ++++++++++++++++++++------------ src/rust/songs/song_editor.rs | 62 ++++++++++----------------- src/rust/songs/song_model.rs | 2 +- 4 files changed, 71 insertions(+), 67 deletions(-) diff --git a/src/cpp/songsqlmodel.cpp b/src/cpp/songsqlmodel.cpp index 1132928..bcdef06 100644 --- a/src/cpp/songsqlmodel.cpp +++ b/src/cpp/songsqlmodel.cpp @@ -754,6 +754,7 @@ QStringList SongProxyModel::getLyricList(const int &row) { QVariantMap SongProxyModel::getSong(const int &row) { QVariantMap song = m_songModel->getItem(mapToSource(index(row, 0)).row()); + qDebug() << song; return song; } diff --git a/src/qml/presenter/SongEditor.qml b/src/qml/presenter/SongEditor.qml index 6039bc4..c927df8 100644 --- a/src/qml/presenter/SongEditor.qml +++ b/src/qml/presenter/SongEditor.qml @@ -302,7 +302,7 @@ Item { onEditingFinished: updateVerseOrder(text); background: Presenter.TextBackground { control: songVorderField - errorCondition: song.vorder.length === 0 + errorCondition: song.verseOrderError } } @@ -473,7 +473,19 @@ Item { function newSong(index) { clearSlides(); - song = songProxyModel.getSong(index); + thisSong = songProxyModel.getSong(index); + songEditorModel.title = thisSong.title; + songEditorModel.lyrics = thisSong.lyrics; + songEditorModel.author = thisSong.author; + songEditorModel.ccli = thisSong.ccli; + songEditorModel.audio = thisSong.audio; + songEditorModel.verseOrder = thisSong.vorder; + songEditorModel.background = thisSong.background; + songEditorModel.backgroundType = thisSong.backgroundType; + songEditorModel.horizontalTextAlignment = thisSong.horizontalTextAlignment; + songEditorModel.verticalTextAlignment = thisSong.verticalTextAlignment; + songEditorModel.font = thisSong.font; + songEditorModel.fontSize = thisSong.fontSize; changeSlideHAlignment("Center"); changeSlideVAlignment("Center"); @@ -485,32 +497,37 @@ Item { } function changeSong(index) { - clearSlides(); - const updatedSong = songProxyModel.getSong(index); - console.log(updatedSong.verseOrder + " " + updatedSong.title); - songEditorModel.title = updatedSong.title; - songEditorModel.lyrics = updatedSong.lyrics; - songEditorModel.author = updatedSong.author; - songEditorModel.ccli = updatedSong.ccli; - songEditorModel.audio = updatedSong.audio; - songEditorModel.verseOrder = updatedSong.verseOrder; - songEditorModel.background = updatedSong.background; - songEditorModel.backgroundType = updatedSong.backgroundType; - songEditorModel.horizontalTextAlignment = updatedSong.horizontalTextAlignment; - songEditorModel.verticalTextAlignment = updatedSong.verticalTextAlignment; - songEditorModel.font = updatedSong.font; - songEditorModel.fontSize = updatedSong.fontSize; - songIndex = song.id; + if (songProxyModel.songModel.count === index) + newSong(index) + else { + clearSlides(); + const updatedSong = songProxyModel.getSong(index); + console.log(updatedSong.vorder + " " + updatedSong.title + " " + updatedSong.audio); + songEditorModel.title = updatedSong.title; + songEditorModel.lyrics = updatedSong.lyrics; + songEditorModel.author = updatedSong.author; + songEditorModel.ccli = updatedSong.ccli; + songEditorModel.audio = updatedSong.audio; + songEditorModel.verseOrder = updatedSong.vorder; + songEditorModel.background = updatedSong.background; + songEditorModel.backgroundType = updatedSong.backgroundType; + songEditorModel.horizontalTextAlignment = updatedSong.horizontalTextAlignment; + songEditorModel.verticalTextAlignment = updatedSong.verticalTextAlignment; + songEditorModel.font = updatedSong.font; + songEditorModel.fontSize = updatedSong.fontSize; + songEditorModel.checkVerseOrder(); + songIndex = updatedSong.id; - changeSlideHAlignment(song.horizontalTextAlignment); - changeSlideVAlignment(song.verticalTextAlignment); - changeSlideFont(song.font, true); - changeSlideFontSize(song.fontSize, true) - changeSlideText(songProxyModel.modelIndex(index).row); - console.log("Changing to song: " + song.title + " with ID: " + song.id); - footerFirstText = "Song: "; - footerSecondText = song.title; - songList.loadVideo(); + changeSlideHAlignment(song.horizontalTextAlignment); + changeSlideVAlignment(song.verticalTextAlignment); + changeSlideFont(song.font, true); + changeSlideFontSize(song.fontSize, true) + changeSlideText(songProxyModel.modelIndex(index).row); + console.log("Changing to song: " + song.title + " with ID: " + song.id); + footerFirstText = "Song: "; + footerSecondText = song.title; + songList.loadVideo(); + } } function updateLyrics(lyrics) { @@ -537,6 +554,8 @@ Item { } function updateVerseOrder(vorder) { + songEditorModel.verseOrder = vorder; + songEditorModel.checkVerseOrder(); songProxyModel.songModel.updateVerseOrder(songIndex, vorder) } diff --git a/src/rust/songs/song_editor.rs b/src/rust/songs/song_editor.rs index 835dafc..5c6cc67 100644 --- a/src/rust/songs/song_editor.rs +++ b/src/rust/songs/song_editor.rs @@ -1,5 +1,6 @@ #[cxx_qt::bridge] pub mod song_editor { + use tracing::{debug, debug_span, error, info, instrument}; unsafe extern "C++" { include!("cxx-qt-lib/qmap.h"); @@ -31,13 +32,13 @@ pub mod song_editor { #[qproperty] ccli: QString, #[qproperty] - audio: QUrl, + audio: QString, #[qproperty] verse_order: QString, #[qproperty] - verse_order_format: bool, + verse_order_error: bool, #[qproperty] - background: QUrl, + background: QString, #[qproperty] background_type: QString, #[qproperty] @@ -59,10 +60,10 @@ pub mod song_editor { lyrics: QString::default(), author: QString::default(), ccli: QString::default(), - audio: QUrl::default(), + audio: QString::default(), verse_order: QString::default(), - verse_order_format: true, - background: QUrl::default(), + verse_order_error: false, + background: QString::default(), background_type: QString::default(), horizontal_text_alignment: QString::default(), vertical_text_alignment: QString::default(), @@ -80,38 +81,21 @@ pub mod song_editor { // pinned_model.update_ccli(0, QString::from("idk")); todo!() } - // #[qinvokable] - // fn set_song( - // mut self: Pin<&mut Self>, - // title: QString, - // lyrics: QString, - // author: QString, - // ccli: QString, - // audio: QUrl, - // verse_order: QString, - // background: QUrl, - // background_type: QString, - // horizontal_text_alignment: QString, - // vertical_text_alignment: QString, - // font: QString, - // font_size: i32, - // ) -> bool { - // self.as_mut().set_title(title); - // self.as_mut().set_lyrics(lyrics); - // self.as_mut().set_author(author); - // self.as_mut().set_ccli(ccli); - // self.as_mut().set_audio(audio); - // self.as_mut().set_verse_order(verse_order); - // self.as_mut().set_background(background); - // self.as_mut().set_background_type(background_type); - // self.as_mut().set_horizontal_text_alignment( - // horizontal_text_alignment, - // ); - // self.as_mut() - // .set_vertical_text_alignment(vertical_text_alignment); - // self.as_mut().set_font(font); - // self.as_mut().set_font_size(font_size); - // true - // } + + #[qinvokable] + pub fn check_verse_order(mut self: Pin<&mut Self>) { + let vo = self.verse_order().to_string(); + let split = vo.split(" "); + debug!(verse_order = ?vo, iterator = ?split); + for s in split { + if s.contains(",") { + self.as_mut().set_verse_order_error(true); + } else if s.is_empty() { + self.as_mut().set_verse_order_error(true); + } else { + self.as_mut().set_verse_order_error(false); + } + } + } } } diff --git a/src/rust/songs/song_model.rs b/src/rust/songs/song_model.rs index ac404c6..675d234 100644 --- a/src/rust/songs/song_model.rs +++ b/src/rust/songs/song_model.rs @@ -793,7 +793,7 @@ pub mod song_model { let role_names_iter = role_names.iter(); if let Some(song) = self.rust().songs.get(index as usize) { - debug!(song); + debug!(?song); for i in role_names_iter { qvariantmap.insert( QString::from(&i.1.to_string()),