From 03d66b905bed61d7079a9eda2a59f56b6178665e Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 30 Jan 2011 03:36:53 +0000 Subject: [PATCH] More cleanup, render.py and pixmapdial.py seem ok --- TODO | 14 ++++++---- src/pixmapdial.py | 49 ++++++++++++++++++++-------------- src/pixmapkeyboard.py | 5 ++-- src/render.py | 73 +++++++++++++++++++++++++++++---------------------- src/xicon.py | 1 + src/xycontroller.py | 17 +++++------- 6 files changed, 91 insertions(+), 68 deletions(-) diff --git a/TODO b/TODO index 42eaf85..f7c6b78 100755 --- a/TODO +++ b/TODO @@ -2,12 +2,14 @@ check if all those lambdas are really needed more stuff on init shared jacksettings setBufferSize and setSampleRate return true if task completed - #NOTE - keep this? - # TODO - set 1:1:1 pos if not valid +# NOTE - keep this? +# TODO - set 1:1:1 pos if not valid # TODO - ask jack for fields size - #FIXME - investigate this - #FIXME - inside the box font color only, or affects right click menu -#TODO - really needed? +# FIXME - investigate this +# FIXME - inside the box font color only, or affects right click menu +# TODO - really needed? +review pixmapkeyboard when this starts working again +make "from shared import QStringStr" work -- FOR BETA: cadence: screenshots (qtcurve theme?) @@ -28,6 +30,7 @@ patchcanvas: rubberband theming patchcanvas: # TESTING - force remove, or wait for removal? patchcanvas: # TESTING - should be fixed by now patchcanvas: in claudia, groups can still go > canvas_size (if pos > MAX) +render: add option to dont manage transport dont use jack_close on shutdown_callback icons for all apps new icon for canvas module @@ -49,6 +52,7 @@ jacklib: cleanup render: meterbridge, allow user to set type, dpm as default render: priority logs: final syntax highlighter +pixmapdial: reimplement mouse events, for some new [smart] way of interaction look for BPM change workarounds translations diff --git a/src/pixmapdial.py b/src/pixmapdial.py index 27aca49..10d4cc5 100644 --- a/src/pixmapdial.py +++ b/src/pixmapdial.py @@ -5,7 +5,7 @@ from PyQt4.QtCore import QRectF from PyQt4.QtGui import QDial, QPainter, QPixmap -# Imports (Plugins and Resources) +# Imports (Custom Stuff) import icons_rc # Custom Dial, using a pixmap for paiting @@ -16,16 +16,20 @@ class PixmapDial(QDial): self.p_width = 1 self.p_height = 1 self.p_count = 1 + self.use_pixmap = True self.setPixmap(1) def setPixmap(self, n): if (n < 1): - n = 1 - elif (n > 6): + self.use_pixmap = False + else: + self.use_pixmap = True + + if (n > 6): n = 6 - self.pixmap = QPixmap(":/bitmaps/dial_%i.png" % (n)) - self.updateSizes() + self.pixmap = QPixmap(":/bitmaps/dial_%i.png" % (n)) + self.updateSizes() def getSize(self): return p_width @@ -35,10 +39,10 @@ class PixmapDial(QDial): self.p_height = self.pixmap.height() if (self.p_width < 1): - self.p_width = 1 + self.p_width = 1 if (self.p_height < 1): - self.p_height = 1 + self.p_height = 1 self.p_count = self.p_height/self.p_width @@ -46,21 +50,28 @@ class PixmapDial(QDial): self.setMaximumSize(self.p_width, self.p_width) def paintEvent(self, event): - current = float(self.value()-self.minimum()) - divider = float(self.maximum()-self.minimum()) + if (self.use_pixmap): + current = float(self.value()-self.minimum()) + divider = float(self.maximum()-self.minimum()) + + if (divider == 0.0): + return - if (divider == 0.0): - return + yper = int((self.p_count-1)*(current/divider)) + ypos = self.p_width*yper - yper = int((self.p_count-1)*(current/divider)) - ypos = self.p_width*yper + target = QRectF(0.0, 0.0, self.p_width, self.p_width) + source = QRectF(0.0, ypos, self.p_width, self.p_width) - target = QRectF(0.0, 0.0, self.p_width, self.p_width) - source = QRectF(0.0, ypos, self.p_width, self.p_width) + painter = QPainter(self) + painter.drawPixmap(target, self.pixmap, source) - painter = QPainter(self) - painter.drawPixmap(target, self.pixmap, source) + else: + return QDial.paintEvent(self, event) def resizeEvent(self, event): - self.updateSizes() - QDial.resizeEvent(self, event) + if (self.use_pixmap): + self.updateSizes() + + return QDial.resizeEvent(self, event) + diff --git a/src/pixmapkeyboard.py b/src/pixmapkeyboard.py index 8724d57..46b63dd 100644 --- a/src/pixmapkeyboard.py +++ b/src/pixmapkeyboard.py @@ -5,7 +5,7 @@ from PyQt4.QtCore import Qt, QPointF, QRectF, QTimer, SIGNAL from PyQt4.QtGui import QPainter, QPixmap, QWidget -# Imports (Plugins and Resources) +# Imports (Custom Stuff) import icons_rc midi_key2rect_map_h = { @@ -123,7 +123,7 @@ class PixmapKeyboard(QWidget): self.timer = QTimer() self.timer.start(50) - self.setMidiMap('h', 1) + self.setMidiMap('h', True) self.setOctaves(6) self.connect(self.timer, SIGNAL("timeout()"), self.checkNeedsUpdate) @@ -357,3 +357,4 @@ class PixmapKeyboard(QWidget): source = QRectF(0, pos.y(), pos.width(), pos.height()) painter.drawPixmap(target, self.pixmap, source) + diff --git a/src/render.py b/src/render.py index c18ae9f..22d3465 100755 --- a/src/render.py +++ b/src/render.py @@ -2,16 +2,20 @@ # -*- coding: utf-8 -*- # Imports (Global) -import sys from time import sleep from PyQt4.QtCore import QProcess, QString, QTime, QTimer, SIGNAL -from PyQt4.QtGui import QApplication, QDialog, QIcon, QFontMetrics, QMessageBox +from PyQt4.QtGui import QDialog, QIcon, QFontMetrics, QMessageBox -# Imports (Plugins and Resources) +# Imports (Custom Stuff) import icons_rc, jacklib, ui_render -global jack_client -jack_client = None +# Properly convert QString to str +def QStringStr(string): + return str(unicode(string).encode('utf-8')) + +# Get Icon from user theme, using our own as backup (Oxygen) +def getIcon(icon, size=16): + return QIcon.fromTheme(icon, QIcon(":/%ix%i/.png" % (size,size))) # Render Window class RenderW(QDialog, ui_render.Ui_RenderW): @@ -25,9 +29,9 @@ class RenderW(QDialog, ui_render.Ui_RenderW): self.process = QProcess(self) self.timer = QTimer() - self.b_render.setIcon(QIcon.fromTheme("media-record", QIcon(":/16x16/media-record.png"))) - self.b_stop.setIcon(QIcon.fromTheme("media-playback-stop", QIcon(":/16x16/media-playback-stop.png"))) - self.b_close.setIcon(QIcon.fromTheme("dialog-close", QIcon(":/16x16/dialog-close.png"))) + self.b_render.setIcon(getIcon("media-record")) + self.b_stop.setIcon(getIcon("media-playback-stop")) + self.b_close.setIcon(getIcon("dialog-close")) self.b_stop.setVisible(False) self.b_low.setMaximumWidth(QFontMetrics(self.b_low.font()).width(self.tr("Low"))+9) @@ -38,7 +42,7 @@ class RenderW(QDialog, ui_render.Ui_RenderW): buffer_size = str(jacklib.get_buffer_size(jack_client)) for i in range(self.cb_buffer_size.count()): - if (self.cb_buffer_size.itemText(i) == buffer_size): + if (QStringStr(self.cb_buffer_size.itemText(i)) == buffer_size): self.cb_buffer_size.setCurrentIndex(i) self.sample_rate = jacklib.get_sample_rate(jack_client) @@ -62,16 +66,15 @@ class RenderW(QDialog, ui_render.Ui_RenderW): self.progressBar.setMaximum(0) self.progressBar.setValue(0) - self.connect(self.b_render, SIGNAL("clicked()"), self.func_render) - self.connect(self.b_stop, SIGNAL("clicked()"), self.func_stop) - self.connect(self.b_now_start, SIGNAL("clicked()"), self.func_now_start) - self.connect(self.b_now_end, SIGNAL("clicked()"), self.func_now_end) + self.connect(self.b_render, SIGNAL("clicked()"), self.render_start) + self.connect(self.b_stop, SIGNAL("clicked()"), self.render_stop) + self.connect(self.b_now_start, SIGNAL("clicked()"), self.setStartNow) + self.connect(self.b_now_end, SIGNAL("clicked()"), self.setEndNow) self.connect(self.te_start, SIGNAL("timeChanged(const QTime)"), self.updateStartTime) self.connect(self.te_end, SIGNAL("timeChanged(const QTime)"), self.updateEndTime) self.connect(self.timer, SIGNAL("timeout()"), self.updateProgressbar) - - def func_render(self): + def render_start(self): global jack_client self.group_render.setEnabled(False) @@ -81,7 +84,7 @@ class RenderW(QDialog, ui_render.Ui_RenderW): self.b_stop.setVisible(True) self.b_close.setEnabled(False) - freewheel = (self.cb_render_mode.currentText() == self.tr("Freewheel")) + freewheel = bool(self.cb_render_mode.currentIndex() == 1) buffer_size = int(self.cb_buffer_size.currentText()) time_start = self.te_start.time() @@ -104,7 +107,7 @@ class RenderW(QDialog, ui_render.Ui_RenderW): # Bit depth arguments.append("-b") - arguments.append(str(self.cb_depth.currentText().toUpper())) + arguments.append(QStringStr(self.cb_depth.currentText().toUpper())) # Channels arguments.append("-c") @@ -113,19 +116,19 @@ class RenderW(QDialog, ui_render.Ui_RenderW): elif (self.rb_stereo.isChecked()): arguments.append("2") elif (self.rb_outro.isChecked()): - arguments.append(str(self.sb_channels.value())) + arguments.append(QStringStr(self.sb_channels.value())) else: - arguments.append("2") #Just in case... + arguments.append("2") # Format arguments.append("-f") - arguments.append(str(self.cb_format.currentText())) + arguments.append(QStringStr(self.cb_format.currentText())) - # Preview - if (self.cb_preview.isChecked()): - arguments.append("-mb") - arguments.append("-mt") - arguments.append("dpm") + # TODO - Preview + #if (self.cb_preview.isChecked()): + #arguments.append("-mb") + #arguments.append("-mt") + #arguments.append("dpm") # Controlled by transport arguments.append("-jt") @@ -135,8 +138,8 @@ class RenderW(QDialog, ui_render.Ui_RenderW): arguments.append("-s") if (buffer_size != jacklib.get_buffer_size(jack_client)): - print "NOTICE: BufferSize change before render" jacklib.set_buffer_size(jack_client, buffer_size) + print "NOTICE: buffer size changed before render" if (jacklib.transport_query(jack_client, None) > 0): #Rolling jacklib.transport_stop(jack_client) @@ -155,14 +158,16 @@ class RenderW(QDialog, ui_render.Ui_RenderW): self.timer.start() jacklib.transport_start(jack_client) - def func_stop(self): + def render_stop(self): global jack_client jacklib.transport_stop(jack_client) - if (self.cb_render_mode.currentText() == self.tr("Freewheel")): + if (self.cb_render_mode.currentIndex() == 1): #Freewheel jacklib.set_freewheel(jack_client, 0) + sleep(1) + self.process.close() self.timer.stop() @@ -178,7 +183,7 @@ class RenderW(QDialog, ui_render.Ui_RenderW): self.progressBar.setValue(0) self.progressBar.update() - def func_now_start(self): + def setStartNow(self): global jack_client time = jacklib.get_current_transport_frame(jack_client)/self.sample_rate @@ -188,7 +193,7 @@ class RenderW(QDialog, ui_render.Ui_RenderW): self.te_start.setTime(QTime(hrs, mins, secs)) - def func_now_end(self): + def setEndNow(self): global jack_client time = jacklib.get_current_transport_frame(jack_client)/self.sample_rate @@ -200,6 +205,7 @@ class RenderW(QDialog, ui_render.Ui_RenderW): def updateProgressbar(self): global jack_client + time = jacklib.get_current_transport_frame(jack_client)/self.sample_rate self.progressBar.setValue(time) @@ -224,10 +230,14 @@ class RenderW(QDialog, ui_render.Ui_RenderW): # Allow to use this as a standalone app if __name__ == '__main__': + # Additional imports + import sys + from PyQt4.QtGui import QApplication + # App initialization app = QApplication(sys.argv) - jack_client = jacklib.client_open("Render", jacklib.NullOption, None) + jack_client = jacklib.client_open("Render", jacklib.NullOption, 0) #jacklib.activate(jack_client) # Show GUI @@ -243,3 +253,4 @@ if __name__ == '__main__': # Exit properly sys.exit(ret) + diff --git a/src/xicon.py b/src/xicon.py index c6a2df6..2ddfc23 100755 --- a/src/xicon.py +++ b/src/xicon.py @@ -45,3 +45,4 @@ class XIcon(object): icon = "" return icon + diff --git a/src/xycontroller.py b/src/xycontroller.py index acbcd12..e02fe67 100644 --- a/src/xycontroller.py +++ b/src/xycontroller.py @@ -2,13 +2,12 @@ # -*- coding: utf-8 -*- # Imports (Global) -import sys -from PyQt4.QtCore import Qt, QPointF, QRectF, QSettings, QVariant, SIGNAL -from PyQt4.QtGui import QApplication, QMainWindow, QMessageBox, QSpacerItem -from PyQt4.QtGui import QColor, QPainter, QPen, QGraphicsScene, QGraphicsItem +from PyQt4.QtCore import QPointF, QRectF, QVariant, SIGNAL +from PyQt4.QtGui import QMainWindow, QSpacerItem +from PyQt4.QtGui import QColor, QPainter, QPen, QGraphicsItem, QGraphicsScene # Imports (Plugins and Resources) -import jacklib, icons_rc, ui_xycontroller +import ui_xycontroller from shared import * # XY GraphicsScene @@ -21,9 +20,8 @@ class XYGraphicsScene(QGraphicsScene): cursor_pen = QPen(QColor(255,255,255), 2) cursor_brush = QColor(255,255,255,50) self.xy_cursor = self.addEllipse(QRectF(-10, -10, 20, 20), cursor_pen, cursor_brush) - #self.xy_cursor.setPos(-10, 0) - line_pen = QPen(QColor(200,200,200,100),1,Qt.DashLine) + line_pen = QPen(QColor(200,200,200,100),1, Qt.DashLine) self.hline = self.addLine(-9999, 0, 9999, 0, line_pen) self.vline = self.addLine(0, -9999, 0, 9999, line_pen) @@ -271,10 +269,6 @@ def process_callback(nframes, arg): #--------------- main ------------------ if __name__ == '__main__': - # Raster Graphics engine - QRasterApplication = QApplication - QRasterApplication.setGraphicsSystem("raster") - # App initialization app = QRasterApplication(sys.argv) app.setApplicationName("XY-Controller") @@ -305,3 +299,4 @@ if __name__ == '__main__': # Exit properly sys.exit(ret) + -- 2.11.4.GIT