Show "(N)" in the value area when a property group is collapsed,
indicating how many properties are inside. Also restore original
expand/unexpand icon logic.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Introduce IPropertyGroupProvider interface that lets QObjects declare
which group each property belongs to. PropertyEditor then renders
collapsible group headers in the tree view, with properties sorted
under their respective groups.
Key changes:
- New IPropertyGroupProvider interface (getPropertyGroup method)
- QDetailsViewRow_Group row type with bold group header rendering
- isGroup model role and delegate property for styled group rows
- TapHandler-based expand/collapse toggle in delegate template
- One-time C++ auto-expand for groups in setObject() to avoid
re-expansion loop with delegate recreation
- Grouped property children added via LayoutBuilder::addGroup()
- GraphicsBusSectionItem demonstrates grouping with 5 categories
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Rounded rects: serialize/restore isRound, ratioX, ratioY; pass isRound
to constructor so rounded-corner control handles are created
- Polygons: implement full serialization/deserialization including vertex
points; add updateBoundingRectFromPoints() to fix hit-test and handles
after deserialization
- Groups: add updateBoundingRectFromChildren() to correctly compute
bounding rect after child items are deserialized
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Add saveAsToFile() method to Document class for "Save As" functionality
- Add actionSaveAs menu item and onAction_saveAs() handler in MainWindow
- Add isValidItem() method to GraphicsBaseItem to filter helper elements
- Add using declarations to expose AbstractShapeType members in GraphicsBaseItem
- Fix document serialization to properly handle GraphicsItemGroup pen/brush
- HandleType enum starts from 50 to avoid conflicts with future handle types
- Improve deserialization to properly restore item properties
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Add Document class (include/document.h, source/document.cpp)
- JSON serialization/deserialization of DesignerScene
- State management: filename, modified flag, timestamps, metadata
- File operations: New, Open, Save with .bay extension
- Integrate Document into CMainWindow
- initializeDocument() to create and associate with DesignerScene
- File menu actions connected to Document methods
- Window title updates on modified/filename changes
- Close event checks for unsaved changes
- Update CLAUDE.md with Document architecture documentation
Simplified the build commands in CLAUDE.md from complex absolute-path CMake configuration to preset-based approach:
- Changed from cmake -B <build-dir> -S <source-dir> ... to cmake --preset default
- Changed from cmake --build <build-dir> to ninja -C build/Debug
- Updated output location to macOS-specific build/Debug/BayTemplate.app
- Qt-based application for designing electrical power grid structures
- Features dockable UI with graphics canvas for placing grid elements
- Includes QtADS (Advanced Docking System v4.3.1) and PropertyEditor
- Supports Qt5/Qt6, multiple platforms (Windows, macOS, Linux, Android)
- Architecture: DesignerView/Scene, SelectorManager, Command Pattern for undo/redo