linking obs up to as a stringlist model
This commit is contained in:
parent
500d687712
commit
4b489d4e45
4 changed files with 60 additions and 0 deletions
1
build.rs
1
build.rs
|
@ -15,5 +15,6 @@ fn main() {
|
|||
.file("src/rust/songs/song_editor.rs")
|
||||
.file("src/rust/ytdl.rs")
|
||||
.file("src/rust/utils.rs")
|
||||
.file("src/rust/obs.rs")
|
||||
.build();
|
||||
}
|
||||
|
|
|
@ -61,6 +61,7 @@
|
|||
#include "cxx-qt-gen/image_model.cxxqt.h"
|
||||
#include "cxx-qt-gen/utilities.cxxqt.h"
|
||||
#include "cxx-qt-gen/song_editor.cxxqt.h"
|
||||
#include "cxx-qt-gen/obs_model.cxxqt.h"
|
||||
|
||||
static QWindow *windowFromEngine(QQmlApplicationEngine *engine)
|
||||
{
|
||||
|
@ -153,6 +154,7 @@ int main(int argc, char *argv[])
|
|||
QScopedPointer<ServiceItemMod> serviceItemModel(new ServiceItemMod);
|
||||
QScopedPointer<ServiceItemModel> serviceItemC(new ServiceItemModel);
|
||||
QScopedPointer<SlideObject> slideobject(new SlideObject);
|
||||
QScopedPointer<ObsModel> obsModel(new ObsModel);
|
||||
|
||||
Settings *settings = new Settings;
|
||||
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, "PresWindow", PresWindow);
|
||||
qmlRegisterSingletonInstance("org.presenter", 1, 0, "RSettings", settings);
|
||||
qmlRegisterSingletonInstance("org.presenter", 1, 0, "ObsModel", obsModel.get());
|
||||
// qmlRegisterSingletonInstance("org.presenter", 1, 0, "PresWindow", preswin.get());
|
||||
|
||||
// This is the same slideobject, however to enusre that the PresWindow can have it
|
||||
|
|
|
@ -291,6 +291,24 @@ Item {
|
|||
text: "delete"
|
||||
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 }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -95,3 +95,41 @@ fn make_client() -> Client {
|
|||
let client = runtime.block_on(future).unwrap();
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue