linking obs up to as a stringlist model

This commit is contained in:
Chris Cochrun 2023-11-17 11:02:45 -06:00
parent 500d687712
commit 4b489d4e45
4 changed files with 60 additions and 0 deletions

View file

@ -15,5 +15,6 @@ fn main() {
.file("src/rust/songs/song_editor.rs") .file("src/rust/songs/song_editor.rs")
.file("src/rust/ytdl.rs") .file("src/rust/ytdl.rs")
.file("src/rust/utils.rs") .file("src/rust/utils.rs")
.file("src/rust/obs.rs")
.build(); .build();
} }

View file

@ -61,6 +61,7 @@
#include "cxx-qt-gen/image_model.cxxqt.h" #include "cxx-qt-gen/image_model.cxxqt.h"
#include "cxx-qt-gen/utilities.cxxqt.h" #include "cxx-qt-gen/utilities.cxxqt.h"
#include "cxx-qt-gen/song_editor.cxxqt.h" #include "cxx-qt-gen/song_editor.cxxqt.h"
#include "cxx-qt-gen/obs_model.cxxqt.h"
static QWindow *windowFromEngine(QQmlApplicationEngine *engine) static QWindow *windowFromEngine(QQmlApplicationEngine *engine)
{ {
@ -153,6 +154,7 @@ int main(int argc, char *argv[])
QScopedPointer<ServiceItemMod> serviceItemModel(new ServiceItemMod); QScopedPointer<ServiceItemMod> serviceItemModel(new ServiceItemMod);
QScopedPointer<ServiceItemModel> serviceItemC(new ServiceItemModel); QScopedPointer<ServiceItemModel> serviceItemC(new ServiceItemModel);
QScopedPointer<SlideObject> slideobject(new SlideObject); QScopedPointer<SlideObject> slideobject(new SlideObject);
QScopedPointer<ObsModel> obsModel(new ObsModel);
Settings *settings = new Settings; Settings *settings = new Settings;
settings->setup(); settings->setup();
@ -243,6 +245,7 @@ int main(int argc, char *argv[])
qmlRegisterSingletonInstance("org.presenter", 1, 0, "FileManager", filemanager.get()); qmlRegisterSingletonInstance("org.presenter", 1, 0, "FileManager", filemanager.get());
qmlRegisterSingletonInstance("org.presenter", 1, 0, "PresWindow", PresWindow); qmlRegisterSingletonInstance("org.presenter", 1, 0, "PresWindow", PresWindow);
qmlRegisterSingletonInstance("org.presenter", 1, 0, "RSettings", settings); qmlRegisterSingletonInstance("org.presenter", 1, 0, "RSettings", settings);
qmlRegisterSingletonInstance("org.presenter", 1, 0, "ObsModel", obsModel.get());
// qmlRegisterSingletonInstance("org.presenter", 1, 0, "PresWindow", preswin.get()); // qmlRegisterSingletonInstance("org.presenter", 1, 0, "PresWindow", preswin.get());
// This is the same slideobject, however to enusre that the PresWindow can have it // This is the same slideobject, however to enusre that the PresWindow can have it

View file

@ -291,6 +291,24 @@ Item {
text: "delete" text: "delete"
onTriggered: removeItem(index) onTriggered: removeItem(index)
} }
Kirigami.Action {
text: "Obs Scenes"
onTriggered: {
ObsModel.updateScenes();
console.log("udated")
obsList.model = ObsModel.scenes
obsMenu.open();
}
}
}
Controls.Menu {
id: obsMenu
x: rightClickMenu.x + rightClickMenu.width
y: mouse.mouseY
ListView {
id: obsList
delegate: Kirigami.Action { text: modelData }
}
} }
} }
} }

View file

@ -95,3 +95,41 @@ fn make_client() -> Client {
let client = runtime.block_on(future).unwrap(); let client = runtime.block_on(future).unwrap();
client client
} }
#[cxx_qt::bridge]
mod obs_model {
use tracing::debug;
unsafe extern "C++" {
include!("cxx-qt-lib/qstring.h");
type QString = cxx_qt_lib::QString;
include!("cxx-qt-lib/qstringlist.h");
type QStringList = cxx_qt_lib::QStringList;
include!("cxx-qt-lib/qlist.h");
type QList_QString = cxx_qt_lib::QList<QString>;
}
#[cxx_qt::qobject]
#[derive(Debug, Default)]
pub struct ObsModel {
#[qproperty]
scenes: QStringList,
obs: Option<super::Obs>,
}
impl qobject::ObsModel {
#[qinvokable]
pub fn update_scenes(mut self: Pin<&mut Self>) -> QStringList {
debug!("updating scenes");
let mut scenes_list = QList_QString::default();
if let Some(obs) = self.obs() {
obs.scenes.scenes.iter().map(|x| {
debug!(?x);
scenes_list.append(QString::from(&x.name))
});
}
QStringList::from(&scenes_list)
}
}
}