Added gitignore file
[klaudia.git] / src / tb_connections.py
blob76789ba05700d3bfaeac7a47f584f95c4f8a1b14
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
5 # Imports
6 import jack
7 from PyQt4.QtCore import QProcess, Qt, SIGNAL
8 from PyQt4.QtGui import QTableWidgetItem, QWidget, QX11EmbedContainer
9 from PyKDE4.kdeui import KIcon
10 import ui_tb_connections, shared
11 import ui_tb_connections_new
14 # Testing XEmbbed
15 class ConnectionsW(QWidget, ui_tb_connections_new.Ui_ConnectionsW):
16 def __init__(self, *args):
17 QWidget.__init__(self, *args)
18 self.setupUi(self)
20 self.container = QX11EmbedContainer()
21 self.container.show()
23 self.process = QProcess(self.container)
24 args = [
25 "-into",
26 str(self.winId()),
27 "-bg",
28 "#000000", # self.palette().color(QPalette.Background).name(),
29 "-fg",
30 "#f0f0f0", #self.palette().color(QPalette.Foreground).name(),
31 # border
32 "-b", "0",
33 "-w", "0",
34 # blink cursor
35 "-bc",
37 self.process.start("xterm", args)
38 self.frameMain.layout().addWidget(self.container)
39 #QString executable(app.arguments()[1]);
40 #QStringList arguments;
41 #arguments << QString.number(container.winId());
42 #process.start(executable, arguments);
46 # Main Window
47 class __ConnectionsW(QWidget, ui_tb_connections.Ui_ConnectionsW):
48 def __init__(self, *args):
49 QWidget.__init__(self, *args)
50 self.setupUi(self)
52 self.list_of_midi_output = []
53 self.list_of_midi_input = []
54 self.list_of_audio_output = []
55 self.list_of_audio_input = []
57 self.connect(self.tw_audio_out, SIGNAL("currentCellChanged(int, int, int, int)"), self.checkSel_AudioOutput)
58 self.connect(self.tw_audio_in, SIGNAL("currentCellChanged(int, int, int, int)"), self.checkSel_AudioInput)
59 self.connect(self.tw_midi_out, SIGNAL("currentCellChanged(int, int, int, int)"), self.checkSel_MidiOutput)
60 self.connect(self.tw_midi_in, SIGNAL("currentCellChanged(int, int, int, int)"), self.checkSel_MidiInput)
61 self.connect(self.tabWidget, SIGNAL("currentChanged(int)"), self.checkSel_Tab)
63 self.connect(self.b_connect, SIGNAL("clicked()"), self.bay_connect)
64 self.connect(self.b_disconnect, SIGNAL("clicked()"), self.bay_disconnect)
65 self.connect(self.b_disconnect_all, SIGNAL("clicked()"), self.bay_disconnect_all)
66 self.connect(self.b_refresh, SIGNAL("clicked()"), self.updatePorts)
68 self.b_connect.setIcon(KIcon("network-connect"))
69 self.b_disconnect.setIcon(KIcon("network-disconnect"))
70 self.b_disconnect_all.setIcon(KIcon("network-disconnect"))
71 self.b_refresh.setIcon(KIcon("view-refresh"))
73 self.b_connect.setEnabled(False)
74 self.b_disconnect.setEnabled(False)
75 self.b_disconnect_all.setEnabled(False)
77 self.enabledAudio = [0, 0]
78 self.enabledMIDI = [0, 0]
80 self.updatePorts()
82 shared.loopBus.add_signal_receiver(self.updatePorts, sender_keyword='sender', destination_keyword='dest', interface_keyword='interface',
83 member_keyword='member', path_keyword='path')
85 def bay_connect(self):
86 if (self.tabWidget.currentIndex() == 0): #Audio
87 source = str(self.tw_audio_out.item(self.tw_audio_out.currentRow(), 0).toolTip()).split(":")
88 dest = str(self.tw_audio_in.item(self.tw_audio_in.currentRow(), 0).toolTip()).split(":")
89 elif (self.tabWidget.currentIndex() == 1): #MIDI
90 source = str(self.tw_midi_out.item(self.tw_midi_out.currentRow(), 0).toolTip()).split(":")
91 dest = str(self.tw_midi_in.item(self.tw_midi_in.currentRow(), 0).toolTip()).split(":")
92 shared.patchBus.ConnectPortsByName(source[0], source[1], dest[0], dest[1])
94 def bay_disconnect(self):
95 if (self.tabWidget.currentIndex() == 0): #Audio
96 source = str(self.tw_audio_out.item(self.tw_audio_out.currentRow(), 0).toolTip()).split(":")
97 dest = str(self.tw_audio_in.item(self.tw_audio_in.currentRow(), 0).toolTip()).split(":")
98 elif (self.tabWidget.currentIndex() == 1): #MIDI
99 source = str(self.tw_midi_out.item(self.tw_midi_out.currentRow(), 0).toolTip()).split(":")
100 dest = str(self.tw_midi_in.item(self.tw_midi_in.currentRow(), 0).toolTip()).split(":")
101 shared.patchBus.DisconnectPortsByName(source[0], source[1], dest[0], dest[1])
103 def bay_disconnect_all(self):
104 print "disconnect_all"
106 def checkSel_Tab(self, tab):
107 if (tab == 0): #Audio
108 self.b_connect.setEnabled(self.enabledAudio[0])
109 self.b_disconnect.setEnabled(self.enabledAudio[1])
110 elif (tab == 1): #MIDI
111 self.b_connect.setEnabled(self.enabledMIDI[0])
112 self.b_disconnect.setEnabled(self.enabledMIDI[1])
114 def refreshPorts(self):
115 self.list_of_midi_output = []
116 self.list_of_midi_input = []
117 self.list_of_audio_output = []
118 self.list_of_audio_input = []
120 jack_ports = shared.patchBus.GetAllPorts()
122 for i in range(len(jack_ports)):
123 if (jack.get_port_type_id(jack_ports[i]) == 0): #Audio
124 if (jack.get_port_flags(jack_ports[i]) & jack.IsOutput):
125 self.list_of_audio_output.append(jack_ports[i])
126 elif (jack.get_port_flags(jack_ports[i]) & jack.IsInput):
127 self.list_of_audio_input.append(jack_ports[i])
128 elif (jack.get_port_type_id(jack_ports[i]) == 1): #Midi
129 if (jack.get_port_flags(jack_ports[i]) & jack.IsOutput):
130 self.list_of_midi_output.append(jack_ports[i])
131 elif (jack.get_port_flags(jack_ports[i]) & jack.IsInput):
132 self.list_of_midi_input.append(jack_ports[i])
134 self.list_of_midi_output.sort()
135 self.list_of_midi_input.sort()
136 self.list_of_audio_output.sort()
137 self.list_of_audio_input.sort()
140 def updatePorts(self, *args, **kwds):
141 if (not kwds):
142 pass
143 elif (kwds['interface'] == "org.jackaudio.JackPatchbay"):
144 pass
145 else:
146 return
148 self.refreshPorts()
150 self.tw_audio_out.clearContents()
151 self.tw_audio_in.clearContents()
152 self.tw_midi_out.clearContents()
153 self.tw_midi_in.clearContents()
155 for i in range(self.tw_audio_out.rowCount()):
156 self.tw_audio_out.removeRow(0)
157 for i in range(self.tw_audio_in.rowCount()):
158 self.tw_audio_in.removeRow(0)
159 for i in range(self.tw_midi_out.rowCount()):
160 self.tw_midi_out.removeRow(0)
161 for i in range(self.tw_midi_in.rowCount()):
162 self.tw_midi_in.removeRow(0)
164 last_pos = 0
165 last_selected_port_group = ""
166 for i in range(len(self.list_of_audio_output)):
167 if (self.list_of_audio_output[i]):
168 if (self.list_of_audio_output[i].split(":")[0] != last_selected_port_group):
169 last_selected_port_group = self.list_of_audio_output[i].split(":")[0]
170 name = QTableWidgetItem(last_selected_port_group)
171 name.setFlags(Qt.ItemIsEnabled)
172 if (last_selected_port_group == "system"):
173 name.setIcon(KIcon("audio-input-microphone"))
174 elif (last_selected_port_group == "PulseAudio JACK Sink"):
175 name.setIcon(KIcon("amarok"))
176 else:
177 name.setIcon(KIcon(last_selected_port_group.lower()))
178 self.tw_audio_out.insertRow(last_pos)
179 self.tw_audio_out.setItem(last_pos, 0, name)
180 last_pos += 1
181 channel = QTableWidgetItem(" "+self.list_of_audio_output[i].split(":")[1])
182 channel.setToolTip(self.list_of_audio_output[i])
183 self.tw_audio_out.insertRow(last_pos)
184 self.tw_audio_out.setItem(last_pos, 0, channel)
185 last_pos += 1
186 elif (self.list_of_audio_output[i].split(":")[0] == last_selected_port_group):
187 channel = QTableWidgetItem(" "+self.list_of_audio_output[i].split(":")[1])
188 channel.setToolTip(self.list_of_audio_output[i])
189 self.tw_audio_out.insertRow(last_pos)
190 self.tw_audio_out.setItem(last_pos, 0, channel)
191 last_pos += 1
192 else:
193 port = QTableWidgetItem(self.list_of_audio_output[i])
194 port.setToolTip(self.list_of_audio_output[i])
195 self.tw_audio_out.insertRow(last_pos)
196 self.tw_audio_out.setItem(last_pos, 0, port)
197 last_pos += 1
199 last_pos = 0
200 last_selected_port_group = ""
201 for i in range(len(self.list_of_audio_input)):
202 if (self.list_of_audio_input[i]):
203 if (self.list_of_audio_input[i].split(":")[0] != last_selected_port_group):
204 last_selected_port_group = self.list_of_audio_input[i].split(":")[0]
205 name = QTableWidgetItem(last_selected_port_group)
206 name.setFlags(Qt.ItemIsEnabled)
207 if (last_selected_port_group == "system"):
208 name.setIcon(KIcon("preferences-desktop-sound"))
209 elif (last_selected_port_group == "PulseAudio JACK Source"):
210 name.setIcon(KIcon("amarok"))
211 else:
212 name.setIcon(KIcon(last_selected_port_group.lower()))
213 self.tw_audio_in.insertRow(last_pos)
214 self.tw_audio_in.setItem(last_pos, 0, name)
215 last_pos += 1
216 channel = QTableWidgetItem(" "+self.list_of_audio_input[i].split(":")[1])
217 channel.setToolTip(self.list_of_audio_input[i])
218 self.tw_audio_in.insertRow(last_pos)
219 self.tw_audio_in.setItem(last_pos, 0, channel)
220 last_pos += 1
221 elif (self.list_of_audio_input[i].split(":")[0] == last_selected_port_group):
222 channel = QTableWidgetItem(" "+self.list_of_audio_input[i].split(":")[1])
223 channel.setToolTip(self.list_of_audio_input[i])
224 self.tw_audio_in.insertRow(last_pos)
225 self.tw_audio_in.setItem(last_pos, 0, channel)
226 last_pos += 1
227 else:
228 port = QTableWidgetItem(self.list_of_audio_input[i])
229 port.setToolTip(self.list_of_audio_input[i])
230 self.tw_audio_in.insertRow(last_pos)
231 self.tw_audio_in.setItem(last_pos, 0, port)
232 last_pos += 1
234 last_pos = 0
235 last_selected_port_group = ""
236 for i in range(len(self.list_of_midi_output)):
237 if (self.list_of_midi_output[i]):
238 if (self.list_of_midi_output[i].split(":")[0] != last_selected_port_group):
239 last_selected_port_group = self.list_of_midi_output[i].split(":")[0]
240 name = QTableWidgetItem(last_selected_port_group.lower())
241 name.setFlags(Qt.ItemIsEnabled)
242 name.setIcon(KIcon(last_selected_port_group))
243 self.tw_midi_out.insertRow(last_pos)
244 self.tw_midi_out.setItem(last_pos, 0, name)
245 last_pos += 1
246 channel = QTableWidgetItem(" "+self.list_of_midi_output[i].split(":")[1])
247 channel.setToolTip(self.list_of_midi_output[i])
248 self.tw_midi_out.insertRow(last_pos)
249 self.tw_midi_out.setItem(last_pos, 0, channel)
250 last_pos += 1
251 elif (self.list_of_midi_output[i].split(":")[0] == last_selected_port_group):
252 channel = QTableWidgetItem(" "+self.list_of_midi_output[i].split(":")[1])
253 channel.setToolTip(self.list_of_midi_output[i])
254 self.tw_midi_out.insertRow(last_pos)
255 self.tw_midi_out.setItem(last_pos, 0, channel)
256 last_pos += 1
257 else:
258 port = QTableWidgetItem(self.list_of_midi_output[i])
259 port.setToolTip(self.list_of_midi_output[i])
260 self.tw_midi_out.insertRow(last_pos)
261 self.tw_midi_out.setItem(last_pos, 0, port)
262 last_pos += 1
264 last_pos = 0
265 last_selected_port_group = ""
266 for i in range(len(self.list_of_midi_input)):
267 if (self.list_of_midi_input[i]):
268 if (self.list_of_midi_input[i].split(":")[0] != last_selected_port_group):
269 last_selected_port_group = self.list_of_midi_input[i].split(":")[0]
270 name = QTableWidgetItem(last_selected_port_group)
271 name.setFlags(Qt.ItemIsEnabled)
272 name.setIcon(KIcon(last_selected_port_group.lower()))
273 self.tw_midi_in.insertRow(last_pos)
274 self.tw_midi_in.setItem(last_pos, 0, name)
275 last_pos += 1
276 channel = QTableWidgetItem(" "+self.list_of_midi_input[i].split(":")[1])
277 channel.setToolTip(self.list_of_midi_input[i])
278 self.tw_midi_in.insertRow(last_pos)
279 self.tw_midi_in.setItem(last_pos, 0, channel)
280 last_pos += 1
281 elif (self.list_of_midi_input[i].split(":")[0] == last_selected_port_group):
282 channel = QTableWidgetItem(" "+self.list_of_midi_input[i].split(":")[1])
283 channel.setToolTip(self.list_of_midi_input[i])
284 self.tw_midi_in.insertRow(last_pos)
285 self.tw_midi_in.setItem(last_pos, 0, channel)
286 last_pos += 1
287 else:
288 port = QTableWidgetItem(self.list_of_midi_input[i])
289 port.setToolTip(self.list_of_midi_input[i])
290 self.tw_midi_in.insertRow(last_pos)
291 self.tw_midi_in.setItem(last_pos, 0, port)
292 last_pos += 1
295 for i in range(self.tw_audio_out.rowCount()):
296 if (self.tw_audio_out.item(i, 0) == None):
297 self.tw_audio_out.removeRow(0)
299 for i in range(self.tw_audio_in.rowCount()):
300 if (self.tw_audio_in.item(i, 0) == None):
301 self.tw_audio_in.removeRow(0)
303 for i in range(self.tw_midi_out.rowCount()):
304 if (self.tw_midi_out.item(i, 0) == None):
305 self.tw_midi_out.removeRow(0)
307 for i in range(self.tw_midi_in.rowCount()):
308 if (self.tw_midi_in.item(i, 0) == None):
309 self.tw_midi_in.removeRow(0)
312 def checkSel_AudioOutput(self, row, b, c, d):
313 self.b_connect.setEnabled(False)
314 self.b_disconnect.setEnabled(False)
315 self.enabledAudio = [0, 0]
316 if (self.tw_audio_out.item(row, 0)):
317 if (not str(self.tw_audio_out.item(row, 0).text()[0:4]).split()):
318 if (self.tw_audio_in.item(self.tw_audio_in.currentRow(), 0)):
319 if (not str(self.tw_audio_in.item(self.tw_audio_in.currentRow(), 0).text()[0:4]).split()):
320 if (str(self.tw_audio_in.item(self.tw_audio_in.currentRow(), 0).toolTip()) in jack.get_connections(str(self.tw_audio_out.item(row, 0).toolTip()))):
321 self.b_disconnect.setEnabled(True)
322 self.enabledAudio = [0, 1]
323 else:
324 self.b_connect.setEnabled(True)
325 self.enabledAudio = [1, 0]
327 def checkSel_AudioInput(self, row, b, c, d):
328 self.b_connect.setEnabled(False)
329 self.b_disconnect.setEnabled(False)
330 self.enabledAudio = [0, 0]
331 if (self.tw_audio_in.item(row, 0)):
332 if (not str(self.tw_audio_in.item(row, 0).text()[0:4]).split()):
333 if (self.tw_audio_out.item(self.tw_audio_out.currentRow(), 0)):
334 if (not str(self.tw_audio_out.item(self.tw_audio_out.currentRow(), 0).text()[0:4]).split()):
335 if (str(self.tw_audio_out.item(self.tw_audio_out.currentRow(), 0).toolTip()) in jack.get_connections(str(self.tw_audio_in.item(row, 0).toolTip()))):
336 self.b_disconnect.setEnabled(True)
337 self.enabledAudio = [0, 1]
338 else:
339 self.b_connect.setEnabled(True)
340 self.enabledAudio = [1, 0]
342 def checkSel_MidiOutput(self, row, b, c, d):
343 self.b_connect.setEnabled(False)
344 self.b_disconnect.setEnabled(False)
345 self.enabledMIDI = [0, 0]
346 if (self.tw_midi_out.item(row, 0)):
347 if (not str(self.tw_midi_out.item(row, 0).text()[0:4]).split()):
348 if (self.tw_midi_in.item(self.tw_midi_in.currentRow(), 0)):
349 if (not str(self.tw_midi_in.item(self.tw_midi_in.currentRow(), 0).text()[0:4]).split()):
350 if (str(self.tw_midi_in.item(self.tw_midi_in.currentRow(), 0).toolTip()) in jack.get_connections(str(self.tw_midi_out.item(row, 0).toolTip()))):
351 self.b_disconnect.setEnabled(True)
352 self.enabledMIDI = [0, 1]
353 else:
354 self.b_connect.setEnabled(True)
355 self.enabledMIDI = [1, 0]
357 def checkSel_MidiInput(self, row, b, c, d):
358 self.b_connect.setEnabled(False)
359 self.b_disconnect.setEnabled(False)
360 self.enabledMIDI = [0, 0]
361 if (self.tw_midi_in.item(row, 0)):
362 if (not str(self.tw_midi_in.item(row, 0).text()[0:4]).split()):
363 if (self.tw_midi_out.item(self.tw_midi_out.currentRow(), 0)):
364 if (not str(self.tw_midi_out.item(self.tw_midi_out.currentRow(), 0).text()[0:4]).split()):
365 if (str(self.tw_midi_out.item(self.tw_midi_out.currentRow(), 0).toolTip()) in jack.get_connections(str(self.tw_midi_in.item(row, 0).toolTip()))):
366 self.b_disconnect.setEnabled(True)
367 self.enabledMIDI = [0, 1]
368 else:
369 self.b_connect.setEnabled(True)
370 self.enabledMIDI = [1, 0]