Skip to content

Commit 74c2ae6

Browse files
author
alexej
committed
extracted pieces of selection logic
1 parent 0a714d7 commit 74c2ae6

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

editor.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ def handle_mouse_down(self, event):
112112
if node.contains_point(world_x, world_y) and clicked_node is None:
113113
node.dragging = True
114114
node.drag_offset = (world_x - node.x, world_y - node.y)
115-
node.selected = True
115+
# Delegate selection logic:
116+
self.selection.select_node(node, self.nodes)
116117
clicked_node = node
117118
# --- Selected node should be always on top ---
118119
self.nodes.remove(node)
@@ -121,8 +122,9 @@ def handle_mouse_down(self, event):
121122
if not self._node_drag_in_progress:
122123
self.undo_stack.push(copy.deepcopy(self.nx_graph))
123124
self._node_drag_in_progress = True
124-
else:
125-
node.selected = False
125+
# Deselect all if no node was clicked
126+
if clicked_node is None:
127+
self.selection.clear_selection(self.nodes)
126128

127129
elif event.button == pygame.BUTTON_MIDDLE:
128130
# Check if a node was clicked

selection.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ def __init__(self):
33
self.rect_start = None
44
self.rect_end = None
55
self.nodes = []
6+
self.selected_nodes = []
67

78
def begin(self, start_pos):
89
self.rect_start = start_pos
@@ -36,3 +37,15 @@ def clear(self):
3637

3738
def is_active(self):
3839
return self.rect_start is not None and self.rect_end is not None
40+
41+
def select_node(self, node, all_nodes):
42+
# Deselect all others, select only this node
43+
for n in all_nodes:
44+
n.selected = False
45+
node.selected = True
46+
self.selected_nodes = [node]
47+
48+
def clear_selection(self, all_nodes):
49+
for n in all_nodes:
50+
n.selected = False
51+
self.selected_nodes = []

0 commit comments

Comments
 (0)