|
88 | 88 | iConnInGroup = 3 |
89 | 89 | iConnInPort = 4 |
90 | 90 |
|
91 | | -URI_CANVAS_ICON = "http://kxstudio.sf.net/ns/canvas/icon" |
| 91 | +URI_MAIN_CLIENT_NAME = "https://kx.studio/ns/carla/main-client-name" |
| 92 | +URI_POSITION = "https://kx.studio/ns/carla/position" |
| 93 | +URI_PLUGIN_ICON = "https://kx.studio/ns/carla/plugin-icon" |
| 94 | +URI_PLUGIN_ID = "https://kx.studio/ns/carla/plugin-id" |
| 95 | + |
| 96 | +URI_TYPE_INTEGER = "http://www.w3.org/2001/XMLSchema#integer" |
| 97 | +URI_TYPE_STRING = "text/plain" |
92 | 98 |
|
93 | 99 | # ------------------------------------------------------------------------------------------------------------ |
94 | 100 | # Catia Main Window |
@@ -283,6 +289,7 @@ def __init__(self, parent=None): |
283 | 289 | self.PortRegistrationCallback.connect(self.slot_PortRegistrationCallback) |
284 | 290 | self.PortConnectCallback.connect(self.slot_PortConnectCallback) |
285 | 291 | self.PortRenameCallback.connect(self.slot_PortRenameCallback) |
| 292 | + self.PropertyChangeCallback.connect(self.slot_PropertyChangeCallback) |
286 | 293 | self.ShutdownCallback.connect(self.slot_ShutdownCallback) |
287 | 294 |
|
288 | 295 | # ------------------------------------------------------------- |
@@ -550,6 +557,7 @@ def initJackCallbacks(self): |
550 | 557 | jacklib.set_xrun_callback(gJack.client, self.JackXRunCallback, None) |
551 | 558 | jacklib.set_port_registration_callback(gJack.client, self.JackPortRegistrationCallback, None) |
552 | 559 | jacklib.set_port_connect_callback(gJack.client, self.JackPortConnectCallback, None) |
| 560 | + jacklib.set_property_change_callback(gJack.client, self.JackPropertyChangeCallback, None) |
553 | 561 | jacklib.on_shutdown(gJack.client, self.JackShutdownCallback, None) |
554 | 562 |
|
555 | 563 | jacklib.set_client_rename_callback(gJack.client, self.JackClientRenameCallback, None) |
@@ -748,30 +756,46 @@ def canvas_addAlsaGroup(self, alsaGroupId, groupName, hwSplit): |
748 | 756 | return groupId |
749 | 757 |
|
750 | 758 | def canvas_addJackGroup(self, groupName): |
751 | | - ret, data, dataSize = jacklib.custom_get_data(gJack.client, groupName, URI_CANVAS_ICON) |
| 759 | + props = jacklib.get_client_properties(gJack.client, groupName) |
752 | 760 |
|
753 | 761 | groupId = self.fLastGroupId |
754 | 762 | groupSplit = patchcanvas.SPLIT_UNDEF |
755 | 763 | groupIcon = patchcanvas.ICON_APPLICATION |
756 | | - |
757 | | - if ret == 0: |
758 | | - iconName = voidptr2str(data) |
759 | | - jacklib.free(data) |
760 | | - |
761 | | - if iconName == "hardware": |
762 | | - groupSplit = patchcanvas.SPLIT_YES |
763 | | - groupIcon = patchcanvas.ICON_HARDWARE |
764 | | - #elif iconName =="carla": |
765 | | - #groupIcon = patchcanvas.ICON_CARLA |
766 | | - elif iconName =="distrho": |
767 | | - groupIcon = patchcanvas.ICON_DISTRHO |
768 | | - elif iconName =="file": |
769 | | - groupIcon = patchcanvas.ICON_FILE |
770 | | - elif iconName =="plugin": |
| 764 | + groupPos = "" |
| 765 | + |
| 766 | + for prop in props: |
| 767 | + if prop.key == URI_POSITION: |
| 768 | + groupPos = prop.value |
| 769 | + elif prop.key == URI_PLUGIN_ICON: |
| 770 | + print("plugin icon is", prop.value) |
| 771 | + elif prop.key == URI_PLUGIN_ID: |
771 | 772 | groupIcon = patchcanvas.ICON_PLUGIN |
772 | 773 |
|
| 774 | + #if iconName == "hardware": |
| 775 | + #groupSplit = patchcanvas.SPLIT_YES |
| 776 | + #groupIcon = patchcanvas.ICON_HARDWARE |
| 777 | + ##elif iconName =="carla": |
| 778 | + ##groupIcon = patchcanvas.ICON_CARLA |
| 779 | + #elif iconName =="distrho": |
| 780 | + #groupIcon = patchcanvas.ICON_DISTRHO |
| 781 | + #elif iconName =="file": |
| 782 | + #groupIcon = patchcanvas.ICON_FILE |
| 783 | + #elif iconName =="plugin": |
| 784 | + #groupIcon = patchcanvas.ICON_PLUGIN |
| 785 | + |
| 786 | + if groupPos: |
| 787 | + x1, y1, x2, y2 = tuple(int(v) for v in groupPos.split(":",4)) |
| 788 | + groupSplit = (x1 != 0 and x2 != 0) or (y1 != 0 and y2 != 0) |
| 789 | + |
773 | 790 | patchcanvas.addGroup(groupId, groupName, groupSplit, groupIcon) |
774 | 791 |
|
| 792 | + if groupPos: |
| 793 | + if groupSplit: |
| 794 | + patchcanvas.splitGroup(groupId) |
| 795 | + else: |
| 796 | + patchcanvas.joinGroup(groupId) |
| 797 | + patchcanvas.setGroupPosFull(groupId, x1, y1, x2, y2) |
| 798 | + |
775 | 799 | groupObj = [None, None, None] |
776 | 800 | groupObj[iGroupId] = groupId |
777 | 801 | groupObj[iGroupName] = groupName |
@@ -1112,6 +1136,11 @@ def JackPortRenameCallback(self, portId, oldName, newName, arg): |
1112 | 1136 | self.PortRenameCallback.emit(portId, str(oldName, encoding="utf-8"), str(newName, encoding="utf-8")) |
1113 | 1137 | return 0 |
1114 | 1138 |
|
| 1139 | + def JackPropertyChangeCallback(self, uuid, key, change, arg): |
| 1140 | + if DEBUG: print("PropertyChangeCallback(%i, %s, %i)" % (uuid, key, change)) |
| 1141 | + self.PropertyChangeCallback.emit(jacklib.jack_uuid_t(uuid), str(key, encoding="utf-8"), change) |
| 1142 | + return 0 |
| 1143 | + |
1115 | 1144 | def JackShutdownCallback(self, arg): |
1116 | 1145 | if DEBUG: print("JackShutdownCallback()") |
1117 | 1146 | self.ShutdownCallback.emit() |
@@ -1223,6 +1252,34 @@ def slot_PortRenameCallback(self, portIdJack, oldName, newName): |
1223 | 1252 | else: |
1224 | 1253 | self.canvas_renamePort(portIdCanvas, portShortName) |
1225 | 1254 |
|
| 1255 | + @pyqtSlot(jacklib.jack_uuid_t, str, int) |
| 1256 | + def slot_PropertyChangeCallback(self, uuid, key, change): |
| 1257 | + if key != URI_POSITION: |
| 1258 | + return |
| 1259 | + |
| 1260 | + prop = jacklib.get_property(uuid, key) |
| 1261 | + |
| 1262 | + if prop is None: |
| 1263 | + return |
| 1264 | + |
| 1265 | + x1, y1, x2, y2 = tuple(int(v) for v in prop.value.split(":",4)) |
| 1266 | + |
| 1267 | + clientName = jacklib.get_client_name_by_uuid(gJack.client, jacklib.uuid_unparse(uuid)) |
| 1268 | + |
| 1269 | + if not clientName: |
| 1270 | + return |
| 1271 | + |
| 1272 | + groupId = self.canvas_getGroupId(jacklib._d(clientName)) |
| 1273 | + |
| 1274 | + if groupId == -1: |
| 1275 | + return |
| 1276 | + |
| 1277 | + if (x1 != 0 and x2 != 0) or (y1 != 0 and y2 != 0): |
| 1278 | + patchcanvas.splitGroup(groupId) |
| 1279 | + else: |
| 1280 | + patchcanvas.joinGroup(groupId) |
| 1281 | + patchcanvas.setGroupPosFull(groupId, x1, y1, x2, y2) |
| 1282 | + |
1226 | 1283 | @pyqtSlot() |
1227 | 1284 | def slot_ShutdownCallback(self): |
1228 | 1285 | self.jackStopped() |
|
0 commit comments