Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/USER_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ Toolbar buttons, left to right:

* **Add files** / **Add folder**: load individual images or every image in a folder. Pick a folder that only holds *other* folders and NegPy reveals it in the Library section instead of reporting that it found nothing. Dropping a folder on the window does the same.
* **Clear all**: unload everything (or, when several frames are selected, unload just those).
* **Hot Folder**: watches the current folder and auto-loads new files as they appear, handy when a scanner drops files into a directory.
* **Hot Folder**: watches the current folder and auto-loads new files as they appear, handy when a scanner or tethering app drops files into a directory. While it is on, the "Working…" import popup stays hidden so each new frame does not raise a window; the status line over the canvas still reports the import.
* **RGB Scan**: treats the folder as red/green/blue exposure triplets and assembles each frame from three shots (for narrowband trichrome scanning). Right-click a frame → **Edit RGB Triplet…** to assign the three files by hand.
* **Half Frame**: splits each scan into two frames (for half-frame cameras), edited and metered separately. When enabled, a rectangle editor opens on the current scan: drag the green box to crop (everything outside is discarded), drag the orange line to set the split, and use the **Cut thickness** slider to discard a band centered on the split (the physical black separator between the two exposures). The setting is saved and applied to every half-frame split from then on, regardless of how the scans were acquired (SANE scanner, camera copy-stand, or folder import). The **Adjust Half Frame** toolbutton (next to Half Frame) re-opens the editor on the current scan to fine-tune. Auto-detection of the gutter still seeds the initial split position.
* **Apply (clone)**: copy the current frame's settings to selected frames or the whole roll. You choose which aspects in a dialog (crop and rotation are always per-image).
Expand Down
10 changes: 9 additions & 1 deletion negpy/desktop/view/main_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -461,7 +461,7 @@ def _connect_signals(self) -> None:
self.controller.status_progress_requested.connect(self.canvas.hud.set_progress)

self.progress_dialog = ProgressDialog(self)
self.controller.batch_started.connect(self.progress_dialog.start)
self.controller.batch_started.connect(self._on_batch_started)
self.controller.batch_progress.connect(self.progress_dialog.set_progress)
self.controller.batch_finished.connect(self.progress_dialog.finish)
self.progress_dialog.abort_requested.connect(self.controller.abort_active_batch)
Expand All @@ -474,6 +474,14 @@ def _connect_signals(self) -> None:
def _refresh_dashboard(self) -> None:
self.toolbar.refresh_gpu_status()

def _on_batch_started(self, title: str, abortable: bool) -> None:
"""Hot Folder polls every 2 s, so its per-frame import batches (the only
non-abortable ones) would pop the dialog on every capture. The HUD status
line still reports those; abortable batches always show the popup."""
if not abortable and self.session_panel.file_browser.hot_folder_btn.isChecked():
return
self.progress_dialog.start(title, abortable)

def _save_printing_notes(self) -> None:
"""Write the marked-up work print. The annotated pixels are the canvas's own
render, so the composing happens here rather than in an export worker."""
Expand Down
Loading