Browse Source

Load old canvas group pos file when project is imported (as needed)

Signed-off-by: falkTX <falktx@falktx.com>
tags/v2.2.0-RC1
falkTX 4 years ago
parent
commit
30d8712beb
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
4 changed files with 66 additions and 52 deletions
  1. +4
    -1
      .travis/script-pylint.sh
  2. +9
    -3
      source/frontend/carla_host.py
  3. +7
    -7
      source/frontend/carla_shared.py
  4. +46
    -41
      source/frontend/widgets/racklistwidget.py

+ 4
- 1
.travis/script-pylint.sh View File

@@ -21,9 +21,12 @@ ${pylint} \
--max-statements=100 \ --max-statements=100 \
--disable=\ --disable=\
bad-whitespace,\ bad-whitespace,\
broad-except,\
fixme,\
invalid-name,\ invalid-name,\
missing-docstring \ missing-docstring \
source/frontend/widgets/canvaspreviewframe.py
source/frontend/widgets/canvaspreviewframe.py \
source/frontend/widgets/racklistwidget.py


# main app code, ignore some errors # main app code, ignore some errors
${pylint} \ ${pylint} \


+ 9
- 3
source/frontend/carla_host.py View File

@@ -789,13 +789,14 @@ class HostWindow(QMainWindow):
if self.fCustomStopAction == self.CUSTOM_ACTION_APP_CLOSE or not self.fWithCanvas: if self.fCustomStopAction == self.CUSTOM_ACTION_APP_CLOSE or not self.fWithCanvas:
return return


QTimer.singleShot(1000, self.slot_canvasRefresh)
self.loadExternalCanvasGroupPositionsIfNeeded(self.fProjectFilename)


extrafile = self.fProjectFilename.rsplit(".",1)[0]+".json"
def loadExternalCanvasGroupPositionsIfNeeded(self, filename):
extrafile = filename.rsplit(".",1)[0]+".json"
if not os.path.exists(extrafile): if not os.path.exists(extrafile):
return return


with open(self.fProjectFilename, "r") as fh:
with open(filename, "r") as fh:
if "".join(fh.readlines(90)).find("<CARLA-PROJECT VERSION='2.0'>") < 0: if "".join(fh.readlines(90)).find("<CARLA-PROJECT VERSION='2.0'>") < 0:
return return


@@ -806,6 +807,7 @@ class HostWindow(QMainWindow):
return return


patchcanvas.restoreGroupPositions(canvasdata) patchcanvas.restoreGroupPositions(canvasdata)
QTimer.singleShot(1000, self.slot_canvasRefresh)


# -------------------------------------------------------------------------------------------------------- # --------------------------------------------------------------------------------------------------------
# Files (menu actions) # Files (menu actions)
@@ -2052,6 +2054,10 @@ class HostWindow(QMainWindow):
CustomMessageBox(self, QMessageBox.Critical, self.tr("Error"), CustomMessageBox(self, QMessageBox.Critical, self.tr("Error"),
self.tr("Failed to load file"), self.tr("Failed to load file"),
self.host.get_last_error(), QMessageBox.Ok, QMessageBox.Ok) self.host.get_last_error(), QMessageBox.Ok, QMessageBox.Ok)
return

if filename.endswith(".carxp"):
self.loadExternalCanvasGroupPositionsIfNeeded(filename)


# -------------------------------------------------------------------------------------------------------- # --------------------------------------------------------------------------------------------------------
# Transport # Transport


+ 7
- 7
source/frontend/carla_shared.py View File

@@ -16,13 +16,6 @@
# #
# For a full copy of the GNU General Public License see the doc/GPL.txt file. # For a full copy of the GNU General Public License see the doc/GPL.txt file.


# ------------------------------------------------------------------------------------------------------------
# Config

# These will be modified during install
X_LIBDIR_X = None
X_DATADIR_X = None

# ------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------
# Imports (Global) # Imports (Global)


@@ -62,6 +55,13 @@ from carla_backend import (
ENGINE_TRANSPORT_MODE_JACK ENGINE_TRANSPORT_MODE_JACK
) )


# ------------------------------------------------------------------------------------------------------------
# Config

# These will be modified during install
X_LIBDIR_X = None
X_DATADIR_X = None

# ------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------
# Platform specific stuff # Platform specific stuff




+ 46
- 41
source/frontend/widgets/racklistwidget.py View File

@@ -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)

# ------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------

Loading…
Cancel
Save