Commit 452bd0e
Fix group deletion functionality - enable Delete key support for groups (#42)
* Fix group nodes undo/redo duplication bug
- Initialize groups list in NodeGraph constructor
- Add groups serialization/deserialization to persist groups in files
- Add groups cleanup to clear_graph() method
- Add duplicate prevention checks in CreateGroupCommand
- Groups now properly survive file save/load cycles
- Multiple undo/redo operations no longer create duplicate groups
Fixes issue where undoing and redoing group creation would result in
duplicate groups appearing in the scene.
🤖 Generated with [Claude Code](https://claude.ai/code)
* Add group properties editor with transparency support
- Add GroupPropertiesDialog with full UI for editing group properties
- Add alpha sliders for precise transparency control (background, border, title, selection colors)
- Add GroupPropertyChangeCommand for undoable property changes with batch support
- Add context menu support in Group class and NodeEditorView
- Add GroupPreviewWidget with transparency visualization
- Fix QPainter cleanup and QPointF arithmetic issues
- Simplify CSS styling to avoid Qt stylesheet parser warnings
Users can now right-click groups to access Properties dialog and adjust all
color properties including transparency values with proper undo/redo support.
* Implement groups save/load functionality for markdown files
- Add Groups section parsing to FlowFormatHandler markdown parser
- Add Groups section export to FlowFormatHandler markdown writer
- Update Group.serialize() to include complete color data with RGBA values
- Update Group.deserialize() to restore all color properties and brushes
- Update FlowSpec documentation with comprehensive groups specification
- Remove creation_timestamp from groups (unused metadata clutter)
- Add password_generator_tool_group.md example demonstrating groups in markdown
Groups now fully serialize/deserialize with transparency support in .md files.
All group properties including colors, position, size, padding, and membership
are properly saved and restored when loading graphs from markdown format.
* Implement comprehensive copy/paste functionality for groups and nodes
- Enhanced copy_selected() to include groups in clipboard data
- Added complete property preservation for nodes (colors, size, GUI state)
- Implemented group copy/paste with full property restoration
- Fixed CreateNodeCommand to use correct Node API (calculate_absolute_minimum_size)
- Added external clipboard support for selections with groups
- Resolved 'Node object has no attribute min_width' runtime error
🤖 Generated with [Claude Code](https://claude.ai/code)
* Fix double transformation in group paste operations
Fixed issue where pasted groups with member nodes were being transformed twice:
- Once correctly by PasteNodesCommand applying mouse position offset
- Again incorrectly by Group.itemChange automatically moving member nodes
Changes:
- Added _is_pasting flag to NodeGraph to track paste operations
- Modified Group.itemChange to skip automatic node movement during paste
- Enhanced paste() method to accept mouse position parameter
- Fixed data conversion to handle both 'uuid' and 'id' node identifiers
Groups now paste correctly at mouse cursor position with proper node positioning.
Generated with [Claude Code](https://claude.ai/code)
* Fix GUI refresh for pasted nodes with GUI code
Added deferred GUI update mechanism for pasted nodes to ensure GUI widgets
refresh correctly, similar to when loading graphs from files.
Changes:
- Added deferred _final_paste_update() method to PasteNodesCommand
- Schedules GUI layout updates using QTimer.singleShot after paste completes
- Calls node._update_layout() to force complete layout rebuild and pin updates
- Only applies to regular nodes (excludes reroute nodes)
This ensures pasted nodes with GUI code display their widgets correctly
and behave identically to loaded nodes.
Generated with [Claude Code](https://claude.ai/code)
* Refactor node_commands.py into modular package structure
Split the monolithic 1,181-line node_commands.py file into a well-organized
package structure for better maintainability and code organization.
Changes:
- Created src/commands/node/ package with focused modules:
* basic_operations.py - Create, delete, move node commands
* property_changes.py - Property and code change commands
* batch_operations.py - Paste, move/delete multiple commands
- Reduced main node_commands.py to 21 lines (97% reduction)
- Maintained 100% backward compatibility through re-exports
- Added comprehensive docstrings and module documentation
- Preserved all existing functionality and command behavior
Benefits:
- Better code organization and maintainability
- Easier navigation and understanding of command types
- Improved testability with focused modules
- Extensible structure for future command additions
Generated with [Claude Code](https://claude.ai/code)
* Fix group deletion functionality - groups can now be deleted with Delete key
- Add DeleteGroupCommand with full state preservation and undo support
- Enhance DeleteMultipleCommand to handle Group objects alongside nodes/connections
- Fix node_graph.py keyPressEvent to use DeleteMultipleCommand for all item types
- Groups were previously ignored in keyboard deletion, now work seamlessly
- Comprehensive undo/redo support maintains group properties, colors, and positioning
- Update command exports to include new DeleteGroupCommand
🤖 Generated with [Claude Code](https://claude.ai/code)
---------
Co-authored-by: Bryan Howard <[email protected]>1 parent 7c262ef commit 452bd0e
File tree
16 files changed
+3151
-1003
lines changed- docs/specifications
- examples
- src
- commands
- node
- core
- data
- ui
- dialogs
- editor
16 files changed
+3151
-1003
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
291 | 291 | | |
292 | 292 | | |
293 | 293 | | |
294 | | - | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
295 | 358 | | |
296 | 359 | | |
297 | 360 | | |
| |||
337 | 400 | | |
338 | 401 | | |
339 | 402 | | |
340 | | - | |
| 403 | + | |
341 | 404 | | |
342 | 405 | | |
343 | 406 | | |
| |||
392 | 455 | | |
393 | 456 | | |
394 | 457 | | |
395 | | - | |
| 458 | + | |
396 | 459 | | |
397 | 460 | | |
398 | 461 | | |
| |||
442 | 505 | | |
443 | 506 | | |
444 | 507 | | |
445 | | - | |
| 508 | + | |
446 | 509 | | |
447 | 510 | | |
448 | 511 | | |
| |||
476 | 539 | | |
477 | 540 | | |
478 | 541 | | |
479 | | - | |
| 542 | + | |
480 | 543 | | |
481 | 544 | | |
482 | 545 | | |
| |||
506 | 569 | | |
507 | 570 | | |
508 | 571 | | |
509 | | - | |
| 572 | + | |
510 | 573 | | |
511 | 574 | | |
512 | 575 | | |
| |||
618 | 681 | | |
619 | 682 | | |
620 | 683 | | |
621 | | - | |
| 684 | + | |
622 | 685 | | |
623 | 686 | | |
624 | 687 | | |
| |||
842 | 905 | | |
843 | 906 | | |
844 | 907 | | |
| 908 | + | |
| 909 | + | |
| 910 | + | |
| 911 | + | |
| 912 | + | |
| 913 | + | |
| 914 | + | |
| 915 | + | |
| 916 | + | |
| 917 | + | |
| 918 | + | |
| 919 | + | |
| 920 | + | |
| 921 | + | |
| 922 | + | |
| 923 | + | |
| 924 | + | |
| 925 | + | |
| 926 | + | |
| 927 | + | |
| 928 | + | |
| 929 | + | |
| 930 | + | |
| 931 | + | |
845 | 932 | | |
846 | 933 | | |
847 | 934 | | |
| |||
858 | 945 | | |
859 | 946 | | |
860 | 947 | | |
861 | | - | |
| 948 | + | |
862 | 949 | | |
863 | 950 | | |
864 | 951 | | |
| |||
886 | 973 | | |
887 | 974 | | |
888 | 975 | | |
889 | | - | |
| 976 | + | |
| 977 | + | |
| 978 | + | |
| 979 | + | |
890 | 980 | | |
891 | 981 | | |
892 | 982 | | |
| |||
941 | 1031 | | |
942 | 1032 | | |
943 | 1033 | | |
| 1034 | + | |
944 | 1035 | | |
945 | 1036 | | |
946 | 1037 | | |
| |||
0 commit comments