|
@@ -19,14 +19,21 @@ |
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
# Imports (Global) |
|
|
# Imports (Global) |
|
|
|
|
|
|
|
|
|
|
|
import os |
|
|
|
|
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
|
|
|
# Imports (PyQt5) |
|
|
|
|
|
|
|
|
from PyQt5.QtCore import Qt, QSize, QRect, QEvent |
|
|
from PyQt5.QtCore import Qt, QSize, QRect, QEvent |
|
|
from PyQt5.QtGui import QPainter, QPixmap |
|
|
|
|
|
from PyQt5.QtWidgets import QAbstractItemView, QFrame, QListWidget, QListWidgetItem |
|
|
|
|
|
|
|
|
from PyQt5.QtGui import QColor, QPainter, QPixmap |
|
|
|
|
|
from PyQt5.QtWidgets import QAbstractItemView, QListWidget, QListWidgetItem, QMessageBox |
|
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
# Imports (Custom Stuff) |
|
|
# Imports (Custom Stuff) |
|
|
|
|
|
|
|
|
from carla_skin import * |
|
|
|
|
|
|
|
|
from carla_backend import CUSTOM_DATA_TYPE_PROPERTY, MACOS |
|
|
|
|
|
from carla_shared import gCarla, CustomMessageBox |
|
|
|
|
|
from carla_skin import createPluginSlot |
|
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
# Rack Widget item |
|
|
# Rack Widget item |
|
@@ -39,13 +46,6 @@ class RackListItem(QListWidgetItem): |
|
|
QListWidgetItem.__init__(self, parent, self.kRackItemType) |
|
|
QListWidgetItem.__init__(self, parent, self.kRackItemType) |
|
|
self.host = parent.host |
|
|
self.host = parent.host |
|
|
|
|
|
|
|
|
if False: |
|
|
|
|
|
# kdevelop likes this :) |
|
|
|
|
|
parent = RackListWidget() |
|
|
|
|
|
host = CarlaHostNull() |
|
|
|
|
|
self.host = host |
|
|
|
|
|
self.fWidget = AbstractPluginSlot() |
|
|
|
|
|
|
|
|
|
|
|
# ---------------------------------------------------------------------------------------------------- |
|
|
# ---------------------------------------------------------------------------------------------------- |
|
|
# Internal stuff |
|
|
# Internal stuff |
|
|
|
|
|
|
|
@@ -55,13 +55,15 @@ class RackListItem(QListWidgetItem): |
|
|
|
|
|
|
|
|
color = self.host.get_custom_data_value(pluginId, CUSTOM_DATA_TYPE_PROPERTY, "CarlaColor") |
|
|
color = self.host.get_custom_data_value(pluginId, CUSTOM_DATA_TYPE_PROPERTY, "CarlaColor") |
|
|
skin = self.host.get_custom_data_value(pluginId, CUSTOM_DATA_TYPE_PROPERTY, "CarlaSkin") |
|
|
skin = self.host.get_custom_data_value(pluginId, CUSTOM_DATA_TYPE_PROPERTY, "CarlaSkin") |
|
|
compact = bool(self.host.get_custom_data_value(pluginId, CUSTOM_DATA_TYPE_PROPERTY, "CarlaSkinIsCompacted") == "true") |
|
|
|
|
|
|
|
|
compact = bool(self.host.get_custom_data_value(pluginId, |
|
|
|
|
|
CUSTOM_DATA_TYPE_PROPERTY, |
|
|
|
|
|
"CarlaSkinIsCompacted") == "true") |
|
|
|
|
|
|
|
|
if color: |
|
|
if color: |
|
|
try: |
|
|
try: |
|
|
color = tuple(int(i) for i in color.split(";",3)) |
|
|
color = tuple(int(i) for i in color.split(";",3)) |
|
|
except: |
|
|
|
|
|
print("Color value decode failed for", color) |
|
|
|
|
|
|
|
|
except Exception as e: |
|
|
|
|
|
print("Color value decode failed for", color, "error was:", e) |
|
|
color = None |
|
|
color = None |
|
|
else: |
|
|
else: |
|
|
color = None |
|
|
color = None |
|
@@ -209,11 +211,6 @@ class RackListWidget(QListWidget): |
|
|
self.host = None |
|
|
self.host = None |
|
|
self.fParent = None |
|
|
self.fParent = None |
|
|
|
|
|
|
|
|
if False: |
|
|
|
|
|
# kdevelop likes this :) |
|
|
|
|
|
from carla_backend import CarlaHostMeta |
|
|
|
|
|
self.host = host = CarlaHostNull() |
|
|
|
|
|
|
|
|
|
|
|
exts = gCarla.utils.get_supported_file_extensions() |
|
|
exts = gCarla.utils.get_supported_file_extensions() |
|
|
|
|
|
|
|
|
self.fSupportedExtensions = tuple(("." + i) for i in exts) |
|
|
self.fSupportedExtensions = tuple(("." + i) for i in exts) |
|
@@ -233,7 +230,7 @@ class RackListWidget(QListWidget): |
|
|
self.setDropIndicatorShown(True) |
|
|
self.setDropIndicatorShown(True) |
|
|
self.viewport().setAcceptDrops(True) |
|
|
self.viewport().setAcceptDrops(True) |
|
|
|
|
|
|
|
|
self.updateStyle() |
|
|
|
|
|
|
|
|
self._updateStyle() |
|
|
|
|
|
|
|
|
# -------------------------------------------------------------------------------------------------------- |
|
|
# -------------------------------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
@@ -262,7 +259,7 @@ class RackListWidget(QListWidget): |
|
|
#return True |
|
|
#return True |
|
|
if MACOS and lfilename.endswith(".vst"): |
|
|
if MACOS and lfilename.endswith(".vst"): |
|
|
return True |
|
|
return True |
|
|
elif lfilename.endswith(".vst3") and ".vst3" in self.fSupportedExtensions: |
|
|
|
|
|
|
|
|
if lfilename.endswith(".vst3") and ".vst3" in self.fSupportedExtensions: |
|
|
return True |
|
|
return True |
|
|
|
|
|
|
|
|
elif os.path.isfile(filename): |
|
|
elif os.path.isfile(filename): |
|
@@ -300,8 +297,12 @@ class RackListWidget(QListWidget): |
|
|
self.setCurrentRow(-1) |
|
|
self.setCurrentRow(-1) |
|
|
|
|
|
|
|
|
def dragLeaveEvent(self, event): |
|
|
def dragLeaveEvent(self, event): |
|
|
|
|
|
if not self.fWasLastDragValid: |
|
|
|
|
|
QListWidget.dragLeaveEvent(self, event) |
|
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
event.acceptProposedAction() |
|
|
self.fWasLastDragValid = False |
|
|
self.fWasLastDragValid = False |
|
|
QListWidget.dragLeaveEvent(self, event) |
|
|
|
|
|
|
|
|
|
|
|
# -------------------------------------------------------------------------------------------------------- |
|
|
# -------------------------------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
@@ -337,8 +338,12 @@ class RackListWidget(QListWidget): |
|
|
|
|
|
|
|
|
if not self.host.load_file(filename): |
|
|
if not self.host.load_file(filename): |
|
|
CustomMessageBox(self, QMessageBox.Critical, self.tr("Error"), |
|
|
CustomMessageBox(self, QMessageBox.Critical, self.tr("Error"), |
|
|
self.tr("Failed to load file"), |
|
|
|
|
|
self.host.get_last_error(), QMessageBox.Ok, QMessageBox.Ok) |
|
|
|
|
|
|
|
|
self.tr("Failed to load file"), |
|
|
|
|
|
self.host.get_last_error(), QMessageBox.Ok, QMessageBox.Ok) |
|
|
|
|
|
continue |
|
|
|
|
|
|
|
|
|
|
|
if filename.endswith(".carxp"): |
|
|
|
|
|
gCarla.gui.loadExternalCanvasGroupPositionsIfNeeded(filename) |
|
|
|
|
|
|
|
|
if tryItem is not None: |
|
|
if tryItem is not None: |
|
|
self.host.replace_plugin(self.host.get_max_plugin_number()) |
|
|
self.host.replace_plugin(self.host.get_max_plugin_number()) |
|
@@ -356,8 +361,8 @@ class RackListWidget(QListWidget): |
|
|
|
|
|
|
|
|
def changeEvent(self, event): |
|
|
def changeEvent(self, event): |
|
|
if event.type() in (QEvent.StyleChange, QEvent.PaletteChange): |
|
|
if event.type() in (QEvent.StyleChange, QEvent.PaletteChange): |
|
|
self.updateStyle() |
|
|
|
|
|
QWidget.changeEvent(self, event) |
|
|
|
|
|
|
|
|
self._updateStyle() |
|
|
|
|
|
QListWidget.changeEvent(self, event) |
|
|
|
|
|
|
|
|
def paintEvent(self, event): |
|
|
def paintEvent(self, event): |
|
|
painter = QPainter(self.viewport()) |
|
|
painter = QPainter(self.viewport()) |
|
@@ -367,7 +372,7 @@ class RackListWidget(QListWidget): |
|
|
imgL_rect = QRect(0, 0, self.fPixmapWidth, height) |
|
|
imgL_rect = QRect(0, 0, self.fPixmapWidth, height) |
|
|
imgR_rect = QRect(width-self.fPixmapWidth, 0, self.fPixmapWidth, height) |
|
|
imgR_rect = QRect(width-self.fPixmapWidth, 0, self.fPixmapWidth, height) |
|
|
|
|
|
|
|
|
painter.setBrush(self.rail_color) |
|
|
|
|
|
|
|
|
painter.setBrush(self.rail_col) |
|
|
painter.setPen(Qt.NoPen) |
|
|
painter.setPen(Qt.NoPen) |
|
|
painter.drawRects(imgL_rect, imgR_rect) |
|
|
painter.drawRects(imgL_rect, imgR_rect) |
|
|
painter.setCompositionMode(QPainter.CompositionMode_Multiply) |
|
|
painter.setCompositionMode(QPainter.CompositionMode_Multiply) |
|
@@ -378,26 +383,12 @@ class RackListWidget(QListWidget): |
|
|
painter.drawTiledPixmap(imgR_rect, self.fPixmapR) |
|
|
painter.drawTiledPixmap(imgR_rect, self.fPixmapR) |
|
|
painter.setCompositionMode(QPainter.CompositionMode_SourceOver) |
|
|
painter.setCompositionMode(QPainter.CompositionMode_SourceOver) |
|
|
|
|
|
|
|
|
painter.setPen(self.edge_color) |
|
|
|
|
|
|
|
|
painter.setPen(self.edge_col) |
|
|
painter.setBrush(Qt.NoBrush) |
|
|
painter.setBrush(Qt.NoBrush) |
|
|
painter.drawRect(self.fPixmapWidth, 0, width-self.fPixmapWidth*2, height) |
|
|
painter.drawRect(self.fPixmapWidth, 0, width-self.fPixmapWidth*2, height) |
|
|
|
|
|
|
|
|
QListWidget.paintEvent(self, event) |
|
|
QListWidget.paintEvent(self, event) |
|
|
|
|
|
|
|
|
# -------------------------------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
|
|
|
|
def updateStyle(self): |
|
|
|
|
|
palette = self.palette() |
|
|
|
|
|
|
|
|
|
|
|
bg_color = palette.window().color() |
|
|
|
|
|
base_color = palette.base().color() |
|
|
|
|
|
text_color = palette.text().color() |
|
|
|
|
|
r0,g0,b0,a = bg_color.getRgb() |
|
|
|
|
|
r1,g1,b1,a = text_color.getRgb() |
|
|
|
|
|
|
|
|
|
|
|
self.rail_color = QColor((r0*3+r1)/4, (g0*3+g1)/4, (b0*3+b1)/4) |
|
|
|
|
|
self.edge_color = self.rail_color.darker(115) if self.rail_color.blackF() > base_color.blackF() else base_color.darker(115) |
|
|
|
|
|
|
|
|
|
|
|
def selectionChanged(self, selected, deselected): |
|
|
def selectionChanged(self, selected, deselected): |
|
|
for index in deselected.indexes(): |
|
|
for index in deselected.indexes(): |
|
|
item = self.itemFromIndex(index) |
|
|
item = self.itemFromIndex(index) |
|
@@ -411,4 +402,18 @@ class RackListWidget(QListWidget): |
|
|
|
|
|
|
|
|
QListWidget.selectionChanged(self, selected, deselected) |
|
|
QListWidget.selectionChanged(self, selected, deselected) |
|
|
|
|
|
|
|
|
|
|
|
# -------------------------------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
|
|
|
|
def _updateStyle(self): |
|
|
|
|
|
palette = self.palette() |
|
|
|
|
|
|
|
|
|
|
|
bg_color = palette.window().color() |
|
|
|
|
|
base_color = palette.base().color() |
|
|
|
|
|
text_color = palette.text().color() |
|
|
|
|
|
r0,g0,b0,_ = bg_color.getRgb() |
|
|
|
|
|
r1,g1,b1,_ = text_color.getRgb() |
|
|
|
|
|
|
|
|
|
|
|
self.rail_col = QColor((r0*3+r1)/4, (g0*3+g1)/4, (b0*3+b1)/4) |
|
|
|
|
|
self.edge_col = (self.rail_col if self.rail_col.blackF() > base_color.blackF() else base_color).darker(115) |
|
|
|
|
|
|
|
|
# ------------------------------------------------------------------------------------------------------------ |
|
|
# ------------------------------------------------------------------------------------------------------------ |