2026-01-07 20:42:28 +01:00
|
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
2026-01-07 20:22:49 +01:00
|
|
|
// src/app/message.rs
|
|
|
|
|
//
|
|
|
|
|
// Top-level application messages (events, IO, and UI signals).
|
|
|
|
|
|
|
|
|
|
use std::path::PathBuf;
|
|
|
|
|
|
|
|
|
|
/// Top-level application messages.
|
|
|
|
|
///
|
|
|
|
|
/// These are produced by:
|
|
|
|
|
/// - UI widgets (buttons, menus, etc.)
|
|
|
|
|
/// - keyboard shortcuts
|
|
|
|
|
/// - async tasks (file loading, etc.)
|
|
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
|
pub enum AppMessage {
|
|
|
|
|
/// User requested to open a single file.
|
|
|
|
|
OpenPath(PathBuf),
|
|
|
|
|
|
|
|
|
|
/// Navigate to next/previous document in the current folder.
|
|
|
|
|
NextDocument,
|
|
|
|
|
PrevDocument,
|
|
|
|
|
|
Implement comprehensive metadata extraction for raster images with
EXIF support and display in the right panel.
New features:
- Extract basic metadata (filename, format, resolution, file size, color type)
- Parse EXIF data (camera, date, exposure, aperture, ISO, focal length, GPS)
- Display metadata in collapsible right panel (toggle with 'i' key)
- Auto-refresh metadata on document navigation
Changes by file:
Cargo.toml, Cargo.lock:
- Add kamadak-exif dependency for EXIF parsing
i18n/en/noctua.ftl:
- Add translation strings for all metadata labels
src/app/document/meta.rs:
- New module for metadata types (BasicMeta, ExifMeta, DocumentMeta)
- Extraction logic with EXIF parsing via kamadak-exif
- Helper methods for formatted display (resolution, file size, camera, GPS)
src/app/document/mod.rs:
- Re-export meta module
src/app/document/{raster,vector,portable}.rs:
- Add extract_metadata() method stubs (full impl for raster)
src/app/document/file.rs:
- Reset metadata on document change
src/app/message.rs:
- Add ToggleRightPanel and RefreshMetadata messages
src/app/model.rs:
- Add metadata: Option<DocumentMeta> field
- Add show_right_panel: bool field
src/app/update.rs:
- Handle panel toggle and metadata refresh
- Auto-refresh metadata on navigation when panel visible
src/app/view/panels.rs:
- Implement right_panel() with metadata display
- Conditional sections for basic info and EXIF data
src/app/view/canvas.rs:
- Integrate right panel into layout"
2026-01-10 11:46:07 +01:00
|
|
|
/// Refresh metadata (e.g., when panel becomes visible or document changes).
|
|
|
|
|
RefreshMetadata,
|
|
|
|
|
|
2026-01-07 20:22:49 +01:00
|
|
|
/// Basic view / panel toggles.
|
|
|
|
|
ToggleLeftPanel,
|
|
|
|
|
ToggleRightPanel,
|
|
|
|
|
|
|
|
|
|
/// View / zoom control.
|
|
|
|
|
ZoomIn,
|
|
|
|
|
ZoomOut,
|
|
|
|
|
ZoomReset,
|
|
|
|
|
ZoomFit,
|
|
|
|
|
|
|
|
|
|
/// Pan control (Ctrl + arrow keys).
|
|
|
|
|
PanLeft,
|
|
|
|
|
PanRight,
|
|
|
|
|
PanUp,
|
|
|
|
|
PanDown,
|
|
|
|
|
PanReset,
|
|
|
|
|
|
|
|
|
|
/// Editing / tool modes.
|
|
|
|
|
ToggleCropMode,
|
|
|
|
|
ToggleScaleMode,
|
|
|
|
|
|
|
|
|
|
/// Document transformations.
|
|
|
|
|
FlipHorizontal,
|
|
|
|
|
FlipVertical,
|
|
|
|
|
RotateCW,
|
|
|
|
|
RotateCCW,
|
|
|
|
|
|
|
|
|
|
/// Generic error reporting from lower layers.
|
|
|
|
|
ShowError(String),
|
|
|
|
|
ClearError,
|
|
|
|
|
|
|
|
|
|
/// Fallback for unhandled or no-op cases.
|
|
|
|
|
NoOp,
|
|
|
|
|
}
|