diff --git a/TODO.org b/TODO.org index 42a4c11..83c5a11 100644 --- a/TODO.org +++ b/TODO.org @@ -4,13 +4,10 @@ :CATEGORY: dev :END: -* Tasks [62%] [55/88] +* Tasks [63%] [55/87] ** TODO [#A] REWRITE FOR ALL RUST AND BUILD WITH CARGO -Found that making sure qmake comes from qt6.full in the flake helps a lot! -** TODO [#A] Move slides into service_items -I believe this will enable me to build things with much more simplicity. The service items contain slides anyway. -** TODO [#C] Plugin architecture with steel or some scheme as an extension language -** TODO [#C] Server client architecture +** TODO [#A] Plugin architecture with steel or some scheme as an extension language +** TODO [#A] Server client architecture ** TODO [#A] Organize and layout structure of rust code :maintenance: Since building a lot of the rust code felt more like an experiment, I've not kept it very well organized. I need to go through each model and rust module and organize them well and then decide what needs to be publicly available or not. diff --git a/flake.nix b/flake.nix index de29559..66e73f3 100644 --- a/flake.nix +++ b/flake.nix @@ -33,7 +33,6 @@ ]) rust-analyzer qt6.wrapQtAppsHook - sccache ]; bi = with pkgs; [ @@ -118,7 +117,6 @@ makeQtWrapper "/bin/sh" "$setQtEnvironment" "''${qtWrapperArgs[@]}" sed "/^exec/d" -i "$setQtEnvironment" source "$setQtEnvironment" - export QMAKE=${pkgs.qt6.full}/bin/qmake ''; # shellHook = '' # export CMAKE_PREFIX_PATH="${pkgs.qt6.full}/lib/cmake/Qt6:$CMAKE_PREFIX_PATH" diff --git a/smdview/blah/build.rs b/smdview/blah/build.rs index 90ac9ee..73fb35e 100644 --- a/smdview/blah/build.rs +++ b/smdview/blah/build.rs @@ -5,7 +5,7 @@ fn main() { .qt_module("Network") .qml_module(QmlModule { uri: "org.kde.simplemdviewer", - qml_files: &["src/qml/main.qml"], + qml_files: &["src/qml/Main.qml"], rust_files: &["src/main.rs"], ..Default::default() }) diff --git a/smdview/blah/src/main.rs b/smdview/blah/src/main.rs index 00cd75b..c79e764 100644 --- a/smdview/blah/src/main.rs +++ b/smdview/blah/src/main.rs @@ -1,8 +1,7 @@ #[cxx_qt::bridge] mod ffi { - unsafe extern "RustQt" { + extern "RustQt" { #[qobject] - #[qml_element] type DummyQObject = super::DummyRustStruct; } } @@ -33,7 +32,7 @@ fn main() { let mut engine = QQmlApplicationEngine::new(); if let Some(engine) = engine.as_mut() { engine.load(&QUrl::from( - "qrc:/qt/qml/org/kde/simplemdviewer/src/qml/main.qml", + "qrc:/qt/qml/org/kde/simplemdviewer/src/qml/Main.qml", )); } diff --git a/src/qml/presenter/ServiceList.qml b/src/qml/presenter/ServiceList.qml index 3bf16e9..f3a0c5c 100644 --- a/src/qml/presenter/ServiceList.qml +++ b/src/qml/presenter/ServiceList.qml @@ -102,31 +102,26 @@ Item { anchors.fill: parent onEntered: (drag) => { - console.log("here"); if (drag.keys[0] === "library") { dropHighlightLine.visible = true; dropHighlightLine.y = serviceDrop.mapToItem( serviceItemList,0,0).y - 2; - } else { - console.log("here"); - let from = drag.source.DelegateModel.itemsIndex; - let to = serviceListItem.DelegateModel.itemsIndex; - console.log("from = " + from); - console.log("to = " + to); - if (from != to && to > -1 && to <= ServiceItemModel.count - 1) - ServiceItemModel.moveRows(from, to, 1); } } onDropped: (drag) => { + loadingItem.visible = true; + console.log("DROPPED IN ITEM AREA: " + drag.keys); + console.log(dragItemIndex + " " + index); + const hlIndex = serviceItemList.currentIndex; if (drag.keys[0] === "library") { - loadingItem.visible = true; - console.log("DROPPED IN ITEM AREA: " + drag.keys); - console.log(dragItemIndex + " " + index); - const hlIndex = serviceItemList.currentIndex; addItem(index, dragItemType, dragItemIndex); + } else if (drag.keys[0] === "serviceitem") { + /* ServiceItemModel.moveRows(serviceItemList.indexDragged, */ + /* serviceItemList.moveToIndex, 1); */ + /* serviceItemList.currentIndex = moveToIndex; */ } dropHighlightLine.visible = false; loadingItem.visible = false; @@ -155,12 +150,12 @@ Item { Controls.Label { id: label - anchors.left: parent.left + anchors.left: dragHandle.right anchors.verticalCenter: parent.verticalCenter anchors.leftMargin: 5 - text: (index + 1) + ": " + name + text: name elide: Text.ElideRight - width: parent.width - trailing.width - 25 + width: parent.width - trailing.width - dragHandle.width - 25 color: { if (selected || mouseHandler.containsMouse || active) @@ -216,10 +211,10 @@ Item { ] /* Drag.dragType: Drag.Automatic */ - Drag.active: mouseHandler.drag.active - Drag.hotSpot.x: width / 2 - Drag.hotSpot.y: height / 2 - Drag.keys: ["serviceitem"] + /* Drag.active: mouseHandler.drag.active */ + /* Drag.hotSpot.x: width / 2 */ + /* Drag.hotSpot.y: height / 2 */ + /* Drag.keys: ["serviceitem"] */ MouseArea { id: mouseHandler @@ -227,17 +222,19 @@ Item { hoverEnabled: true acceptedButtons: Qt.LeftButton | Qt.RightButton - drag { - target: visServiceItem - axis: Drag.YAxis - /* minimumY: root.y */ - /* maximumY: serviceItemList.height - serviceDrop.height */ - smoothed: false - onActiveChanged: { - serviceItemList.indexDragged = index; - } - } + /* drag { */ + /* target: visServiceItem */ + /* axis: Drag.YAxis */ + /* /\* minimumY: root.y *\/ */ + /* /\* maximumY: serviceItemList.height - serviceDrop.height *\/ */ + /* smoothed: false */ + /* } */ + /* drag.onActiveChanged: { */ + /* if (mouseHandler.drag.active) { */ + /* serviceItemList.indexDragged = index; */ + /* } */ + /* } */ /* onPositionChanged: { */ /* if (!pressed) { */ @@ -246,9 +243,9 @@ Item { /* mouseArea.arrangeItem(); */ /* } */ - /* onPressAndHold: { */ - /* serviceItemList.interactive = false; */ - /* } */ + onPressed: { + serviceItemList.interactive = false; + } onClicked: { if (mouse.button === Qt.RightButton) { @@ -278,21 +275,20 @@ Item { } } - /* Kirigami.ListItemDragHandle { */ - /* id: dragHandle */ - /* anchors.left: parent.left */ - /* anchors.verticalCenter: parent.verticalCenter */ - /* anchors.leftMargin: 5 */ - /* incrementalMoves: true */ - /* /\* width: 20 *\/ */ - /* listItem: serviceListItem */ - /* listView: serviceItemList */ - /* onMoveRequested: (oldIndex, newIndex) => { */ - /* ServiceItemModel.moveRows(oldIndex, */ - /* newIndex, */ - /* 1) */ - /* } */ - /* } */ + Presenter.DragHandle { + id: dragHandle + anchors.left: parent.left + anchors.verticalCenter: parent.verticalCenter + anchors.leftMargin: 5 + /* width: 20 */ + listItem: serviceListItem + listView: serviceItemList + onMoveRequested: (oldIndex, newIndex) => { + ServiceItemModel.moveRows(oldIndex, + newIndex, + 1) + } + } } Controls.Menu { diff --git a/src/rust/service_item_model.rs b/src/rust/service_item_model.rs index d5c5c18..b8b3cd5 100644 --- a/src/rust/service_item_model.rs +++ b/src/rust/service_item_model.rs @@ -42,7 +42,6 @@ mod service_item_model { VideoStartTime, VideoEndTime, Id, - Slides, } #[auto_cxx_name] @@ -294,7 +293,6 @@ use self::service_item_model::{ ServiceRoles, }; use crate::service_item_model::service_item_model::QList_QString; -use crate::slide_model::Slide; use crate::slide_types::SlideType; use crate::songs::song_model::{Song, get_song}; use crate::{image_model, presentation_model, video_model}; @@ -305,7 +303,6 @@ use cxx_qt_lib::{ use dirs; // use lumina_core::service_items::ServiceItem as SI; use serde_json::{Value, json}; -use std::collections::HashMap; use std::iter; use std::path::{Path, PathBuf}; use std::pin::Pin; @@ -327,7 +324,6 @@ pub struct ServiceItem { text: QStringList, font: QString, font_size: i32, - slides: HashMap, slide_count: i32, active: bool, selected: bool, @@ -348,7 +344,6 @@ impl Default for ServiceItem { text: QStringList::default(), font: QString::default(), font_size: 50, - slides: HashMap::new(), slide_count: 1, active: false, selected: false, @@ -540,11 +535,11 @@ impl service_item_model::ServiceItemModel { dest_index: i32, count: i32, ) -> bool { - // debug!( - // source = source_index, - // dest = dest_index, - // count = count - // ); + debug!( + source = source_index, + dest = dest_index, + count = count + ); let model_index = self.index(source_index, 0, &QModelIndex::default()); let parent = model_index.parent(); @@ -572,15 +567,8 @@ impl service_item_model::ServiceItemModel { qt_dest_index ); - // Ensure we really need to move - if source_index == dest_index - || dest_index < 0 - || dest_index > self.service_items.len() as i32 - { - return false; - } - - debug!("{:?}", self.rust().service_items); + println!("rust-end-service_item: {:?}", end_service_item); + println!("qt-dest-service_item: {:?}", qt_dest_index); unsafe { // this function doesn't build self.as_mut().begin_move_rows( @@ -592,15 +580,15 @@ impl service_item_model::ServiceItemModel { ); if source_id < dest_id { - let move_amount = 1; + let move_amount = dest_id - source_id - cnt + 1; self.as_mut().rust_mut().service_items [source_id..=dest_id] .rotate_right(move_amount); - // debug!(?move_amount); + println!("rust-move_amount: {:?}", move_amount); } else { let move_amount = end_service_item - dest_id - cnt + 1; - // debug!(?move_amount); + println!("rust-move_amount: {:?}", move_amount); self.as_mut().rust_mut().service_items [dest_id..=end_service_item] .rotate_left(move_amount); @@ -608,13 +596,12 @@ impl service_item_model::ServiceItemModel { self.as_mut().end_move_rows(); let item = self.as_mut().get_item(dest_index); - // debug!(source_index, dest_index); + debug!(source_index, dest_index); self.as_mut().item_moved( &source_index, &dest_index, &item, ); - debug!("{:?}", self.rust().service_items); true } } @@ -1484,9 +1471,6 @@ impl service_item_model::ServiceItemModel { ServiceRoles::Id => QVariant::from( &service_item.database_id.unwrap_or_default(), ), - ServiceRoles::Slides => { - QVariant::from(&service_item.slides) - } _ => QVariant::default(), }; } @@ -1554,10 +1538,6 @@ impl service_item_model::ServiceItemModel { ServiceRoles::VideoEndTime.repr, QByteArray::from("videoEndTime"), ); - roles.insert( - ServiceRoles::Slides.repr, - QByteArray::from("slides"), - ); roles.insert(ServiceRoles::Id.repr, QByteArray::from("id")); roles } diff --git a/src/rust/slide_model.rs b/src/rust/slide_model.rs index ef29d71..14c4c9a 100644 --- a/src/rust/slide_model.rs +++ b/src/rust/slide_model.rs @@ -722,10 +722,7 @@ impl slide_model::SlideModel { destination_index: i32, _service_item: &QMap_QString_QVariant, ) { - if source_index == destination_index - || destination_index < 0 - || destination_index > self.slides.len() as i32 - { + if source_index == destination_index { return; } @@ -781,7 +778,7 @@ impl slide_model::SlideModel { ); } } else if let Some((i, slide)) = - slides_iter.clone().enumerate().find(|slide| { + slides_iter.enumerate().find(|slide| { slide.1.service_item_id == destination_index }) { @@ -796,8 +793,8 @@ impl slide_model::SlideModel { debug!(count, first_slide, dest_slide); - // let slides = self.slides.clone(); - // let slides_iter = slides.iter(); + let slides = self.slides.clone(); + let slides_iter = slides.iter(); self.as_mut().move_items( first_slide as usize, @@ -832,6 +829,7 @@ impl slide_model::SlideModel { "While moving down, change service items id of moved slide" ); for (i, _slide) in slides_iter + .clone() .enumerate() .filter(|x| { x.0 >= (first_slide + dest_count) as usize @@ -858,6 +856,7 @@ impl slide_model::SlideModel { "While moving up, change service items id of moved slide" ); for (i, _slide) in slides_iter + .clone() .enumerate() .filter(|x| x.0 >= dest_slide as usize) .filter(|x| x.0 < (dest_slide + count) as usize) @@ -894,6 +893,7 @@ impl slide_model::SlideModel { if move_down { debug!("While moving down, change service item id"); for (i, _slide) in slides_iter + .clone() .enumerate() .filter(|x| x.1.service_item_id <= destination_index) .filter(|x| x.1.service_item_id >= source_index) @@ -914,6 +914,7 @@ impl slide_model::SlideModel { } else { debug!("While moving up, change service item id"); for (i, _slide) in slides_iter + .clone() .enumerate() .filter(|x| x.0 >= (dest_slide + count) as usize) .filter(|x| x.1.service_item_id >= destination_index) diff --git a/src/rust/slide_object.rs b/src/rust/slide_object.rs index e5997fa..ff2ce56 100644 --- a/src/rust/slide_object.rs +++ b/src/rust/slide_object.rs @@ -32,7 +32,6 @@ pub mod qobject { #[qproperty(i32, font_size)] #[qproperty(f32, video_start_time)] #[qproperty(f32, video_end_time)] - #[qproperty(QString, video_thumbnail)] // #[qproperty(*mut SlideModel, slide_model)] type SlideObject = super::SlideObjectRust; @@ -117,7 +116,6 @@ pub struct SlideObjectRust { font_size: i32, video_start_time: f32, video_end_time: f32, - video_thumbnail: QString, // slide_model: *mut slide_model::SlideModel, } @@ -141,7 +139,6 @@ impl Default for SlideObjectRust { inner_slide_index: 0, video_start_time: 0.0, video_end_time: 0.0, - video_thumbnail: QString::from(""), // slide_model: std::ptr::null_mut(), } }