Skip to content

Commit c69a331

Browse files
committed
Use Carla's patchcanvas code
Signed-off-by: falkTX <falktx@falktx.com>
1 parent 12195e8 commit c69a331

20 files changed

+4322
-2854
lines changed

src/catia.py

Lines changed: 107 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,17 @@
7676
iGroupName = 1
7777
iGroupType = 2
7878

79-
iPortId = 0
80-
iPortName = 1
81-
iPortNameR = 2
82-
iPortGroupName = 3
83-
84-
iConnId = 0
85-
iConnOutput = 1
86-
iConnInput = 2
79+
iPortId = 0
80+
iPortName = 1
81+
iPortNameR = 2
82+
iPortGroupId = 3
83+
iPortGroupName = 4
84+
85+
iConnId = 0
86+
iConnOutGroup = 1
87+
iConnOutPort = 2
88+
iConnInGroup = 3
89+
iConnInPort = 4
8790

8891
URI_CANVAS_ICON = "http://kxstudio.sf.net/ns/canvas/icon"
8992

@@ -168,11 +171,13 @@ def __init__(self, parent=None):
168171
self.ui.graphicsView.setRenderHint(QPainter.HighQualityAntialiasing, self.fSavedSettings["Canvas/HighQualityAntialiasing"])
169172

170173
pOptions = patchcanvas.options_t()
171-
pOptions.theme_name = self.fSavedSettings["Canvas/Theme"]
172-
pOptions.auto_hide_groups = self.fSavedSettings["Canvas/AutoHideGroups"]
173-
pOptions.use_bezier_lines = self.fSavedSettings["Canvas/UseBezierLines"]
174-
pOptions.antialiasing = self.fSavedSettings["Canvas/Antialiasing"]
175-
pOptions.eyecandy = self.fSavedSettings["Canvas/EyeCandy"]
174+
pOptions.theme_name = self.fSavedSettings["Canvas/Theme"]
175+
pOptions.auto_hide_groups = self.fSavedSettings["Canvas/AutoHideGroups"]
176+
pOptions.use_bezier_lines = self.fSavedSettings["Canvas/UseBezierLines"]
177+
pOptions.antialiasing = self.fSavedSettings["Canvas/Antialiasing"]
178+
pOptions.eyecandy = self.fSavedSettings["Canvas/EyeCandy"]
179+
pOptions.auto_select_items = False # TODO
180+
pOptions.inline_displays = False
176181

177182
pFeatures = patchcanvas.features_t()
178183
pFeatures.group_info = False
@@ -304,6 +309,11 @@ def canvasCallback(self, action, value1, value2, valueStr):
304309
groupId = value1
305310
patchcanvas.joinGroup(groupId)
306311

312+
elif action == patchcanvas.ACTION_GROUP_POSITION:
313+
groupId = value1
314+
x1, y1, x2, y2 = tuple(int(i) for i in valueStr.split(":"))
315+
#host.patchbay_set_group_pos(gCarla.gui.fExternalPatchbay, groupId, x1, y1, x2, y2)
316+
307317
elif action == patchcanvas.ACTION_PORT_INFO:
308318
portId = value1
309319

@@ -444,56 +454,55 @@ def canvasCallback(self, action, value1, value2, valueStr):
444454
patchcanvas.renamePort(portId, portShortName)
445455

446456
elif action == patchcanvas.ACTION_PORTS_CONNECT:
447-
portIdA = value1
448-
portIdB = value2
449-
portRealNameA = ""
450-
portRealNameB = ""
457+
gOut, pOut, gIn, pIn = tuple(int(i) for i in valueStr.split(":"))
458+
459+
portRealNameOut = ""
460+
portRealNameIn = ""
451461

452462
for port in self.fPortList:
453-
if port[iPortId] == portIdA:
454-
portRealNameA = port[iPortNameR]
455-
if port[iPortId] == portIdB:
456-
portRealNameB = port[iPortNameR]
463+
if port[iPortGroupId] == gOut and port[iPortId] == pOut:
464+
portRealNameOut = port[iPortNameR]
465+
elif port[iPortGroupId] == gIn and port[iPortId] == pIn:
466+
portRealNameIn = port[iPortNameR]
457467

458-
if portRealNameA.startswith("[ALSA-"):
459-
portIdAlsaA = portRealNameA.split(" ", 2)[1]
460-
portIdAlsaB = portRealNameB.split(" ", 2)[1]
468+
if portRealNameOut.startswith("[ALSA-"):
469+
portRealNameOut = portRealNameOut.split(" ", 2)[1]
470+
portRealNameIn = portRealNameIn.split(" ", 2)[1]
461471

462-
if os.system("aconnect %s %s" % (portIdAlsaA, portIdAlsaB)) == 0:
463-
self.canvas_connectPorts(portIdA, portIdB)
472+
if os.system("aconnect %s %s" % (portRealNameOut, portRealNameIn)) == 0:
473+
self.canvas_connectPorts(gOut, pOut, gIn, pIn)
464474

