engine: timeline panel leftover commands migrate to the facade (round 3)

- new primitives: clip_toggle_enabled (per-block flip), clip_set_linked,
  sequence_add_default_transition (config-driven, sequence timebase),
  node_set_label_many, node_set_color_label, plus observation getters
- toggle-links, default transitions, enable toggles, color labels, and
  block renaming now go through the facade; the stray empty undo entry
  from block renaming is gone along the way
- nest/multicam/waveform-sync stay as documented composites: they mix
  redo_now intermediate state, graph surgery, and app-side computation
  that a single primitive cannot express faithfully
- the timeline panel's command execution paths are now fully migrated
This commit is contained in:
2026-07-20 16:17:37 +08:00
parent 37aa859cd0
commit 245f204c81
7 changed files with 427 additions and 24 deletions
+27
View File
@@ -151,6 +151,33 @@ OAKENGINE_API int oakengine_node_set_label(OakEngineNode *self,
OAKENGINE_API int oakengine_node_set_label_ex(OakEngineNode *self,
const char *label, int undoable);
/**
* @brief Set one label on several nodes at once (undoable, ONE command;
* olive::NodeRenameCommand with all of them, like the application's
* Core::label_nodes() after its rename dialog).
*
* `nodes` holds borrowed handles (the handle is the engine node pointer
* in this family, so the application can pass its own nodes directly).
* Every entry must be non-NULL. `label` may be NULL for an empty label.
*/
OAKENGINE_API int oakengine_node_set_label_many(OakEngineNode **nodes,
int count,
const char *label);
/**
* @brief Set the color-label index of several nodes at once (undoable,
* ONE command; olive::NodeOverrideColorCommand per node, like the
* timeline panel's color-label menu). `nodes` holds borrowed handles.
*/
OAKENGINE_API int oakengine_node_set_color_label(OakEngineNode **nodes,
int count, int color_index);
/**
* @brief The node's color-label index (Node::get_override_color(); -1 =
* none). -1 on a NULL handle.
*/
OAKENGINE_API int oakengine_node_get_color_label(const OakEngineNode *self);
/* ---- Input introspection ---------------------------------------------------- */
/**