Compare commits
No commits in common. "84b31caf6bf973e8caaa6e111ba158738d70d0ec" and "e52cc3eb2930391a19932e69cd27efee79d56ad9" have entirely different histories.
84b31caf6b
...
e52cc3eb29
8 changed files with 69 additions and 101 deletions
9
TODO.org
9
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.
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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()
|
||||
})
|
||||
|
|
|
@ -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",
|
||||
));
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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<i32, Slide>,
|
||||
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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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(),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue