starting to change slide_model to have the logic of changing slides
In order to make slide_object dumber and and not need to keep track of slide info, we are moving the business logic to slide_model so that the model can keep track of whether presentations are ready to switch and don't need to run reveal_next or something.
This commit is contained in:
parent
4c403d9f3c
commit
8c7f2d794f
4 changed files with 84 additions and 56 deletions
|
@ -102,7 +102,7 @@ int main(int argc, char *argv[])
|
||||||
QScopedPointer<ObsModel> obsModel(new ObsModel);
|
QScopedPointer<ObsModel> obsModel(new ObsModel);
|
||||||
obsModel.get()->getObs();
|
obsModel.get()->getObs();
|
||||||
obsModel.get()->updateScenes();
|
obsModel.get()->updateScenes();
|
||||||
slideobject.get()->setSlideModel(slideModel.get());
|
slideModel.get()->setSlideObject(slideobject.get());
|
||||||
|
|
||||||
Settings *settings = new Settings;
|
Settings *settings = new Settings;
|
||||||
settings->setup();
|
settings->setup();
|
||||||
|
|
|
@ -481,21 +481,24 @@ FocusScope {
|
||||||
|
|
||||||
function nextSlideAction() {
|
function nextSlideAction() {
|
||||||
keyHandler.forceActiveFocus();
|
keyHandler.forceActiveFocus();
|
||||||
const nextSlideIdx = SlideObject.html && (SlideObject.innerSlideIndex + 1 < SlideObject.slideSize) ? currentSlide : currentSlide + 1;
|
if (SlideModel.next()) {
|
||||||
const nextSlide = SlideModel.getItem(nextSlideIdx);
|
console.log("VICTORY")
|
||||||
if (nextSlideIdx > totalSlides || nextSlideIdx < 0)
|
|
||||||
return;
|
|
||||||
console.log("currentServiceItem " + currentServiceItem);
|
|
||||||
console.log("totalSlides " + totalSlides);
|
|
||||||
console.log("currentSlide " + currentSlide);
|
|
||||||
console.log("nextSlideIdx " + nextSlideIdx);
|
|
||||||
for (var prop in nextSlide)
|
|
||||||
console.log(prop += " (" + typeof(nextSlide[prop]) + ") = " + nextSlide[prop]);
|
|
||||||
/* changeSlide(nextSlideIdx); */
|
|
||||||
if (SlideObject.next(nextSlide)) {
|
|
||||||
currentSlide = nextSlideIdx;
|
|
||||||
currentServiceItem = nextSlide.serviceItemId;
|
|
||||||
}
|
}
|
||||||
|
/* const nextSlideIdx = SlideObject.html && (SlideObject.innerSlideIndex + 1 < SlideObject.slideSize) ? currentSlide : currentSlide + 1; */
|
||||||
|
/* const nextSlide = SlideModel.getItem(nextSlideIdx); */
|
||||||
|
/* if (nextSlideIdx > totalSlides || nextSlideIdx < 0) */
|
||||||
|
/* return; */
|
||||||
|
/* console.log("currentServiceItem " + currentServiceItem); */
|
||||||
|
/* console.log("totalSlides " + totalSlides); */
|
||||||
|
/* console.log("currentSlide " + currentSlide); */
|
||||||
|
/* console.log("nextSlideIdx " + nextSlideIdx); */
|
||||||
|
/* for (var prop in nextSlide) */
|
||||||
|
/* console.log(prop += " (" + typeof(nextSlide[prop]) + ") = " + nextSlide[prop]); */
|
||||||
|
/* /\* changeSlide(nextSlideIdx); *\/ */
|
||||||
|
/* if (SlideObject.next(nextSlide)) { */
|
||||||
|
/* currentSlide = nextSlideIdx; */
|
||||||
|
/* currentServiceItem = nextSlide.serviceItemId; */
|
||||||
|
/* } */
|
||||||
}
|
}
|
||||||
|
|
||||||
function nextSlide() {
|
function nextSlide() {
|
||||||
|
|
|
@ -16,14 +16,10 @@ pub mod slide_model {
|
||||||
type QModelIndex = cxx_qt_lib::QModelIndex;
|
type QModelIndex = cxx_qt_lib::QModelIndex;
|
||||||
include!("cxx-qt-lib/qvector.h");
|
include!("cxx-qt-lib/qvector.h");
|
||||||
type QVector_i32 = cxx_qt_lib::QVector<i32>;
|
type QVector_i32 = cxx_qt_lib::QVector<i32>;
|
||||||
// include!("cxx-qt-lib/qstringlist.h");
|
|
||||||
// type QStringList = cxx_qt_lib::QStringList;
|
|
||||||
include!("cxx-qt-lib/qlist.h");
|
include!("cxx-qt-lib/qlist.h");
|
||||||
type QList_QString = cxx_qt_lib::QList<QString>;
|
type QList_QString = cxx_qt_lib::QList<QString>;
|
||||||
// #[cxx_name = "Slidey"]
|
include!("cxx-qt-gen/slide_object.cxxqt.h");
|
||||||
// type CxxSlidey = super::qobject::Slidey;
|
type SlideObject = crate::slide_object::slide_object::SlideObject;
|
||||||
// include!("cxx-qt-lib/qvector.h");
|
|
||||||
// type QVector_Slidey = cxx_qt_lib::QVector<Slidey>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[qenum(SlideModel)]
|
#[qenum(SlideModel)]
|
||||||
|
@ -55,6 +51,7 @@ pub mod slide_model {
|
||||||
#[base = "QAbstractListModel"]
|
#[base = "QAbstractListModel"]
|
||||||
#[qml_element]
|
#[qml_element]
|
||||||
#[qproperty(i32, count)]
|
#[qproperty(i32, count)]
|
||||||
|
#[qproperty(*mut SlideObject, slide_object)]
|
||||||
type SlideModel = super::SlideModelRust;
|
type SlideModel = super::SlideModelRust;
|
||||||
|
|
||||||
#[inherit]
|
#[inherit]
|
||||||
|
@ -117,7 +114,7 @@ pub mod slide_model {
|
||||||
) -> QMap_QString_QVariant;
|
) -> QMap_QString_QVariant;
|
||||||
|
|
||||||
#[qinvokable]
|
#[qinvokable]
|
||||||
fn next(self: Pin<&mut SlideModel>) -> QMap_QString_QVariant;
|
fn next(self: Pin<&mut SlideModel>) -> bool;
|
||||||
|
|
||||||
#[qinvokable]
|
#[qinvokable]
|
||||||
fn get_slide_from_service(
|
fn get_slide_from_service(
|
||||||
|
@ -221,6 +218,7 @@ use cxx_qt::{CxxQtType, Threading};
|
||||||
use cxx_qt_lib::{
|
use cxx_qt_lib::{
|
||||||
CaseSensitivity, QByteArray, QModelIndex, QString, QStringList, QVariant
|
CaseSensitivity, QByteArray, QModelIndex, QString, QStringList, QVariant
|
||||||
};
|
};
|
||||||
|
use slide_model::SlideObject;
|
||||||
use std::thread;
|
use std::thread;
|
||||||
use std::{path::PathBuf, pin::Pin};
|
use std::{path::PathBuf, pin::Pin};
|
||||||
use tracing::{debug, error};
|
use tracing::{debug, error};
|
||||||
|
@ -232,26 +230,26 @@ use self::slide_model::{
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct Slide {
|
pub struct Slide {
|
||||||
text: String,
|
pub text: String,
|
||||||
ty: String,
|
pub ty: String,
|
||||||
audio: String,
|
pub audio: String,
|
||||||
image_background: String,
|
pub image_background: String,
|
||||||
video_background: String,
|
pub video_background: String,
|
||||||
htext_alignment: String,
|
pub htext_alignment: String,
|
||||||
vtext_alignment: String,
|
pub vtext_alignment: String,
|
||||||
font: String,
|
pub font: String,
|
||||||
font_size: i32,
|
pub font_size: i32,
|
||||||
slide_count: i32,
|
pub slide_count: i32,
|
||||||
slide_index: i32,
|
pub slide_index: i32,
|
||||||
service_item_id: i32,
|
pub service_item_id: i32,
|
||||||
active: bool,
|
pub active: bool,
|
||||||
selected: bool,
|
pub selected: bool,
|
||||||
looping: bool,
|
pub looping: bool,
|
||||||
video_thumbnail: String,
|
pub video_thumbnail: String,
|
||||||
video_start_time: f32,
|
pub video_start_time: f32,
|
||||||
video_end_time: f32,
|
pub video_end_time: f32,
|
||||||
html: bool,
|
pub html: bool,
|
||||||
obs_scene: String,
|
pub obs_scene: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Slide {
|
impl Default for Slide {
|
||||||
|
@ -287,6 +285,7 @@ pub struct SlideModelRust {
|
||||||
slides: Vec<Slide>,
|
slides: Vec<Slide>,
|
||||||
obs: Option<Obs>,
|
obs: Option<Obs>,
|
||||||
count: i32,
|
count: i32,
|
||||||
|
slide_object: *mut SlideObject,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for SlideModelRust {
|
impl Default for SlideModelRust {
|
||||||
|
@ -306,6 +305,7 @@ impl Default for SlideModelRust {
|
||||||
slides: Vec::new(),
|
slides: Vec::new(),
|
||||||
obs,
|
obs,
|
||||||
count: 0,
|
count: 0,
|
||||||
|
slide_object: std::ptr::null_mut(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1119,15 +1119,21 @@ impl slide_model::SlideModel {
|
||||||
qvariantmap
|
qvariantmap
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn next(self: Pin<&mut Self>) -> QMap_QString_QVariant {
|
pub fn next(mut self: Pin<&mut Self>) -> bool {
|
||||||
let id = self.id.clone();
|
if let Some(object) = unsafe { self.slide_object.as_mut() } {
|
||||||
if let Some(slide) = self.rust().slides.get(self.id as usize) {
|
let object = unsafe { Pin::new_unchecked(object) };
|
||||||
if slide.html {
|
if let Some(slide) = self.rust().slides.get(self.id as usize + 1) {
|
||||||
// conditional logic for html slides
|
object.set_slide(slide);
|
||||||
|
let id = self.as_ref().id + 1;
|
||||||
|
self.as_mut().activate(id);
|
||||||
|
self.as_mut().rust_mut().id = id;
|
||||||
|
true
|
||||||
|
} else {
|
||||||
|
false
|
||||||
}
|
}
|
||||||
return self.get_item(id + 1);
|
} else {
|
||||||
|
false
|
||||||
}
|
}
|
||||||
self.get_item(id + 1)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_slide_from_service(
|
pub fn get_slide_from_service(
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
#[cxx_qt::bridge]
|
#[cxx_qt::bridge]
|
||||||
mod slide_object {
|
pub mod slide_object {
|
||||||
unsafe extern "C++" {
|
unsafe extern "C++" {
|
||||||
include!("cxx-qt-lib/qstring.h");
|
include!("cxx-qt-lib/qstring.h");
|
||||||
type QString = cxx_qt_lib::QString;
|
type QString = cxx_qt_lib::QString;
|
||||||
include!("cxx-qt-lib/qmap.h");
|
include!("cxx-qt-lib/qmap.h");
|
||||||
type QMap_QString_QVariant =
|
type QMap_QString_QVariant =
|
||||||
cxx_qt_lib::QMap<cxx_qt_lib::QMapPair_QString_QVariant>;
|
cxx_qt_lib::QMap<cxx_qt_lib::QMapPair_QString_QVariant>;
|
||||||
include!("cxx-qt-gen/slide_model.cxxqt.h");
|
// include!("cxx-qt-gen/slide_model.cxxqt.h");
|
||||||
type SlideModel = crate::slide_model::slide_model::SlideModel;
|
// type SlideModel = crate::slide_model::slide_model::SlideModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe extern "RustQt" {
|
unsafe extern "RustQt" {
|
||||||
|
@ -54,7 +54,7 @@ mod slide_object {
|
||||||
#[qproperty(i32, font_size)]
|
#[qproperty(i32, font_size)]
|
||||||
#[qproperty(f32, video_start_time)]
|
#[qproperty(f32, video_start_time)]
|
||||||
#[qproperty(f32, video_end_time)]
|
#[qproperty(f32, video_end_time)]
|
||||||
#[qproperty(*mut SlideModel, slide_model)]
|
// #[qproperty(*mut SlideModel, slide_model)]
|
||||||
type SlideObject = super::SlideObjectRust;
|
type SlideObject = super::SlideObjectRust;
|
||||||
|
|
||||||
#[qinvokable]
|
#[qinvokable]
|
||||||
|
@ -89,7 +89,7 @@ use cxx_qt_lib::{CaseSensitivity, QString, QVariant};
|
||||||
use tracing::{debug, error};
|
use tracing::{debug, error};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
slide_model::slide_model, slide_types::{PresType, SlideType}, songs::song_model::{song_model::SongModel, SongModelRust}
|
slide_model::{slide_model, Slide}, slide_types::SlideType
|
||||||
};
|
};
|
||||||
|
|
||||||
use self::slide_object::QMap_QString_QVariant;
|
use self::slide_object::QMap_QString_QVariant;
|
||||||
|
@ -113,7 +113,7 @@ pub struct SlideObjectRust {
|
||||||
font_size: i32,
|
font_size: i32,
|
||||||
video_start_time: f32,
|
video_start_time: f32,
|
||||||
video_end_time: f32,
|
video_end_time: f32,
|
||||||
slide_model: *mut slide_model::SlideModel,
|
// slide_model: *mut slide_model::SlideModel,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for SlideObjectRust {
|
impl Default for SlideObjectRust {
|
||||||
|
@ -136,7 +136,7 @@ impl Default for SlideObjectRust {
|
||||||
inner_slide_index: 0,
|
inner_slide_index: 0,
|
||||||
video_start_time: 0.0,
|
video_start_time: 0.0,
|
||||||
video_end_time: 0.0,
|
video_end_time: 0.0,
|
||||||
slide_model: std::ptr::null_mut(),
|
// slide_model: std::ptr::null_mut(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -477,4 +477,23 @@ impl slide_object::SlideObject {
|
||||||
self.as_mut().playing_changed(!playing);
|
self.as_mut().playing_changed(!playing);
|
||||||
!playing
|
!playing
|
||||||
}
|
}
|
||||||
|
pub fn set_slide(mut self: Pin<&mut Self>, slide: &Slide) {
|
||||||
|
self.as_mut().set_slide_index(slide.service_item_id);
|
||||||
|
self.as_mut().set_slide_size(slide.slide_count);
|
||||||
|
self.as_mut().set_looping(slide.looping);
|
||||||
|
self.as_mut().set_text(QString::from(&slide.text));
|
||||||
|
self.as_mut().set_ty(QString::from(&slide.ty));
|
||||||
|
self.as_mut().set_audio(QString::from(&slide.audio));
|
||||||
|
self.as_mut().set_image_background(QString::from(&slide.image_background));
|
||||||
|
self.as_mut().set_video_background(QString::from(&slide.video_background));
|
||||||
|
self.as_mut().set_vtext_alignment(QString::from(&slide.vtext_alignment));
|
||||||
|
self.as_mut().set_htext_alignment(QString::from(&slide.htext_alignment));
|
||||||
|
self.as_mut().set_font(QString::from(&slide.font));
|
||||||
|
self.as_mut().set_font_size(slide.font_size);
|
||||||
|
self.as_mut().set_video_start_time(slide.video_start_time);
|
||||||
|
self.as_mut().set_video_end_time(slide.video_end_time);
|
||||||
|
self.as_mut().set_html(slide.html);
|
||||||
|
self.as_mut().set_inner_slide_index(slide.slide_index);
|
||||||
|
self.as_mut().set_is_playing(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue