2 # -*- coding: utf-8 -*-
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
15 class ConnectionsW(QWidget
, ui_tb_connections_new
.Ui_ConnectionsW
):
16 def __init__(self
, *args
):
17 QWidget
.__init
__(self
, *args
)
20 self
.container
= QX11EmbedContainer()
23 self
.process
= QProcess(self
.container
)
28 "#000000", # self.palette().color(QPalette.Background).name(),
30 "#f0f0f0", #self.palette().color(QPalette.Foreground).name(),
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);
47 class __ConnectionsW(QWidget
, ui_tb_connections
.Ui_ConnectionsW
):
48 def __init__(self
, *args
):
49 QWidget
.__init
__(self
, *args
)
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]
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
):
143 elif (kwds
['interface'] == "org.jackaudio.JackPatchbay"):
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)
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"))
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
)
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
)
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
)
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
)
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"))
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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]
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]
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]
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]
369 self
.b_connect
.setEnabled(True)
370 self
.enabledMIDI
= [1, 0]