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:
parent
b8bfa4b108
commit
0a9c17cdde
4 changed files with 59 additions and 23 deletions
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue