2 # -*- coding: utf-8 -*-
7 from PyQt4
.QtCore
import Qt
, SIGNAL
8 from PyQt4
.QtGui
import QTableWidgetItem
, QWidget
9 import ui_tb_connections
, shared
13 class ConnectionsW(QWidget
, ui_tb_connections
.Ui_ConnectionsW
):
14 def __init__(self
, *args
):
15 QWidget
.__init
__(self
, *args
)
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)
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
):
62 elif (kwds
['interface'] == "org.jackaudio.JackPatchBay"):
63 print "Refresh Ports Now!"
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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
)
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()):
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)
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()):
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)