setup move_item_from_service in slide_model
I'll need to keep working on this but a basic sorta working function of moving the order of items in the Rust model is here.
This commit is contained in:
parent
85285b7d02
commit
d9dbefcbe5
3 changed files with 157 additions and 3 deletions
|
@ -342,6 +342,8 @@ bool ServiceItemModel::moveRows(int sourceIndex, int destIndex, int count) {
|
||||||
QModelIndex idx = index(destIndex);
|
QModelIndex idx = index(destIndex);
|
||||||
ServiceItem *item = m_items[idx.row()];
|
ServiceItem *item = m_items[idx.row()];
|
||||||
emit rowMoved(sourceIndex, destIndex, *item);
|
emit rowMoved(sourceIndex, destIndex, *item);
|
||||||
|
QVariantMap map = getItem(destIndex);
|
||||||
|
emit rowMovedRust(sourceIndex, destIndex, map);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -164,9 +164,9 @@ int main(int argc, char *argv[])
|
||||||
slideMod.get(),
|
slideMod.get(),
|
||||||
&SlideyMod::insertItemFromService);
|
&SlideyMod::insertItemFromService);
|
||||||
QObject::connect(serviceItemModel.get(),
|
QObject::connect(serviceItemModel.get(),
|
||||||
SIGNAL(rowMoved(const int&, const int&, const ServiceItem&)),
|
&ServiceItemModel::rowMovedRust,
|
||||||
slideModel.get(),
|
slideMod.get(),
|
||||||
SLOT(moveRowFromService(const int&, const int&, const ServiceItem&)));
|
&SlideyMod::moveItemFromService);
|
||||||
QObject::connect(serviceItemModel.get(),
|
QObject::connect(serviceItemModel.get(),
|
||||||
&ServiceItemModel::rowRemovedRust,
|
&ServiceItemModel::rowRemovedRust,
|
||||||
slideMod.get(),
|
slideMod.get(),
|
||||||
|
|
|
@ -222,6 +222,7 @@ mod slide_model {
|
||||||
fn insert_slide(mut self: Pin<&mut Self>, slide: &Slidey, id: i32) {
|
fn insert_slide(mut self: Pin<&mut Self>, slide: &Slidey, id: i32) {
|
||||||
let mut slide = slide.clone();
|
let mut slide = slide.clone();
|
||||||
slide.slide_index = id;
|
slide.slide_index = id;
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
self.as_mut()
|
self.as_mut()
|
||||||
.begin_insert_rows(&QModelIndex::default(), id, id);
|
.begin_insert_rows(&QModelIndex::default(), id, id);
|
||||||
|
@ -549,6 +550,157 @@ mod slide_model {
|
||||||
println!("Item added in rust model!");
|
println!("Item added in rust model!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[qinvokable]
|
||||||
|
pub fn move_item_from_service(
|
||||||
|
mut self: Pin<&mut Self>,
|
||||||
|
source_index: i32,
|
||||||
|
destination_index: i32,
|
||||||
|
_service_item: &QMap_QString_QVariant,
|
||||||
|
) {
|
||||||
|
if source_index == destination_index {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let slides = self.slides().clone();
|
||||||
|
let slides_iter = slides.iter();
|
||||||
|
|
||||||
|
let mut first_slide = 0;
|
||||||
|
let mut dest_slide = 0;
|
||||||
|
let mut count = 0;
|
||||||
|
|
||||||
|
for (i, slide) in slides_iter.clone().enumerate() {
|
||||||
|
if slide.service_item_id == source_index {
|
||||||
|
first_slide = i as i32;
|
||||||
|
count = slide.slide_count;
|
||||||
|
println!("RUST_COUNT: {:?}", count);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i, slide) in slides_iter.enumerate() {
|
||||||
|
if slide.service_item_id == destination_index {
|
||||||
|
dest_slide = i as i32;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
self.as_mut().begin_reset_model();
|
||||||
|
}
|
||||||
|
|
||||||
|
self.as_mut().move_items(first_slide, dest_slide, count);
|
||||||
|
if let Some(slide) = self.as_mut().slides_mut().get_mut(dest_slide as usize) {
|
||||||
|
slide.service_item_id = destination_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
let slides = self.slides().clone();
|
||||||
|
let slides_iter = slides.iter();
|
||||||
|
let move_down = source_index < destination_index;
|
||||||
|
|
||||||
|
if move_down {
|
||||||
|
for (i, slide) in slides_iter
|
||||||
|
.enumerate()
|
||||||
|
.filter(|x| x.0 < dest_slide as usize)
|
||||||
|
{
|
||||||
|
if slide.service_item_id <= destination_index
|
||||||
|
&& slide.service_item_id > source_index
|
||||||
|
{
|
||||||
|
if let Some(slide) = self.as_mut().slides_mut().get_mut(i) {
|
||||||
|
println!(
|
||||||
|
"rust-switching-service: {:?} to {:?}",
|
||||||
|
slide.service_item_id,
|
||||||
|
slide.service_item_id - 1
|
||||||
|
);
|
||||||
|
slide.service_item_id -= 1;
|
||||||
|
}
|
||||||
|
println!("rust-did:");
|
||||||
|
}
|
||||||
|
println!("rust-not-service_item_id: {:?}", slide.service_item_id);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (i, slide) in slides_iter
|
||||||
|
.enumerate()
|
||||||
|
.filter(|x| x.0 >= (dest_slide as usize + count as usize))
|
||||||
|
{
|
||||||
|
if slide.service_item_id >= destination_index
|
||||||
|
&& slide.service_item_id < source_index
|
||||||
|
{
|
||||||
|
if let Some(slide) = self.as_mut().slides_mut().get_mut(i) {
|
||||||
|
println!(
|
||||||
|
"rust-switching-service: {:?} to {:?}",
|
||||||
|
slide.service_item_id,
|
||||||
|
slide.service_item_id + 1
|
||||||
|
);
|
||||||
|
slide.service_item_id += 1;
|
||||||
|
}
|
||||||
|
println!("rust-did:");
|
||||||
|
}
|
||||||
|
println!("rust-not-service_item_id: {:?}", slide.service_item_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
self.as_mut().end_reset_model();
|
||||||
|
}
|
||||||
|
|
||||||
|
// for (i, slide) in slides_iter
|
||||||
|
// .enumerate()
|
||||||
|
// .filter(|x| x.0 < dest_slide as usize)
|
||||||
|
// {
|
||||||
|
// if move_down {
|
||||||
|
// if slide.service_item_id <= destination_index
|
||||||
|
// && slide.service_item_id > source_index
|
||||||
|
// {
|
||||||
|
// if let Some(slide) = self.as_mut().slides_mut().get_mut(i) {
|
||||||
|
// println!(
|
||||||
|
// "rust-switching-service: {:?} to {:?}",
|
||||||
|
// slide.service_item_id,
|
||||||
|
// slide.service_item_id - 1
|
||||||
|
// );
|
||||||
|
// slide.service_item_id -= 1;
|
||||||
|
// }
|
||||||
|
// println!("rust-did:");
|
||||||
|
// }
|
||||||
|
// println!("rust-not-service_item_id: {:?}", slide.service_item_id);
|
||||||
|
// } else {
|
||||||
|
// if slide.service_item_id > destination_index
|
||||||
|
// && slide.service_item_id < source_index
|
||||||
|
// {
|
||||||
|
// if let Some(slide) = self.as_mut().slides_mut().get_mut(i) {
|
||||||
|
// println!(
|
||||||
|
// "rust-switching-service: {:?} to {:?}",
|
||||||
|
// slide.service_item_id,
|
||||||
|
// slide.service_item_id + 1
|
||||||
|
// );
|
||||||
|
// slide.service_item_id += 1;
|
||||||
|
// }
|
||||||
|
// println!("rust-did:");
|
||||||
|
// }
|
||||||
|
// println!("rust-not-service_item_id: {:?}", slide.service_item_id);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
println!("rust-move: {first_slide} to {dest_slide} with {count} slides");
|
||||||
|
}
|
||||||
|
|
||||||
|
fn move_items(mut self: Pin<&mut Self>, source_index: i32, dest_index: i32, count: i32) {
|
||||||
|
let end_slide = source_index + count;
|
||||||
|
unsafe {
|
||||||
|
self.as_mut().begin_reset_model();
|
||||||
|
let drained: Vec<Slidey> = self
|
||||||
|
.as_mut()
|
||||||
|
.slides_mut()
|
||||||
|
.drain(source_index as usize..end_slide as usize)
|
||||||
|
.collect();
|
||||||
|
for (i, slide) in drained.iter().enumerate() {
|
||||||
|
self.as_mut()
|
||||||
|
.slides_mut()
|
||||||
|
.insert(dest_index as usize + i, slide.clone());
|
||||||
|
}
|
||||||
|
self.as_mut().end_reset_model();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[qinvokable]
|
#[qinvokable]
|
||||||
pub fn get_item(self: Pin<&mut Self>, index: i32) -> QMap_QString_QVariant {
|
pub fn get_item(self: Pin<&mut Self>, index: i32) -> QMap_QString_QVariant {
|
||||||
println!("{index}");
|
println!("{index}");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue