preparing for some refactoring
This commit is contained in:
parent
8de473519b
commit
84b31caf6b
4 changed files with 89 additions and 63 deletions
|
@ -102,26 +102,31 @@ Item {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
onEntered: (drag) => {
|
onEntered: (drag) => {
|
||||||
|
console.log("here");
|
||||||
if (drag.keys[0] === "library") {
|
if (drag.keys[0] === "library") {
|
||||||
dropHighlightLine.visible = true;
|
dropHighlightLine.visible = true;
|
||||||
dropHighlightLine.y = serviceDrop.mapToItem(
|
dropHighlightLine.y = serviceDrop.mapToItem(
|
||||||
serviceItemList,0,0).y - 2;
|
serviceItemList,0,0).y - 2;
|
||||||
|
} else {
|
||||||
|
console.log("here");
|
||||||
|
let from = drag.source.DelegateModel.itemsIndex;
|
||||||
|
let to = serviceListItem.DelegateModel.itemsIndex;
|
||||||
|
console.log("from = " + from);
|
||||||
|
console.log("to = " + to);
|
||||||
|
if (from != to && to > -1 && to <= ServiceItemModel.count - 1)
|
||||||
|
ServiceItemModel.moveRows(from, to, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onDropped: (drag) => {
|
onDropped: (drag) => {
|
||||||
loadingItem.visible = true;
|
|
||||||
console.log("DROPPED IN ITEM AREA: " + drag.keys);
|
|
||||||
console.log(dragItemIndex + " " + index);
|
|
||||||
const hlIndex = serviceItemList.currentIndex;
|
|
||||||
if (drag.keys[0] === "library") {
|
if (drag.keys[0] === "library") {
|
||||||
|
loadingItem.visible = true;
|
||||||
|
console.log("DROPPED IN ITEM AREA: " + drag.keys);
|
||||||
|
console.log(dragItemIndex + " " + index);
|
||||||
|
const hlIndex = serviceItemList.currentIndex;
|
||||||
addItem(index,
|
addItem(index,
|
||||||
dragItemType,
|
dragItemType,
|
||||||
dragItemIndex);
|
dragItemIndex);
|
||||||
} else if (drag.keys[0] === "serviceitem") {
|
|
||||||
/* ServiceItemModel.moveRows(serviceItemList.indexDragged, */
|
|
||||||
/* serviceItemList.moveToIndex, 1); */
|
|
||||||
/* serviceItemList.currentIndex = moveToIndex; */
|
|
||||||
}
|
}
|
||||||
dropHighlightLine.visible = false;
|
dropHighlightLine.visible = false;
|
||||||
loadingItem.visible = false;
|
loadingItem.visible = false;
|
||||||
|
@ -150,12 +155,12 @@ Item {
|
||||||
|
|
||||||
Controls.Label {
|
Controls.Label {
|
||||||
id: label
|
id: label
|
||||||
anchors.left: dragHandle.right
|
anchors.left: parent.left
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
anchors.leftMargin: 5
|
anchors.leftMargin: 5
|
||||||
text: name
|
text: (index + 1) + ": " + name
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
width: parent.width - trailing.width - dragHandle.width - 25
|
width: parent.width - trailing.width - 25
|
||||||
color: {
|
color: {
|
||||||
if (selected ||
|
if (selected ||
|
||||||
mouseHandler.containsMouse || active)
|
mouseHandler.containsMouse || active)
|
||||||
|
@ -211,10 +216,10 @@ Item {
|
||||||
]
|
]
|
||||||
|
|
||||||
/* Drag.dragType: Drag.Automatic */
|
/* Drag.dragType: Drag.Automatic */
|
||||||
/* Drag.active: mouseHandler.drag.active */
|
Drag.active: mouseHandler.drag.active
|
||||||
/* Drag.hotSpot.x: width / 2 */
|
Drag.hotSpot.x: width / 2
|
||||||
/* Drag.hotSpot.y: height / 2 */
|
Drag.hotSpot.y: height / 2
|
||||||
/* Drag.keys: ["serviceitem"] */
|
Drag.keys: ["serviceitem"]
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
id: mouseHandler
|
id: mouseHandler
|
||||||
|
@ -222,19 +227,17 @@ Item {
|
||||||
hoverEnabled: true
|
hoverEnabled: true
|
||||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
||||||
|
|
||||||
/* drag { */
|
drag {
|
||||||
/* target: visServiceItem */
|
target: visServiceItem
|
||||||
/* axis: Drag.YAxis */
|
axis: Drag.YAxis
|
||||||
/* /\* minimumY: root.y *\/ */
|
/* minimumY: root.y */
|
||||||
/* /\* maximumY: serviceItemList.height - serviceDrop.height *\/ */
|
/* maximumY: serviceItemList.height - serviceDrop.height */
|
||||||
/* smoothed: false */
|
smoothed: false
|
||||||
/* } */
|
onActiveChanged: {
|
||||||
|
serviceItemList.indexDragged = index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* drag.onActiveChanged: { */
|
|
||||||
/* if (mouseHandler.drag.active) { */
|
|
||||||
/* serviceItemList.indexDragged = index; */
|
|
||||||
/* } */
|
|
||||||
/* } */
|
|
||||||
|
|
||||||
/* onPositionChanged: { */
|
/* onPositionChanged: { */
|
||||||
/* if (!pressed) { */
|
/* if (!pressed) { */
|
||||||
|
@ -243,9 +246,9 @@ Item {
|
||||||
/* mouseArea.arrangeItem(); */
|
/* mouseArea.arrangeItem(); */
|
||||||
/* } */
|
/* } */
|
||||||
|
|
||||||
onPressed: {
|
/* onPressAndHold: { */
|
||||||
serviceItemList.interactive = false;
|
/* serviceItemList.interactive = false; */
|
||||||
}
|
/* } */
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
if (mouse.button === Qt.RightButton) {
|
if (mouse.button === Qt.RightButton) {
|
||||||
|
@ -275,20 +278,21 @@ Item {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Presenter.DragHandle {
|
/* Kirigami.ListItemDragHandle { */
|
||||||
id: dragHandle
|
/* id: dragHandle */
|
||||||
anchors.left: parent.left
|
/* anchors.left: parent.left */
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
/* anchors.verticalCenter: parent.verticalCenter */
|
||||||
anchors.leftMargin: 5
|
/* anchors.leftMargin: 5 */
|
||||||
/* width: 20 */
|
/* incrementalMoves: true */
|
||||||
listItem: serviceListItem
|
/* /\* width: 20 *\/ */
|
||||||
listView: serviceItemList
|
/* listItem: serviceListItem */
|
||||||
onMoveRequested: (oldIndex, newIndex) => {
|
/* listView: serviceItemList */
|
||||||
ServiceItemModel.moveRows(oldIndex,
|
/* onMoveRequested: (oldIndex, newIndex) => { */
|
||||||
newIndex,
|
/* ServiceItemModel.moveRows(oldIndex, */
|
||||||
1)
|
/* newIndex, */
|
||||||
}
|
/* 1) */
|
||||||
}
|
/* } */
|
||||||
|
/* } */
|
||||||
|
|
||||||
}
|
}
|
||||||
Controls.Menu {
|
Controls.Menu {
|
||||||
|
|
|
@ -42,6 +42,7 @@ mod service_item_model {
|
||||||
VideoStartTime,
|
VideoStartTime,
|
||||||
VideoEndTime,
|
VideoEndTime,
|
||||||
Id,
|
Id,
|
||||||
|
Slides,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[auto_cxx_name]
|
#[auto_cxx_name]
|
||||||
|
@ -293,6 +294,7 @@ use self::service_item_model::{
|
||||||
ServiceRoles,
|
ServiceRoles,
|
||||||
};
|
};
|
||||||
use crate::service_item_model::service_item_model::QList_QString;
|
use crate::service_item_model::service_item_model::QList_QString;
|
||||||
|
use crate::slide_model::Slide;
|
||||||
use crate::slide_types::SlideType;
|
use crate::slide_types::SlideType;
|
||||||
use crate::songs::song_model::{Song, get_song};
|
use crate::songs::song_model::{Song, get_song};
|
||||||
use crate::{image_model, presentation_model, video_model};
|
use crate::{image_model, presentation_model, video_model};
|
||||||
|
@ -303,6 +305,7 @@ use cxx_qt_lib::{
|
||||||
use dirs;
|
use dirs;
|
||||||
// use lumina_core::service_items::ServiceItem as SI;
|
// use lumina_core::service_items::ServiceItem as SI;
|
||||||
use serde_json::{Value, json};
|
use serde_json::{Value, json};
|
||||||
|
use std::collections::HashMap;
|
||||||
use std::iter;
|
use std::iter;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::pin::Pin;
|
use std::pin::Pin;
|
||||||
|
@ -324,6 +327,7 @@ pub struct ServiceItem {
|
||||||
text: QStringList,
|
text: QStringList,
|
||||||
font: QString,
|
font: QString,
|
||||||
font_size: i32,
|
font_size: i32,
|
||||||
|
slides: HashMap<i32, Slide>,
|
||||||
slide_count: i32,
|
slide_count: i32,
|
||||||
active: bool,
|
active: bool,
|
||||||
selected: bool,
|
selected: bool,
|
||||||
|
@ -344,6 +348,7 @@ impl Default for ServiceItem {
|
||||||
text: QStringList::default(),
|
text: QStringList::default(),
|
||||||
font: QString::default(),
|
font: QString::default(),
|
||||||
font_size: 50,
|
font_size: 50,
|
||||||
|
slides: HashMap::new(),
|
||||||
slide_count: 1,
|
slide_count: 1,
|
||||||
active: false,
|
active: false,
|
||||||
selected: false,
|
selected: false,
|
||||||
|
@ -535,11 +540,11 @@ impl service_item_model::ServiceItemModel {
|
||||||
dest_index: i32,
|
dest_index: i32,
|
||||||
count: i32,
|
count: i32,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
debug!(
|
// debug!(
|
||||||
source = source_index,
|
// source = source_index,
|
||||||
dest = dest_index,
|
// dest = dest_index,
|
||||||
count = count
|
// count = count
|
||||||
);
|
// );
|
||||||
let model_index =
|
let model_index =
|
||||||
self.index(source_index, 0, &QModelIndex::default());
|
self.index(source_index, 0, &QModelIndex::default());
|
||||||
let parent = model_index.parent();
|
let parent = model_index.parent();
|
||||||
|
@ -567,8 +572,15 @@ impl service_item_model::ServiceItemModel {
|
||||||
qt_dest_index
|
qt_dest_index
|
||||||
);
|
);
|
||||||
|
|
||||||
println!("rust-end-service_item: {:?}", end_service_item);
|
// Ensure we really need to move
|
||||||
println!("qt-dest-service_item: {:?}", qt_dest_index);
|
if source_index == dest_index
|
||||||
|
|| dest_index < 0
|
||||||
|
|| dest_index > self.service_items.len() as i32
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
debug!("{:?}", self.rust().service_items);
|
||||||
unsafe {
|
unsafe {
|
||||||
// this function doesn't build
|
// this function doesn't build
|
||||||
self.as_mut().begin_move_rows(
|
self.as_mut().begin_move_rows(
|
||||||
|
@ -580,15 +592,15 @@ impl service_item_model::ServiceItemModel {
|
||||||
);
|
);
|
||||||
|
|
||||||
if source_id < dest_id {
|
if source_id < dest_id {
|
||||||
let move_amount = dest_id - source_id - cnt + 1;
|
let move_amount = 1;
|
||||||
self.as_mut().rust_mut().service_items
|
self.as_mut().rust_mut().service_items
|
||||||
[source_id..=dest_id]
|
[source_id..=dest_id]
|
||||||
.rotate_right(move_amount);
|
.rotate_right(move_amount);
|
||||||
println!("rust-move_amount: {:?}", move_amount);
|
// debug!(?move_amount);
|
||||||
} else {
|
} else {
|
||||||
let move_amount =
|
let move_amount =
|
||||||
end_service_item - dest_id - cnt + 1;
|
end_service_item - dest_id - cnt + 1;
|
||||||
println!("rust-move_amount: {:?}", move_amount);
|
// debug!(?move_amount);
|
||||||
self.as_mut().rust_mut().service_items
|
self.as_mut().rust_mut().service_items
|
||||||
[dest_id..=end_service_item]
|
[dest_id..=end_service_item]
|
||||||
.rotate_left(move_amount);
|
.rotate_left(move_amount);
|
||||||
|
@ -596,12 +608,13 @@ impl service_item_model::ServiceItemModel {
|
||||||
|
|
||||||
self.as_mut().end_move_rows();
|
self.as_mut().end_move_rows();
|
||||||
let item = self.as_mut().get_item(dest_index);
|
let item = self.as_mut().get_item(dest_index);
|
||||||
debug!(source_index, dest_index);
|
// debug!(source_index, dest_index);
|
||||||
self.as_mut().item_moved(
|
self.as_mut().item_moved(
|
||||||
&source_index,
|
&source_index,
|
||||||
&dest_index,
|
&dest_index,
|
||||||
&item,
|
&item,
|
||||||
);
|
);
|
||||||
|
debug!("{:?}", self.rust().service_items);
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1471,6 +1484,9 @@ impl service_item_model::ServiceItemModel {
|
||||||
ServiceRoles::Id => QVariant::from(
|
ServiceRoles::Id => QVariant::from(
|
||||||
&service_item.database_id.unwrap_or_default(),
|
&service_item.database_id.unwrap_or_default(),
|
||||||
),
|
),
|
||||||
|
ServiceRoles::Slides => {
|
||||||
|
QVariant::from(&service_item.slides)
|
||||||
|
}
|
||||||
_ => QVariant::default(),
|
_ => QVariant::default(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1538,6 +1554,10 @@ impl service_item_model::ServiceItemModel {
|
||||||
ServiceRoles::VideoEndTime.repr,
|
ServiceRoles::VideoEndTime.repr,
|
||||||
QByteArray::from("videoEndTime"),
|
QByteArray::from("videoEndTime"),
|
||||||
);
|
);
|
||||||
|
roles.insert(
|
||||||
|
ServiceRoles::Slides.repr,
|
||||||
|
QByteArray::from("slides"),
|
||||||
|
);
|
||||||
roles.insert(ServiceRoles::Id.repr, QByteArray::from("id"));
|
roles.insert(ServiceRoles::Id.repr, QByteArray::from("id"));
|
||||||
roles
|
roles
|
||||||
}
|
}
|
||||||
|
|
|
@ -722,7 +722,10 @@ impl slide_model::SlideModel {
|
||||||
destination_index: i32,
|
destination_index: i32,
|
||||||
_service_item: &QMap_QString_QVariant,
|
_service_item: &QMap_QString_QVariant,
|
||||||
) {
|
) {
|
||||||
if source_index == destination_index {
|
if source_index == destination_index
|
||||||
|
|| destination_index < 0
|
||||||
|
|| destination_index > self.slides.len() as i32
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -778,7 +781,7 @@ impl slide_model::SlideModel {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else if let Some((i, slide)) =
|
} else if let Some((i, slide)) =
|
||||||
slides_iter.enumerate().find(|slide| {
|
slides_iter.clone().enumerate().find(|slide| {
|
||||||
slide.1.service_item_id == destination_index
|
slide.1.service_item_id == destination_index
|
||||||
})
|
})
|
||||||
{
|
{
|
||||||
|
@ -793,8 +796,8 @@ impl slide_model::SlideModel {
|
||||||
|
|
||||||
debug!(count, first_slide, dest_slide);
|
debug!(count, first_slide, dest_slide);
|
||||||
|
|
||||||
let slides = self.slides.clone();
|
// let slides = self.slides.clone();
|
||||||
let slides_iter = slides.iter();
|
// let slides_iter = slides.iter();
|
||||||
|
|
||||||
self.as_mut().move_items(
|
self.as_mut().move_items(
|
||||||
first_slide as usize,
|
first_slide as usize,
|
||||||
|
@ -829,7 +832,6 @@ impl slide_model::SlideModel {
|
||||||
"While moving down, change service items id of moved slide"
|
"While moving down, change service items id of moved slide"
|
||||||
);
|
);
|
||||||
for (i, _slide) in slides_iter
|
for (i, _slide) in slides_iter
|
||||||
.clone()
|
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.filter(|x| {
|
.filter(|x| {
|
||||||
x.0 >= (first_slide + dest_count) as usize
|
x.0 >= (first_slide + dest_count) as usize
|
||||||
|
@ -856,7 +858,6 @@ impl slide_model::SlideModel {
|
||||||
"While moving up, change service items id of moved slide"
|
"While moving up, change service items id of moved slide"
|
||||||
);
|
);
|
||||||
for (i, _slide) in slides_iter
|
for (i, _slide) in slides_iter
|
||||||
.clone()
|
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.filter(|x| x.0 >= dest_slide as usize)
|
.filter(|x| x.0 >= dest_slide as usize)
|
||||||
.filter(|x| x.0 < (dest_slide + count) as usize)
|
.filter(|x| x.0 < (dest_slide + count) as usize)
|
||||||
|
@ -893,7 +894,6 @@ impl slide_model::SlideModel {
|
||||||
if move_down {
|
if move_down {
|
||||||
debug!("While moving down, change service item id");
|
debug!("While moving down, change service item id");
|
||||||
for (i, _slide) in slides_iter
|
for (i, _slide) in slides_iter
|
||||||
.clone()
|
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.filter(|x| x.1.service_item_id <= destination_index)
|
.filter(|x| x.1.service_item_id <= destination_index)
|
||||||
.filter(|x| x.1.service_item_id >= source_index)
|
.filter(|x| x.1.service_item_id >= source_index)
|
||||||
|
@ -914,7 +914,6 @@ impl slide_model::SlideModel {
|
||||||
} else {
|
} else {
|
||||||
debug!("While moving up, change service item id");
|
debug!("While moving up, change service item id");
|
||||||
for (i, _slide) in slides_iter
|
for (i, _slide) in slides_iter
|
||||||
.clone()
|
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.filter(|x| x.0 >= (dest_slide + count) as usize)
|
.filter(|x| x.0 >= (dest_slide + count) as usize)
|
||||||
.filter(|x| x.1.service_item_id >= destination_index)
|
.filter(|x| x.1.service_item_id >= destination_index)
|
||||||
|
|
|
@ -32,6 +32,7 @@ pub mod qobject {
|
||||||
#[qproperty(i32, font_size)]
|
#[qproperty(i32, font_size)]
|
||||||
#[qproperty(f32, video_start_time)]
|
#[qproperty(f32, video_start_time)]
|
||||||
#[qproperty(f32, video_end_time)]
|
#[qproperty(f32, video_end_time)]
|
||||||
|
#[qproperty(QString, video_thumbnail)]
|
||||||
// #[qproperty(*mut SlideModel, slide_model)]
|
// #[qproperty(*mut SlideModel, slide_model)]
|
||||||
type SlideObject = super::SlideObjectRust;
|
type SlideObject = super::SlideObjectRust;
|
||||||
|
|
||||||
|
@ -116,6 +117,7 @@ pub struct SlideObjectRust {
|
||||||
font_size: i32,
|
font_size: i32,
|
||||||
video_start_time: f32,
|
video_start_time: f32,
|
||||||
video_end_time: f32,
|
video_end_time: f32,
|
||||||
|
video_thumbnail: QString,
|
||||||
// slide_model: *mut slide_model::SlideModel,
|
// slide_model: *mut slide_model::SlideModel,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,6 +141,7 @@ impl Default for SlideObjectRust {
|
||||||
inner_slide_index: 0,
|
inner_slide_index: 0,
|
||||||
video_start_time: 0.0,
|
video_start_time: 0.0,
|
||||||
video_end_time: 0.0,
|
video_end_time: 0.0,
|
||||||
|
video_thumbnail: QString::from(""),
|
||||||
// slide_model: std::ptr::null_mut(),
|
// slide_model: std::ptr::null_mut(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue