Files
create/docs/COMPONENTS.md
forbes d7b532255b
Some checks failed
Build and Test / build (pull_request) Has been cancelled
feat(icons): add icon theming infrastructure with Catppuccin color remapping
- Remove hand-crafted kindred-icons/ in favor of auto-generated themed icons
- Add icons/mappings/ with FCAD.csv (Tango palette) and kindred.csv (Catppuccin Mocha)
- Add icons/retheme.py script to remap upstream FreeCAD SVG colors
- Generate icons/themed/ with 1,595 themed SVGs (45,300 color replacements)
- BitmapFactory loads icons/themed/ as highest priority before default icons
- 157-color mapping covers the full Tango palette, interpolating between
  4 luminance anchors per color family

Regenerate: python3 icons/retheme.py
2026-02-15 20:34:22 -06:00

6.2 KiB

Components

ztools (command provider)

ZTools is no longer a standalone workbench. It registers as a command provider that injects tools into the appropriate editing contexts via WorkbenchManipulator and the EditingContextResolver system.

Registered commands (9):

Command Function Injected Into
ZTools_DatumCreator Create datum planes, axes, points (16 modes) PartDesign Helper Features
ZTools_DatumManager Manage existing datum objects PartDesign Helper Features
ZTools_EnhancedPocket Flip-side pocket (cut outside sketch profile) PartDesign Modeling Features
ZTools_RotatedLinearPattern Linear pattern with incremental rotation PartDesign Transformation Features
ZTools_AssemblyLinearPattern Pattern assembly components linearly Assembly
ZTools_AssemblyPolarPattern Pattern assembly components around axis Assembly
ZTools_SpreadsheetStyle{Bold,Italic,Underline} Text style toggles Spreadsheet
ZTools_SpreadsheetAlign{Left,Center,Right} Cell alignment Spreadsheet
ZTools_Spreadsheet{BgColor,TextColor,QuickAlias} Colors and alias creation Spreadsheet

Integration via _ZToolsManipulator (WorkbenchManipulator) and injectEditingCommands():

  • Commands are injected into native workbench toolbars (PartDesign, Assembly, Spreadsheet)
  • Context toolbar injections ensure commands appear when the relevant editing context is active
  • PartDesign menu items inserted after PartDesign_Boolean

Datum types (7): offset_from_face, offset_from_plane, midplane, 3_points, normal_to_edge, angled, tangent_to_cylinder. All except tangent_to_cylinder use Part::AttachExtension for automatic parametric updates.


Origin commands (C++)

The Origin abstraction (src/Gui/FileOrigin.h) provides a backend-agnostic interface for document storage. Commands delegate to the active FileOrigin implementation (currently LocalFileOrigin for local files, SiloOrigin via mods/silo/freecad/silo_origin.py for Silo-tracked documents).

Registered commands (5):

Command Function Icon
Origin_Commit Commit changes as a new revision silo-commit
Origin_Pull Pull a specific revision from the origin silo-pull
Origin_Push Push local changes to the origin silo-push
Origin_Info Show document information from origin silo-info
Origin_BOM Show Bill of Materials for this document silo-bom

These appear in the File menu and "Origin Tools" toolbar across all workbenches (see src/Gui/Workbench.cpp).


Silo workbench

Registered commands (14):

Command Function
Silo_New Schema-driven item creation form — fetches categories and properties from the Silo API at runtime
Silo_Open Open file from Silo database
Silo_Save Save to Silo (create revision)
Silo_Commit Commit current revision
Silo_Pull Pull latest revision from server
Silo_Push Push local changes to server
Silo_Info View item metadata and history
Silo_BOM Bill of materials dialog (BOM + Where Used)
Silo_TagProjects Assign project tags
Silo_Rollback Rollback to previous revision
Silo_SetStatus Set revision status (draft/review/released/obsolete)
Silo_Settings Configure API URL, projects dir, SSL certificates
Silo_Auth Login/logout authentication panel

Global integration via the origin system in src/Gui/:

  • File toolbar: Std_Origin selector widget + Std_New/Std_Open/Std_Save (delegate to current origin)
  • Origin Tools toolbar: Origin_Commit/Origin_Pull/Origin_Push/Origin_Info/Origin_BOM (auto-disable by capability)
  • Silo origin registered at startup by src/Mod/Create/InitGui.py

Dock panels:

  • Database Auth (2000ms) -- Login/logout and API token management
  • Database Activity (4000ms) -- Real-time server event feed via SSE (Server-Sent Events) with automatic reconnection and exponential backoff
  • Start Panel -- In-viewport landing page with recent files and Silo integration

Server architecture: Go REST API (38+ routes) + PostgreSQL + MinIO S3. Authentication via local (bcrypt), LDAP, or OIDC backends. SSE endpoint for real-time event streaming. See docs/src/silo-server/ for server documentation.

LibreOffice Calc extension (silo-calc): BOM management, item creation, and AI-assisted descriptions via OpenRouter API. Shares the same Silo REST API and auth token system via the shared silo-client package.


Theme

Canonical source: src/Gui/Stylesheets/KindredCreate.qss

The PreferencePacks copy (src/Gui/PreferencePacks/KindredCreate/KindredCreate.qss) is generated at build time via configure_file() in src/Gui/PreferencePacks/CMakeLists.txt. Only the Stylesheets copy needs to be maintained.

Notable theme customizations beyond standard Catppuccin colors:

  • QGroupBox::indicator styling to match QCheckBox::indicator (consistent checkbox appearance)
  • QLabel[haslink="true"] link color (#b4befe Catppuccin Lavender) -- picked up by FreeCAD to set QPalette::Link
  • Spanning-line tree branch indicators

Icon infrastructure

Qt resource icons (src/Gui/Icons/)

5 silo-* SVGs registered in resource.qrc, used by C++ Origin commands:

silo-bom.svg, silo-commit.svg, silo-info.svg, silo-pull.svg, silo-push.svg

Silo module icons (mods/silo/freecad/resources/icons/)

10 SVGs loaded at runtime by the _icon() function in silo_commands.py:

silo-auth.svg, silo-bom.svg, silo-commit.svg, silo-info.svg, silo-new.svg, silo-open.svg, silo-pull.svg, silo-push.svg, silo-save.svg, silo.svg

Missing icons

3 command icon names have no corresponding SVG file: silo-tag, silo-rollback, silo-status. The _icon() function returns an empty string for these, so Silo_TagProjects, Silo_Rollback, and Silo_SetStatus render without toolbar icons.

Palette

All silo-* icons use the Catppuccin Mocha color scheme. See icons/kindred/README.md for palette specification and icon design standards.