Browse Source

Update pixmapkeyboard.py for c++ compat

tags/v0.9.0
falkTX 13 years ago
parent
commit
f5d2580b69
3 changed files with 50 additions and 38 deletions
  1. +2
    -2
      src/carla.py
  2. +28
    -29
      src/pixmapkeyboard.py
  3. +20
    -7
      src/xycontroller.py

+ 2
- 2
src/carla.py View File

@@ -2891,13 +2891,13 @@ class CarlaMainW(QMainWindow, ui_carla.Ui_CarlaMainW):
def slot_handleNoteOnCallback(self, plugin_id, note): def slot_handleNoteOnCallback(self, plugin_id, note):
pwidget = self.m_plugin_list[plugin_id] pwidget = self.m_plugin_list[plugin_id]
if (pwidget): if (pwidget):
pwidget.edit_dialog.keyboard.noteOn(note, False)
pwidget.edit_dialog.keyboard.sendNoteOn(note, False)


@pyqtSlot(int, int) @pyqtSlot(int, int)
def slot_handleNoteOffCallback(self, plugin_id, note): def slot_handleNoteOffCallback(self, plugin_id, note):
pwidget = self.m_plugin_list[plugin_id] pwidget = self.m_plugin_list[plugin_id]
if (pwidget): if (pwidget):
pwidget.edit_dialog.keyboard.noteOff(note, False)
pwidget.edit_dialog.keyboard.sendNoteOff(note, False)


@pyqtSlot(int, int) @pyqtSlot(int, int)
def slot_handleShowGuiCallback(self, plugin_id, show): def slot_handleShowGuiCallback(self, plugin_id, show):


+ 28
- 29
src/pixmapkeyboard.py View File

@@ -101,7 +101,7 @@ class PixmapKeyboard(QWidget):


self.setMode(self.HORIZONTAL) self.setMode(self.HORIZONTAL)


def noteOn(self, note, sendSignal=True):
def sendNoteOn(self, note, sendSignal=True):
if 0 <= note <= 127 and note not in self.m_enabledKeys: if 0 <= note <= 127 and note not in self.m_enabledKeys:
self.m_enabledKeys.append(note) self.m_enabledKeys.append(note)
if sendSignal: if sendSignal:
@@ -113,7 +113,7 @@ class PixmapKeyboard(QWidget):
if len(self.m_enabledKeys) == 1: if len(self.m_enabledKeys) == 1:
self.emit(SIGNAL("notesOn()")) self.emit(SIGNAL("notesOn()"))


def noteOff(self, note, sendSignal=True):
def sendNoteOff(self, note, sendSignal=True):
if 0 <= note <= 127 and note in self.m_enabledKeys: if 0 <= note <= 127 and note in self.m_enabledKeys:
self.m_enabledKeys.remove(note) self.m_enabledKeys.remove(note)
if sendSignal: if sendSignal:
@@ -125,13 +125,6 @@ class PixmapKeyboard(QWidget):
if len(self.m_enabledKeys) == 0: if len(self.m_enabledKeys) == 0:
self.emit(SIGNAL("notesOff()")) self.emit(SIGNAL("notesOff()"))


def _isNoteBlack(self, note):
baseNote = note % 12
return bool(baseNote in (1, 3, 6, 8, 10))

def _getRectFromMidiNote(self, note):
return self.m_midi_map.get(str(note % 12))

def setMode(self, mode, color=COLOR_ORANGE): def setMode(self, mode, color=COLOR_ORANGE):
if color == self.COLOR_CLASSIC: if color == self.COLOR_CLASSIC:
self.m_colorStr = "classic" self.m_colorStr = "classic"
@@ -139,25 +132,23 @@ class PixmapKeyboard(QWidget):
self.m_colorStr = "orange" self.m_colorStr = "orange"
else: else:
qCritical("PixmapKeyboard::setMode(%i, %i) - Invalid keyboard color" % (mode, color)) qCritical("PixmapKeyboard::setMode(%i, %i) - Invalid keyboard color" % (mode, color))
self.setMode(mode)
return
return self.setMode(mode)


if mode == self.HORIZONTAL: if mode == self.HORIZONTAL:
self.m_midi_map = midi_key2rect_map_horizontal self.m_midi_map = midi_key2rect_map_horizontal
self.m_pixmap.load(":/bitmaps/kbd_h_%s.png" % self.m_colorStr) self.m_pixmap.load(":/bitmaps/kbd_h_%s.png" % self.m_colorStr)
self.m_pixmap_mode = self.HORIZONTAL self.m_pixmap_mode = self.HORIZONTAL
self.p_width = self.m_pixmap.width()
self.p_width = self.m_pixmap.width()
self.p_height = self.m_pixmap.height() / 2 self.p_height = self.m_pixmap.height() / 2
elif mode == self.VERTICAL: elif mode == self.VERTICAL:
self.m_midi_map = midi_key2rect_map_vertical self.m_midi_map = midi_key2rect_map_vertical
self.m_pixmap.load(":/bitmaps/kbd_v_%s.png" % self.m_colorStr) self.m_pixmap.load(":/bitmaps/kbd_v_%s.png" % self.m_colorStr)
self.m_pixmap_mode = self.VERTICAL self.m_pixmap_mode = self.VERTICAL
self.p_width = self.m_pixmap.width() / 2
self.p_width = self.m_pixmap.width() / 2
self.p_height = self.m_pixmap.height() self.p_height = self.m_pixmap.height()
else: else:
qCritical("PixmapKeyboard::setMode(%i, %i) - Invalid keyboard mode" % (mode, color)) qCritical("PixmapKeyboard::setMode(%i, %i) - Invalid keyboard mode" % (mode, color))
self.setMode(self.HORIZONTAL)
return
return self.setMode(self.HORIZONTAL)


self.setOctaves(self.m_octaves) self.setOctaves(self.m_octaves)


@@ -177,17 +168,11 @@ class PixmapKeyboard(QWidget):


self.update() self.update()


@pyqtSlot()
def slot_updateOnce(self):
if self.m_needsUpdate:
self.update()
self.m_needsUpdate = False

def keyPressEvent(self, event): def keyPressEvent(self, event):
qKey = str(event.key()) qKey = str(event.key())


if qKey in midi_keyboard2key_map.keys(): if qKey in midi_keyboard2key_map.keys():
self.noteOn(midi_keyboard2key_map.get(qKey))
self.sendNoteOn(midi_keyboard2key_map.get(qKey))


QWidget.keyPressEvent(self, event) QWidget.keyPressEvent(self, event)


@@ -195,7 +180,7 @@ class PixmapKeyboard(QWidget):
qKey = str(event.key()) qKey = str(event.key())


if qKey in midi_keyboard2key_map.keys(): if qKey in midi_keyboard2key_map.keys():
self.noteOff(midi_keyboard2key_map.get(qKey))
self.sendNoteOff(midi_keyboard2key_map.get(qKey))


QWidget.keyReleaseEvent(self, event) QWidget.keyReleaseEvent(self, event)


@@ -211,7 +196,7 @@ class PixmapKeyboard(QWidget):


def mouseReleaseEvent(self, event): def mouseReleaseEvent(self, event):
if self.m_lastMouseNote != -1: if self.m_lastMouseNote != -1:
self.noteOff(self.m_lastMouseNote)
self.sendNoteOff(self.m_lastMouseNote)
self.m_lastMouseNote = -1 self.m_lastMouseNote = -1
QWidget.mouseReleaseEvent(self, event) QWidget.mouseReleaseEvent(self, event)


@@ -261,10 +246,10 @@ class PixmapKeyboard(QWidget):
if note != -1: if note != -1:
note += octave * 12 note += octave * 12
if self.m_lastMouseNote != note: if self.m_lastMouseNote != note:
self.noteOff(self.m_lastMouseNote)
self.noteOn(note)
self.sendNoteOff(self.m_lastMouseNote)
self.sendNoteOn(note)
else: else:
self.noteOff(self.m_lastMouseNote)
self.sendNoteOff(self.m_lastMouseNote)


self.m_lastMouseNote = note self.m_lastMouseNote = note


@@ -395,8 +380,22 @@ class PixmapKeyboard(QWidget):
# Paint C-number note info # Paint C-number note info
painter.setFont(self.m_font) painter.setFont(self.m_font)
painter.setPen(Qt.black) painter.setPen(Qt.black)

for i in range(self.m_octaves): for i in range(self.m_octaves):
if self.m_pixmap_mode == self.HORIZONTAL: if self.m_pixmap_mode == self.HORIZONTAL:
painter.drawText(i * 144, 48, 18, 18, Qt.AlignCenter, "C%s" % (i + 2))
painter.drawText(i * 144, 48, 18, 18, Qt.AlignCenter, "C%i" % (i + 2))
elif self.m_pixmap_mode == self.VERTICAL: elif self.m_pixmap_mode == self.VERTICAL:
painter.drawText(45, (self.m_octaves * 144) - (i * 144) - 16, 18, 18, Qt.AlignCenter, "C%s" % (i + 2))
painter.drawText(45, (self.m_octaves * 144) - (i * 144) - 16, 18, 18, Qt.AlignCenter, "C%i" % (i + 2))

@pyqtSlot()
def slot_updateOnce(self):
if self.m_needsUpdate:
self.update()
self.m_needsUpdate = False

def _isNoteBlack(self, note):
baseNote = note % 12
return bool(baseNote in (1, 3, 6, 8, 10))

def _getRectFromMidiNote(self, note):
return self.m_midi_map.get(str(note % 12))

+ 20
- 7
src/xycontroller.py View File

@@ -69,23 +69,23 @@ class XYGraphicsScene(QGraphicsScene):
self.m_channels = channels self.m_channels = channels


def setPosX(self, x, forward=True): def setPosX(self, x, forward=True):
if (self.m_mouseLock == False):
if not self.m_mouseLock:
pos_x = x*(self.p_size.x()+self.p_size.width()) pos_x = x*(self.p_size.x()+self.p_size.width())
self.m_cursor.setPos(pos_x, self.m_cursor.y()) self.m_cursor.setPos(pos_x, self.m_cursor.y())
self.m_lineV.setX(pos_x) self.m_lineV.setX(pos_x)


if (forward):
if forward:
self.sendMIDI(pos_x/(self.p_size.x()+self.p_size.width()), None) self.sendMIDI(pos_x/(self.p_size.x()+self.p_size.width()), None)
else: else:
self.m_smooth_x = pos_x self.m_smooth_x = pos_x


def setPosY(self, y, forward=True): def setPosY(self, y, forward=True):
if (self.m_mouseLock == False):
if not self.m_mouseLock:
pos_y = y*(self.p_size.y()+self.p_size.height()) pos_y = y*(self.p_size.y()+self.p_size.height())
self.m_cursor.setPos(self.m_cursor.x(), pos_y) self.m_cursor.setPos(self.m_cursor.x(), pos_y)
self.m_lineH.setY(pos_y) self.m_lineH.setY(pos_y)


if (forward):
if forward:
self.sendMIDI(None, pos_y/(self.p_size.y()+self.p_size.height())) self.sendMIDI(None, pos_y/(self.p_size.y()+self.p_size.height()))
else: else:
self.m_smooth_y = pos_y self.m_smooth_y = pos_y
@@ -142,7 +142,7 @@ class XYGraphicsScene(QGraphicsScene):
self.m_smooth_x = pos.x() self.m_smooth_x = pos.x()
self.m_smooth_y = pos.y() self.m_smooth_y = pos.y()


if (self.m_smooth == False):
if (not self.m_smooth):
self.m_cursor.setPos(pos) self.m_cursor.setPos(pos)
self.m_lineH.setY(pos.y()) self.m_lineH.setY(pos.y())
self.m_lineV.setX(pos.x()) self.m_lineV.setX(pos.x())
@@ -173,6 +173,13 @@ class XYGraphicsScene(QGraphicsScene):
def updateSmooth(self): def updateSmooth(self):
if (self.m_smooth): if (self.m_smooth):
if (self.m_cursor.x() != self.m_smooth_x or self.m_cursor.y() != self.m_smooth_y): if (self.m_cursor.x() != self.m_smooth_x or self.m_cursor.y() != self.m_smooth_y):
if (abs(self.m_cursor.x() - self.m_smooth_x) <= 0.001):
self.m_smooth_x = self.m_cursor.x()
return
elif (abs(self.m_cursor.y() - self.m_smooth_y) <= 0.001):
self.m_smooth_y = self.m_cursor.y()
return

new_x = (self.m_smooth_x+self.m_cursor.x()*3)/4 new_x = (self.m_smooth_x+self.m_cursor.x()*3)/4
new_y = (self.m_smooth_y+self.m_cursor.y()*3)/4 new_y = (self.m_smooth_y+self.m_cursor.y()*3)/4
pos = QPointF(new_x, new_y) pos = QPointF(new_x, new_y)
@@ -385,9 +392,15 @@ class XYControllerW(QMainWindow, ui_xycontroller.Ui_XYControllerW):


@pyqtSlot(float, float) @pyqtSlot(float, float)
def slot_sceneCursorMoved(self, xp, yp): def slot_sceneCursorMoved(self, xp, yp):
self.dial_x.blockSignals(True)
self.dial_y.blockSignals(True)

self.dial_x.setValue(xp*100) self.dial_x.setValue(xp*100)
self.dial_y.setValue(yp*100) self.dial_y.setValue(yp*100)


self.dial_x.blockSignals(False)
self.dial_y.blockSignals(False)

@pyqtSlot(bool) @pyqtSlot(bool)
def slot_showKeyboard(self, yesno): def slot_showKeyboard(self, yesno):
self.scrollArea.setVisible(yesno) self.scrollArea.setVisible(yesno)
@@ -495,9 +508,9 @@ class XYControllerW(QMainWindow, ui_xycontroller.Ui_XYControllerW):


if (channel in self.m_channels): if (channel in self.m_channels):
if (mode == 0x80): if (mode == 0x80):
self.keyboard.noteOff(data2, False)
self.keyboard.sendNoteOff(data2, False)
elif (mode == 0x90): elif (mode == 0x90):
self.keyboard.noteOn(data2, False)
self.keyboard.sendNoteOn(data2, False)
elif (mode == 0xB0): elif (mode == 0xB0):
self.scene.handleCC(data2, data3) self.scene.handleCC(data2, data3)




Loading…
Cancel
Save