|
@@ -27,12 +27,12 @@ from carla_config import * |
|
|
from math import cos, floor, pi, sin |
|
|
from math import cos, floor, pi, sin |
|
|
|
|
|
|
|
|
if config_UseQt5: |
|
|
if config_UseQt5: |
|
|
from PyQt5.QtCore import Qt, QPointF, QRectF, QTimer, QSize |
|
|
|
|
|
|
|
|
from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QPointF, QRectF, QTimer, QSize |
|
|
from PyQt5.QtGui import QColor, QConicalGradient, QFont, QFontMetrics |
|
|
from PyQt5.QtGui import QColor, QConicalGradient, QFont, QFontMetrics |
|
|
from PyQt5.QtGui import QLinearGradient, QPainter, QPainterPath, QPen, QPixmap |
|
|
from PyQt5.QtGui import QLinearGradient, QPainter, QPainterPath, QPen, QPixmap |
|
|
from PyQt5.QtWidgets import QDial |
|
|
from PyQt5.QtWidgets import QDial |
|
|
else: |
|
|
else: |
|
|
from PyQt4.QtCore import Qt, QPointF, QRectF, QTimer, QSize |
|
|
|
|
|
|
|
|
from PyQt4.QtCore import pyqtSignal, pyqtSlot, Qt, QPointF, QRectF, QTimer, QSize |
|
|
from PyQt4.QtGui import QColor, QConicalGradient, QFont, QFontMetrics |
|
|
from PyQt4.QtGui import QColor, QConicalGradient, QFont, QFontMetrics |
|
|
from PyQt4.QtGui import QDial, QLinearGradient, QPainter, QPainterPath, QPen, QPixmap |
|
|
from PyQt4.QtGui import QDial, QLinearGradient, QPainter, QPainterPath, QPen, QPixmap |
|
|
|
|
|
|
|
@@ -40,15 +40,16 @@ else: |
|
|
# Widget Class |
|
|
# Widget Class |
|
|
|
|
|
|
|
|
class PixmapDial(QDial): |
|
|
class PixmapDial(QDial): |
|
|
# enum CustomPaint |
|
|
|
|
|
CUSTOM_PAINT_NULL = 0 |
|
|
|
|
|
CUSTOM_PAINT_CARLA_WET = 1 |
|
|
|
|
|
CUSTOM_PAINT_CARLA_VOL = 2 |
|
|
|
|
|
CUSTOM_PAINT_CARLA_L = 3 |
|
|
|
|
|
CUSTOM_PAINT_CARLA_R = 4 |
|
|
|
|
|
CUSTOM_PAINT_COLOR = 5 |
|
|
|
|
|
CUSTOM_PAINT_ZITA = 6 |
|
|
|
|
|
CUSTOM_PAINT_NO_GRADIENT = 7 |
|
|
|
|
|
|
|
|
# enum CustomPaintMode |
|
|
|
|
|
CUSTOM_PAINT_MODE_NULL = 0 # default (NOTE: only this mode has label gradient) |
|
|
|
|
|
CUSTOM_PAINT_MODE_CARLA_WET = 1 # color blue-green gradient (reserved #3) |
|
|
|
|
|
CUSTOM_PAINT_MODE_CARLA_VOL = 2 # color blue (reserved #3) |
|
|
|
|
|
CUSTOM_PAINT_MODE_CARLA_L = 3 # color yellow (reserved #4) |
|
|
|
|
|
CUSTOM_PAINT_MODE_CARLA_R = 4 # color yellow (reserved #4) |
|
|
|
|
|
CUSTOM_PAINT_MODE_CARLA_PAN = 5 # color yellow (reserved #3) |
|
|
|
|
|
CUSTOM_PAINT_MODE_COLOR = 6 # color, selectable (reserved #3) |
|
|
|
|
|
CUSTOM_PAINT_MODE_ZITA = 7 # custom zita knob (reserved #6) |
|
|
|
|
|
CUSTOM_PAINT_MODE_NO_GRADIENT = 8 # skip label gradient |
|
|
|
|
|
|
|
|
# enum Orientation |
|
|
# enum Orientation |
|
|
HORIZONTAL = 0 |
|
|
HORIZONTAL = 0 |
|
@@ -57,23 +58,27 @@ class PixmapDial(QDial): |
|
|
HOVER_MIN = 0 |
|
|
HOVER_MIN = 0 |
|
|
HOVER_MAX = 9 |
|
|
HOVER_MAX = 9 |
|
|
|
|
|
|
|
|
|
|
|
# signals |
|
|
|
|
|
realValueChanged = pyqtSignal(float) |
|
|
|
|
|
|
|
|
def __init__(self, parent, index=0): |
|
|
def __init__(self, parent, index=0): |
|
|
QDial.__init__(self, parent) |
|
|
QDial.__init__(self, parent) |
|
|
|
|
|
|
|
|
self.fIndex = index |
|
|
|
|
|
self.fPixmap = QPixmap(":/bitmaps/dial_01d.png") |
|
|
|
|
|
self.fPixmapNum = "01" |
|
|
|
|
|
|
|
|
|
|
|
self.fCustomColor = QColor(0, 0, 0) |
|
|
|
|
|
self.fCustomPaint = self.CUSTOM_PAINT_NULL |
|
|
|
|
|
|
|
|
self.fMinimum = 0.0 |
|
|
|
|
|
self.fMaximum = 1.0 |
|
|
|
|
|
self.fRealValue = 0.0 |
|
|
|
|
|
|
|
|
self.fIsHovered = False |
|
|
self.fIsHovered = False |
|
|
self.fHoverStep = self.HOVER_MIN |
|
|
self.fHoverStep = self.HOVER_MIN |
|
|
|
|
|
|
|
|
|
|
|
self.fIndex = index |
|
|
|
|
|
self.fPixmap = QPixmap(":/bitmaps/dial_01d.png") |
|
|
|
|
|
self.fPixmapNum = "01" |
|
|
|
|
|
|
|
|
if self.fPixmap.width() > self.fPixmap.height(): |
|
|
if self.fPixmap.width() > self.fPixmap.height(): |
|
|
self.fOrientation = self.HORIZONTAL |
|
|
|
|
|
|
|
|
self.fPixmapOrientation = self.HORIZONTAL |
|
|
else: |
|
|
else: |
|
|
self.fOrientation = self.VERTICAL |
|
|
|
|
|
|
|
|
self.fPixmapOrientation = self.VERTICAL |
|
|
|
|
|
|
|
|
self.fLabel = "" |
|
|
self.fLabel = "" |
|
|
self.fLabelPos = QPointF(0.0, 0.0) |
|
|
self.fLabelPos = QPointF(0.0, 0.0) |
|
@@ -81,113 +86,179 @@ class PixmapDial(QDial): |
|
|
self.fLabelFont.setPointSize(6) |
|
|
self.fLabelFont.setPointSize(6) |
|
|
self.fLabelWidth = 0 |
|
|
self.fLabelWidth = 0 |
|
|
self.fLabelHeight = 0 |
|
|
self.fLabelHeight = 0 |
|
|
self.fLabelGradient = QLinearGradient(0, 0, 0, 1) |
|
|
|
|
|
|
|
|
|
|
|
if self.palette().window().color().lightness() > 100: |
|
|
if self.palette().window().color().lightness() > 100: |
|
|
# Light background |
|
|
# Light background |
|
|
c = self.palette().dark().color() |
|
|
c = self.palette().dark().color() |
|
|
self.fColor1 = c |
|
|
|
|
|
self.fColor2 = QColor(c.red(), c.green(), c.blue(), 0) |
|
|
|
|
|
self.fColorT = [self.palette().buttonText().color(), self.palette().mid().color()] |
|
|
|
|
|
|
|
|
self.fLabelGradientColor1 = c |
|
|
|
|
|
self.fLabelGradientColor2 = QColor(c.red(), c.green(), c.blue(), 0) |
|
|
|
|
|
self.fLabelGradientColorT = [self.palette().buttonText().color(), self.palette().mid().color()] |
|
|
else: |
|
|
else: |
|
|
# Dark background |
|
|
# Dark background |
|
|
self.fColor1 = QColor(0, 0, 0, 255) |
|
|
|
|
|
self.fColor2 = QColor(0, 0, 0, 0) |
|
|
|
|
|
self.fColorT = [Qt.white, Qt.darkGray] |
|
|
|
|
|
|
|
|
self.fLabelGradientColor1 = QColor(0, 0, 0, 255) |
|
|
|
|
|
self.fLabelGradientColor2 = QColor(0, 0, 0, 0) |
|
|
|
|
|
self.fLabelGradientColorT = [Qt.white, Qt.darkGray] |
|
|
|
|
|
|
|
|
|
|
|
self.fLabelGradient = QLinearGradient(0, 0, 0, 1) |
|
|
|
|
|
self.fLabelGradient.setColorAt(0.0, self.fLabelGradientColor1) |
|
|
|
|
|
self.fLabelGradient.setColorAt(0.6, self.fLabelGradientColor1) |
|
|
|
|
|
self.fLabelGradient.setColorAt(1.0, self.fLabelGradientColor2) |
|
|
|
|
|
|
|
|
|
|
|
self.fLabelGradientRect = QRectF(0.0, 0.0, 0.0, 0.0) |
|
|
|
|
|
|
|
|
|
|
|
self.fCustomPaintMode = self.CUSTOM_PAINT_MODE_NULL |
|
|
|
|
|
self.fCustomPaintColor = QColor(0xff, 0xff, 0xff) |
|
|
|
|
|
|
|
|
self.updateSizes() |
|
|
self.updateSizes() |
|
|
|
|
|
|
|
|
|
|
|
# Fake internal value, 10'000 precision |
|
|
|
|
|
QDial.setMinimum(self, 0) |
|
|
|
|
|
QDial.setMaximum(self, 10000) |
|
|
|
|
|
QDial.setValue(self, 0) |
|
|
|
|
|
|
|
|
|
|
|
self.valueChanged.connect(self.slot_valueChanged) |
|
|
|
|
|
|
|
|
def getIndex(self): |
|
|
def getIndex(self): |
|
|
return self.fIndex |
|
|
return self.fIndex |
|
|
|
|
|
|
|
|
def getSize(self): |
|
|
|
|
|
return self.fSize |
|
|
|
|
|
|
|
|
def getBaseSize(self): |
|
|
|
|
|
return self.fPixmapBaseSize |
|
|
|
|
|
|
|
|
def setCustomColor(self, color): |
|
|
|
|
|
self.fCustomColor = color |
|
|
|
|
|
#self.update() |
|
|
|
|
|
|
|
|
def forceWhiteLabelGradientText(self): |
|
|
|
|
|
self.fLabelGradientColor1 = QColor(0, 0, 0, 255) |
|
|
|
|
|
self.fLabelGradientColor2 = QColor(0, 0, 0, 0) |
|
|
|
|
|
self.fLabelGradientColorT = [Qt.white, Qt.darkGray] |
|
|
|
|
|
|
|
|
def setCustomPaint(self, paint): |
|
|
|
|
|
self.fCustomPaint = paint |
|
|
|
|
|
self.fLabelPos.setY(self.fSize + self.fLabelHeight/2) |
|
|
|
|
|
#self.update() |
|
|
|
|
|
|
|
|
#def setMidWhiteText(self): |
|
|
|
|
|
#self.fColor1 = QColor(0, 0, 0, 255) |
|
|
|
|
|
#self.fColor2 = QColor(0, 0, 0, 0) |
|
|
|
|
|
#self.fColorT = [QColor("#BBB"), Qt.darkGray] |
|
|
|
|
|
|
|
|
def setEnabled(self, enabled): |
|
|
|
|
|
if self.isEnabled() != enabled: |
|
|
|
|
|
self.fPixmap.load(":/bitmaps/dial_%s%s.png" % (self.fPixmapNum, "" if enabled else "d")) |
|
|
|
|
|
self.updateSizes() |
|
|
|
|
|
self.update() |
|
|
|
|
|
QDial.setEnabled(self, enabled) |
|
|
|
|
|
|
|
|
def updateSizes(self): |
|
|
|
|
|
self.fPixmapWidth = self.fPixmap.width() |
|
|
|
|
|
self.fPixmapHeight = self.fPixmap.height() |
|
|
|
|
|
|
|
|
def setIndex(self, index): |
|
|
|
|
|
self.fIndex = index |
|
|
|
|
|
|
|
|
if self.fPixmapWidth < 1: |
|
|
|
|
|
self.fPixmapWidth = 1 |
|
|
|
|
|
|
|
|
def setLabel(self, label): |
|
|
|
|
|
self.fLabel = label |
|
|
|
|
|
|
|
|
if self.fPixmapHeight < 1: |
|
|
|
|
|
self.fPixmapHeight = 1 |
|
|
|
|
|
|
|
|
|
|
|
if self.fPixmapOrientation == self.HORIZONTAL: |
|
|
|
|
|
self.fPixmapBaseSize = self.fPixmapHeight |
|
|
|
|
|
self.fPixmapLayersCount = self.fPixmapWidth / self.fPixmapHeight |
|
|
|
|
|
else: |
|
|
|
|
|
self.fPixmapBaseSize = self.fPixmapWidth |
|
|
|
|
|
self.fPixmapLayersCount = self.fPixmapHeight / self.fPixmapWidth |
|
|
|
|
|
|
|
|
|
|
|
self.setMinimumSize(self.fPixmapBaseSize, self.fPixmapBaseSize + self.fLabelHeight + 5) |
|
|
|
|
|
self.setMaximumSize(self.fPixmapBaseSize, self.fPixmapBaseSize + self.fLabelHeight + 5) |
|
|
|
|
|
|
|
|
self.fLabelWidth = QFontMetrics(self.fLabelFont).width(label) |
|
|
|
|
|
|
|
|
if not self.fLabel: |
|
|
|
|
|
self.fLabelHeight = 0 |
|
|
|
|
|
self.fLabelWidth = 0 |
|
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
self.fLabelWidth = QFontMetrics(self.fLabelFont).width(self.fLabel) |
|
|
self.fLabelHeight = QFontMetrics(self.fLabelFont).height() |
|
|
self.fLabelHeight = QFontMetrics(self.fLabelFont).height() |
|
|
|
|
|
|
|
|
self.fLabelPos.setX(float(self.fSize)/2.0 - float(self.fLabelWidth)/2.0) |
|
|
|
|
|
self.fLabelPos.setY(self.fSize + self.fLabelHeight) |
|
|
|
|
|
|
|
|
self.fLabelPos.setX(float(self.fPixmapBaseSize)/2.0 - float(self.fLabelWidth)/2.0) |
|
|
|
|
|
|
|
|
|
|
|
if self.fPixmapNum in ("01", "02"): |
|
|
|
|
|
self.fLabelPos.setY(self.fPixmapBaseSize + self.fLabelHeight) |
|
|
|
|
|
else: |
|
|
|
|
|
self.fLabelPos.setY(self.fPixmapBaseSize + self.fLabelHeight/2) |
|
|
|
|
|
|
|
|
|
|
|
self.fLabelGradient.setStart(0, float(self.fPixmapBaseSize)/2.0) |
|
|
|
|
|
self.fLabelGradient.setFinalStop(0, self.fPixmapBaseSize + self.fLabelHeight + 5) |
|
|
|
|
|
|
|
|
|
|
|
self.fLabelGradientRect = QRectF(float(self.fPixmapBaseSize)/8.0, float(self.fPixmapBaseSize)/2.0, float(self.fPixmapBaseSize*3)/4.0, self.fPixmapBaseSize+self.fLabelHeight+5) |
|
|
|
|
|
|
|
|
|
|
|
def setCustomPaintMode(self, paintMode): |
|
|
|
|
|
if self.fCustomPaintMode == paintMode: |
|
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
self.fCustomPaintMode = paintMode |
|
|
|
|
|
self.update() |
|
|
|
|
|
|
|
|
|
|
|
def setCustomPaintColor(self, color): |
|
|
|
|
|
if self.fCustomPaintColor == color: |
|
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
self.fCustomPaintColor = color |
|
|
|
|
|
self.update() |
|
|
|
|
|
|
|
|
|
|
|
def setLabel(self, label): |
|
|
|
|
|
if self.fLabel == label: |
|
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
self.fLabel = label |
|
|
|
|
|
self.updateSizes() |
|
|
|
|
|
self.update() |
|
|
|
|
|
|
|
|
|
|
|
def setEnabled(self, enabled): |
|
|
|
|
|
if self.isEnabled() == enabled: |
|
|
|
|
|
return |
|
|
|
|
|
|
|
|
self.fLabelGradient.setColorAt(0.0, self.fColor1) |
|
|
|
|
|
self.fLabelGradient.setColorAt(0.6, self.fColor1) |
|
|
|
|
|
self.fLabelGradient.setColorAt(1.0, self.fColor2) |
|
|
|
|
|
|
|
|
QDial.setEnabled(self, enabled) |
|
|
|
|
|
|
|
|
self.fLabelGradient.setStart(0, float(self.fSize)/2.0) |
|
|
|
|
|
self.fLabelGradient.setFinalStop(0, self.fSize + self.fLabelHeight + 5) |
|
|
|
|
|
|
|
|
self.fPixmap.load(":/bitmaps/dial_%s%s.png" % (self.fPixmapNum, "" if enabled else "d")) |
|
|
|
|
|
self.updateSizes() |
|
|
|
|
|
self.update() |
|
|
|
|
|
|
|
|
self.fLabelGradientRect = QRectF(float(self.fSize)/8.0, float(self.fSize)/2.0, float(self.fSize*6)/8.0, self.fSize+self.fLabelHeight+5) |
|
|
|
|
|
#self.update() |
|
|
|
|
|
|
|
|
def setIndex(self, index): |
|
|
|
|
|
self.fIndex = index |
|
|
|
|
|
|
|
|
def setPixmap(self, pixmapId): |
|
|
def setPixmap(self, pixmapId): |
|
|
self.fPixmapNum = "%02i" % pixmapId |
|
|
self.fPixmapNum = "%02i" % pixmapId |
|
|
self.fPixmap.load(":/bitmaps/dial_%s%s.png" % (self.fPixmapNum, "" if self.isEnabled() else "d")) |
|
|
self.fPixmap.load(":/bitmaps/dial_%s%s.png" % (self.fPixmapNum, "" if self.isEnabled() else "d")) |
|
|
|
|
|
|
|
|
if self.fPixmap.width() > self.fPixmap.height(): |
|
|
if self.fPixmap.width() > self.fPixmap.height(): |
|
|
self.fOrientation = self.HORIZONTAL |
|
|
|
|
|
|
|
|
self.fPixmapOrientation = self.HORIZONTAL |
|
|
else: |
|
|
else: |
|
|
self.fOrientation = self.VERTICAL |
|
|
|
|
|
|
|
|
self.fPixmapOrientation = self.VERTICAL |
|
|
|
|
|
|
|
|
self.updateSizes() |
|
|
|
|
|
#self.update() |
|
|
|
|
|
|
|
|
# special pixmaps |
|
|
|
|
|
if self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_NULL: |
|
|
|
|
|
# reserved for carla-wet, carla-vol, carla-pan and color |
|
|
|
|
|
if self.fPixmapNum == "03": |
|
|
|
|
|
self.fCustomPaintMode = self.CUSTOM_PAINT_MODE_COLOR |
|
|
|
|
|
|
|
|
def setWhiteText(self): |
|
|
|
|
|
self.fColor1 = QColor(0, 0, 0, 255) |
|
|
|
|
|
self.fColor2 = QColor(0, 0, 0, 0) |
|
|
|
|
|
self.fColorT = [Qt.white, Qt.darkGray] |
|
|
|
|
|
|
|
|
# reserved for carla-L and carla-R |
|
|
|
|
|
elif self.fPixmapNum == "04": |
|
|
|
|
|
self.fCustomPaintMode = self.CUSTOM_PAINT_MODE_CARLA_L |
|
|
|
|
|
|
|
|
def setMidWhiteText(self): |
|
|
|
|
|
self.fColor1 = QColor(0, 0, 0, 255) |
|
|
|
|
|
self.fColor2 = QColor(0, 0, 0, 0) |
|
|
|
|
|
self.fColorT = [QColor("#BBB"), Qt.darkGray] |
|
|
|
|
|
|
|
|
# reserved for zita |
|
|
|
|
|
elif self.fPixmapNum == "06": |
|
|
|
|
|
self.fCustomPaintMode = self.CUSTOM_PAINT_MODE_ZITA |
|
|
|
|
|
|
|
|
def minimumSizeHint(self): |
|
|
|
|
|
return QSize(self.fSize, self.fSize) |
|
|
|
|
|
|
|
|
self.updateSizes() |
|
|
|
|
|
self.update() |
|
|
|
|
|
|
|
|
def sizeHint(self): |
|
|
|
|
|
return QSize(self.fSize, self.fSize) |
|
|
|
|
|
|
|
|
def setMinimum(self, value): |
|
|
|
|
|
self.fMinimum = value |
|
|
|
|
|
|
|
|
def updateSizes(self): |
|
|
|
|
|
self.fWidth = self.fPixmap.width() |
|
|
|
|
|
self.fHeight = self.fPixmap.height() |
|
|
|
|
|
|
|
|
def setMaximum(self, value): |
|
|
|
|
|
self.fMaximum = value |
|
|
|
|
|
|
|
|
if self.fWidth < 1: |
|
|
|
|
|
self.fWidth = 1 |
|
|
|
|
|
|
|
|
def setValue(self, value): |
|
|
|
|
|
if self.fRealValue == value: |
|
|
|
|
|
return |
|
|
|
|
|
|
|
|
if self.fHeight < 1: |
|
|
|
|
|
self.fHeight = 1 |
|
|
|
|
|
|
|
|
self.fRealValue = value |
|
|
|
|
|
normValue = float(value - self.fMinimum) / float(self.fMaximum - self.fMinimum) |
|
|
|
|
|
QDial.setValue(self, int(normValue * 10000)) |
|
|
|
|
|
|
|
|
if self.fOrientation == self.HORIZONTAL: |
|
|
|
|
|
self.fSize = self.fHeight |
|
|
|
|
|
self.fCount = self.fWidth / self.fHeight |
|
|
|
|
|
else: |
|
|
|
|
|
self.fSize = self.fWidth |
|
|
|
|
|
self.fCount = self.fHeight / self.fWidth |
|
|
|
|
|
|
|
|
@pyqtSlot(int) |
|
|
|
|
|
def slot_valueChanged(self, value): |
|
|
|
|
|
self.fRealValue = float(value)/10000.0 * (self.fMaximum - self.fMinimum) + self.fMinimum |
|
|
|
|
|
self.realValueChanged.emit(self.fRealValue) |
|
|
|
|
|
|
|
|
self.setMinimumSize(self.fSize, self.fSize + self.fLabelHeight + 5) |
|
|
|
|
|
self.setMaximumSize(self.fSize, self.fSize + self.fLabelHeight + 5) |
|
|
|
|
|
|
|
|
def minimumSizeHint(self): |
|
|
|
|
|
return QSize(self.fPixmapBaseSize, self.fPixmapBaseSize) |
|
|
|
|
|
|
|
|
|
|
|
def sizeHint(self): |
|
|
|
|
|
return QSize(self.fPixmapBaseSize, self.fPixmapBaseSize) |
|
|
|
|
|
|
|
|
def enterEvent(self, event): |
|
|
def enterEvent(self, event): |
|
|
self.fIsHovered = True |
|
|
self.fIsHovered = True |
|
@@ -209,39 +280,33 @@ class PixmapDial(QDial): |
|
|
painter.setRenderHint(QPainter.Antialiasing, True) |
|
|
painter.setRenderHint(QPainter.Antialiasing, True) |
|
|
|
|
|
|
|
|
if self.fLabel: |
|
|
if self.fLabel: |
|
|
if self.fCustomPaint == self.CUSTOM_PAINT_NULL: |
|
|
|
|
|
painter.setPen(self.fColor2) |
|
|
|
|
|
|
|
|
if self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_NULL: |
|
|
|
|
|
painter.setPen(self.fLabelGradientColor2) |
|
|
painter.setBrush(self.fLabelGradient) |
|
|
painter.setBrush(self.fLabelGradient) |
|
|
painter.drawRect(self.fLabelGradientRect) |
|
|
painter.drawRect(self.fLabelGradientRect) |
|
|
|
|
|
|
|
|
painter.setFont(self.fLabelFont) |
|
|
painter.setFont(self.fLabelFont) |
|
|
painter.setPen(self.fColorT[0 if self.isEnabled() else 1]) |
|
|
|
|
|
|
|
|
painter.setPen(self.fLabelGradientColorT[0 if self.isEnabled() else 1]) |
|
|
painter.drawText(self.fLabelPos, self.fLabel) |
|
|
painter.drawText(self.fLabelPos, self.fLabel) |
|
|
|
|
|
|
|
|
if self.isEnabled(): |
|
|
if self.isEnabled(): |
|
|
current = float(self.value() - self.minimum()) |
|
|
|
|
|
divider = float(self.maximum() - self.minimum()) |
|
|
|
|
|
|
|
|
|
|
|
if divider == 0.0: |
|
|
|
|
|
return |
|
|
|
|
|
|
|
|
normValue = float(self.fRealValue - self.fMinimum) / float(self.fMaximum - self.fMinimum) |
|
|
|
|
|
target = QRectF(0.0, 0.0, self.fPixmapBaseSize, self.fPixmapBaseSize) |
|
|
|
|
|
|
|
|
value = current / divider |
|
|
|
|
|
target = QRectF(0.0, 0.0, self.fSize, self.fSize) |
|
|
|
|
|
|
|
|
curLayer = int((self.fPixmapLayersCount - 1) * normValue) |
|
|
|
|
|
|
|
|
per = int((self.fCount - 1) * value) |
|
|
|
|
|
|
|
|
|
|
|
if self.fOrientation == self.HORIZONTAL: |
|
|
|
|
|
xpos = self.fSize * per |
|
|
|
|
|
|
|
|
if self.fPixmapOrientation == self.HORIZONTAL: |
|
|
|
|
|
xpos = self.fPixmapBaseSize * curLayer |
|
|
ypos = 0.0 |
|
|
ypos = 0.0 |
|
|
else: |
|
|
else: |
|
|
xpos = 0.0 |
|
|
xpos = 0.0 |
|
|
ypos = self.fSize * per |
|
|
|
|
|
|
|
|
ypos = self.fPixmapBaseSize * curLayer |
|
|
|
|
|
|
|
|
source = QRectF(xpos, ypos, self.fSize, self.fSize) |
|
|
|
|
|
|
|
|
source = QRectF(xpos, ypos, self.fPixmapBaseSize, self.fPixmapBaseSize) |
|
|
painter.drawPixmap(target, self.fPixmap, source) |
|
|
painter.drawPixmap(target, self.fPixmap, source) |
|
|
|
|
|
|
|
|
# Custom knobs (Dry/Wet and Volume) |
|
|
# Custom knobs (Dry/Wet and Volume) |
|
|
if self.fCustomPaint in (self.CUSTOM_PAINT_CARLA_WET, self.CUSTOM_PAINT_CARLA_VOL): |
|
|
|
|
|
|
|
|
if self.fCustomPaintMode in (self.CUSTOM_PAINT_MODE_CARLA_WET, self.CUSTOM_PAINT_MODE_CARLA_VOL): |
|
|
# knob color |
|
|
# knob color |
|
|
colorGreen = QColor(0x5D, 0xE7, 0x3D).lighter(100 + self.fHoverStep*6) |
|
|
colorGreen = QColor(0x5D, 0xE7, 0x3D).lighter(100 + self.fHoverStep*6) |
|
|
colorBlue = QColor(0x3E, 0xB8, 0xBE).lighter(100 + self.fHoverStep*6) |
|
|
colorBlue = QColor(0x3E, 0xB8, 0xBE).lighter(100 + self.fHoverStep*6) |
|
@@ -251,15 +316,15 @@ class PixmapDial(QDial): |
|
|
ballPath = QPainterPath() |
|
|
ballPath = QPainterPath() |
|
|
ballPath.addEllipse(ballRect) |
|
|
ballPath.addEllipse(ballRect) |
|
|
#painter.drawRect(ballRect) |
|
|
#painter.drawRect(ballRect) |
|
|
tmpValue = (0.375 + 0.75*value) |
|
|
|
|
|
|
|
|
tmpValue = (0.375 + 0.75*normValue) |
|
|
ballValue = tmpValue - floor(tmpValue) |
|
|
ballValue = tmpValue - floor(tmpValue) |
|
|
ballPoint = ballPath.pointAtPercent(ballValue) |
|
|
ballPoint = ballPath.pointAtPercent(ballValue) |
|
|
|
|
|
|
|
|
# draw arc |
|
|
# draw arc |
|
|
startAngle = 216*16 |
|
|
startAngle = 216*16 |
|
|
spanAngle = -252*16*value |
|
|
|
|
|
|
|
|
spanAngle = -252*16*normValue |
|
|
|
|
|
|
|
|
if self.fCustomPaint == self.CUSTOM_PAINT_CARLA_WET: |
|
|
|
|
|
|
|
|
if self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_CARLA_WET: |
|
|
painter.setBrush(colorBlue) |
|
|
painter.setBrush(colorBlue) |
|
|
painter.setPen(QPen(colorBlue, 0)) |
|
|
painter.setPen(QPen(colorBlue, 0)) |
|
|
painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.2, 2.2)) |
|
|
painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.2, 2.2)) |
|
@@ -285,7 +350,7 @@ class PixmapDial(QDial): |
|
|
painter.drawArc(4.0, 4.0, 26.0, 26.0, startAngle, spanAngle) |
|
|
painter.drawArc(4.0, 4.0, 26.0, 26.0, startAngle, spanAngle) |
|
|
|
|
|
|
|
|
# Custom knobs (L and R) |
|
|
# Custom knobs (L and R) |
|
|
elif self.fCustomPaint in (self.CUSTOM_PAINT_CARLA_L, self.CUSTOM_PAINT_CARLA_R): |
|
|
|
|
|
|
|
|
elif self.fCustomPaintMode in (self.CUSTOM_PAINT_MODE_CARLA_L, self.CUSTOM_PAINT_MODE_CARLA_R): |
|
|
# knob color |
|
|
# knob color |
|
|
color = QColor(0xAD, 0xD5, 0x48).lighter(100 + self.fHoverStep*6) |
|
|
color = QColor(0xAD, 0xD5, 0x48).lighter(100 + self.fHoverStep*6) |
|
|
|
|
|
|
|
@@ -294,7 +359,7 @@ class PixmapDial(QDial): |
|
|
ballPath = QPainterPath() |
|
|
ballPath = QPainterPath() |
|
|
ballPath.addEllipse(ballRect) |
|
|
ballPath.addEllipse(ballRect) |
|
|
#painter.drawRect(ballRect) |
|
|
#painter.drawRect(ballRect) |
|
|
tmpValue = (0.375 + 0.75*value) |
|
|
|
|
|
|
|
|
tmpValue = (0.375 + 0.75*normValue) |
|
|
ballValue = tmpValue - floor(tmpValue) |
|
|
ballValue = tmpValue - floor(tmpValue) |
|
|
ballPoint = ballPath.pointAtPercent(ballValue) |
|
|
ballPoint = ballPath.pointAtPercent(ballValue) |
|
|
|
|
|
|
|
@@ -303,34 +368,32 @@ class PixmapDial(QDial): |
|
|
painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.0, 2.0)) |
|
|
painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.0, 2.0)) |
|
|
|
|
|
|
|
|
# draw arc |
|
|
# draw arc |
|
|
if self.fCustomPaint == self.CUSTOM_PAINT_CARLA_L: |
|
|
|
|
|
|
|
|
if self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_CARLA_L: |
|
|
startAngle = 216*16 |
|
|
startAngle = 216*16 |
|
|
spanAngle = -252.0*16*value |
|
|
|
|
|
elif self.fCustomPaint == self.CUSTOM_PAINT_CARLA_R: |
|
|
|
|
|
startAngle = 324.0*16 |
|
|
|
|
|
spanAngle = 252.0*16*(1.0-value) |
|
|
|
|
|
|
|
|
spanAngle = -252.0*16*normValue |
|
|
else: |
|
|
else: |
|
|
return |
|
|
|
|
|
|
|
|
startAngle = 324.0*16 |
|
|
|
|
|
spanAngle = 252.0*16*(1.0-normValue) |
|
|
|
|
|
|
|
|
painter.setPen(QPen(color, 2)) |
|
|
painter.setPen(QPen(color, 2)) |
|
|
painter.drawArc(3.5, 4.5, 22.0, 22.0, startAngle, spanAngle) |
|
|
painter.drawArc(3.5, 4.5, 22.0, 22.0, startAngle, spanAngle) |
|
|
|
|
|
|
|
|
# Custom knobs (Color) |
|
|
# Custom knobs (Color) |
|
|
elif self.fCustomPaint == self.CUSTOM_PAINT_COLOR: |
|
|
|
|
|
|
|
|
elif self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_COLOR: |
|
|
# knob color |
|
|
# knob color |
|
|
color = self.fCustomColor.lighter(100 + self.fHoverStep*6) |
|
|
|
|
|
|
|
|
color = self.fCustomPaintColor.lighter(100 + self.fHoverStep*6) |
|
|
|
|
|
|
|
|
# draw small circle |
|
|
# draw small circle |
|
|
ballRect = QRectF(8.0, 8.0, 15.0, 15.0) |
|
|
ballRect = QRectF(8.0, 8.0, 15.0, 15.0) |
|
|
ballPath = QPainterPath() |
|
|
ballPath = QPainterPath() |
|
|
ballPath.addEllipse(ballRect) |
|
|
ballPath.addEllipse(ballRect) |
|
|
tmpValue = (0.375 + 0.75*value) |
|
|
|
|
|
|
|
|
tmpValue = (0.375 + 0.75*normValue) |
|
|
ballValue = tmpValue - floor(tmpValue) |
|
|
ballValue = tmpValue - floor(tmpValue) |
|
|
ballPoint = ballPath.pointAtPercent(ballValue) |
|
|
ballPoint = ballPath.pointAtPercent(ballValue) |
|
|
|
|
|
|
|
|
# draw arc |
|
|
# draw arc |
|
|
startAngle = 216*16 |
|
|
startAngle = 216*16 |
|
|
spanAngle = -252*16*value |
|
|
|
|
|
|
|
|
spanAngle = -252*16*normValue |
|
|
|
|
|
|
|
|
painter.setBrush(color) |
|
|
painter.setBrush(color) |
|
|
painter.setPen(QPen(color, 0)) |
|
|
painter.setPen(QPen(color, 0)) |
|
@@ -341,8 +404,8 @@ class PixmapDial(QDial): |
|
|
painter.drawArc(4.0, 4.0, 26.0, 26.0, startAngle, spanAngle) |
|
|
painter.drawArc(4.0, 4.0, 26.0, 26.0, startAngle, spanAngle) |
|
|
|
|
|
|
|
|
# Custom knobs (Zita) |
|
|
# Custom knobs (Zita) |
|
|
elif self.fCustomPaint == self.CUSTOM_PAINT_ZITA: |
|
|
|
|
|
a = value * pi * 1.5 - 2.35 |
|
|
|
|
|
|
|
|
elif self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_ZITA: |
|
|
|
|
|
a = normValue * pi * 1.5 - 2.35 |
|
|
r = 10.0 |
|
|
r = 10.0 |
|
|
x = 10.5 |
|
|
x = 10.5 |
|
|
y = 10.5 |
|
|
y = 10.5 |
|
@@ -362,11 +425,30 @@ class PixmapDial(QDial): |
|
|
QTimer.singleShot(20, self.update) |
|
|
QTimer.singleShot(20, self.update) |
|
|
|
|
|
|
|
|
else: # isEnabled() |
|
|
else: # isEnabled() |
|
|
target = QRectF(0.0, 0.0, self.fSize, self.fSize) |
|
|
|
|
|
|
|
|
target = QRectF(0.0, 0.0, self.fPixmapBaseSize, self.fPixmapBaseSize) |
|
|
painter.drawPixmap(target, self.fPixmap, target) |
|
|
painter.drawPixmap(target, self.fPixmap, target) |
|
|
|
|
|
|
|
|
painter.restore() |
|
|
painter.restore() |
|
|
|
|
|
|
|
|
def resizeEvent(self, event): |
|
|
def resizeEvent(self, event): |
|
|
self.updateSizes() |
|
|
|
|
|
QDial.resizeEvent(self, event) |
|
|
QDial.resizeEvent(self, event) |
|
|
|
|
|
self.updateSizes() |
|
|
|
|
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
|
|
|
# Main Testing |
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
|
|
|
import sys |
|
|
|
|
|
from PyQt4.QtGui import QApplication |
|
|
|
|
|
import resources_rc |
|
|
|
|
|
|
|
|
|
|
|
app = QApplication(sys.argv) |
|
|
|
|
|
|
|
|
|
|
|
gui = PixmapDial(None) |
|
|
|
|
|
#gui.setEnabled(True) |
|
|
|
|
|
#gui.setEnabled(False) |
|
|
|
|
|
gui.setPixmap(3) |
|
|
|
|
|
gui.setLabel("hahaha") |
|
|
|
|
|
gui.show() |
|
|
|
|
|
|
|
|
|
|
|
sys.exit(app.exec_()) |