Files
uLib/.agents/skills/signal_bridge.md

1.4 KiB

Skill: Multi-System Signaling (uLib ↔ Qt)

This skill manages the coexistence of uLib::Object signals and Qt's Q_OBJECT signaling system.

Context

  • uLib Signals: Used for domain logic and data changes (uLib::Object::connect).
  • Qt Signals: Used for UI events, widgets, and application-level control flow (QObject::connect).

Patterns

1. Bridging Logic

When a domain change needs to trigger a UI update, use a wrapper or a direct connection if the widget has access to the uLib::Object.

// In a Qt Widget
uLib::Object::connect(domainObj, &Object::Updated, [this]() {
    this->update(); // Trigger Qt repaint
});

2. Selection Flow

Selection usually starts in the VTK Viewport (Qt) and flows to the domain context.

  1. QViewport emits prop3dSelected(Prop3D*) (Qt signal).
  2. MainPanel catches it and calls contextPanel->selectObject(p->GetContent()).
  3. ContextPanel updates the tree view and property editors.

3. Connection Hygiene

  • Use uLib::Object::connect for everything involving uLib::Property changes.
  • Use Qt connect for button clicks, menu actions, and window events.
  • Be careful with lambda captures; ensure the captured object is still alive or use weak pointers if necessary.

Checklist

  • Is the correct signaling system being used for the task?
  • Are capture groups in lambdas safe?
  • Does selection flow correctly between the 3D view and the tree view?