24 | | class MatrixNode(QtGui.QFrame): |
---|
25 | | def __init__(self, row, col, parent): |
---|
26 | | QtGui.QFrame.__init__(self,parent) |
---|
27 | | self.row = row |
---|
28 | | self.connect(self.row, QtCore.SIGNAL("hide"), self.setHidden) |
---|
29 | | self.column = col |
---|
30 | | self.connect(self.column, QtCore.SIGNAL("hide"), self.setHidden) |
---|
31 | | |
---|
32 | | self.setLineWidth(1) |
---|
| 24 | class MixerNode(QtGui.QFrame): |
---|
| 25 | def __init__(self, inputs, outputs, parent): |
---|
| 26 | """inputs = list of input-channel numbers |
---|
| 27 | outputs = list of output-channel numbers |
---|
| 28 | """ |
---|
| 29 | QtGui.QFrame.__init__(self, parent) |
---|
| 30 | self.setLineWidth(2) |
---|
37 | | self.dial = QtGui.QDial(self) |
---|
38 | | self.dial.setRange(0,pow(2,16-1)) |
---|
39 | | self.connect(self.dial, QtCore.SIGNAL("valueChanged(int)"), self.valueChanged) |
---|
40 | | self.layout.addWidget(self.dial, 0, 0) |
---|
41 | | |
---|
42 | | def valueChanged(self, n): |
---|
43 | | self.emit(QtCore.SIGNAL("valueChanged"), self.row.number, self.column.number, n) |
---|
44 | | |
---|
45 | | def setHidden(self, hide): |
---|
46 | | if not hide: |
---|
47 | | if self.row.hidden or self.column.hidden: |
---|
48 | | return |
---|
49 | | QtGui.QFrame.setHidden(self, hide) |
---|
50 | | |
---|
51 | | class MatrixChannel(QtGui.QWidget): |
---|
| 47 | self.layout.addWidget(self.inputbalance, 0, 0) |
---|
| 48 | self.layout.addWidget(self.fader, 1, 0) |
---|
| 49 | self.layout.addWidget(self.outputbalance, 2, 0) |
---|
| 50 | |
---|
| 51 | self.addInputs(inputs) |
---|
| 52 | self.addOutputs(outputs) |
---|
| 53 | |
---|
| 54 | def valuesChanged(self): |
---|
| 55 | fader = self.fader.value() |
---|
| 56 | values = [] |
---|
| 57 | while len(values) < len(self.inputs): |
---|
| 58 | tmp = [] |
---|
| 59 | while len(tmp) < len(self.outputs): |
---|
| 60 | tmp.append(fader) |
---|
| 61 | values.append(tmp) |
---|
| 62 | #print values |
---|
| 63 | if len(self.inputs) == len(self.outputs): |
---|
| 64 | for i in range(len(self.inputs)): |
---|
| 65 | for j in range(len(self.outputs)): |
---|
| 66 | values[i][j] *= (i==j) |
---|
| 67 | #print values |
---|
| 68 | ret = [] |
---|
| 69 | for i in range(len(self.inputs)): |
---|
| 70 | for j in range(len(self.outputs)): |
---|
| 71 | ret.append( (self.inputs[i], self.outputs[j], values[i][j]) ) |
---|
| 72 | #print ret |
---|
| 73 | self.emit(QtCore.SIGNAL("valueChanged"), ret) |
---|
| 74 | |
---|
| 75 | def addInputs(self, inputs): |
---|
| 76 | if isinstance(inputs, list): |
---|
| 77 | self.inputs += inputs |
---|
| 78 | else: |
---|
| 79 | self.inputs.append(inputs) |
---|
| 80 | self.checkWidgets() |
---|
| 81 | def removeInputs(self, inputs): |
---|
| 82 | if isinstance(inputs, list): |
---|
| 83 | for item in inputs: |
---|
| 84 | self.inputs.remove(item) |
---|
| 85 | else: |
---|
| 86 | self.inputs.remove(inputs) |
---|
| 87 | self.checkWidgets() |
---|
| 88 | |
---|
| 89 | def addOutputs(self, outputs): |
---|
| 90 | if isinstance(outputs, list): |
---|
| 91 | self.outputs += outputs |
---|
| 92 | else: |
---|
| 93 | self.outputs.append(outputs) |
---|
| 94 | self.checkWidgets() |
---|
| 95 | def removeOutputs(self, outputs): |
---|
| 96 | if isinstance(outputs, list): |
---|
| 97 | for item in outputs: |
---|
| 98 | self.outputs.remove(item) |
---|
| 99 | else: |
---|
| 100 | self.outputs.remove(outputs) |
---|
| 101 | self.checkWidgets() |
---|
| 102 | |
---|
| 103 | def checkWidgets(self): |
---|
| 104 | if len(self.inputs)>1: |
---|
| 105 | self.inputbalance.show() |
---|
| 106 | else: |
---|
| 107 | self.inputbalance.hide() |
---|
| 108 | if len(self.outputs)>1: |
---|
| 109 | self.outputbalance.show() |
---|
| 110 | else: |
---|
| 111 | self.outputbalance.hide() |
---|
| 112 | |
---|
| 113 | |
---|
| 114 | class MixerChannel(QtGui.QWidget): |
---|
56 | | self.btn = QtGui.QPushButton("%i" % self.number, self) |
---|
57 | | self.btn.setCheckable(True) |
---|
58 | | self.connect(self.btn, QtCore.SIGNAL("clicked(bool)"), self.hideChannel) |
---|
59 | | layout.addWidget(self.btn, 0, 0) |
---|
60 | | |
---|
61 | | self.hidden = False |
---|
| 119 | self.lbl = QtGui.QLabel("Ch. %i" % self.number, self) |
---|
| 120 | layout.addWidget(self.lbl, 0, 0, 1, 2) |
---|
| 121 | |
---|
| 122 | self.btnHide = QtGui.QToolButton(self) |
---|
| 123 | self.btnHide.setText("Hide") |
---|
| 124 | self.btnHide.setCheckable(True) |
---|
| 125 | self.connect(self.btnHide, QtCore.SIGNAL("clicked(bool)"), self.hideChannel) |
---|
| 126 | layout.addWidget(self.btnHide, 1, 0) |
---|
| 127 | |
---|
| 128 | self.btnCouple = QtGui.QToolButton(self) |
---|
| 129 | self.btnCouple.setText("Stereo") |
---|
| 130 | self.btnCouple.setCheckable(True) |
---|
| 131 | self.connect(self.btnCouple, QtCore.SIGNAL("toggled(bool)"), self.coupleWithNext) |
---|
| 132 | layout.addWidget(self.btnCouple, 1, 1) |
---|
64 | | #print "MatrixChannel.hideChannel( %s )" % str(hide) |
---|
65 | | self.hidden = hide |
---|
66 | | self.emit(QtCore.SIGNAL("hide"), hide) |
---|
| 135 | self.btnCouple.setHidden(hide) |
---|
| 136 | self.emit(QtCore.SIGNAL("hide"), self.number, hide) |
---|
| 137 | |
---|
| 138 | def coupleWithNext(self, couple): |
---|
| 139 | self.emit(QtCore.SIGNAL("couple"), self.number, couple) |
---|
| 140 | |
---|
| 141 | def canCouple(self, cancouple): |
---|
| 142 | #self.btnCouple.setEnabled(cancouple) |
---|
| 143 | self.btnCouple.setHidden(not cancouple) |
---|
105 | | |
---|
106 | | def valueChanged(self, row, column, n): |
---|
107 | | #print "MatrixNode.valueChanged( %i, %i, %i )" % (row,column,n) |
---|
108 | | self.interface.setValue(row, column, n) |
---|
109 | | |
---|
110 | | def paintEvent(self, event): |
---|
111 | | p = QtGui.QPainter(self) |
---|
112 | | p.fillRect(event.rect(), self.palette().window()) |
---|
| 189 | self.items[i].append(node) |
---|
| 190 | |
---|
| 191 | self.hiddenRows = [] |
---|
| 192 | self.hiddenCols = [] |
---|
| 193 | self.coupledRows = [] |
---|
| 194 | self.coupledCols = [] |
---|
| 195 | |
---|
| 196 | |
---|
| 197 | def checkVisibilities(self): |
---|
| 198 | for x in range(len(self.items)): |
---|
| 199 | for y in range(len(self.items[x])): |
---|
| 200 | self.items[x][y].setHidden( (x in self.hiddenRows) | (x in self.coupledRows) | (y in self.hiddenCols) | (y in self.coupledCols) ) |
---|
| 201 | |
---|
| 202 | def coupleColumn(self, column, couple): |
---|
| 203 | if column+1 < len(self.columnHeaders): |
---|
| 204 | self.columnHeaders[column+1].setHidden(couple) |
---|
| 205 | if column > 0: |
---|
| 206 | self.columnHeaders[column-1].canCouple(not couple) |
---|
| 207 | if couple: |
---|
| 208 | self.coupledCols.append(column+1) |
---|
| 209 | else: |
---|
| 210 | self.coupledCols.remove(column+1) |
---|
| 211 | for row in self.items: |
---|
| 212 | if couple: |
---|
| 213 | row[column].addInputs(column+1) |
---|
| 214 | else: |
---|
| 215 | row[column].removeInputs(column+1) |
---|
| 216 | self.checkVisibilities() |
---|
| 217 | |
---|
| 218 | def coupleRow(self, row, couple): |
---|
| 219 | if row+1 < len(self.rowHeaders): |
---|
| 220 | self.rowHeaders[row+1].setHidden(couple) |
---|
| 221 | if row > 0: |
---|
| 222 | self.rowHeaders[row-1].canCouple(not couple) |
---|
| 223 | if couple: |
---|
| 224 | self.coupledRows.append(row+1) |
---|
| 225 | else: |
---|
| 226 | self.coupledRows.remove(row+1) |
---|
| 227 | for col in self.items[row]: |
---|
| 228 | if couple: |
---|
| 229 | col.addOutputs(row+1) |
---|
| 230 | else: |
---|
| 231 | col.removeOutputs(row+1) |
---|
| 232 | self.checkVisibilities() |
---|
| 233 | |
---|
| 234 | def hideColumn(self, column, hide): |
---|
| 235 | if hide: |
---|
| 236 | self.hiddenCols.append(column) |
---|
| 237 | else: |
---|
| 238 | self.hiddenCols.remove(column) |
---|
| 239 | self.checkVisibilities() |
---|
| 240 | def hideRow(self, row, hide): |
---|
| 241 | if hide: |
---|
| 242 | self.hiddenRows.append(row) |
---|
| 243 | else: |
---|
| 244 | self.hiddenRows.remove(row) |
---|
| 245 | self.checkVisibilities() |
---|
| 246 | |
---|
| 247 | def valueChanged(self, n): |
---|
| 248 | #print "MatrixNode.valueChanged( %s )" % str(n) |
---|
| 249 | for tmp in n: |
---|
| 250 | self.interface.setValue(tmp[1], tmp[0], tmp[2]) |
---|
| 251 | |
---|