diff --git a/TODO.org b/TODO.org index 9854d71..262bb65 100644 --- a/TODO.org +++ b/TODO.org @@ -4,8 +4,8 @@ :END: * Inbox -** TODO images and videos need a better get system -[[file:~/dev/church-presenter/src/videosqlmodel.cpp::QVariantList VideoSqlModel::getVideo(const int &row) {]] +** TODO Check for edge cases in inputing wrong vorder and lyrics +[[file:~/dev/church-presenter/TODO.org::*Fix broken append when importing River song][Fix broken append when importing River song]] ** TODO Images stored in sql need to have aspect saved and applied dynamically here [[file:~/dev/church-presenter/src/qml/presenter/Slide.qml::fillMode: Image.PreserveAspectCrop]] @@ -13,9 +13,13 @@ ** 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 +** TODO Fix possible bug in arrangingItems in draghandler [1/3] [33%] [[file:~/dev/church-presenter/src/qml/presenter/DragHandle.qml::function arrangeItem() {]] +- [X] Basic fixed dnd +- [ ] Allow for a less buggy interaction +- [ ] Need to check for edge cases + ** TODO [#A] Make Presentation Window follow the presenter component [[file:~/dev/church-presenter/src/qml/presenter/MainWindow.qml::Presenter.Slide {]] @@ -30,9 +34,6 @@ ** 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() {]] @@ -46,6 +47,14 @@ 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. +** DONE images and videos need a better get system +[[file:~/dev/church-presenter/src/videosqlmodel.cpp::QVariantList VideoSqlModel::getVideo(const int &row) {]] + +** DONE Fix broken append when importing River song +[[file:~/dev/church-presenter/src/qml/presenter/LeftDock.qml::function appendItem(name, type, background, backgroundType, text, itemID) {]] + +This was due to the song not having a vorder. Need to protect from edge cases of the user inputing the formatted text that doesn't fit what's expected in code. + ** 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/imagesqlmodel.cpp b/src/imagesqlmodel.cpp index 727d761..c2f0019 100644 --- a/src/imagesqlmodel.cpp +++ b/src/imagesqlmodel.cpp @@ -157,13 +157,28 @@ void ImageSqlModel::updateFilePath(const int &row, const QUrl &filePath) { emit filePathChanged(); } -QUrl ImageSqlModel::getImage(const int &row) { - qDebug() << "Row we are getting is " << row; - QUrl image; - QSqlRecord rec = record(row); - qDebug() << rec.value("filePath").toUrl(); - // image.append(rec.value("title")); - // image.append(rec.value("filePath")); - image = rec.value("filePath").toUrl(); - return image; +QVariantMap ImageSqlModel::getImage(const int &row) { + // qDebug() << "Row we are getting is " << row; + // QUrl image; + // QSqlRecord rec = record(row); + // qDebug() << rec.value("filePath").toUrl(); + // // image.append(rec.value("title")); + // // image.append(rec.value("filePath")); + // image = rec.value("filePath").toUrl(); + // return image; + + 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()); + } + return data; } diff --git a/src/imagesqlmodel.h b/src/imagesqlmodel.h index 461ba8a..8457f86 100644 --- a/src/imagesqlmodel.h +++ b/src/imagesqlmodel.h @@ -31,7 +31,7 @@ public: Q_INVOKABLE void newImage(const QUrl &filePath); Q_INVOKABLE void deleteImage(const int &row); - Q_INVOKABLE QUrl getImage(const int &row); + Q_INVOKABLE QVariantMap getImage(const int &row); QVariant data(const QModelIndex &index, int role) const override; QHash roleNames() const override; diff --git a/src/qml/presenter/ImageEditor.qml b/src/qml/presenter/ImageEditor.qml index 75f501b..81a5e55 100644 --- a/src/qml/presenter/ImageEditor.qml +++ b/src/qml/presenter/ImageEditor.qml @@ -43,18 +43,6 @@ Item { implicitWidth: 100 hoverEnabled: true } - Controls.ToolButton { - text: "B" - hoverEnabled: true - } - Controls.ToolButton { - text: "I" - hoverEnabled: true - } - Controls.ToolButton { - text: "U" - hoverEnabled: true - } Controls.ToolSeparator {} Item { Layout.fillWidth: true } Controls.ToolSeparator {} @@ -66,7 +54,7 @@ Item { } Controls.ToolButton { id: backgroundButton - text: "Background" + text: "Select Image" icon.name: "fileopen" hoverEnabled: true onClicked: backgroundType.open() @@ -175,7 +163,7 @@ Item { } function changeImage(image) { - root.image = image; - print(image.toString()); + root.image = image.filePath; + print(image.filePath.toString()); } } diff --git a/src/qml/presenter/Library.qml b/src/qml/presenter/Library.qml index 4414e26..e7914d3 100644 --- a/src/qml/presenter/Library.qml +++ b/src/qml/presenter/Library.qml @@ -820,7 +820,7 @@ Item { videoLibraryList.currentIndex = videosqlmodel.rowCount(); print(videosqlmodel.getVideo(videoLibraryList.currentIndex)); const video = videosqlmodel.getVideo(videoLibraryList.currentIndex); - showPassiveNotification("newest video: " + video); + showPassiveNotification("newest video: " + video.title); if (!editMode) editMode = true; editSwitch("video", video); diff --git a/src/qml/presenter/VideoEditor.qml b/src/qml/presenter/VideoEditor.qml index 7c15c12..a3623ba 100644 --- a/src/qml/presenter/VideoEditor.qml +++ b/src/qml/presenter/VideoEditor.qml @@ -138,7 +138,7 @@ Item { Layout.rightMargin: 20 placeholderText: "Song Title..." - text: video[0] + text: video.title padding: 10 /* onEditingFinished: updateTitle(text); */ } @@ -170,7 +170,7 @@ Item { Component.onCompleted: mpvLoadingTimer.start() onPositionChanged: videoSlider.value = position onFileLoaded: { - showPassiveNotification(video[0] + " has been loaded"); + showPassiveNotification(video.title + " has been loaded"); videoPreview.pause(); } } @@ -220,7 +220,7 @@ Item { id: mpvLoadingTimer interval: 100 onTriggered: { - videoPreview.loadFile(video[1].toString()); + videoPreview.loadFile(video.filePath.toString()); /* showPassiveNotification(video[0]); */ } } diff --git a/src/videosqlmodel.cpp b/src/videosqlmodel.cpp index a503af1..7d4a99f 100644 --- a/src/videosqlmodel.cpp +++ b/src/videosqlmodel.cpp @@ -156,12 +156,28 @@ void VideoSqlModel::updateFilePath(const int &row, const QUrl &filePath) { emit filePathChanged(); } -QVariantList VideoSqlModel::getVideo(const int &row) { - qDebug() << "Row we are getting is " << row; - QVariantList video; - QSqlRecord rec = record(row); - qDebug() << rec.value("title"); - video.append(rec.value("title")); - video.append(rec.value("filePath")); - return video; +QVariantMap VideoSqlModel::getVideo(const int &row) { + // qDebug() << "Row we are getting is " << row; + // QVariantList video; + // QSqlRecord rec = record(row); + // qDebug() << rec.value("title"); + // video.append(rec.value("title")); + // video.append(rec.value("filePath")); + // return video; + + 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()); + } + return data; + } diff --git a/src/videosqlmodel.h b/src/videosqlmodel.h index f36911f..07430d4 100644 --- a/src/videosqlmodel.h +++ b/src/videosqlmodel.h @@ -31,7 +31,7 @@ public: Q_INVOKABLE void newVideo(const QUrl &filePath); Q_INVOKABLE void deleteVideo(const int &row); - Q_INVOKABLE QVariantList getVideo(const int &row); + Q_INVOKABLE QVariantMap getVideo(const int &row); QVariant data(const QModelIndex &index, int role) const override; QHash roleNames() const override;