diff --git a/src/qml/presenter/DragHandle.qml b/src/qml/presenter/DragHandle.qml index e0f081b..b15c469 100644 --- a/src/qml/presenter/DragHandle.qml +++ b/src/qml/presenter/DragHandle.qml @@ -56,12 +56,15 @@ Item { property int mouseDownY property Item originalParent property int autoScrollThreshold: (listView.contentHeight > listView.height) ? listItem.height * 3 : 0 - opacity: mouseArea.pressed || (!Kirigami.Settings.tabletMode && listItem.hovered) ? 1 : 0.6 function arrangeItem() { - var newIndex = listView.indexAt(1, listView.contentItem.mapFromItem(listItem, 0, 0).y + mouseArea.mouseDownY); + var newIndex = listView.indexAt(1, + listView.contentItem.mapFromItem(listItem, 0, 0).y + + mouseArea.mouseDownY); - if (Math.abs(listItem.y - mouseArea.startY) > height && newIndex > -1 && newIndex !== index) { + if (Math.abs(listItem.y - mouseArea.startY) > height && newIndex > -1 && + newIndex !== index) { + print("old index is: " + index + " and new index is: " + newIndex); root.moveRequested(index, newIndex); } } diff --git a/src/qml/presenter/ImageEditor.qml b/src/qml/presenter/ImageEditor.qml index d5e80e5..75f501b 100644 --- a/src/qml/presenter/ImageEditor.qml +++ b/src/qml/presenter/ImageEditor.qml @@ -30,7 +30,7 @@ Item { implicitWidth: 300 editable: true hoverEnabled: true - onCurrentTextChanged: showPassiveNotification(currentText) + /* onCurrentTextChanged: showPassiveNotification(currentText) */ } Controls.SpinBox { editable: true diff --git a/src/qml/presenter/LeftDock.qml b/src/qml/presenter/LeftDock.qml index 15cc5e3..654d38f 100644 --- a/src/qml/presenter/LeftDock.qml +++ b/src/qml/presenter/LeftDock.qml @@ -3,6 +3,7 @@ import QtQuick.Dialogs 1.0 import QtQuick.Controls 2.0 as Controls import QtQuick.Window 2.13 import QtQuick.Layouts 1.2 +import QtQml.Models 2.12 import QtMultimedia 5.15 import QtAudioEngine 1.15 import org.kde.kirigami 2.13 as Kirigami @@ -47,13 +48,14 @@ ColumnLayout { ListView { id: serviceItemList anchors.fill: parent - model: serviceItemModel - delegate: Kirigami.DelegateRecycler { - width: serviceItemList.width - sourceComponent: itemDelegate - } + /* model: serviceItemModel */ + /* delegate: Kirigami.DelegateRecycler { */ + /* width: serviceItemList.width */ + /* sourceComponent: itemDelegate */ + /* } */ clip: true spacing: 3 + property int dragItemIndex addDisplaced: Transition { NumberAnimation {properties: "x, y"; duration: 100} @@ -74,54 +76,160 @@ ColumnLayout { NumberAnimation {properties: "x, y"; duration: 100} } - Component { - id: itemDelegate - Item { - id: serviceItem + model: DelegateModel { + id: visualModel + model: serviceItemModel + delegate: DropArea { + id: serviceDrop implicitWidth: serviceItemList.width height: 50 + onEntered: (drag) => { + /* dropPlacement(drag); */ + const from = (drag.source as visServiceItem) + visualModel.items.move(dragItemIndex, index); + } + onDropped: (drag) => { + print("DROPPED IN ITEM AREA: " + drag.keys); + print(dragItemIndex + " " + index); + const hlIndex = serviceItemList.currentIndex; + if (drag.keys === ["library"]) { + addItem(index, + dragItemTitle, + dragItemType, + dragItemBackground, + dragItemBackgroundType, + dragItemText, + dragItemIndex); + } else if (drag.keys === ["serviceitem"]) { + moveRequested(dragItemIndex, index); + if (hlIndex === dragItemIndex) + serviceItemList.currentIndex = index; + else if (hlIndex === index) + serviceItemList.currentIndex = index + 1; + } + } + keys: ["library","serviceitem"] + Kirigami.BasicListItem { - anchors.fill: parent + id: visServiceItem + width: serviceDrop.width + height: serviceDrop.height + anchors { + horizontalCenter: parent.horizontalCenter + verticalCenter: parent.verticalCenter + } label: name subtitle: type - hoverEnabled: true + hoverEnabled: false supportsMouseEvents: false backgroundColor: { - if (parent.ListView.isCurrentItem) { + if (serviceItemList.currentIndex === index || + mouseHandler.containsMouse) Kirigami.Theme.highlightColor; - /* } else if (serviceDrop.constainsDrag){ */ - /* Kirigami.Theme.hoverColor; */ - } else if (mouseHandler.containsMouse){ - Kirigami.Theme.highlightColor; - } else { - Kirigami.Theme.backgroundColor; - } + else + Kirigami.Theme.backgroundColor; } textColor: { - if (parent.ListView.isCurrentItem || mouseHandler.containsMouse) + if (serviceItemList.currentIndex === index || + mouseHandler.containsMouse) activeTextColor; else Kirigami.Theme.textColor; } + + states: [ + State { + when: mouseHandler.drag.active + ParentChange { + target: visServiceItem + parent: serviceItemList + } + + PropertyChanges { + target: visServiceItem + backgroundColor: Kirigami.Theme.backgroundColor + textColor: Kirigami.Theme.textColor + anchors.verticalCenter: undefined + anchors.horizontalCenter: undefined + } + } + ] + + /* Drag.dragType: Drag.Automatic */ + Drag.active: mouseHandler.drag.active + Drag.hotSpot.x: width / 2 + Drag.hotSpot.y: height / 2 + Drag.keys: ["serviceitem"] + + MouseArea { + id: mouseHandler + anchors.fill: parent + hoverEnabled: true + acceptedButtons: Qt.LeftButton | Qt.RightButton + preventStealing: true + + drag { + target: visServiceItem + axis: Drag.YAxis + /* minimumY: root.y */ + /* maximumY: serviceItemList.height - serviceDrop.height */ + smoothed: false + } + + drag.onActiveChanged: { + if (mouseHandler.drag.active) { + dragItemIndex = index; + } + } + + /* onPositionChanged: { */ + /* if (!pressed) { */ + /* return; */ + /* } */ + /* mouseArea.arrangeItem(); */ + /* } */ + + onPressed: { + serviceItemList.interactive = false; + } + + onClicked: { + if (mouse.button === Qt.RightButton) + rightClickMenu.popup(); + else { + serviceItemList.currentIndex = index; + currentServiceItem = index; + changeServiceItem(index); + } + } + + onReleased: { + print("should drop"); + visServiceItem.Drag.drop(); + } + } } - Presenter.DragHandle { - id: mouseHandler - anchors.fill: parent - listItem: serviceItem - listView: serviceItemList - onMoveRequested: { - print(oldIndex, newIndex); - serviceItemModel.move(oldIndex, newIndex); - } - onDropped: { - } - onClicked: { - serviceItemList.currentIndex = index; - currentServiceItem = index; - changeServiceItem(index); - } - onRightClicked: rightClickMenu.popup() - } + + /* Presenter.DragHandle { */ + /* id: mouseHandler */ + /* anchors.fill: parent */ + /* listItem: serviceItem */ + /* listView: serviceItemList */ + /* onMoveRequested: { */ + /* print(oldIndex, newIndex); */ + /* serviceItemModel.move(oldIndex, newIndex); */ + /* } */ + /* onDropped: { */ + /* } */ + /* onClicked: { */ + /* serviceItemList.currentIndex = index; */ + /* currentServiceItem = index; */ + /* changeServiceItem(index); */ + /* } */ + /* onRightClicked: rightClickMenu.popup() */ + /* } */ + + Controls.Menu { id: rightClickMenu @@ -133,23 +241,16 @@ ColumnLayout { } } - DropArea { - id: serviceDrop - anchors.fill: parent - onDropped: { - print("DROPPED IN ITEM AREA"); - addItem(index, - dragItemTitle, - dragItemType, - dragItemBackground, - dragItemBackgroundType, - dragItemText, - dragItemIndex); - } - keys: ["library"] + function moveRequested(oldIndex, newIndex) { + serviceItemModel.move(oldIndex, newIndex); + } + + function dropPlacement(drag) { + print(drag.y); } } } + Kirigami.WheelHandler { id: wheelHandler @@ -164,19 +265,23 @@ ColumnLayout { active: hovered || pressed } } - } + } + function addItem(index, name, type, background, backgroundType, text, itemID) { const newtext = songsqlmodel.getLyricList(itemID); + print("adding: " + name + " of type " + type); serviceItemModel.insertItem(index, name, type, background, backgroundType, newtext); } function appendItem(name, type, background, backgroundType, text, itemID) { + print("adding: " + name + " of type " + type); let lyrics; if (type === "song") { + print(itemID); lyrics = songsqlmodel.getLyricList(itemID); print(lyrics); } diff --git a/src/qml/presenter/SongEditor.qml b/src/qml/presenter/SongEditor.qml index 3de1da3..a087684 100644 --- a/src/qml/presenter/SongEditor.qml +++ b/src/qml/presenter/SongEditor.qml @@ -39,7 +39,7 @@ Item { implicitWidth: 300 editable: true hoverEnabled: true - onCurrentTextChanged: showPassiveNotification(currentText) + /* onCurrentTextChanged: showPassiveNotification(currentText) */ } Controls.SpinBox { editable: true diff --git a/src/qml/presenter/VideoEditor.qml b/src/qml/presenter/VideoEditor.qml index 47b3d63..7c15c12 100644 --- a/src/qml/presenter/VideoEditor.qml +++ b/src/qml/presenter/VideoEditor.qml @@ -32,7 +32,7 @@ Item { implicitWidth: 300 editable: true hoverEnabled: true - onCurrentTextChanged: showPassiveNotification(currentText) + /* onCurrentTextChanged: showPassiveNotification(currentText) */ } Controls.SpinBox { editable: true diff --git a/src/serviceitemmodel.cpp b/src/serviceitemmodel.cpp index 1bcebe9..5118060 100644 --- a/src/serviceitemmodel.cpp +++ b/src/serviceitemmodel.cpp @@ -116,7 +116,7 @@ Qt::ItemFlags ServiceItemModel::flags(const QModelIndex &index) const { void ServiceItemModel::addItem(ServiceItem *item) { const int index = m_items.size(); - // qDebug() << index; + qDebug() << index; // foreach (item, m_items) { // qDebug() << item; // } @@ -179,15 +179,19 @@ void ServiceItemModel::removeItem(int index) { } bool ServiceItemModel::move(int sourceIndex, int destIndex) { - qDebug() << "starting move of: " << "source: " << sourceIndex << "dest: " << destIndex; qDebug() << index(sourceIndex).row(); qDebug() << index(destIndex).row(); - // QModelIndex parent = index(sourceIndex).parent(); - // bool begsuc = beginMoveRows(parent, sourceIndex, sourceIndex, parent, destIndex); - beginResetModel(); - m_items.move(sourceIndex, destIndex); - // endMoveRows(); - endResetModel(); + // beginResetModel(); + QModelIndex parent = index(sourceIndex).parent(); + if (sourceIndex >= 0 && sourceIndex != destIndex && destIndex >= 0 && destIndex < rowCount() && sourceIndex < rowCount()) { + qDebug() << "starting move of: " << "source: " << sourceIndex << "dest: " << destIndex; + bool begsuc = beginMoveRows(QModelIndex(), sourceIndex, sourceIndex, QModelIndex(), destIndex); + if (begsuc) + m_items.move(sourceIndex, destIndex); + endMoveRows(); + } + // endResetModel(); + // emit dataChanged(index(sourceIndex), QModelIndex()); // qDebug() << success; return true; } diff --git a/src/songsqlmodel.cpp b/src/songsqlmodel.cpp index 8087077..cf5167d 100644 --- a/src/songsqlmodel.cpp +++ b/src/songsqlmodel.cpp @@ -190,6 +190,7 @@ QStringList SongSqlModel::getLyricList(const int &row) { // This first function pulls out each verse into our verses map foreach (line, rawLyrics) { + qDebug() << line; if (firstItem) { if (keywords.contains(line)) { recordVerse = true; @@ -213,6 +214,16 @@ QStringList SongSqlModel::getLyricList(const int &row) { } qDebug() << verses; + // let's check to see if there is a verse order, if not return the list given + if (vorder.first().isEmpty()) { + qDebug() << "NO VORDER"; + foreach (verse, verses) { + qDebug() << verse; + lyrics.append(verse); + } + qDebug() << lyrics; + return lyrics; + } // this function appends the verse that matches the verse order from the map foreach (const QString &vstr, vorder) { foreach (line, rawLyrics) {