Files
create/mods/sdk/kindred_sdk/__init__.py
forbes 74b0073327
Some checks failed
Build and Test / build (pull_request) Has been cancelled
feat(editing-context): hierarchical context system with stack, guards, and breadcrumb injection (#385, #386, #387)
Replaces the flat context model with a tree-structured hierarchy:

- ContextDefinition gains parentId field for declaring parent-child
  relationships between contexts
- Resolver builds a context stack by walking parentId links from
  leaf to root, verifying each ancestor matches current state
- Breadcrumb is now auto-built from the stack — each level
  contributes its expanded label and color, replacing all hardcoded
  special cases
- EditingContext gains stack field (QStringList, root to leaf)

Transition guards (#386):
- addTransitionGuard() / removeTransitionGuard() on resolver
- Guards run synchronously before applyContext(); first rejection
  cancels the transition and emits contextTransitionBlocked signal
- Full SDK/pybind11/Python bindings

Breadcrumb injection (#387):
- injectBreadcrumb() / removeBreadcrumbInjection() on resolver
- Addons can append segments to any context's breadcrumb display
- Active only when the target context is in the current stack
- Full SDK/pybind11/Python bindings

Built-in parent assignments:
- partdesign.body → partdesign.workbench
- partdesign.feature → partdesign.body
- partdesign.in_assembly → assembly.edit
- sketcher.edit → partdesign.body
- assembly.idle → assembly.workbench
- assembly.edit → assembly.idle
- Workbench-level and root contexts have no parent

SDK surface:
- Types.h: parentId on ContextDef, stack on ContextSnapshot
- SDKRegistry: guard/injection delegation, snapshotFromGui helper
- kcsdk_py: parent_id param, context_stack(), guard/injection bindings
- kindred_sdk: context_stack(), add/remove_transition_guard(),
  inject/remove_breadcrumb_injection(), parent_id on register_context()

Closes #385, closes #386, closes #387
2026-03-04 14:23:45 -06:00

86 lines
2.1 KiB
Python

# kindred-addon-sdk — stable API for Kindred Create addon integration
from kindred_sdk.command import register_command
from kindred_sdk.compat import create_version, freecad_version
from kindred_sdk.context import (
add_transition_guard,
available_contexts,
context_stack,
current_context,
inject_breadcrumb,
inject_commands,
refresh_context,
register_context,
register_overlay,
remove_breadcrumb_injection,
remove_transition_guard,
unregister_context,
unregister_overlay,
)
from kindred_sdk.dock import register_dock_panel
from kindred_sdk.events import emit, off, on
from kindred_sdk.lifecycle import context_history, on_context_enter, on_context_exit
from kindred_sdk.menu import register_menu
from kindred_sdk.origin import (
active_origin,
get_origin,
list_origins,
register_origin,
set_active_origin,
unregister_origin,
)
from kindred_sdk.registry import (
addon_diagnostics,
addon_resource,
addon_version,
is_addon_loaded,
loaded_addons,
)
from kindred_sdk.statusbar import register_status_widget
from kindred_sdk.theme import get_theme_tokens, load_palette
from kindred_sdk.toolbar import register_toolbar
from kindred_sdk.version import SDK_VERSION
__all__ = [
"SDK_VERSION",
"active_origin",
"add_transition_guard",
"addon_diagnostics",
"addon_resource",
"addon_version",
"available_contexts",
"context_history",
"context_stack",
"create_version",
"current_context",
"emit",
"freecad_version",
"get_origin",
"get_theme_tokens",
"inject_breadcrumb",
"inject_commands",
"is_addon_loaded",
"list_origins",
"load_palette",
"loaded_addons",
"off",
"on",
"on_context_enter",
"on_context_exit",
"refresh_context",
"register_command",
"register_context",
"register_dock_panel",
"register_menu",
"register_origin",
"register_overlay",
"register_status_widget",
"register_toolbar",
"remove_breadcrumb_injection",
"remove_transition_guard",
"set_active_origin",
"unregister_context",
"unregister_origin",
"unregister_overlay",
]