fixing slide_model moves not following service_item moves

This commit is contained in:
Chris Cochrun 2024-01-22 11:19:45 -06:00
parent bece8e4e7b
commit 9c30af7a5b

View file

@ -313,7 +313,7 @@ impl slide_model::SlideModel {
} }
pub fn clear(mut self: Pin<&mut Self>) { pub fn clear(mut self: Pin<&mut Self>) {
println!("CLEARING ALL SLIDES"); debug!("CLEARING ALL SLIDES");
unsafe { unsafe {
self.as_mut().begin_reset_model(); self.as_mut().begin_reset_model();
self.as_mut().rust_mut().slides.clear(); self.as_mut().rust_mut().slides.clear();
@ -326,19 +326,19 @@ impl slide_model::SlideModel {
index: i32, index: i32,
_service_item: &QMap_QString_QVariant, _service_item: &QMap_QString_QVariant,
) { ) {
println!("Rusty-Removal-Time: {:?}", index); debug!("Rusty-Removal-Time: {:?}", index);
let slides = self.slides.clone(); let slides = self.slides.clone();
let slides_iter = slides.iter(); let slides_iter = slides.iter();
for (i, slide) in slides_iter.enumerate().rev() { for (i, slide) in slides_iter.enumerate().rev() {
if slide.service_item_id == index { if slide.service_item_id == index {
self.as_mut().remove_item(i as i32); self.as_mut().remove_item(i as i32);
println!("Removing-slide: {:?}", i); debug!("Removing-slide: {:?}", i);
} else if slide.service_item_id > index { } else if slide.service_item_id > index {
if let Some(slide) = if let Some(slide) =
self.as_mut().rust_mut().slides.get_mut(i) self.as_mut().rust_mut().slides.get_mut(i)
{ {
println!("changing-serviceid-of: {:?}", i); debug!("changing-serviceid-of: {:?}", i);
println!( debug!(
"changing-serviceid-fromandto: {:?}-{:?}", "changing-serviceid-fromandto: {:?}-{:?}",
slide.service_item_id, slide.service_item_id,
slide.service_item_id - 1 slide.service_item_id - 1
@ -363,12 +363,12 @@ impl slide_model::SlideModel {
self.as_mut().rust_mut().slides.remove(index as usize); self.as_mut().rust_mut().slides.remove(index as usize);
self.as_mut().end_remove_rows(); self.as_mut().end_remove_rows();
} }
println!("removed-row: {:?}", index); debug!("removed-row: {:?}", index);
} }
fn add_slide(mut self: Pin<&mut Self>, slide: &Slide) { fn add_slide(mut self: Pin<&mut Self>, slide: &Slide) {
let index = self.as_ref().slides.len() as i32; let index = self.as_ref().slides.len() as i32;
println!("{:?}", slide); debug!("{:?}", slide);
let slide = slide.clone(); let slide = slide.clone();
let count = self.as_ref().count; let count = self.as_ref().count;
@ -563,17 +563,17 @@ impl slide_model::SlideModel {
slide.video_background = QString::from(""); slide.video_background = QString::from("");
slide.slide_index = 0; slide.slide_index = 0;
self.as_mut().insert_slide(&slide, slide_index); self.as_mut().insert_slide(&slide, slide_index);
println!("Image added to slide model!"); debug!("Image added to slide model!");
} }
Some(ty) if ty == QString::from("song") => { Some(ty) if ty == QString::from("song") => {
let count = text_vec.len(); let count = text_vec.len();
for (i, text) in text_vec.iter().enumerate() { for (i, text) in text_vec.iter().enumerate() {
println!( debug!(
"rust: add song of {:?} length at index {:?}", "rust: add song of {:?} length at index {:?}",
&count, &slide_index &count, &slide_index
); );
slide.ty = ty.clone(); slide.ty = ty.clone();
// println!("{:?}", text_vec[i].clone()); // debug!("{:?}", text_vec[i].clone());
slide.text = text.clone(); slide.text = text.clone();
slide.slide_count = count as i32; slide.slide_count = count as i32;
slide.slide_index = i as i32; slide.slide_index = i as i32;
@ -618,10 +618,10 @@ impl slide_model::SlideModel {
} }
} }
} }
_ => println!("It's somethign else!"), _ => debug!("It's somethign else!"),
}; };
println!("Item added in slide model!"); debug!("Item added in slide model!");
} }
pub fn add_item_from_service( pub fn add_item_from_service(
@ -629,7 +629,7 @@ impl slide_model::SlideModel {
index: i32, index: i32,
service_item: &QMap_QString_QVariant, service_item: &QMap_QString_QVariant,
) { ) {
println!("add rust slide {:?}", index); debug!("add rust slide {:?}", index);
let mut slide = Slide::default(); let mut slide = Slide::default();
let iter = service_item.iter(); let iter = service_item.iter();
@ -768,7 +768,7 @@ impl slide_model::SlideModel {
Some(ty) if ty == QString::from("song") => { Some(ty) if ty == QString::from("song") => {
for (i, text) in text_vec.iter().enumerate() { for (i, text) in text_vec.iter().enumerate() {
slide.ty = ty.clone(); slide.ty = ty.clone();
// println!("{:?}", text_vec[i].clone()); // debug!("{:?}", text_vec[i].clone());
slide.text = text.clone(); slide.text = text.clone();
slide.slide_count = text_vec.len() as i32; slide.slide_count = text_vec.len() as i32;
slide.slide_index = i as i32; slide.slide_index = i as i32;
@ -811,10 +811,10 @@ impl slide_model::SlideModel {
} }
} }
} }
_ => println!("It's somethign else!"), _ => debug!("It's somethign else!"),
}; };
println!("Item added in rust model!"); debug!("Item added in rust model!");
} }
pub fn move_item_from_service( pub fn move_item_from_service(
@ -844,8 +844,12 @@ impl slide_model::SlideModel {
// first slide is 1 // first slide is 1
// dest slide is 2 // dest slide is 2
for (i, slide) in slides_iter.clone().enumerate() { //lets get the first slide and count
if slide.service_item_id == source_index { for (i, slide) in slides_iter
.clone()
.enumerate()
.filter(|slide| slide.1.service_item_id == source_index)
{
debug!(index = i, ?slide); debug!(index = i, ?slide);
first_slide = i as i32; first_slide = i as i32;
count = if slide.slide_count == 0 { count = if slide.slide_count == 0 {
@ -855,46 +859,46 @@ impl slide_model::SlideModel {
}; };
break; break;
} }
}
// lets get the dest_slide and count
if move_down { if move_down {
for (i, slide) in slides_iter.enumerate().rev() { for (i, slide) in
if slide.service_item_id == destination_index { slides_iter.clone().enumerate().rev().filter(
// if count > 1 { |slide| {
// dest_slide = i as i32 - count slide.1.service_item_id == destination_index
// } else { },
)
{
dest_slide = i as i32; dest_slide = i as i32;
dest_count = if slide.slide_count == 0 { dest_count = if slide.slide_count == 0 {
1 1
} else { } else {
slide.slide_count slide.slide_count
}; };
println!( debug!(
"RUST_dest_slide: {:?} with {:?} slides", "RUST_dest_slide: {:?} with {:?} slides",
dest_slide, dest_count dest_slide, dest_count
); );
// }
break; break;
} }
}
} else { } else {
for (i, slide) in slides_iter.enumerate() { for (i, slide) in
if slide.service_item_id == destination_index { slides_iter.enumerate().filter(|slide| {
// if count > 1 { slide.1.service_item_id == destination_index
// dest_slide = i as i32 - count })
// } else { {
dest_slide = i as i32; dest_slide = i as i32;
println!("RUST_dest_slide: {:?}", dest_slide); dest_count = if slide.slide_count == 0 {
// } 1
} else {
slide.slide_count
};
debug!("RUST_dest_slide: {:?}", dest_slide);
break; break;
} }
} }
}
println!("RUST_COUNT: {:?}", count); debug!(count, first_slide, dest_slide);
println!("RUST_first_slide: {:?}", first_slide);
println!("RUST_dest_slide: {:?}", dest_slide);
// println!("RUST_len: {:?}", self.rust().slides.len());
let slides = self.slides.clone(); let slides = self.slides.clone();
let slides_iter = slides.iter(); let slides_iter = slides.iter();
@ -911,60 +915,19 @@ impl slide_model::SlideModel {
let rc = self.as_ref().count() - 1; let rc = self.as_ref().count() - 1;
let tl = &self.as_ref().index( let tl = &self.as_ref().index(
source_index, first_slide,
0,
&QModelIndex::default(),
);
let br = &self.as_ref().index(
dest_slide,
0, 0,
&QModelIndex::default(), &QModelIndex::default(),
); );
let br = &self.as_ref().index(rc, 0, &QModelIndex::default());
let mut vector_roles = QVector_i32::default(); let mut vector_roles = QVector_i32::default();
vector_roles.append(self.get_role(SlideRoles::ServiceItemId)); vector_roles.append(self.get_role(SlideRoles::ServiceItemId));
vector_roles
// Change the shifted slides, not the moved service_item .append(self.get_role(SlideRoles::ImageBackground));
if move_down {
debug!("While moving down, change service item id");
for (i, slide) in slides_iter
.clone()
.enumerate()
.filter(|x| {
x.0 >= (first_slide + dest_count) as usize
})
.filter(|x| x.1.service_item_id <= destination_index)
.filter(|x| x.1.service_item_id >= source_index)
{
if let Some(slide) =
self.as_mut().rust_mut().slides.get_mut(i)
{
debug!(
old_service_id = slide.service_item_id,
new_service_id = slide.service_item_id - 1,
"rust-switching-service",
);
slide.service_item_id -= 1;
}
}
} else {
debug!("While moving up, change service item id");
for (i, slide) in slides_iter
.clone()
.enumerate()
.filter(|x| {
x.0 >= (dest_slide as usize + count as usize)
})
.filter(|x| x.1.service_item_id >= destination_index)
.filter(|x| x.1.service_item_id <= source_index)
{
if let Some(slide) =
self.as_mut().rust_mut().slides.get_mut(i)
{
debug!(
old_service_id = slide.service_item_id,
new_service_id = slide.service_item_id + 1,
"rust-switching-service",
);
slide.service_item_id += 1;
}
}
}
// Change the service_item_id of the moved slide // Change the service_item_id of the moved slide
if count > 1 { if count > 1 {
@ -984,7 +947,8 @@ impl slide_model::SlideModel {
if let Some(slide) = if let Some(slide) =
self.as_mut().rust_mut().slides.get_mut(i) self.as_mut().rust_mut().slides.get_mut(i)
{ {
println!( debug!(
?slide,
"rust: these ones right here officer. from {:?} to {:?}", "rust: these ones right here officer. from {:?} to {:?}",
slide.service_item_id, destination_index slide.service_item_id, destination_index
); );
@ -1002,7 +966,8 @@ impl slide_model::SlideModel {
if let Some(slide) = if let Some(slide) =
self.as_mut().rust_mut().slides.get_mut(i) self.as_mut().rust_mut().slides.get_mut(i)
{ {
println!( debug!(
?slide,
"rust: these ones right here officer. from {:?} to {:?}", "rust: these ones right here officer. from {:?} to {:?}",
slide.service_item_id, destination_index slide.service_item_id, destination_index
); );
@ -1027,11 +992,58 @@ impl slide_model::SlideModel {
} }
} }
// Change the service_item_id of the shifted slides, not the moved service_item
if move_down {
debug!("While moving down, change service item id");
for (i, slide) in slides_iter
.clone()
.enumerate()
.filter(|x| x.1.service_item_id <= destination_index)
.filter(|x| x.1.service_item_id >= source_index)
.filter(|x| x.0 <= (dest_slide - count) as usize)
{
if let Some(slide) =
self.as_mut().rust_mut().slides.get_mut(i)
{
debug!(
?slide,
old_service_id = slide.service_item_id,
new_service_id = slide.service_item_id - 1,
"rust-switching-service",
);
slide.service_item_id -= 1;
}
}
} else {
debug!("While moving up, change service item id");
for (i, slide) in slides_iter
.clone()
.enumerate()
.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 <= source_index)
{
if let Some(slide) =
self.as_mut().rust_mut().slides.get_mut(i)
{
debug!(
?slide,
old_service_id = slide.service_item_id,
new_service_id = slide.service_item_id + 1,
"rust-switching-service",
);
slide.service_item_id += 1;
}
}
}
self.as_mut().data_changed(tl, br, &vector_roles);
// unsafe { // unsafe {
// self.as_mut().end_reset_model(); // self.as_mut().end_reset_model();
// } // }
println!("rust-move: {first_slide} to {dest_slide} with {count} slides"); debug!("rust-move: {first_slide} to {dest_slide} with {count} slides");
} }
fn move_items( fn move_items(
@ -1045,8 +1057,8 @@ impl slide_model::SlideModel {
return; return;
}; };
let end_slide = source_index + count - 1; let end_slide = source_index + count - 1;
println!("rust-end-slide: {:?}", end_slide); debug!("rust-end-slide: {:?}", end_slide);
println!("rust-dest-slide: {:?}", dest_index); debug!("rust-dest-slide: {:?}", dest_index);
let model_index = self.index( let model_index = self.index(
source_index as i32, source_index as i32,
0, 0,
@ -1069,13 +1081,13 @@ impl slide_model::SlideModel {
if source_index < dest_index { if source_index < dest_index {
let move_amount = let move_amount =
dest_index - source_index - count + 1; dest_index - source_index - count + 1;
// println!("rust-move_amount: {:?}", move_amount); // debug!("rust-move_amount: {:?}", move_amount);
self.as_mut().rust_mut().slides self.as_mut().rust_mut().slides
[source_index..=dest_index] [source_index..=dest_index]
.rotate_right(move_amount); .rotate_right(move_amount);
} else { } else {
let move_amount = end_slide - dest_index - count + 1; let move_amount = end_slide - dest_index - count + 1;
println!("rust-move_amount: {:?}", move_amount); debug!("rust-move_amount: {:?}", move_amount);
self.as_mut().rust_mut().slides self.as_mut().rust_mut().slides
[dest_index..=end_slide] [dest_index..=end_slide]
.rotate_left(move_amount); .rotate_left(move_amount);
@ -1088,7 +1100,7 @@ impl slide_model::SlideModel {
self: Pin<&mut Self>, self: Pin<&mut Self>,
index: i32, index: i32,
) -> QMap_QString_QVariant { ) -> QMap_QString_QVariant {
println!("{index}"); debug!("{index}");
let mut qvariantmap = QMap_QString_QVariant::default(); let mut qvariantmap = QMap_QString_QVariant::default();
let idx = self.index(index, 0, &QModelIndex::default()); let idx = self.index(index, 0, &QModelIndex::default());
if !idx.is_valid() { if !idx.is_valid() {
@ -1133,7 +1145,7 @@ impl slide_model::SlideModel {
let mut vector_roles = QVector_i32::default(); let mut vector_roles = QVector_i32::default();
vector_roles.append(self.get_role(SlideRoles::Active)); vector_roles.append(self.get_role(SlideRoles::Active));
for slide in self.as_mut().rust_mut().slides.iter_mut() { for slide in self.as_mut().rust_mut().slides.iter_mut() {
// println!("slide is deactivating {:?}", i); // debug!("slide is deactivating {:?}", i);
slide.active = false; slide.active = false;
} }
@ -1313,7 +1325,7 @@ impl slide_model::SlideModel {
pub fn row_count(&self, _parent: &QModelIndex) -> i32 { pub fn row_count(&self, _parent: &QModelIndex) -> i32 {
let cnt = self.rust().slides.len() as i32; let cnt = self.rust().slides.len() as i32;
// println!("row count is {cnt}"); // debug!("row count is {cnt}");
cnt cnt
} }
} }