From f5d2580b69c38c19a86f17068f56bb9ce39d0120 Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 17 May 2012 20:48:36 +0100 Subject: [PATCH] Update pixmapkeyboard.py for c++ compat --- src/carla.py | 4 +-- src/pixmapkeyboard.py | 57 +++++++++++++++++++++---------------------- src/xycontroller.py | 27 ++++++++++++++------ 3 files changed, 50 insertions(+), 38 deletions(-) diff --git a/src/carla.py b/src/carla.py index 25ac52b..96dd6c8 100755 --- a/src/carla.py +++ b/src/carla.py @@ -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): diff --git a/src/pixmapkeyboard.py b/src/pixmapkeyboard.py index ac50614..5a17fb2 100644 --- a/src/pixmapkeyboard.py +++ b/src/pixmapkeyboard.py @@ -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)) diff --git a/src/xycontroller.py b/src/xycontroller.py index 4884dfc..6f573b2 100755 --- a/src/xycontroller.py +++ b/src/xycontroller.py @@ -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)