feat(mma): Complete Visual DAG implementation, fix link creation/deletion, and sync docs
This commit is contained in:
45
src/gui_2.py
45
src/gui_2.py
@@ -1682,19 +1682,46 @@ class App:
|
||||
tid = str(t.get('id', '??'))
|
||||
for dep in t.get('depends_on', []):
|
||||
ed.link(abs(hash(dep + "_" + tid)), abs(hash(dep + "_out")), abs(hash(tid + "_in")))
|
||||
|
||||
# Handle link creation
|
||||
if ed.begin_create():
|
||||
start_pin = ed.PinId()
|
||||
end_pin = ed.PinId()
|
||||
if ed.query_new_link(start_pin, end_pin):
|
||||
if ed.accept_new_item():
|
||||
s_id = start_pin.id()
|
||||
e_id = end_pin.id()
|
||||
source_tid = None
|
||||
target_tid = None
|
||||
for t in self.active_tickets:
|
||||
tid = str(t.get('id', ''))
|
||||
if abs(hash(tid + "_out")) == s_id: source_tid = tid
|
||||
if abs(hash(tid + "_out")) == e_id: source_tid = tid
|
||||
if abs(hash(tid + "_in")) == s_id: target_tid = tid
|
||||
if abs(hash(tid + "_in")) == e_id: target_tid = tid
|
||||
if source_tid and target_tid and source_tid != target_tid:
|
||||
for t in self.active_tickets:
|
||||
if str(t.get('id', '')) == target_tid:
|
||||
if source_tid not in t.get('depends_on', []):
|
||||
t.setdefault('depends_on', []).append(source_tid)
|
||||
self._push_mma_state_update()
|
||||
break
|
||||
ed.end_create()
|
||||
|
||||
# Handle link deletion
|
||||
if ed.begin_delete():
|
||||
deleted = ed.get_deleted_link()
|
||||
if deleted:
|
||||
link_id = deleted[0]
|
||||
for t in self.active_tickets:
|
||||
tid = str(t.get('id', ''))
|
||||
for d in t.get('depends_on', []):
|
||||
if abs(hash(d + "_" + tid)) == link_id:
|
||||
t['depends_on'] = [dep for dep in t['depends_on'] if dep != d]
|
||||
link_id = ed.LinkId()
|
||||
while ed.query_deleted_link(link_id):
|
||||
if ed.accept_deleted_item():
|
||||
lid_val = link_id.id()
|
||||
for t in self.active_tickets:
|
||||
tid = str(t.get('id', ''))
|
||||
deps = t.get('depends_on', [])
|
||||
if any(abs(hash(d + "_" + tid)) == lid_val for d in deps):
|
||||
t['depends_on'] = [dep for dep in deps if abs(hash(dep + "_" + tid)) != lid_val]
|
||||
self._push_mma_state_update()
|
||||
break
|
||||
ed.end_delete()
|
||||
ed.end_delete()
|
||||
# Validate DAG after any changes
|
||||
try:
|
||||
from src.dag_engine import TrackDAG
|
||||
|
||||
Reference in New Issue
Block a user