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):
pwidget = self.m_plugin_list[plugin_id]
if (pwidget):
pwidget.edit_dialog.keyboard.noteOn(note, False)
pwidget.edit_dialog.keyboard.sendNoteOn(note, False)

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

@pyqtSlot(int, int)
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)

def noteOn(self, note, sendSignal=True):
def sendNoteOn(self, note, sendSignal=True):
if 0 <= note <= 127 and note not in self.m_enabledKeys:
self.m_enabledKeys.append(note)
if sendSignal:
@@ -113,7 +113,7 @@ class PixmapKeyboard(QWidget):
if len(self.m_enabledKeys) == 1:
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:
self.m_enabledKeys.remove(note)
if sendSignal:
@@ -125,13 +125,6 @@ class PixmapKeyboard(QWidget):
if len(self.m_enabledKeys) == 0:
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):
if color == self.COLOR_CLASSIC:
self.m_colorStr = "classic"
@@ -139,25 +132,23 @@ class PixmapKeyboard(QWidget):
self.m_colorStr = "orange"
else:
qCritical("PixmapKeyboard::setMode(%i, %i) - Invalid keyboard color" % (mode, color))
self.setMode(mode)
return
return self.setMode(mode)

if mode == self.HORIZONTAL:
self.m_midi_map = midi_key2rect_map_horizontal
self.m_pixmap.load(":/bitmaps/kbd_h_%s.png" % self.m_colorStr)
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
elif mode == self.VERTICAL:
self.m_midi_map = midi_key2rect_map_vertical
self.m_pixmap.load(":/bitmaps/kbd_v_%s.png" % self.m_colorStr)
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()
else:
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)

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

self.update()

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

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

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)

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

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)

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

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

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

self.m_lastMouseNote = note

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

for i in range(self.m_octaves):
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:
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

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())
self.m_cursor.setPos(pos_x, self.m_cursor.y())
self.m_lineV.setX(pos_x)

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

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())
self.m_cursor.setPos(self.m_cursor.x(), 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()))
else:
self.m_smooth_y = pos_y
@@ -142,7 +142,7 @@ class XYGraphicsScene(QGraphicsScene):
self.m_smooth_x = pos.x()
self.m_smooth_y = pos.y()

if (self.m_smooth == False):
if (not self.m_smooth):
self.m_cursor.setPos(pos)
self.m_lineH.setY(pos.y())
self.m_lineV.setX(pos.x())
@@ -173,6 +173,13 @@ class XYGraphicsScene(QGraphicsScene):
def updateSmooth(self):
if (self.m_smooth):
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_y = (self.m_smooth_y+self.m_cursor.y()*3)/4
pos = QPointF(new_x, new_y)
@@ -385,9 +392,15 @@ class XYControllerW(QMainWindow, ui_xycontroller.Ui_XYControllerW):

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

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

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

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

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



Loading…
Cancel
Save