51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
# dblclick.py
|
|
# SSG_BLOCKEDIT - Dispatcher fuer Rechtsklick-Bearbeitung von SSG-Bloecken
|
|
# Prueft den selektierten Block und oeffnet den passenden Dialog.
|
|
# ============================================
|
|
|
|
import PyRx as Rx
|
|
import PyDb as Db
|
|
import PyEd as Ed
|
|
|
|
from elemente.kreisel import kreisel_edit_entity
|
|
from elemente.eckrad import eckrad_edit_entity
|
|
|
|
|
|
@Rx.command("SSG_BLOCKEDIT")
|
|
def ssg_blockedit():
|
|
"""Dispatcher: prueft selektierten Block und oeffnet passenden Dialog.
|
|
|
|
Wird aus dem Rechtsklick-Kontextmenue aufgerufen.
|
|
Erkennt KREISEL_* und ECKRAD_* Bloecke und oeffnet den jeweiligen
|
|
wxPython-Bearbeitungsdialog. Bei anderen Bloecken wird BEDIT gestartet.
|
|
"""
|
|
ed = Ed.Editor()
|
|
db = Db.HostApplicationServices().workingDatabase()
|
|
|
|
# Implied Selection nutzen (bereits selektiertes Objekt)
|
|
res = ed.selectImplied()
|
|
if res[0] != Ed.PromptStatus.eOk:
|
|
return
|
|
|
|
ss = res[1]
|
|
if ss.length() == 0:
|
|
return
|
|
|
|
ent_id = ss.getObjectIds()[0]
|
|
ent = Db.Entity(ent_id, Db.OpenMode.kForRead)
|
|
|
|
if not ent.isKindOf(Db.BlockReference.desc()):
|
|
return
|
|
|
|
bref = Db.BlockReference(ent_id, Db.OpenMode.kForRead)
|
|
btr = Db.BlockTableRecord(bref.blockTableRecord(), Db.OpenMode.kForRead)
|
|
bname = btr.getName().upper()
|
|
|
|
if bname.startswith("KREISEL_"):
|
|
kreisel_edit_entity(db, ent_id)
|
|
elif bname.startswith("ECKRAD_"):
|
|
eckrad_edit_entity(db, ent_id)
|
|
else:
|
|
# Anderer Block -> normaler Block-Editor
|
|
ed.runCommand("_.BEDIT\n")
|