Start working on the patchbay...
[klaudia.git] / src / tb_connections.py
blob5f1f3c9064ea23ba9082baa07ca83fd8b28e02c4
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
5 # Imports
6 import jack
7 from PyQt4.QtCore import Qt, SIGNAL
8 from PyQt4.QtGui import QTableWidgetItem, QWidget
9 import ui_tb_connections, shared
12 # Main Window
13 class ConnectionsW(QWidget, ui_tb_connections.Ui_ConnectionsW):
14 def __init__(self, *args):
15 QWidget.__init__(self, *args)
16 self.setupUi(self)
18 self.list_of_midi_output = []
19 self.list_of_midi_input = []
20 self.list_of_audio_output = []
21 self.list_of_audio_input = []
23 self.connect(self.tw_audio_out, SIGNAL("currentCellChanged(int, int, int, int)"), self.checkSel_AudioOutput)
24 self.connect(self.tw_audio_in, SIGNAL("currentCellChanged(int, int, int, int)"), self.checkSel_AudioInput)
25 #self.connect(self.tw_midi_out, SIGNAL("currentCellChanged(int, int, int, int)"), self.checkSel_MidiOutput)
26 #self.connect(self.tw_midi_in, SIGNAL("currentCellChanged(int, int, int, int)"), self.checkSel_MidiInput)
28 self.updatePorts()
30 shared.loopBus.add_signal_receiver(self.updatePorts, sender_keyword='sender', destination_keyword='dest', interface_keyword='interface',
31 member_keyword='member', path_keyword='path')
33 def refreshPorts(self):
34 self.list_of_midi_output = []
35 self.list_of_midi_input = []
36 self.list_of_audio_output = []
37 self.list_of_audio_input = []
39 jack_ports = jack.get_ports()
41 for i in range(len(jack_ports)):
42 if (jack.get_port_type_id(jack_ports[i]) == 0): #Audio
43 if (jack.get_port_flags(jack_ports[i]) & jack.IsOutput):
44 self.list_of_audio_output.append(jack_ports[i])
45 elif (jack.get_port_flags(jack_ports[i]) & jack.IsInput):
46 self.list_of_audio_input.append(jack_ports[i])
47 elif (jack.get_port_type_id(jack_ports[i]) == 1): #Midi
48 if (jack.get_port_flags(jack_ports[i]) & jack.IsOutput):
49 self.list_of_midi_output.append(jack_ports[i])
50 elif (jack.get_port_flags(jack_ports[i]) & jack.IsInput):
51 self.list_of_midi_input.append(jack_ports[i])
53 self.list_of_midi_output.sort()
54 self.list_of_midi_input.sort()
55 self.list_of_audio_output.sort()
56 self.list_of_audio_input.sort()
59 def updatePorts(self, *args, **kwds):
60 if (not kwds):
61 pass
62 elif (kwds['interface'] == "org.jackaudio.JackPatchBay"):
63 print "Refresh Ports Now!"
64 pass
65 else:
66 return
68 self.refreshPorts()
70 self.tw_audio_out.clearContents()
71 self.tw_audio_in.clearContents()
72 self.tw_midi_out.clearContents()
73 self.tw_midi_in.clearContents()
75 for i in range(self.tw_audio_out.rowCount()):
76 self.tw_audio_out.removeRow(i)
77 for i in range(self.tw_audio_in.rowCount()):
78 self.tw_audio_in.removeRow(i)
79 for i in range(self.tw_midi_out.rowCount()):
80 self.tw_midi_out.removeRow(i)
81 for i in range(self.tw_midi_in.rowCount()):
82 self.tw_midi_in.removeRow(i)
84 last_pos = 0
85 last_selected_port_group = ""
86 for i in range(len(self.list_of_audio_input)):
87 if (self.list_of_audio_input[i]):
88 if (self.list_of_audio_input[i].split(":")[0] != last_selected_port_group):
89 last_selected_port_group = self.list_of_audio_input[i].split(":")[0]
90 name = QTableWidgetItem(last_selected_port_group)
91 self.tw_audio_in.insertRow(last_pos)
92 self.tw_audio_in.setItem(last_pos, 0, name)
93 last_pos += 1
94 channel = QTableWidgetItem(" "+self.list_of_audio_input[i].split(":")[1])
95 self.tw_audio_in.insertRow(last_pos)
96 self.tw_audio_in.setItem(last_pos, 0, channel)
97 last_pos += 1
98 elif (self.list_of_audio_input[i].split(":")[0] == last_selected_port_group):
99 channel = QTableWidgetItem(" "+self.list_of_audio_input[i].split(":")[1])
100 self.tw_audio_in.insertRow(last_pos)
101 self.tw_audio_in.setItem(last_pos, 0, channel)
102 last_pos += 1
103 else:
104 port = QTableWidgetItem(self.list_of_audio_input[i])
105 self.tw_audio_in.insertRow(last_pos)
106 self.tw_audio_in.setItem(last_pos, 0, port)
107 last_pos += 1
109 last_pos = 0
110 last_selected_port_group = ""
111 for i in range(len(self.list_of_audio_output)):
112 if (self.list_of_audio_output[i]):
113 if (self.list_of_audio_output[i].split(":")[0] != last_selected_port_group):
114 last_selected_port_group = self.list_of_audio_output[i].split(":")[0]
115 name = QTableWidgetItem(last_selected_port_group)
116 self.tw_audio_out.insertRow(last_pos)
117 self.tw_audio_out.setItem(last_pos, 0, name)
118 last_pos += 1
119 channel = QTableWidgetItem(" "+self.list_of_audio_output[i].split(":")[1])
120 self.tw_audio_out.insertRow(last_pos)
121 self.tw_audio_out.setItem(last_pos, 0, channel)
122 last_pos += 1
123 elif (self.list_of_audio_output[i].split(":")[0] == last_selected_port_group):
124 channel = QTableWidgetItem(" "+self.list_of_audio_output[i].split(":")[1])
125 self.tw_audio_out.insertRow(last_pos)
126 self.tw_audio_out.setItem(last_pos, 0, channel)
127 last_pos += 1
128 else:
129 port = QTableWidgetItem(self.list_of_audio_output[i])
130 self.tw_audio_out.insertRow(last_pos)
131 self.tw_audio_out.setItem(last_pos, 0, port)
132 last_pos += 1
134 #self.tw_audio_out.sortByColumn(1, Qt.AscendingOrder)
135 #self.tw_audio_in.sortByColumn(1, Qt.AscendingOrder)
136 #self.tw_midi_out.sortByColumn(1, Qt.AscendingOrder)
137 #self.tw_midi_in.sortByColumn(1, Qt.AscendingOrder)
139 def checkSel_AudioOutput(self, row, b, c, d):
140 if (str(self.tw_audio_out.item(row, 0).text()[0:4]).split()):
141 for i in range(self.tw_audio_out.rowCount()):
142 if (i > row):
143 if (not str(self.tw_audio_out.item(i, 0).text()[0:4]).split()):
144 #print "also select this one:", self.tw_audio_out.item(i, 0).text()
145 self.tw_audio_out.item(i, 0).setSelected(True)
146 else:
147 break
149 def checkSel_AudioInput(self, row, b, c, d):
150 if (str(self.tw_audio_in.item(row, 0).text()[0:4]).split()):
151 for i in range(self.tw_audio_in.rowCount()):
152 if (i > row):
153 if (not str(self.tw_audio_in.item(i, 0).text()[0:4]).split()):
154 #print "also select this one:", self.tw_audio_in.item(i, 0).text()
155 self.tw_audio_in.item(i, 0).setSelected(True)
156 else:
157 break