fixed the leftdock to allow reordering and better dnd
This commit is contained in:
parent
f14be71572
commit
8d07c7355d
7 changed files with 190 additions and 67 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ Item {
|
|||
implicitWidth: 300
|
||||
editable: true
|
||||
hoverEnabled: true
|
||||
onCurrentTextChanged: showPassiveNotification(currentText)
|
||||
/* onCurrentTextChanged: showPassiveNotification(currentText) */
|
||||
}
|
||||
Controls.SpinBox {
|
||||
editable: true
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ Item {
|
|||
implicitWidth: 300
|
||||
editable: true
|
||||
hoverEnabled: true
|
||||
onCurrentTextChanged: showPassiveNotification(currentText)
|
||||
/* onCurrentTextChanged: showPassiveNotification(currentText) */
|
||||
}
|
||||
Controls.SpinBox {
|
||||
editable: true
|
||||
|
|
|
@ -32,7 +32,7 @@ Item {
|
|||
implicitWidth: 300
|
||||
editable: true
|
||||
hoverEnabled: true
|
||||
onCurrentTextChanged: showPassiveNotification(currentText)
|
||||
/* onCurrentTextChanged: showPassiveNotification(currentText) */
|
||||
}
|
||||
Controls.SpinBox {
|
||||
editable: true
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue