jellyflow_runtime/io/config/interaction/
config.rs1use 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#[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}