465-
elif portRealNameA and portRealNameB:
466-
jacklib.connect(gJack.client, portRealNameA, portRealNameB)
475+
elif portRealNameOut and portRealNameIn:
476+
jacklib.connect(gJack.client, portRealNameOut, portRealNameIn)
467477

468478
elif action == patchcanvas.ACTION_PORTS_DISCONNECT:
469479
connectionId = value1
470480

471481
for connection in self.fConnectionList:
472482
if connection[iConnId] == connectionId:
473-
portIdA = connection[iConnOutput]
474-
portIdB = connection[iConnInput]
483+
gOut, pOut, gIn, pIn = connection[1:]
475484
break
476485
else:
477486
return
478487

479-
portRealNameA = ""
480-
portRealNameB = ""
488+
portRealNameOut = ""
489+
portRealNameIn = ""
481490

482491
for port in self.fPortList:
483-
if port[iPortId] == portIdA:
484-
portRealNameA = port[iPortNameR]
485-
if port[iPortId] == portIdB:
486-
portRealNameB = port[iPortNameR]
492+
if port[iPortGroupId] == gOut and port[iPortId] == pOut:
493+
portRealNameOut = port[iPortNameR]
494+
elif port[iPortGroupId] == gIn and port[iPortId] == pIn:
495+
portRealNameIn = port[iPortNameR]
487496

488-
if portRealNameA.startswith("[ALSA-"):
489-
portIdAlsaA = portRealNameA.split(" ", 2)[1]
490-
portIdAlsaB = portRealNameB.split(" ", 2)[1]
497+
if portRealNameOut.startswith("[ALSA-"):
498+
portRealNameOut = portRealNameOut.split(" ", 2)[1]
499+
portRealNameIn = portRealNameIn.split(" ", 2)[1]
491500

492-
if os.system("aconnect -d %s %s" % (portIdAlsaA, portIdAlsaB)) == 0:
493-
self.canvas_disconnectPorts(portIdA, portIdB)
501+
if os.system("aconnect -d %s %s" % (portRealNameOut, portRealNameIn)) == 0:
502+
self.canvas_disconnectPorts(gOut, pOut, gIn, pIn)
494503

495-
elif portRealNameA and portRealNameB:
496-
jacklib.disconnect(gJack.client, portRealNameA, portRealNameB)
504+
elif portRealNameOut and portRealNameIn:
505+
jacklib.disconnect(gJack.client, portRealNameOut, portRealNameIn)
497506

