feat(open): replace modal open dialog with MDI tab #20

Merged
forbes merged 4 commits from feat/open-item-mdi-tab into main 2026-02-12 17:47:10 +00:00
Owner

Summary

Replace the blocking modal QDialog in Silo_Open with a non-blocking MDI tab, matching the pattern established by Silo_New / SchemaFormWidget.

Changes

  • New file freecad/open_search.py: OpenItemWidget, a plain QWidget with item_selected/cancelled signals that can be embedded in an MDI subwindow
  • Rewrite Silo_Open.Activated() to add the widget as an MDI subwindow instead of running dialog.exec_()
  • 500ms debounce on search input (reduces API load vs the old immediate textChanged handler)
  • Filter checkbox toggles now trigger immediate re-search (previously required retyping)

Checklist

  • Commit messages follow conventional commits
  • Code follows project style (clang-format for C++, black for Python)
  • Changes are tested locally
  • Documentation updated (if applicable)
## Summary Replace the blocking modal `QDialog` in `Silo_Open` with a non-blocking MDI tab, matching the pattern established by `Silo_New` / `SchemaFormWidget`. ## Changes - New file `freecad/open_search.py`: `OpenItemWidget`, a plain `QWidget` with `item_selected`/`cancelled` signals that can be embedded in an MDI subwindow - Rewrite `Silo_Open.Activated()` to add the widget as an MDI subwindow instead of running `dialog.exec_()` - 500ms debounce on search input (reduces API load vs the old immediate `textChanged` handler) - Filter checkbox toggles now trigger immediate re-search (previously required retyping) ## Checklist - [x] Commit messages follow [conventional commits](https://www.conventionalcommits.org/) - [x] Code follows project style (clang-format for C++, black for Python) - [x] Changes are tested locally - [ ] Documentation updated (if applicable)
forbes added 3 commits 2026-02-12 16:23:11 +00:00
Add 'Silo Origin' toolbar (Commit/Pull/Push/Info/BOM) registered with
Unavailable visibility. Register a Silo overlay via
FreeCADGui.registerEditingOverlay() that appends this toolbar to any
active editing context when the current document is Silo-tracked
(ownsDocument() returns True).

Consolidate PySide.QtCore imports.
Extract SchemaFormWidget from SchemaFormDialog so the creation form
can be embedded as a plain QWidget in an MDI subwindow tab.  Each
Ctrl+N invocation opens a new tab alongside document tabs.  On
successful creation the pre-document tab closes and the real document
opens in its place.

- SchemaFormWidget emits item_created/cancelled signals
- SchemaFormDialog preserved as thin modal wrapper for backward compat
- Inline error display replaces modal QMessageBox
- Live tab title updates from part number preview
Extract search-and-open UI into OpenItemWidget (open_search.py), a
plain QWidget with item_selected/cancelled signals.  Silo_Open now
adds this widget as an MDI subwindow instead of running a blocking
QDialog, matching the Silo_New tab pattern.

Improvements over the old dialog:
- Non-blocking: multiple search tabs can be open simultaneously
- 500 ms debounce on search input reduces API load
- Filter checkbox changes trigger immediate re-search
forbes added 1 commit 2026-02-12 17:47:01 +00:00
forbes merged commit 91f539a18a into main 2026-02-12 17:47:10 +00:00
forbes deleted branch feat/open-item-mdi-tab 2026-02-12 17:47:10 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kindred/silo-mod#20