Commit Graph

45303 Commits

Author SHA1 Message Date
99bc7629e7 Merge pull request 'fix(gui): widen origin selector widget and update silo submodule' (#25) from fix/silo-workbench-bugs into main
All checks were successful
Build and Test / build (push) Successful in 1h3m36s
Reviewed-on: #25
2026-02-07 20:34:56 +00:00
forbes
d95c850b7b fix(gui): widen origin selector widget and update silo submodule
Some checks failed
Build and Test / build (pull_request) Has been cancelled
- Increase OriginSelectorWidget max width from 120 to 160px for longer
  origin names
- Set explicit SizePolicy::Preferred for better toolbar layout
- Update silo submodule to fix/silo-workbench-bugs with auth and menu fixes
2026-02-07 14:34:23 -06:00
1f7dae4f11 Merge pull request 'art: update kindred icon set' (#24) from art/update-kindred-icons into main
All checks were successful
Build and Test / build (push) Successful in 1h5m8s
Reviewed-on: #24
2026-02-07 16:45:30 +00:00
1d7e4e2eef Merge pull request 'fix(ci): fetch only latest tag, add patchelf dep, update docs' (#23) from docs/update-ci-and-overview into main
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #23
2026-02-07 16:45:20 +00:00
forbes
fe50b1595e art: update kindred icon set
Some checks failed
Build and Test / build (pull_request) Has been cancelled
Update Document, DrawStyle, Link, PartDesign, and document-* SVGs.
Remove DrawStyleHiddenLine.svg.
2026-02-07 10:44:24 -06:00
forbes
0e5a259d14 fix(ci): fetch only latest tag and add patchelf build dep
Some checks failed
Build and Test / build (pull_request) Has been cancelled
- Change both build.yml and release.yml to fetch only the latest v* tag
  via git ls-remote instead of fetching all tags
- Add patchelf as a Linux build dependency in recipe.yaml to fix
  rattler-build packaging failure
2026-02-07 10:42:48 -06:00
forbes
bfb2728f8d docs: update OVERVIEW.md and CI_CD.md to match current repo state
- Fix stale submodule URLs (gitea.kindred.internal -> git.kindred-systems.com)
- Update silo submodule name and commit, add note about repo split
- Document actual release mechanism (curl API, not release-action)
- Mark macOS/Windows builds as disabled in platform matrix
- Update ccache docs: date-based key rotation, rattler-build env forwarding
- Document disk cleanup steps and runner cleanup daemon
- Update appimagetool extraction note (FUSE unavailable in containers)
2026-02-07 09:34:41 -06:00
forbes
7bec3d5c3b fix(ci): fix release creation and artifact collection
All checks were successful
Build and Test / build (push) Successful in 1h5m11s
- Exclude appimagetool from artifact upload (FreeCAD_*.AppImage glob)
- Build release JSON payload in Python to fix false/False type error
  (shell 'false' is not valid Python; use bool with re.search instead)
2026-02-07 08:20:24 -06:00
forbes
145c29d7d6 fix(build): pin icu<76 in build deps to match host
The build environment (via qt6-main) was pulling ICU 78 headers while
the host/runtime environment had ICU 75 pinned. The compiled binary
contained icu_78 mangled symbols that fail to resolve against ICU 75
shared libs at runtime. Pin icu>=75,<76 in build deps to match.
2026-02-07 08:18:46 -06:00
forbes
8ba7b73aa8 fix(ci): fix ccache strategy and add runner cleanup
- Cache key: replace run_id (unique per build) with date-based key
  so entries are reused within the same day and rotate daily
- Skip cache save on exact hit (act_runner can't overwrite keys)
- build.sh: set CCACHE_DIR/CCACHE_BASEDIR inside rattler-build's
  isolated env so release builds actually use the cached directory
- build.sh: print ccache stats at end for diagnostics
- Add disk space cleanup step to build.yml (matching release.yml)
- Remove cross-build cache fallback in release.yml (different -O flags)
- Add runner cleanup daemon (.gitea/runner/) with systemd timer
  to purge stale cache entries, Docker data, and old workspaces
2026-02-07 08:18:00 -06:00
forbes
1e4deea130 fix(ci): add disk space cleanup steps to release workflow
Some checks failed
Build and Test / build (push) Failing after 15m24s
The runner host disk is at 95% capacity. Add cleanup steps:
- Remove pre-installed bloat (dotnet, android, boost) at start
- Clear rattler package cache and pixi build dirs between
  AppImage and .deb build steps
2026-02-06 20:01:33 -06:00
forbes
3923e2e4b9 fix(ci): replace release-action with direct Gitea API calls
Some checks failed
Build and Test / build (push) Has been cancelled
Release Build / build-linux (push) Failing after 1h25m19s
Release Build / publish-release (push) Has been skipped
The gitea.com/actions/release-action is archived and requires go to
build from source, which isn't available in the ubuntu-latest runner.
Replace with curl calls to the Gitea release API: create release,
upload assets. Handles existing releases by deleting and recreating.
latest
2026-02-06 18:22:23 -06:00
forbes
9e29b76fbc fix(build): pin icu >=75,<76 to prevent header/lib version mismatch
All checks were successful
Build and Test / build (push) Successful in 1h18m21s
The build environment resolved ICU 78 headers while the host environment
had ICU 75 libraries (constrained by xerces-c, qt6-main, etc.). This
caused libFreeCADBase.so to contain icu_78 mangled symbols that couldn't
be found in the bundled ICU 75 libs at runtime:

  undefined symbol: _ZN6icu_7813UnicodeString8fromUTF8ENS_11StringPieceE

Pin ICU explicitly in both recipe.yaml host deps and pixi.toml to ensure
headers and libs always match.
2026-02-06 16:48:03 -06:00
forbes
88e025f1c6 docs: update stale silo/pkg/freecad paths to silo-mod layout
Some checks failed
Build and Test / build (push) Successful in 1h24m15s
Release Build / build-linux (push) Successful in 2h8m56s
Release Build / publish-release (push) Failing after 11m58s
2026-02-06 12:43:04 -06:00
forbes
772d3b3288 fix(build): update CMake install paths for silo-mod repo layout
Some checks failed
Build and Test / build (push) Has been cancelled
The silo submodule now uses silo-mod layout where the FreeCAD workbench
is at freecad/ (not pkg/freecad/). Also install the silo-client
submodule directory.
2026-02-06 12:42:02 -06:00
forbes
dfa2b73966 fix(ci): extract appimagetool for FUSE-less containers
Some checks failed
Build and Test / build (push) Has been cancelled
appimagetool is an AppImage itself and requires FUSE to self-mount.
CI containers typically don't have FUSE. Extract it with
--appimage-extract and run squashfs-root/AppRun instead.
2026-02-06 11:33:33 -06:00
forbes
056b015e78 chore: update mods/silo submodule to silo-mod initial commit
Some checks failed
Build and Test / build (push) Has been cancelled
2026-02-06 11:25:15 -06:00
6649372f7b Merge pull request 'refactor: rewire silo submodule for monorepo split' (#19) from refactor/silo-split into main
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #19
2026-02-06 17:23:08 +00:00
5db68dab25 Merge pull request 'docs: split REPOSITORY_STATE.md into topic files' (#18) from docs/split-repository-state into main
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #18
2026-02-06 17:22:42 +00:00
forbes
c59c704da3 refactor: rewire silo submodule for silo-mod split
Some checks failed
Build and Test / build (pull_request) Has been cancelled
- .gitmodules: silo.git -> silo-mod.git (FreeCAD workbench only)
- Init.py: silo/pkg/freecad -> silo/freecad (new repo layout)
- InitGui.py: same path update

The silo monorepo has been split into:
- silo-client: shared Python API client (submodule of silo-mod)
- silo-mod: FreeCAD workbench (this submodule)
- silo-calc: LibreOffice Calc extension (separate repo)
- silo: server only (no longer a Create submodule)
2026-02-06 11:15:30 -06:00
forbes
a2200b4042 docs: split REPOSITORY_STATE.md into topic files
Some checks failed
Build and Test / build (pull_request) Has been cancelled
Replace the monolithic REPOSITORY_STATE.md with four focused files:

- OVERVIEW.md: metadata, submodule pins, doc index
- ARCHITECTURE.md: bootstrap flow, source layout
- COMPONENTS.md: ztools, Silo, Origin commands, theme, icons
- KNOWN_ISSUES.md: bugs, incomplete features, next steps

Updates reflected in the split:
- Silo auth: corrected from 'not implemented' to 'local auth
  complete; LDAP/OIDC pending infrastructure'
- CSRF: corrected from 'not implemented' to 'implemented (nosurf)'
- Silo commands: 14 (was 13, added Silo_Auth)
- New Origin commands section (5 C++ commands)
- New icon infrastructure section with missing icon tracking
- New issues: Newton-Raphson convergence fix (#12), Assembly
  restore crash fix (#13), missing Silo icons (#11)
- Updated submodule pins (silo 27e112e, OndselSolver 5d1988b)
2026-02-06 10:43:34 -06:00
forbes
c858706d48 fix(gui): add silo-* icons to Qt resource file for origin commands
Some checks failed
Build and Test / build (push) Successful in 1h14m34s
Release Build / build-linux (push) Failing after 1h33m10s
Release Build / publish-release (push) Has been skipped
Copy silo-bom, silo-commit, silo-info, silo-pull, and silo-push SVG
icons from mods/silo/pkg/freecad/resources/icons/ into src/Gui/Icons/
and register them in resource.qrc so they are compiled into the binary
and discoverable by BitmapFactory at runtime.
2026-02-05 22:00:35 -06:00
forbes
724440dcb7 fix(gui): fix build errors in OriginSelectorWidget and OriginManager
Some checks failed
Build and Test / build (push) Has been cancelled
- OriginSelectorWidget: use BitmapFactoryInst::mergePixmap() instead of
  BitmapFactory::mergePixmap() since BitmapFactory is a function, not a class
- OriginManager: use Console().log() instead of Console().Log() which
  does not exist on ConsoleSingleton
2026-02-05 20:48:28 -06:00
forbes
2f594dac0a fix(gui): use Python API for viewDefaultOrientation in StdCmdNew
Some checks failed
Build and Test / build (push) Failing after 20m15s
viewDefaultOrientation is a method on View3DInventorPy (Python wrapper),
not on View3DInventorViewer (C++ viewer). Use doCommand with the Python
API, matching the pattern used in StdCmdViewHome.
2026-02-05 19:13:45 -06:00
forbes
939b81385e fix(build): pin swig <4.4 for pivy runtime compatibility
Some checks failed
Build and Test / build (push) Failing after 19m41s
SWIG 4.4.x uses runtime API version 5, which is incompatible with
conda-forge pivy 0.6.9 built with SWIG <=4.3.x (runtime version 4).
Pin to >=4.0,<4.4 to ensure matching runtime versions.
2026-02-05 18:38:19 -06:00
forbes
84b69b935b fix(build): remove non-existent SelectModule.h include in FileOrigin.cpp
Some checks failed
Build and Test / build (push) Failing after 19m45s
Release Build / publish-release (push) Has been skipped
Release Build / build-linux (push) Failing after 31m20s
SelectModule is declared in FileDialog.h which was already included.
The separate #include "SelectModule.h" referenced a header that
doesn't exist, causing a fatal build error.
v0.1.2
2026-02-05 16:53:14 -06:00
a6e84552da feat(gui): add cross-origin detection in StdCmdSaveAs (#17)
Some checks failed
Build and Test / build (push) Failing after 12m50s
- Detect document's origin vs current (target) origin
- Route to appropriate workflow:
  - Same origin: standard SaveAs
  - Local → PLM: migration (handled by PLM origin)
  - PLM → Local: export (handled by local origin)
  - PLM → PLM: transfer (handled by target PLM origin)

This provides the infrastructure for Issue #17: Mixed origin workflows.
The actual migration/export dialogs will be implemented in the
respective origin adapters (SiloOrigin, LocalFileOrigin).
2026-02-05 14:54:36 -06:00
015df38328 feat(gui): add document-origin tracking and display in window title (#16)
Some checks failed
Build and Test / build (push) Has been cancelled
- Add originForDocument(), setDocumentOrigin(), clearDocumentOrigin()
  methods to OriginManager
- Add signalDocumentOriginChanged signal for UI updates
- Add document-to-origin tracking map in OriginManager
- Update MDIView::buildWindowTitle() to append origin suffix for
  non-local origins (e.g., 'Part001 [Silo]')

This implements Issue #16: Document origin tracking and display
2026-02-05 14:53:45 -06:00
db85277f26 feat(gui): add OriginManagerDialog for managing file origins (#15)
Some checks failed
Build and Test / build (push) Has been cancelled
- Create OriginManagerDialog with list of configured origins
- Show connection status for remote origins
- Allow setting default origin
- Add/Edit/Remove buttons (Add/Edit show placeholder for now)
- Wire up 'Manage Origins...' button in OriginSelectorWidget
- Prevent removal of built-in local origin

Part of Issue #15: Multi-instance Silo configuration UI
2026-02-05 14:51:30 -06:00
679aaec6d4 feat(gui): add unified origin commands for PLM operations (#14)
Some checks are pending
Build and Test / build (push) Has started running
- Create CommandOrigin.cpp with Origin_Commit, Origin_Pull, Origin_Push,
  Origin_Info, Origin_BOM commands
- Commands delegate to current origin's extended operations
- Commands auto-disable based on origin capabilities (supportsRevisions,
  supportsBOM, supportsPartNumbers)
- Add 'Origin Tools' toolbar with PLM operations
- Add origin commands to File menu
- Register commands via CreateOriginCommands() in Application startup

This implements Issue #14: Dynamic toolbar extension for Silo commands
2026-02-05 14:49:22 -06:00
deeb6376f7 feat(gui): add OriginSelectorWidget for file origin selection (#13)
Some checks failed
Build and Test / build (push) Has been cancelled
- Create OriginSelectorWidget class (QToolButton with dropdown menu)
- Add OriginSelectorAction to create widget in toolbars
- Add Std_Origin command registered in CommandStd.cpp
- Add widget to File toolbar (before New/Open/Save)
- Connect to OriginManager fastsignals for origin changes
- Add Catppuccin Mocha styling for the widget
- Widget shows current origin name/icon with connection status overlay

This implements Issue #13: Origin selector toolbar widget
2026-02-05 14:47:18 -06:00
103fc28bc6 ci: retrigger after pushing silo submodule
Some checks failed
Build and Test / build (push) Has been cancelled
2026-02-05 14:35:59 -06:00
79c85ed2e5 fix(gui): add interactive methods to FileOriginPython and fix Console API calls
Some checks failed
Build and Test / build (push) Failing after 2m13s
- Add openDocumentInteractive() and saveDocumentAsInteractive() to FileOriginPython
- Fix Console API: Warning -> warning, Error -> error in OriginManager.cpp
- These methods bridge Python origins to the new interactive document operations
2026-02-05 14:25:21 -06:00
38358e431d feat(gui): implement issues #10 and #12 - LocalFileOrigin and Std_* delegation
Issue #10: Local filesystem origin implementation
- Add openDocumentInteractive() method to FileOrigin interface for UI-based
  file opening (shows file dialog)
- Add saveDocumentAsInteractive() method for UI-based save as
- Implement LocalFileOrigin::openDocumentInteractive() with full file dialog
  support, filter list building, and module handler integration
- Implement LocalFileOrigin::saveDocumentAsInteractive() delegating to
  Gui::Document::saveAs()

Issue #12: Modify Std_* commands to delegate to current origin
- StdCmdNew::activated() now delegates to origin->newDocument() and sets
  up view orientation for the new document
- StdCmdOpen::activated() delegates to origin->openDocumentInteractive()
  with connection state checking for authenticated origins
- StdCmdSave::activated() uses document's owning origin (via findOwningOrigin)
  for save, falling back to saveDocumentAsInteractive if no filename
- StdCmdSaveAs::activated() delegates to origin->saveDocumentAsInteractive()
- Updated isActive() methods to check for active document

The Std_* commands now work seamlessly with both LocalFileOrigin and
SiloOrigin. When Local origin is selected, standard file dialogs appear.
When Silo origin is selected, Silo's search/creation dialogs appear.

Import and Export commands are left unchanged as they operate on document
content rather than document lifecycle.

Closes #10, Closes #12
2026-02-05 14:02:26 -06:00
5319387030 fix(ci): add --force to tag fetch, fix ccache keys, disable Windows/macOS builds
Some checks failed
Build and Test / build (push) Failing after 16m39s
Release Build / publish-release (push) Has been cancelled
Release Build / build-linux (push) Has been cancelled
- build.yml: Add --force flag to tag fetch to prevent 'would clobber
  existing tag' error when 'latest' tag already exists locally
- build.yml: Use github.run_id instead of github.sha for ccache keys
  to ensure unique keys per workflow run while still benefiting from
  restore-key prefix matching

- release.yml: Add --force flag to tag fetch commands
- release.yml: Use github.run_id for ccache keys (same reason)
- release.yml: Comment out build-macos and build-windows jobs since
  no native runners are available for these platforms
- release.yml: Update publish-release to only depend on build-linux
- release.yml: Update release notes to indicate macOS/Windows builds
  are not yet available

The ccache key strategy now works correctly with immutable caches:
- Save with unique key: ccache-{workflow}-{branch}-{run_id}
- Restore with prefix fallback: tries same branch first, then main

The macOS and Windows jobs require platform-specific tooling:
- macOS: dmgbuild, pyobjc-framework-Quartz for DMG creation
- Windows: NSIS, Visual Studio toolchain for installer creation

These cannot be easily cross-compiled from Linux. The jobs are
preserved as comments so they can be re-enabled when native runners
become available or when cross-compilation tooling is set up.
v0.1.1
2026-02-05 13:41:07 -06:00
405e04bd3e chore: update silo submodule with origin adapter
Some checks are pending
Build and Test / build (push) Has started running
Updates silo submodule to include:
- SiloOrigin adapter implementing FileOrigin interface (#11)
- UUID tracking via SiloItemId property
- Automatic origin registration on workbench init

Refs: #11
2026-02-05 13:29:54 -06:00
7535a48ec4 feat(gui): add origin abstraction layer for unified file operations
Implements Issue #9: Origin abstraction layer

This commit introduces a foundational abstraction for document origins,
enabling FreeCAD to work with different storage backends (local filesystem,
Silo PLM, future cloud services) through a unified interface.

## Core Components

### FileOrigin Abstract Base Class (FileOrigin.h/cpp)
- Defines interface for document origin handlers
- Identity methods: id(), name(), nickname(), icon(), type()
- Workflow characteristics: tracksExternally(), requiresAuthentication()
- Capability queries: supportsRevisions(), supportsBOM(), supportsPartNumbers()
- Connection state management with fastsignals notifications
- Document identity: documentIdentity() returns UUID, documentDisplayId() for display
- Property sync: syncProperties() for bidirectional database sync
- Core operations: newDocument(), openDocument(), saveDocument(), saveDocumentAs()
- Extended PLM operations: commitDocument(), pullDocument(), pushDocument(), etc.

### LocalFileOrigin Implementation
- Default origin for local filesystem documents
- ownsDocument(): Returns true if document has NO SiloItemId property
- Wraps existing FreeCAD file operations (App::GetApplication())

### OriginManager Singleton (OriginManager.h/cpp)
- Follows WorkbenchManager pattern (instance()/destruct())
- Manages registered FileOrigin instances
- Tracks current origin selection with persistence
- Provides document-to-origin resolution via findOwningOrigin()
- Emits signals: signalOriginRegistered, signalOriginUnregistered,
  signalCurrentOriginChanged
- Preferences stored at: User parameter:BaseApp/Preferences/General/Origin

### Python Bindings (FileOriginPython.h/cpp)
- Adapts Python objects to FileOrigin C++ interface
- Enables Silo addon to implement origins in Python
- Thread-safe with Base::PyGILStateLocker
- Static addOrigin()/removeOrigin() for registration

### Python API (ApplicationPy.cpp)
- FreeCADGui.addOrigin(obj) - Register Python origin
- FreeCADGui.removeOrigin(obj) - Unregister Python origin
- FreeCADGui.getOrigin(id) - Get origin info as dict
- FreeCADGui.listOrigins() - List all registered origin IDs
- FreeCADGui.activeOrigin() - Get current origin info
- FreeCADGui.setActiveOrigin(id) - Set active origin

## Design Decisions

1. **UUID Tracking**: Documents tracked by SiloItemId (immutable UUID),
   SiloPartNumber used for human-readable display only

2. **Ownership by Properties**: Origin ownership determined by document
   properties (SiloItemId), not file path location

3. **Local Storage Always**: All documents saved locally; origins change
   workflow and identity model, not storage location

4. **Property Syncing**: syncProperties() enables bidirectional sync of
   document metadata with database (Description, SourcingType, etc.)

## Files Added
- src/Gui/FileOrigin.h
- src/Gui/FileOrigin.cpp
- src/Gui/FileOriginPython.h
- src/Gui/FileOriginPython.cpp
- src/Gui/OriginManager.h
- src/Gui/OriginManager.cpp

## Files Modified
- src/Gui/CMakeLists.txt - Added new source files
- src/Gui/Application.cpp - Initialize/destruct OriginManager
- src/Gui/ApplicationPy.h - Added Python method declarations
- src/Gui/ApplicationPy.cpp - Added Python method implementations

Refs: #9
2026-02-05 13:17:23 -06:00
1c309a0ca8 feat(icons): complete Phase 3 icon migration (#6)
All checks were successful
Build and Test / build (push) Successful in 1h13m23s
This completes the Kindred Create icon set with 191 Catppuccin Mocha themed SVG icons.

New icon categories added:
- DrawStyle icons (7): Wireframe, Shaded, FlatLines, etc.
- View orientation icons (12): Front, Rear, Top, Bottom, etc.
- Tree view icons (15): Tree_*, tree-* for document tree
- Link & Feature icons (14): Link*, Feature, Group, etc.
- Button/navigation icons (11): button_*, edit_OK, edit_Cancel
- Cursor icons (4): pan, rotate, zoom, through
- Selection icons (8): edge, face, vertex, clear-selection
- DAG view icons (4): Pass, Fail, Pending, Visible
- Std_* view/toggle icons (15): ShowObjects, HideObjects, etc.
- Utility icons (25+): Document, folder, info, Warning, etc.

All icons follow the design standards:
- 32x32 viewBox with rx=4 rounded background
- Catppuccin Mocha color palette
- Category-based color coding:
  - Blue: File operations
  - Green: Edit/Creation operations
  - Yellow/Peach: View operations
  - Mauve/Lavender: System/Settings
  - Red: Destructive actions

Closes #6
2026-02-05 12:05:58 -06:00
2d7735b4c1 feat(icons): add Phase 2 workbench icons in Catppuccin Mocha
Some checks failed
Build and Test / build (push) Has been cancelled
Add 32 workbench-related icons with consistent color coding:

Workbench Selectors (8):
- PartDesignWorkbench (Blue #89b4fa)
- SketcherWorkbench (Yellow #f9e2af)
- AssemblyWorkbench (Green #a6e3a1)
- PartWorkbench (Blue #89b4fa)
- TechDrawWorkbench (Mauve #cba6f7)
- SpreadsheetWorkbench (Sky #89dceb)
- MeshWorkbench (Pink #f5c2e7)
- DraftWorkbench (Peach #fab387)

Part Design Tools (8):
- PartDesign_Body, PartDesign_NewSketch
- PartDesign_Pad, PartDesign_Pocket, PartDesign_Revolution
- PartDesign_Hole, PartDesign_Fillet, PartDesign_Chamfer

Sketcher Tools (5):
- Sketcher_CreateLine, Sketcher_CreateRectangle
- Sketcher_CreateCircle, Sketcher_CreateArc, Sketcher_CreatePoint

Sketcher Constraints (5):
- Constraint_PointOnPoint (Coincident)
- Constraint_Horizontal, Constraint_Vertical
- Constraint_Perpendicular, Constraint_Dimension

Assembly Tools (6):
- Assembly_CreateAssembly, Assembly_InsertLink
- Assembly_CreateJointFixed, Assembly_CreateJointRevolute
- Assembly_CreateJointSlider, Assembly_CreateJointDistance

Ref #5
2026-02-05 11:36:53 -06:00
69414c5dc5 refactor(icons): update color scheme for View and System icons
Some checks are pending
Build and Test / build (push) Has started running
Change color assignments for better semantic meaning:
- View operations: Yellow (#f9e2af) / Peach (#fab387)
- System/Settings: Mauve (#cba6f7) / Lavender (#b4befe)

Updated icons:
- View: zoom-in, zoom-out, zoom-fit-best, view-refresh, view-fullscreen,
        Std_ViewHome, Std_ViewScreenShot, Std_ToggleVisibility
- System: preferences-system, help-browser, application-exit, Std_Refresh

Also updated README.md color usage documentation.
2026-02-05 11:28:44 -06:00
c28d6f92cf feat(icons): add Phase 1 core toolbar icons in Catppuccin Mocha
Some checks failed
Build and Test / build (push) Has been cancelled
Complete the core toolbar icon set with 15 additional icons:

File Operations:
- document-save-as.svg - Save As with pencil indicator
- Std_SaveAll.svg - Save All with stacked disks
- Std_Import.svg - Import with arrow into document
- Std_Export.svg - Export with arrow out of document
- document-print.svg - Printer with paper

Edit Operations:
- edit-select-all.svg - Selection rectangle with corner handles

View Operations:
- zoom-fit-best.svg - Fit to view with corner arrows
- Std_ViewHome.svg - Home view with house icon
- view-fullscreen.svg - Fullscreen expand arrows
- Std_ViewScreenShot.svg - Camera for screenshots
- Std_ToggleVisibility.svg - Eye icon for visibility
- Std_Refresh.svg - Circular refresh arrow

Common Actions:
- help-browser.svg - Question mark in circle
- application-exit.svg - Door with exit arrow
- Std_DuplicateSelection.svg - Duplicate objects

All icons follow the Catppuccin Mocha design system with:
- 32x32 viewBox
- Rounded rectangle background (surface0 #313244)
- Consistent stroke widths and color usage

Ref #4
2026-02-05 11:23:47 -06:00
224feda4ad feat(icons): add Catppuccin Mocha icon override infrastructure
Some checks failed
Build and Test / build (push) Has been cancelled
Set up the foundation for custom Kindred Create icons:

- Add kindred-icons/ directory with Catppuccin Mocha themed SVG icons
- Modify BitmapFactory to prioritize kindred-icons/ in search path
- Add CMake install rules to package icons with application
- Include documentation (README.md) with design guidelines
- Add 12 initial icons as proof of concept:
  - File: document-new, document-open, document-save
  - Edit: edit-undo, edit-redo, edit-copy, edit-cut, edit-paste, delete
  - View: zoom-in, zoom-out, view-refresh
  - System: preferences-system

All icons follow the standard template:
- 32x32 viewBox
- Rounded rectangle background (rx=4, surface0 #313244)
- Catppuccin Mocha color palette

Closes #3
2026-02-05 11:17:27 -06:00
67e5598b2e fix(build): add missing Qt and Gui includes to ThemeSelectorWidget
Some checks failed
Build and Test / build (push) Successful in 1h9m41s
Release Build / build-linux (push) Failing after 18m43s
Release Build / build-macos (arm64, macos-14) (push) Has been cancelled
Release Build / build-macos (x86_64, macos-13) (push) Has been cancelled
Release Build / build-windows (push) Has been cancelled
Release Build / publish-release (push) Has been cancelled
Add QApplication, QEvent, and Gui/Application.h includes that were
missing, causing build failures with undeclared identifiers for qApp,
QEvent::LanguageChange, and Gui::Application::Instance.
2026-02-05 10:06:00 -06:00
7431746ef0 fix(ci): support 'latest' tag for release builds
Some checks failed
Build and Test / build (push) Failing after 43m15s
Release Build / build-linux (push) Failing after 2m18s
Release Build / build-macos (arm64, macos-14) (push) Has been cancelled
Release Build / build-macos (x86_64, macos-13) (push) Has been cancelled
Release Build / build-windows (push) Has been cancelled
Release Build / publish-release (push) Has been cancelled
2026-02-05 08:07:15 -06:00
044983330c Merge pull request 'fix(ci): use shallow tag-only fetch to avoid 504 timeout' (#2) from fix/ci-tag-fetch-504 into main
Some checks failed
Build and Test / build (push) Failing after 44m23s
2026-02-04 19:30:50 +00:00
d60db282ea fix(ci): use shallow tag-only fetch to avoid 504 timeout
Some checks failed
Build and Test / build (pull_request) Failing after 41m54s
The previous `git fetch --tags` triggers full history negotiation
against the upstream FreeCAD-derived repo (~45k commits), causing
HTTP 504 gateway timeouts on the Gitea instance.

Replace with a depth=1 refspec fetch that pulls only tag refs
without negotiating reachable objects behind them. This is
sufficient for `git describe --tags --always` to resolve a
version string.
2026-02-04 13:30:34 -06:00
2a5a645ace Merge pull request 'fix(ui): clean up theme selector and migration for single-theme setup' (#1) from fix/theme-selector-migration into main
Some checks are pending
Build and Test / build (push) Has started running
2026-02-04 19:27:31 +00:00
434ae797a4 fix(ui): clean up theme selector and migration for single-theme setup
Some checks failed
Build and Test / build (pull_request) Failing after 2m30s
- Remove dead code in migrateOldTheme() that set Theme parameter for
  KindredCreate.yaml, which no longer exists in the Stylesheets build
- Remove orphaned Classic.yaml and KindredCreate.yaml parameter files
  from Stylesheets CMakeLists and from disk
- Remove unused includes in ThemeSelectorWidget.cpp (QApplication,
  QEvent, Gui/Application.h)
2026-02-04 13:26:55 -06:00
8042b7dcc8 fix(ci): use shallow clone with tag fetch to avoid 45k commit download
Some checks failed
Build and Test / build (push) Successful in 1h11m46s
Release Build / build-linux (push) Failing after 2m32s
Release Build / build-macos (arm64, macos-14) (push) Has been cancelled
Release Build / build-macos (x86_64, macos-13) (push) Has been cancelled
Release Build / build-windows (push) Has been cancelled
Release Build / publish-release (push) Has been cancelled
fetch-depth: 0 downloads the entire FreeCAD history (45k+ commits),
causing 13+ minute checkout times. Switch to fetch-depth: 1 with a
separate lightweight tag fetch for git describe.
v0.1.0
2026-02-03 12:13:01 -06:00
7ce21aceb6 fix(ci): remove container directive for dockerized runner compatibility
Some checks failed
Build and Test / build (push) Failing after 17m20s
Release Build / build-linux (push) Has been cancelled
Release Build / build-macos (arm64, macos-14) (push) Has been cancelled
Release Build / build-macos (x86_64, macos-13) (push) Has been cancelled
Release Build / build-windows (push) Has been cancelled
Release Build / publish-release (push) Has been cancelled
Gitea act_runner in Docker mode maps the runs-on label to a container
image via its config. The container: block conflicts with this by
attempting to create a nested container. Remove it so the runner's
own docker://ubuntu:24.04 mapping is used directly.
2026-02-03 10:59:26 -06:00