1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
6#[serde(rename_all = "snake_case")]
7pub enum HostToolMode {
8 Navigate,
9 RegionOfInterest,
10 MeasureDistance,
11 PointAnnotation,
12 PolygonAnnotation,
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
16pub struct SidebarRequest {
17 pub button_id: Option<String>,
18 pub width_px: u32,
19 pub ui_path: String,
20 pub component: String,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
24pub struct ActiveSidebar {
25 pub plugin_id: String,
26 pub button_id: Option<String>,
27 pub width_px: u32,
28 pub ui_path: String,
29 pub component: String,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
33pub struct ConfirmationDialogRequest {
34 pub title: String,
35 pub message: String,
36 pub confirm_label: String,
37 pub cancel_label: String,
38 pub confirm_callback: Option<String>,
39 pub confirm_args_json: Option<String>,
40 pub cancel_callback: Option<String>,
41 pub cancel_args_json: Option<String>,
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
45pub struct ModalDialogRequest {
46 pub ui_path: String,
47 pub component: String,
48 pub width_px: u32,
49 pub height_px: u32,
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
53pub struct ViewportOverlayComponentRequest {
54 pub ui_path: String,
55 pub component: String,
56 pub z_index: i32,
57}
58
59#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
60pub struct PluginUndoRedoState {
61 pub enabled: bool,
62 pub undo_available: bool,
63 pub redo_available: bool,
64}
65
66#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
67pub struct OpenFileDialogRequest {
68 pub filter_name: String,
69 pub extension: String,
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
73pub struct HostSnapshot {
74 pub app_name: String,
75 pub app_version: String,
76 pub render_backend: String,
77 pub filtering_mode: String,
78 pub split_enabled: bool,
79 pub focused_pane: u32,
80 pub open_files: Vec<OpenFileInfo>,
81 pub active_file: Option<OpenFileInfo>,
82 pub active_viewport: Option<ViewportSnapshot>,
83 pub recent_files: Vec<String>,
84 pub active_sidebar: Option<ActiveSidebar>,
85}
86
87#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
88pub struct OpenFileInfo {
89 pub file_id: i32,
90 pub path: String,
91 pub filename: String,
92 pub width: u64,
93 pub height: u64,
94 pub level_count: u32,
95 pub vendor: Option<String>,
96 pub mpp_x: Option<f64>,
97 pub mpp_y: Option<f64>,
98 pub objective_power: Option<f64>,
99 pub scan_date: Option<String>,
100}
101
102#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
103pub struct ViewportSnapshot {
104 pub pane_index: u32,
105 pub file_id: i32,
106 pub file_path: String,
107 pub filename: String,
108 pub center_x: f64,
109 pub center_y: f64,
110 pub zoom: f64,
111 pub width: f64,
112 pub height: f64,
113 pub image_width: f64,
114 pub image_height: f64,
115 pub bounds_left: f64,
116 pub bounds_top: f64,
117 pub bounds_right: f64,
118 pub bounds_bottom: f64,
119}
120
121#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
122#[serde(rename_all = "snake_case")]
123pub enum HostLogLevel {
124 Trace,
125 Debug,
126 Info,
127 Warn,
128 Error,
129}