498507
def initPorts(self):
499508
self.fGroupList = []
@@ -792,10 +801,11 @@ def canvas_addAlsaPort(self, groupId, groupName, portName, portNameR, isPortInpu
792801

793802
patchcanvas.addPort(groupId, portId, portName, portMode, portType)
794803

795-
portObj = [None, None, None, None]
796-
portObj[iPortId] = portId
797-
portObj[iPortName] = portName
798-
portObj[iPortNameR] = "[ALSA-%s] %s" % ("Input" if isPortInput else "Output", portNameR)
804+
portObj = [None, None, None, None, None]
805+
portObj[iPortId] = portId
806+
portObj[iPortName] = portName
807+
portObj[iPortNameR] = "[ALSA-%s] %s" % ("Input" if isPortInput else "Output", portNameR)
808+
portObj[iPortGroupId] = groupId
799809
portObj[iPortGroupName] = groupName
800810

801811
self.fPortList.append(portObj)
@@ -830,7 +840,7 @@ def canvas_addJackPort(self, portPtr, portName):
830840
portMode = patchcanvas.PORT_MODE_NULL
831841

832842
if groupName == gA2JClientName:
833-
portType = patchcanvas.PORT_TYPE_MIDI_A2J
843+
portType = patchcanvas.PORT_TYPE_MIDI_JACK
834844
groupName = portName.replace("%s:" % gA2JClientName, "", 1).split(" [", 1)[0]
835845
portShortName = portName.split("): ", 1)[1]
836846

@@ -855,10 +865,11 @@ def canvas_addJackPort(self, portPtr, portName):
855865

856866
patchcanvas.addPort(groupId, portId, portShortName, portMode, portType)
857867

858-
portObj = [None, None, None, None]
859-
portObj[iPortId] = portId
860-
portObj[iPortName] = portName
861-
portObj[iPortNameR] = portNameR
868+
portObj = [None, None, None, None, None]
869+
portObj[iPortId] = portId
870+
portObj[iPortName] = portName
871+
portObj[iPortNameR] = portNameR
872+
portObj[iPortGroupId] = groupId
862873
portObj[iPortGroupName] = groupName
863874

864875
self.fPortList.append(portObj)
@@ -892,61 +903,75 @@ def canvas_removeJackPort(self, portId):
892903
def canvas_renamePort(self, portId, portShortName):
893904
patchcanvas.renamePort(portId, portShortName)
894905

895-
def canvas_connectPorts(self, portOutId, portInId):
906+
def canvas_connectPorts(self, outGroupId, outPortId, inGroupId, inPortId):
896907
connectionId = self.fLastConnectionId
897-
patchcanvas.connectPorts(connectionId, portOutId, portInId)
908+
patchcanvas.connectPorts(connectionId, outGroupId, outPortId, inGroupId, inPortId)
898909

899-
connObj = [None, None, None]
900-
connObj[iConnId] = connectionId
901-
connObj[iConnOutput] = portOutId
902-
connObj[iConnInput] = portInId
910+
connObj = [None, None, None, None, None]
911+
connObj[iConnId] = connectionId
912+
connObj[iConnOutGroup] = outGroupId
913+
connObj[iConnOutPort] = outPortId
914+
connObj[iConnInGroup] = inGroupId
915+
connObj[iConnInPort] = inPortId
903916

904917
self.fConnectionList.append(connObj)
905918
self.fLastConnectionId += 1
906919

907920
return connectionId
908921

909922
def canvas_connectPortsByName(self, portOutName, portInName):
910-
portOutId = -1
911-
portInId = -1
923+
outGroupId = outPortId = inGroupId = inPortId = -1
912924

913925
for port in self.fPortList:
914926
if port[iPortNameR] == portOutName:
915-
portOutId = port[iPortId]
927+
outPortId = port[iPortId]
928+
outGroupId = port[iPortGroupId]
916929
elif port[iPortNameR] == portInName:
917-
portInId = port[iPortId]
930+
inPortId = port[iPortId]
931+
inGroupId = port[iPortGroupId]
918932

919-
if portOutId >= 0 and portInId >= 0:
933+
if outPortId >= 0 and inPortId >= 0:
920934
break
921935

922936
else:
923937
print("Catia - connect jack ports failed")
924938
return -1
925939

926-
return self.canvas_connectPorts(portOutId, portInId)
940+
return self.canvas_connectPorts(outGroupId, outPortId, inGroupId, inPortId)
927941

928-
def canvas_disconnectPorts(self, portOutId, portInId):
942+
def canvas_disconnectPorts(self, outGroupId, outPortId, inGroupId, inPortId):
929943
for connection in self.fConnectionList:
930-
if connection[iConnOutput] == portOutId and connection[iConnInput] == portInId:
931-
patchcanvas.disconnectPorts(connection[iConnId])
932-
self.fConnectionList.remove(connection)
933-
break
944+
if connection[iConnOutGroup] != outGroupId:
945+
continue
946+
if connection[iConnOutPort] != outPortId:
947+
continue
948+
if connection[iConnInGroup] != inGroupId:
949+
continue
950+
if connection[iConnInPort] != inPortId:
951+
continue
952+
patchcanvas.disconnectPorts(connection[iConnId])
953+
self.fConnectionList.remove(connection)
954+
break
934955

935956
def canvas_disconnectPortsByName(self, portOutName, portInName):
936-
portOutId = -1
937-
portInId = -1
957+
outGroupId = outPortId = inGroupId = inPortId = -1
938958

939959
for port in self.fPortList:
940960
if port[iPortNameR] == portOutName:
941-
portOutId = port[iPortId]
961+
outPortId = port[iPortId]
962+
outGroupId = port[iPortGroupId]
942963
elif port[iPortNameR] == portInName:
943-
portInId = port[iPortId]
964+
inPortId = port[iPortId]
965+
inGroupId = port[iPortGroupId]
944966

945-
if portOutId == -1 or portInId == -1:
967+
if outPortId >= 0 and inPortId >= 0:
968+
break
969+
970+
else:
946971
print("Catia - disconnect ports failed")
947972
return
948973

949-
self.canvas_disconnectPorts(portOutId, portInId)
974+
self.canvas_disconnectPorts(outGroupId, outPortId, inGroupId, inPortId)
950975

951976
def jackStarted(self):
952977
if not gJack.client:
@@ -1248,11 +1273,13 @@ def slot_configureCatia(self):
12481273
patchcanvas.clear()
12491274

12501275
pOptions = patchcanvas.options_t()
1251-
pOptions.theme_name = self.fSavedSettings["Canvas/Theme"]
1252-
pOptions.auto_hide_groups = self.fSavedSettings["Canvas/AutoHideGroups"]
1253-
pOptions.use_bezier_lines = self.fSavedSettings["Canvas/UseBezierLines"]
1254-
pOptions.antialiasing = self.fSavedSettings["Canvas/Antialiasing"]
1255-
pOptions.eyecandy = self.fSavedSettings["Canvas/EyeCandy"]
1276+
pOptions.theme_name = self.fSavedSettings["Canvas/Theme"]
1277+
pOptions.auto_hide_groups = self.fSavedSettings["Canvas/AutoHideGroups"]
1278+
pOptions.use_bezier_lines = self.fSavedSettings["Canvas/UseBezierLines"]
1279+
pOptions.antialiasing = self.fSavedSettings["Canvas/Antialiasing"]
1280+
pOptions.eyecandy = self.fSavedSettings["Canvas/EyeCandy"]
1281+
pOptions.auto_select_items = False # TODO
1282+
pOptions.inline_displays = False
12561283

12571284
pFeatures = patchcanvas.features_t()
12581285
pFeatures.group_info = False

0 commit comments

Comments
 (0)