7676iGroupName = 1
7777iGroupType = 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
8891URI_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