Merge: collection ordering, and a range that says where it ends

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

# Conflicts:
#	docs/traceability.md
#	ui/dr-ui/src/collections_ui.rs
#	ui/dr-ui/src/library.rs
#	ui/dr-ui/ui/app.slint
#	ui/dr-ui/ui/library.slint
#	ui/dr-ui/ui/widgets.slint
This commit is contained in:
2026-08-30 16:38:08 +02:00
2 changed files with 175 additions and 0 deletions
+17
View File
@@ -2245,6 +2245,23 @@ fn load_window(window: &AppWindow, ctl: &Rc<LibraryController>) {
refresh_timeline(window, catalog, ctl);
}
// TRACES: FR-CAT-7
// Whether this scope has an order a drag can change, which is what lets the
// grid draw an insertion caret and accept a drop.
//
// Answered here because this is the one place that runs on every re-read —
// a scope change, a reorder, a collection gaining a child that turns it
// into a set — so the caret cannot outlive the scope that justified it.
//
// The trash is never reorderable. It is a view of what was deleted, ordered
// by when, and it is not a collection at all.
window.set_library_manual_order(
!trash
&& scope.is_some_and(|c| {
dr_catalog::collections::orders_manually(catalog.connection(), c).unwrap_or(false)
}),
);
let cells = if trash {
library::read_trashed_cells(catalog, offset, window_size)
} else {