slide_model.rs functions like get_item and activate

These functions aren't perfect, but this code all makes them
essentially work so that we can call from QML
This commit is contained in:
Chris Cochrun 2023-03-30 09:33:51 -05:00
parent 7e8694eca2
commit 6f185e6f6e
5 changed files with 64 additions and 23 deletions

View file

@ -24,6 +24,7 @@
#include <iostream>
const QDir writeDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
SlideModel::SlideModel(QObject *parent)
@ -452,6 +453,12 @@ QVariantMap SlideModel::getItem(int index) const {
return data;
}
QVariantMap SlideModel::getItemRust(int index, SlideyMod *slidemodel) const {
QVariantMap data = slidemodel->getItem(index);
qDebug() << data;
return data;
}
QVariantList SlideModel::getItems() {
QVariantList data;
Slide * item;

View file

@ -8,6 +8,7 @@
#include <qnamespace.h>
#include <qobjectdefs.h>
#include <qsize.h>
#include "cxx-qt-gen/slide_model.cxxqt.h"
class SlideModel : public QAbstractListModel {
Q_OBJECT
@ -81,6 +82,7 @@ public:
Q_INVOKABLE bool moveDown(int index);
Q_INVOKABLE bool moveUp(int index);
Q_INVOKABLE QVariantMap getItem(int index) const;
Q_INVOKABLE QVariantMap getItemRust(int index, SlideyMod *slidemodel) const;
Q_INVOKABLE QVariantList getItems();
Q_INVOKABLE int findSlideIdFromServItm(int index);
Q_INVOKABLE QString thumbnailVideo(QString video, int serviceItemId, int index);

View file

@ -145,7 +145,7 @@ Controls.Page {
currentServiceItem = index;
const slideId = SlideModel.findSlideIdFromServItm(index);
currentSlide = slideId;
const slide = SlideModel.getItem(slideId);
const slide = SlideModel.getItemRust(slideId, SlideMod);
console.log("index grabbed: " + index);
console.log(slideId);
console.log("Time to start changing");
@ -176,7 +176,7 @@ Controls.Page {
function changeSlide(index) {
console.log("index grabbed: " + index);
const item = SlideModel.getItem(index);
const item = SlideModel.getItemRust(index, SlideMod);
currentSlide = index;
currentServiceItem = item.serviceItemId;
console.log("index grabbed: " + index);
@ -190,7 +190,7 @@ Controls.Page {
ServiceItemModel.activate(currentServiceItem);
/* SlideObject.changeSlide(slide, slideId); */
slideHelper.chngSlide(item, index, SlideObject);
SlideModel.activate(index);
SlideMod.activate(index);
presentation.textIndex = 0;
console.log("Slide changed to: " + index);
}

View file

@ -196,7 +196,7 @@ FocusScope {
spacing: Kirigami.Units.smallSpacing * 2
cacheBuffer: 900
reuseItems: true
model: SlideModel
model: SlideMod
delegate: Presenter.PreviewSlideListDelegate {}
highlight: highlightBar
highlightFollowsCurrentItem: false

View file

@ -43,25 +43,6 @@ mod slide_model {
video_thumbnail: QString,
}
// pub enum Roles {
// TypeRole = 0,
// TextRole,
// AudioRole,
// ImageBackgroundRole,
// VideoBackgroundRole,
// HorizontalTextAlignmentRole,
// VerticalTextAlignmentRole,
// FontRole,
// FontSizeRole,
// ServiceItemIdRole,
// SlideyIndexRole,
// SlidecountRole,
// ActiveRole,
// SelectedRole,
// LoopRole,
// VidThumbnailRole,
// }
#[cxx_qt::qobject(
base = "QAbstractListModel",
// qml_uri = "com.kdab.cxx_qt.demo",
@ -406,6 +387,57 @@ mod slide_model {
println!("Item added in rust model!");
}
#[qinvokable]
pub fn get_item(self: Pin<&mut Self>, index: i32) -> QMap_QString_QVariant {
println!("{index}");
let mut qvariantmap = QMap_QString_QVariant::default();
let idx = self.index(index, 0, &QModelIndex::default());
if !idx.is_valid() {
return qvariantmap;
}
if let Some(slide) = self.rust().slides.get(index as usize) {
qvariantmap.insert(QString::from("text"), QVariant::from(&slide.text));
qvariantmap.insert(QString::from("type"), QVariant::from(&slide.ty));
qvariantmap.insert(QString::from("audio"), QVariant::from(&slide.audio));
qvariantmap.insert(
QString::from("imageBackground"),
QVariant::from(&slide.image_background),
);
qvariantmap.insert(
QString::from("videoBackground"),
QVariant::from(&slide.video_background),
);
qvariantmap.insert(QString::from("font"), QVariant::from(&slide.font));
qvariantmap.insert(QString::from("fontSize"), QVariant::from(&slide.font_size));
qvariantmap.insert(
QString::from("horizontalTextAlignment"),
QVariant::from(&slide.htext_alignment),
);
qvariantmap.insert(
QString::from("verticalTextAlignment"),
QVariant::from(&slide.vtext_alignment),
);
qvariantmap.insert(
QString::from("serviceItemId"),
QVariant::from(&slide.service_item_id),
);
qvariantmap.insert(QString::from("loop"), QVariant::from(&slide.looping));
qvariantmap.insert(QString::from("active"), QVariant::from(&slide.active));
qvariantmap.insert(QString::from("selected"), QVariant::from(&slide.selected));
};
qvariantmap
}
#[qinvokable]
pub fn activate(mut self: Pin<&mut Self>, index: i32) -> bool {
if let Some(slide) = self.as_mut().slides_mut().get_mut(index as usize) {
slide.active = true;
true
} else {
false
}
}
}
// Create Rust bindings for C++ functions of the base class (QAbstractItemModel)