Browse Source

Add "connect" menu to patchbay clients/boxes

Signed-off-by: falkTX <falktx@falktx.com>
tags/v2.1-rc1
falkTX 6 years ago
parent
commit
b17256001b
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
2 changed files with 85 additions and 1 deletions
  1. +61
    -1
      source/frontend/patchcanvas/canvasbox.py
  2. +24
    -0
      source/frontend/patchcanvas/patchcanvas.py

+ 61
- 1
source/frontend/patchcanvas/canvasbox.py View File

@@ -344,8 +344,67 @@ class CanvasBox(QGraphicsItem):

def contextMenuEvent(self, event):
event.accept()

menu = QMenu()

# Conenct menu stuff
connMenu = QMenu("Connect", menu)

our_port_types = []
our_port_outs = {
PORT_TYPE_AUDIO_JACK: [],
PORT_TYPE_MIDI_JACK: [],
PORT_TYPE_MIDI_ALSA: [],
}
for port in canvas.port_list:
if port.group_id != self.m_group_id:
continue
if port.port_mode != PORT_MODE_OUTPUT:
continue
if port.port_id not in self.m_port_list_ids:
continue
if port.port_type not in our_port_types:
our_port_types.append(port.port_type)
our_port_outs[port.port_type].append((port.group_id, port.port_id))

if len(our_port_types) != 0:
act_x_conn = None
for group in canvas.group_list:
if self.m_group_id == group.group_id:
continue

has_ports = False
target_ports = {
PORT_TYPE_AUDIO_JACK: [],
PORT_TYPE_MIDI_JACK: [],
PORT_TYPE_MIDI_ALSA: [],
}

for port in canvas.port_list:
if port.group_id != group.group_id:
continue
if port.port_mode != PORT_MODE_INPUT:
continue
if port.port_type not in our_port_types:
continue
has_ports = True
target_ports[port.port_type].append((port.group_id, port.port_id))

if not has_ports:
continue

act_x_conn = connMenu.addAction(group.group_name)
act_x_conn.setData((our_port_outs, target_ports))
act_x_conn.triggered.connect(canvas.qobject.PortContextMenuConnect)

if act_x_conn is None:
act_x_disc = connMenu.addAction("Nothing to connect to")
act_x_disc.setEnabled(False)

else:
act_x_disc = connMenu.addAction("No output ports")
act_x_disc.setEnabled(False)

# Disconnect menu stuff
discMenu = QMenu("Disconnect", menu)

conn_list = []
@@ -367,6 +426,7 @@ class CanvasBox(QGraphicsItem):
act_x_disc = discMenu.addAction("No connections")
act_x_disc.setEnabled(False)

menu.addMenu(connMenu)
menu.addMenu(discMenu)
act_x_disc_all = menu.addAction("Disconnect &All")
act_x_sep1 = menu.addSeparator()


+ 24
- 0
source/frontend/patchcanvas/patchcanvas.py View File

@@ -95,6 +95,30 @@ class CanvasObject(QObject):
if item:
CanvasRemoveItemFX(item)

@pyqtSlot()
def PortContextMenuConnect(self):
try:
sources, targets = self.sender().data()
except:
return

for port_type in (PORT_TYPE_AUDIO_JACK, PORT_TYPE_MIDI_JACK, PORT_TYPE_MIDI_ALSA):
source_ports = sources[port_type]
target_ports = targets[port_type]

source_ports_len = len(source_ports)
target_ports_len = len(target_ports)

if source_ports_len == 0 or target_ports_len == 0:
continue

for i in range(min(source_ports_len, target_ports_len)):
data = "%i:%i:%i:%i" % (source_ports[i][0],
source_ports[i][1],
target_ports[i][0],
target_ports[i][1])
CanvasCallback(ACTION_PORTS_CONNECT, 0, 0, data)

@pyqtSlot()
def PortContextMenuDisconnect(self):
try:


Loading…
Cancel
Save