add activate function properly

While the previous function technically worked, the connections
weren't setup properly. Also the row_count function wasn't running
because it requires a QModelIndex parameter. Added a simple count
function to make sure we know how many slides there are in QML.
This commit is contained in:
Chris Cochrun 2023-03-31 13:13:20 -05:00
parent b8bfa4b108
commit 0a9c17cdde
4 changed files with 59 additions and 23 deletions

View file

@ -15,7 +15,7 @@ Controls.Page {
property int currentServiceItem property int currentServiceItem
property int currentSlide property int currentSlide
property int totalServiceItems: ServiceItemModel.rowCount() property int totalServiceItems: ServiceItemModel.rowCount()
property int totalSlides: SlideMod.rowCount() property int totalSlides: SlideMod.count()
property url imageBackground: presentation.imageBackground property url imageBackground: presentation.imageBackground
property url videoBackground: presentation.vidBackground property url videoBackground: presentation.vidBackground
property string currentText: presentation.text property string currentText: presentation.text

View file

@ -365,6 +365,7 @@ FocusScope {
function nextSlideAction() { function nextSlideAction() {
keyHandler.forceActiveFocus(); keyHandler.forceActiveFocus();
console.log(currentServiceItem); console.log(currentServiceItem);
console.log(totalSlides);
const nextSlideIdx = currentSlide + 1; const nextSlideIdx = currentSlide + 1;
if (nextSlideIdx > totalSlides || nextSlideIdx < 0) if (nextSlideIdx > totalSlides || nextSlideIdx < 0)
return; return;

View file

@ -71,7 +71,7 @@ Item {
Connections { Connections {
target: SlideModel target: SlideMod
function onDataChanged() { function onDataChanged() {
if (active) { if (active) {
previewSlidesList.currentIndex = index; previewSlidesList.currentIndex = index;

View file

@ -25,7 +25,7 @@ mod slide_model {
} }
#[cxx_qt::qobject] #[cxx_qt::qobject]
#[derive(Default, Clone, Debug)] #[derive(Clone, Debug)]
pub struct Slidey { pub struct Slidey {
#[qproperty] #[qproperty]
text: QString, text: QString,
@ -61,6 +61,29 @@ mod slide_model {
video_thumbnail: QString, video_thumbnail: QString,
} }
impl Default for Slidey {
fn default() -> Self {
Self {
text: QString::default(),
ty: QString::default(),
audio: QString::default(),
image_background: QString::default(),
video_background: QString::default(),
htext_alignment: QString::default(),
vtext_alignment: QString::default(),
font: QString::default(),
font_size: 50,
slide_count: 1,
slide_id: 0,
service_item_id: 0,
active: false,
selected: false,
looping: false,
video_thumbnail: QString::default(),
}
}
}
#[cxx_qt::qobject( #[cxx_qt::qobject(
base = "QAbstractListModel", base = "QAbstractListModel",
// qml_uri = "com.kdab.cxx_qt.demo", // qml_uri = "com.kdab.cxx_qt.demo",
@ -69,7 +92,7 @@ mod slide_model {
#[derive(Default, Debug)] #[derive(Default, Debug)]
pub struct SlideyMod { pub struct SlideyMod {
id: i32, id: i32,
slides: Vec<*mut CxxSlidey>, slides: Vec<Slidey>,
} }
#[cxx_qt::qsignals(SlideyMod)] #[cxx_qt::qsignals(SlideyMod)]
@ -175,6 +198,19 @@ mod slide_model {
slide_count: i32, slide_count: i32,
looping: bool, looping: bool,
) { ) {
// slide.set_text(text);
// slide.set_ty(ty);
// slide.set_audio(audio);
// slide.set_image_background(image_background);
// slide.set_video_background(video_background);
// slide.set_font(font);
// slide.set_font_size(font_size);
// slide.set_htext_alignment(htext_alignment);
// slide.set_vtext_alignment(vtext_alignment);
// slide.set_service_item_id(service_item_id);
// slide.set_slide_id(slide_id);
// slide.set_slide_count(slide_count);
// slide.set_looping(looping);
let slide = Slidey { let slide = Slidey {
ty, ty,
text, text,
@ -199,6 +235,7 @@ mod slide_model {
fn add_slide(mut self: Pin<&mut Self>, slide: &Slidey) { fn add_slide(mut self: Pin<&mut Self>, slide: &Slidey) {
let index = self.as_ref().slides().len() as i32; let index = self.as_ref().slides().len() as i32;
println!("{:?}", slide);
let slide = slide.clone(); let slide = slide.clone();
unsafe { unsafe {
self.as_mut() self.as_mut()
@ -245,11 +282,10 @@ mod slide_model {
video_thumbnail: QString::from(""), video_thumbnail: QString::from(""),
}; };
self.as_mut().insert_slide(&slide, index); self.as_mut().insert_slide(slide, index);
} }
fn insert_slide(mut self: Pin<&mut Self>, slide: &CxxSlidey, id: i32) { fn insert_slide(mut self: Pin<&mut Self>, slide: Slidey, id: i32) {
let slide: *mut CxxSlidey = std::ptr::addr_of_mut(slide);
unsafe { unsafe {
self.as_mut() self.as_mut()
.begin_insert_rows(&QModelIndex::default(), id, id); .begin_insert_rows(&QModelIndex::default(), id, id);
@ -373,7 +409,6 @@ mod slide_model {
slide.video_background = QString::from(""); slide.video_background = QString::from("");
slide.slide_id = 0; slide.slide_id = 0;
self.as_mut().add_slide(&slide); self.as_mut().add_slide(&slide);
println!("{:?}", slide);
} }
Some(ty) if ty == QString::from("song") => { Some(ty) if ty == QString::from("song") => {
for i in 0..text_vec.len() { for i in 0..text_vec.len() {
@ -391,7 +426,6 @@ mod slide_model {
slide.image_background = QString::from(""); slide.image_background = QString::from("");
} }
self.as_mut().add_slide(&slide); self.as_mut().add_slide(&slide);
println!("{:?}", slide);
} }
} }
Some(ty) if ty == QString::from("video") => { Some(ty) if ty == QString::from("video") => {
@ -400,7 +434,6 @@ mod slide_model {
slide.video_background = background; slide.video_background = background;
slide.slide_id = 0; slide.slide_id = 0;
self.as_mut().add_slide(&slide); self.as_mut().add_slide(&slide);
println!("{:?}", slide);
} }
Some(ty) if ty == QString::from("presentation") => { Some(ty) if ty == QString::from("presentation") => {
for i in 0..slide.slide_count { for i in 0..slide.slide_count {
@ -409,7 +442,6 @@ mod slide_model {
slide.video_background = QString::from(""); slide.video_background = QString::from("");
slide.slide_id = i; slide.slide_id = i;
self.as_mut().add_slide(&slide); self.as_mut().add_slide(&slide);
println!("{:?}", slide);
} }
} }
_ => println!("It's somethign else!"), _ => println!("It's somethign else!"),
@ -473,20 +505,18 @@ mod slide_model {
let tl = &self.as_ref().index(0, 0, &QModelIndex::default()); let tl = &self.as_ref().index(0, 0, &QModelIndex::default());
let br = &self.as_ref().index(rc, rc, &QModelIndex::default()); let br = &self.as_ref().index(rc, rc, &QModelIndex::default());
let roles = &QVector_i32::from(vec![12]); let roles = &QVector_i32::from(vec![12]);
for i in self.as_mut().slides_mut().iter_mut() { for slide in self.as_mut().slides_mut().iter_mut() {
// println!("slide is deactivating {:?}", i); // println!("slide is deactivating {:?}", i);
// i.active = false; slide.active = false;
i.set_active(false);
// self.as_mut().emit(Signals::DataChanged);
} }
if let Some(slide) = self.as_mut().slides_mut().get_mut(index as usize) { if let Some(slide) = self.as_mut().slides_mut().get_mut(index as usize) {
// slide.active = true; slide.active = true;
slide.set_active(true); // slide.set_active(true);
// self.as_mut().emit(Signals::DataChanged { self.as_mut().emit(Signals::DataChanged {
// top_left: tl, top_left: tl,
// bottom_right: br, bottom_right: br,
// roles, roles,
// }); });
println!("slide is activating {:?}", index); println!("slide is activating {:?}", index);
true true
} else { } else {
@ -535,7 +565,7 @@ mod slide_model {
impl qobject::SlideyMod { impl qobject::SlideyMod {
#[qinvokable(cxx_override)] #[qinvokable(cxx_override)]
fn data(&self, index: &QModelIndex, role: i32) -> QVariant { fn data(&self, index: &QModelIndex, role: i32) -> QVariant {
if let Some(slide) = self.rust().slides.get(index.row() as usize) { if let Some(slide) = self.slides().get(index.row() as usize) {
return match role { return match role {
0 => QVariant::from(&slide.ty), 0 => QVariant::from(&slide.ty),
1 => QVariant::from(&slide.text), 1 => QVariant::from(&slide.text),
@ -594,5 +624,10 @@ mod slide_model {
// println!("row count is {cnt}"); // println!("row count is {cnt}");
cnt cnt
} }
#[qinvokable]
pub fn count(&self) -> i32 {
self.rust().slides.len() as i32
}
} }
} }