Use WCAG relative luminance to choose dark or light text color based
on pill background brightness. Bright backgrounds (Green, Yellow,
Mauve, Teal, Peach) now get dark text (#1e1e2e) instead of the
previous fixed light text (#cdd6f4) that caused poor contrast.
Closes#200
DirMod.run_init() and DirModGui.run_init_gui() use exec(code) to run
addon Init.py and InitGui.py files, but don't pass __file__ in the
globals dict. Addons that reference __file__ (e.g. Silo) crash with
NameError: name '__file__' is not defined.
Pass {"__file__": str(init_py)} as the globals argument so __file__
is available in the executed code, matching the behavior of normal
Python module loading.
Convert BreadcrumbToolBar from a QToolBar in the MainWindow toolbar area
to a QFrame overlay at the top-left of each 3D viewport.
Changes:
- BreadcrumbToolBar: change base class from QToolBar to QFrame, use
QHBoxLayout instead of toolbar actions, semi-transparent overlay
background with rounded corners
- MainWindow: remove breadcrumb toolbar creation, toolbar break, and
signal connection
- View3DInventor: create per-view BreadcrumbToolBar as a child of the
GL viewer widget, positioned at (8,8) with event filter to keep it
raised on viewport resize
Each 3D view now has its own breadcrumb instance connected to the
EditingContextResolver singleton. This reclaims the full-width toolbar
row and keeps the editing context visually tied to the viewport.
PartDesign, Sketcher, and Assembly toolbars use
DefaultVisibility::Unavailable and rely on EditingContextResolver to
show them. When switching to these workbenches without a specific editing
state (e.g. PartDesign with no Body activated), no context matches and
all workbench toolbars stay hidden.
Add workbench-level fallback contexts at priority 20 that match when the
workbench is active regardless of editing state:
- partdesign.workbench: shows Helper Features + Sketcher toolbars
- sketcher.workbench: shows Sketcher + Sketcher Tools
- assembly.workbench: shows Assembly toolbar
These fill the gap between object-specific contexts (priority 30+) and
the empty_document fallback (priority 10).
When "Reset All" is used in Preferences, restoreDefaults() clears the
entire User parameter tree via ParameterManager::Clear(). Widgets then
fall back to upstream FreeCAD hardcoded defaults (e.g. light theme,
default units) instead of Kindred Create defaults.
After clearing, apply the KindredCreate preference pack to restore
Create-specific baseline settings (Catppuccin Mocha theme, toolbar
layout, unit preferences, etc.).
Add min-height: 20px to OriginSelectorWidget in KindredCreate.qss so it
renders at the same visual height as the WorkbenchComboBox. The two
widgets use different Qt base classes (QToolButton vs QComboBox) with
different intrinsic size hints, causing a height mismatch in the toolbar.
Wires DAG extraction into Silo_Save and Silo_Commit commands.
After successful file upload, extracts the feature DAG and pushes
it to the server. Failures warn but never block the save.
Closes#216
Adds push_dag() and get_dag() to SiloClient:
- push_dag: PUT /api/items/{pn}/dag with nodes + edges
- get_dag: GET /api/items/{pn}/dag with optional revision filter
Closes#215
When the silo workbench is loaded, Insert Component now opens the
Silo part browser (OpenItemWidget) instead of the OS file dialog.
Users can search both the Silo database and local files to find
components to insert.
Falls back to the OS file dialog if silo-mod is not installed.
Also adds .kc file support to the fallback file dialog filter.
Closes#202
The Create module (src/Mod/Create/) was never included in the build
because src/Mod/CMakeLists.txt did not call add_subdirectory(Create).
This meant:
- Mod/Create/InitGui.py was never installed, so the workbench loader
(setup_kindred_workbenches) that loads silo and ztools never ran
- The install rules for mods/silo/freecad/ and mods/silo/silo-client/
never executed, leaving the silo workbench files missing
- kc_format.py was also not listed in the Create install rule
Fixes the 'Ignoring unknown SiloWorkbench' error on startup.
- QDockWidget::title: add font-weight bold and text-align left to
match ActionGroup header style
- ActionLabel header: add min-width 0 to prevent title clipping
in narrow panels
Applied to both src/Gui/Stylesheets and resources/preferences copies.
Replace 2-color Base→Crust gradient with 3-color Overlay0→Mantle→Overlay0
gradient in both KindredCreate preference pack and CatppuccinMocha theme.
Enables UseBackgroundColorMid for the 3-color effect.
kc_format.py:
- Auto-create silo/manifest.json with default fields (UUID, timestamps,
username) when saving a .kc file that lacks one
- Update modified_at timestamp on each save
- KC_VERSION = 1.0
Platform integration:
- kindred-create.desktop: add application/x-kindred-create MIME type
- kindred-create.xml: register .kc glob patterns with dedicated MIME type
(application/x-kindred-create), separate from .fcstd type
Remove the closeStart preference check so the start page MDI tab
always closes when a document is opened or created. Re-enable
QListView updates before closing to prevent Qt hang during widget
destruction.
Add hideEvent override as a safety net to re-enable disabled
QListView updates whenever the start page is hidden.
Add #include <QApplication> (for qApp macro), #include <QEvent> (for
QEvent::LanguageChange), and #include <Gui/Application.h> (for
Gui::Application::Instance) which were transitively available in
FreeCAD 1.0 but not in 1.2.