Skip to main content

jellyflow_runtime/io/config/interaction/
config.rs

1use serde::{Deserialize, Serialize};
2
3use jellyflow_core::core::{CanvasRect, CanvasSize};
4use jellyflow_core::interaction::{
5    NodeGraphConnectionMode, NodeGraphDragHandleMode, NodeGraphModifierKey,
6};
7
8use crate::io::tuning::{NodeGraphAutoPanTuning, NodeGraphPanInertiaTuning};
9
10use super::super::defaults::*;
11use super::super::keys::{NodeGraphDeleteKey, NodeGraphKeyCode};
12use super::super::state::NodeGraphInteractionState;
13use super::super::types::{
14    NodeGraphBoxSelectEdges, NodeGraphNodeOrigin, NodeGraphNudgeStepMode,
15    NodeGraphPanOnDragButtons, NodeGraphPanOnScrollMode, NodeGraphSelectionMode,
16    NodeGraphViewportEase, default_box_select_edges, default_pan_on_drag_buttons,
17};
18
19/// Persisted interaction configuration stored alongside view state.
20#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
21pub struct NodeGraphInteractionConfig {
22    #[serde(default = "default_elements_selectable")]
23    pub elements_selectable: bool,
24    #[serde(default = "default_nodes_draggable")]
25    pub nodes_draggable: bool,
26    #[serde(default = "default_nodes_connectable")]
27    pub nodes_connectable: bool,
28    #[serde(default = "default_nodes_deletable")]
29    pub nodes_deletable: bool,
30    #[serde(default = "default_nodes_focusable")]
31    pub nodes_focusable: bool,
32    #[serde(default = "default_edges_selectable")]
33    pub edges_selectable: bool,
34    #[serde(default = "default_edges_deletable")]
35    pub edges_deletable: bool,
36    #[serde(default = "default_edges_focusable")]
37    pub edges_focusable: bool,
38    #[serde(default = "default_edges_reconnectable")]
39    pub edges_reconnectable: bool,
40    #[serde(default)]
41    pub connection_mode: NodeGraphConnectionMode,
42    #[serde(default = "default_connection_radius")]
43    pub connection_radius: f32,
44    #[serde(default = "default_reconnect_radius")]
45    pub reconnect_radius: f32,
46    #[serde(default)]
47    pub reconnect_on_drop_empty: bool,
48    #[serde(default = "default_edge_interaction_width")]
49    pub edge_interaction_width: f32,
50    #[serde(default = "default_bezier_hit_test_steps")]
51    pub bezier_hit_test_steps: u8,
52    #[serde(default = "default_elevate_nodes_on_select")]
53    pub elevate_nodes_on_select: bool,
54    #[serde(default = "default_elevate_edges_on_select")]
55    pub elevate_edges_on_select: bool,
56    #[serde(default)]
57    pub snap_to_grid: bool,
58    #[serde(default = "default_snap_grid")]
59    pub snap_grid: CanvasSize,
60    #[serde(default = "default_snaplines")]
61    pub snaplines: bool,
62    #[serde(default = "default_snaplines_threshold")]
63    pub snaplines_threshold: f32,
64    #[serde(default = "default_pan_on_scroll")]
65    pub pan_on_scroll: bool,
66    #[serde(default = "default_pan_on_drag_buttons")]
67    pub pan_on_drag: NodeGraphPanOnDragButtons,
68    #[serde(default)]
69    pub selection_on_drag: bool,
70    #[serde(default = "default_select_nodes_on_drag")]
71    pub select_nodes_on_drag: bool,
72    #[serde(default)]
73    pub selection_mode: NodeGraphSelectionMode,
74    #[serde(default = "default_box_select_edges")]
75    pub box_select_edges: NodeGraphBoxSelectEdges,
76    #[serde(default = "default_selection_key")]
77    pub selection_key: NodeGraphModifierKey,
78    #[serde(default = "default_multi_selection_key")]
79    pub multi_selection_key: NodeGraphModifierKey,
80    #[serde(default)]
81    pub delete_key: NodeGraphDeleteKey,
82    #[serde(default)]
83    pub nudge_step_mode: NodeGraphNudgeStepMode,
84    #[serde(default = "default_nudge_step_px")]
85    pub nudge_step_px: f32,
86    #[serde(default = "default_nudge_fast_step_px")]
87    pub nudge_fast_step_px: f32,
88    #[serde(default)]
89    pub disable_keyboard_a11y: bool,
90    #[serde(default = "default_pane_click_distance")]
91    pub pane_click_distance: f32,
92    #[serde(
93        default = "default_pan_activation_key_code",
94        skip_serializing_if = "Option::is_none"
95    )]
96    pub pan_activation_key_code: Option<NodeGraphKeyCode>,
97    #[serde(default = "default_space_to_pan")]
98    pub space_to_pan: bool,
99    #[serde(default = "default_pan_on_scroll_speed")]
100    pub pan_on_scroll_speed: f32,
101    #[serde(default)]
102    pub pan_on_scroll_mode: NodeGraphPanOnScrollMode,
103    #[serde(default)]
104    pub pan_inertia: NodeGraphPanInertiaTuning,
105    #[serde(default = "default_zoom_on_scroll")]
106    pub zoom_on_scroll: bool,
107    #[serde(default = "default_zoom_on_scroll_speed")]
108    pub zoom_on_scroll_speed: f32,
109    #[serde(default = "default_zoom_on_pinch")]
110    pub zoom_on_pinch: bool,
111    #[serde(default = "default_zoom_on_pinch_speed")]
112    pub zoom_on_pinch_speed: f32,
113    #[serde(default = "default_zoom_on_double_click")]
114    pub zoom_on_double_click: bool,
115    #[serde(default = "default_frame_view_duration_ms")]
116    pub frame_view_duration_ms: u32,
117    #[serde(default)]
118    pub frame_view_ease: NodeGraphViewportEase,
119    #[serde(default = "default_frame_view_padding")]
120    pub frame_view_padding: f32,
121    #[serde(default = "default_reroute_on_edge_double_click")]
122    pub reroute_on_edge_double_click: bool,
123    #[serde(default = "default_edge_insert_on_alt_drag")]
124    pub edge_insert_on_alt_drag: bool,
125    #[serde(default)]
126    pub zoom_activation_key: NodeGraphModifierKey,
127    #[serde(default = "default_node_drag_threshold")]
128    pub node_drag_threshold: f32,
129    #[serde(default)]
130    pub node_drag_handle_mode: NodeGraphDragHandleMode,
131    #[serde(default = "default_node_click_distance")]
132    pub node_click_distance: f32,
133    #[serde(default = "default_connection_drag_threshold")]
134    pub connection_drag_threshold: f32,
135    #[serde(default = "default_connect_on_click")]
136    pub connect_on_click: bool,
137    #[serde(default)]
138    pub auto_pan: NodeGraphAutoPanTuning,
139    #[serde(default, skip_serializing_if = "Option::is_none")]
140    pub translate_extent: Option<CanvasRect>,
141    #[serde(default, skip_serializing_if = "Option::is_none")]
142    pub node_extent: Option<CanvasRect>,
143    #[serde(default)]
144    pub node_origin: NodeGraphNodeOrigin,
145}
146
147impl NodeGraphInteractionConfig {
148    pub fn is_default(this: &Self) -> bool {
149        this == &Self::default()
150    }
151}
152
153impl Default for NodeGraphInteractionConfig {
154    fn default() -> Self {
155        NodeGraphInteractionState::default().config()
156    }
157}