Browse Source

Rework patchbay animation system, now full eyecandy works 100% :D

tags/1.9.7
falkTX 9 years ago
parent
commit
ec91ff364d
1 changed files with 108 additions and 111 deletions
  1. +108
    -111
      source/patchcanvas.py

+ 108
- 111
source/patchcanvas.py View File

@@ -25,7 +25,7 @@ from carla_config import *
# Imports (Global) # Imports (Global)


if config_UseQt5: if config_UseQt5:
from PyQt5.QtCore import pyqtSignal, pyqtSlot, qDebug, qCritical, qFatal, qWarning, Qt, QObject
from PyQt5.QtCore import pyqtSignal, pyqtSlot, qCritical, qFatal, qWarning, Qt, QObject
from PyQt5.QtCore import QAbstractAnimation, QLineF, QPointF, QRectF, QSizeF, QSettings, QTimer from PyQt5.QtCore import QAbstractAnimation, QLineF, QPointF, QRectF, QSizeF, QSettings, QTimer
from PyQt5.QtGui import QColor, QLinearGradient, QPen, QPolygonF, QPainter, QPainterPath from PyQt5.QtGui import QColor, QLinearGradient, QPen, QPolygonF, QPainter, QPainterPath
from PyQt5.QtGui import QCursor, QFont, QFontMetrics from PyQt5.QtGui import QCursor, QFont, QFontMetrics
@@ -33,7 +33,7 @@ if config_UseQt5:
from PyQt5.QtWidgets import QGraphicsScene, QGraphicsItem, QGraphicsLineItem, QGraphicsPathItem from PyQt5.QtWidgets import QGraphicsScene, QGraphicsItem, QGraphicsLineItem, QGraphicsPathItem
from PyQt5.QtWidgets import QGraphicsColorizeEffect, QGraphicsDropShadowEffect, QMenu from PyQt5.QtWidgets import QGraphicsColorizeEffect, QGraphicsDropShadowEffect, QMenu
else: else:
from PyQt4.QtCore import pyqtSignal, pyqtSlot, qDebug, qCritical, qFatal, qWarning, Qt, QObject
from PyQt4.QtCore import pyqtSignal, pyqtSlot, qCritical, qFatal, qWarning, Qt, QObject
from PyQt4.QtCore import QAbstractAnimation, QLineF, QPointF, QRectF, QSizeF, QSettings, QTimer from PyQt4.QtCore import QAbstractAnimation, QLineF, QPointF, QRectF, QSizeF, QSettings, QTimer
from PyQt4.QtGui import QColor, QLinearGradient, QPen, QPolygonF, QPainter, QPainterPath from PyQt4.QtGui import QColor, QLinearGradient, QPen, QPolygonF, QPainter, QPainterPath
from PyQt4.QtGui import QCursor, QFont, QFontMetrics from PyQt4.QtGui import QCursor, QFont, QFontMetrics
@@ -199,28 +199,29 @@ class CanvasObject(QObject):
QObject.__init__(self, parent) QObject.__init__(self, parent)


@pyqtSlot() @pyqtSlot()
def AnimationIdle(self):
def AnimationFinishedShow(self):
animation = self.sender() animation = self.sender()
if animation: if animation:
CanvasRemoveAnimation(animation)
animation.forceStop()
canvas.animation_list.remove(animation)


@pyqtSlot() @pyqtSlot()
def AnimationHide(self):
def AnimationFinishedHide(self):
animation = self.sender() animation = self.sender()
if animation: if animation:
animation.forceStop()
canvas.animation_list.remove(animation)
item = animation.item() item = animation.item()
if item:
item.hide()
CanvasRemoveAnimation(animation)
if item: item.hide()


@pyqtSlot() @pyqtSlot()
def AnimationDestroy(self):
def AnimationFinishedDestroy(self):
animation = self.sender() animation = self.sender()
if animation: if animation:
animation.forceStop()
canvas.animation_list.remove(animation)
item = animation.item() item = animation.item()
if item:
CanvasRemoveItemFX(item)
CanvasRemoveAnimation(animation)
if item: CanvasRemoveItemFX(item)


@pyqtSlot() @pyqtSlot()
def PortContextMenuDisconnect(self): def PortContextMenuDisconnect(self):
@@ -331,7 +332,7 @@ def setFeatures(new_features):


def init(appName, scene, callback, debug=False): def init(appName, scene, callback, debug=False):
if debug: if debug:
qDebug("PatchCanvas::init(\"%s\", %s, %s, %s)" % (appName, scene, callback, bool2str(debug)))
print("PatchCanvas::init(\"%s\", %s, %s, %s)" % (appName, scene, callback, bool2str(debug)))


if canvas.initiated: if canvas.initiated:
qCritical("PatchCanvas::init() - already initiated") qCritical("PatchCanvas::init() - already initiated")
@@ -372,7 +373,7 @@ def init(appName, scene, callback, debug=False):


def clear(): def clear():
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::clear()")
print("PatchCanvas::clear()")


group_list_ids = [] group_list_ids = []
port_list_ids = [] port_list_ids = []
@@ -403,20 +404,31 @@ def clear():
canvas.port_list = [] canvas.port_list = []
canvas.connection_list = [] canvas.connection_list = []


canvas.scene.clear()
canvas.scene.clearSelection()

animatedItems = []
for animation in canvas.animation_list:
animatedItems.append(animation.item())

for item in canvas.scene.items():
if item.type() != CanvasIconType and item not in animatedItems:
canvas.scene.removeItem(item)
del item


canvas.initiated = False canvas.initiated = False


QTimer.singleShot(0, canvas.scene.update)

def setInitialPos(x, y): def setInitialPos(x, y):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::setInitialPos(%i, %i)" % (x, y))
print("PatchCanvas::setInitialPos(%i, %i)" % (x, y))


canvas.initial_pos.setX(x) canvas.initial_pos.setX(x)
canvas.initial_pos.setY(y) canvas.initial_pos.setY(y)


def setCanvasSize(x, y, width, height): def setCanvasSize(x, y, width, height):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::setCanvasSize(%i, %i, %i, %i)" % (x, y, width, height))
print("PatchCanvas::setCanvasSize(%i, %i, %i, %i)" % (x, y, width, height))


canvas.size_rect.setX(x) canvas.size_rect.setX(x)
canvas.size_rect.setY(y) canvas.size_rect.setY(y)
@@ -425,7 +437,7 @@ def setCanvasSize(x, y, width, height):


def addGroup(group_id, group_name, split=SPLIT_UNDEF, icon=ICON_APPLICATION): def addGroup(group_id, group_name, split=SPLIT_UNDEF, icon=ICON_APPLICATION):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::addGroup(%i, %s, %s, %s)" % (group_id, group_name.encode(), split2str(split), icon2str(icon)))
print("PatchCanvas::addGroup(%i, %s, %s, %s)" % (group_id, group_name.encode(), split2str(split), icon2str(icon)))


for group in canvas.group_list: for group in canvas.group_list:
if group.group_id == group_id: if group.group_id == group_id:
@@ -472,7 +484,7 @@ def addGroup(group_id, group_name, split=SPLIT_UNDEF, icon=ICON_APPLICATION):
group_sbox.setZValue(canvas.last_z_value) group_sbox.setZValue(canvas.last_z_value)


if options.eyecandy == EYECANDY_FULL and not options.auto_hide_groups: if options.eyecandy == EYECANDY_FULL and not options.auto_hide_groups:
CanvasItemFX(group_sbox, True)
CanvasItemFX(group_sbox, True, False)


group_sbox.checkItemPos() group_sbox.checkItemPos()


@@ -494,13 +506,13 @@ def addGroup(group_id, group_name, split=SPLIT_UNDEF, icon=ICON_APPLICATION):
canvas.group_list.append(group_dict) canvas.group_list.append(group_dict)


if options.eyecandy == EYECANDY_FULL and not options.auto_hide_groups: if options.eyecandy == EYECANDY_FULL and not options.auto_hide_groups:
CanvasItemFX(group_box, True)
return CanvasItemFX(group_box, True, False)


QTimer.singleShot(0, canvas.scene.update) QTimer.singleShot(0, canvas.scene.update)


def removeGroup(group_id): def removeGroup(group_id):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::removeGroup(%i)" % group_id)
print("PatchCanvas::removeGroup(%i)" % group_id)


for group in canvas.group_list: for group in canvas.group_list:
if group.group_id == group_id: if group.group_id == group_id:
@@ -543,7 +555,7 @@ def removeGroup(group_id):


def renameGroup(group_id, new_group_name): def renameGroup(group_id, new_group_name):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::renameGroup(%i, %s)" % (group_id, new_group_name.encode()))
print("PatchCanvas::renameGroup(%i, %s)" % (group_id, new_group_name.encode()))


for group in canvas.group_list: for group in canvas.group_list:
if group.group_id == group_id: if group.group_id == group_id:
@@ -560,7 +572,7 @@ def renameGroup(group_id, new_group_name):


def splitGroup(group_id): def splitGroup(group_id):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::splitGroup(%i)" % group_id)
print("PatchCanvas::splitGroup(%i)" % group_id)


item = None item = None
group_name = "" group_name = ""
@@ -631,7 +643,7 @@ def splitGroup(group_id):


def joinGroup(group_id): def joinGroup(group_id):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::joinGroup(%i)" % group_id)
print("PatchCanvas::joinGroup(%i)" % group_id)


item = None item = None
s_item = None s_item = None
@@ -710,7 +722,7 @@ def joinGroup(group_id):


def getGroupPos(group_id, port_mode=PORT_MODE_OUTPUT): def getGroupPos(group_id, port_mode=PORT_MODE_OUTPUT):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::getGroupPos(%i, %s)" % (group_id, port_mode2str(port_mode)))
print("PatchCanvas::getGroupPos(%i, %s)" % (group_id, port_mode2str(port_mode)))


for group in canvas.group_list: for group in canvas.group_list:
if group.group_id == group_id: if group.group_id == group_id:
@@ -732,7 +744,7 @@ def setGroupPos(group_id, group_pos_x, group_pos_y):


def setGroupPosFull(group_id, group_pos_x_o, group_pos_y_o, group_pos_x_i, group_pos_y_i): def setGroupPosFull(group_id, group_pos_x_o, group_pos_y_o, group_pos_x_i, group_pos_y_i):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::setGroupPos(%i, %i, %i, %i, %i)" % (group_id, group_pos_x_o, group_pos_y_o, group_pos_x_i, group_pos_y_i))
print("PatchCanvas::setGroupPos(%i, %i, %i, %i, %i)" % (group_id, group_pos_x_o, group_pos_y_o, group_pos_x_i, group_pos_y_i))


for group in canvas.group_list: for group in canvas.group_list:
if group.group_id == group_id: if group.group_id == group_id:
@@ -748,7 +760,7 @@ def setGroupPosFull(group_id, group_pos_x_o, group_pos_y_o, group_pos_x_i, group


def setGroupIcon(group_id, icon): def setGroupIcon(group_id, icon):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::setGroupIcon(%i, %s)" % (group_id, icon2str(icon)))
print("PatchCanvas::setGroupIcon(%i, %s)" % (group_id, icon2str(icon)))


for group in canvas.group_list: for group in canvas.group_list:
if group.group_id == group_id: if group.group_id == group_id:
@@ -765,7 +777,7 @@ def setGroupIcon(group_id, icon):


def getPluginAsGroup(plugin_id): def getPluginAsGroup(plugin_id):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::getPluginAsGroup(%i)" % plugin_id)
print("PatchCanvas::getPluginAsGroup(%i)" % plugin_id)


for group in canvas.group_list: for group in canvas.group_list:
if group.plugin_id == plugin_id: if group.plugin_id == plugin_id:
@@ -776,7 +788,7 @@ def getPluginAsGroup(plugin_id):


def setGroupAsPlugin(group_id, plugin_id, hasUi): def setGroupAsPlugin(group_id, plugin_id, hasUi):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::setGroupAsPlugin(%i, %i, %s)" % (group_id, plugin_id, bool2str(hasUi)))
print("PatchCanvas::setGroupAsPlugin(%i, %i, %s)" % (group_id, plugin_id, bool2str(hasUi)))


for group in canvas.group_list: for group in canvas.group_list:
if group.group_id == group_id: if group.group_id == group_id:
@@ -791,7 +803,7 @@ def setGroupAsPlugin(group_id, plugin_id, hasUi):


def addPort(group_id, port_id, port_name, port_mode, port_type, is_alternate=False): def addPort(group_id, port_id, port_name, port_mode, port_type, is_alternate=False):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::addPort(%i, %i, %s, %s, %s, %s)" % (group_id, port_id, port_name.encode(), port_mode2str(port_mode), port_type2str(port_type), bool2str(is_alternate)))
print("PatchCanvas::addPort(%i, %i, %s, %s, %s, %s)" % (group_id, port_id, port_name.encode(), port_mode2str(port_mode), port_type2str(port_type), bool2str(is_alternate)))


for port in canvas.port_list: for port in canvas.port_list:
if port.group_id == group_id and port.port_id == port_id: if port.group_id == group_id and port.port_id == port_id:
@@ -815,9 +827,6 @@ def addPort(group_id, port_id, port_name, port_mode, port_type, is_alternate=Fal
qCritical("PatchCanvas::addPort(%i, %i, %s, %s, %s) - Unable to find parent group" % (group_id, port_id, port_name.encode(), port_mode2str(port_mode), port_type2str(port_type))) qCritical("PatchCanvas::addPort(%i, %i, %s, %s, %s) - Unable to find parent group" % (group_id, port_id, port_name.encode(), port_mode2str(port_mode), port_type2str(port_type)))
return return


if options.eyecandy == EYECANDY_FULL:
CanvasItemFX(port_widget, True)

port_dict = port_dict_t() port_dict = port_dict_t()
port_dict.group_id = group_id port_dict.group_id = group_id
port_dict.port_id = port_id port_dict.port_id = port_id
@@ -830,20 +839,22 @@ def addPort(group_id, port_id, port_name, port_mode, port_type, is_alternate=Fal


box_widget.updatePositions() box_widget.updatePositions()


if options.eyecandy == EYECANDY_FULL:
return CanvasItemFX(port_widget, True, False)

QTimer.singleShot(0, canvas.scene.update) QTimer.singleShot(0, canvas.scene.update)


def removePort(group_id, port_id): def removePort(group_id, port_id):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::removePort(%i, %i)" % (group_id, port_id))
print("PatchCanvas::removePort(%i, %i)" % (group_id, port_id))


for port in canvas.port_list: for port in canvas.port_list:
if port.group_id == group_id and port.port_id == port_id: if port.group_id == group_id and port.port_id == port_id:
item = port.widget item = port.widget
item.parentItem().removePortFromGroup(port_id) item.parentItem().removePortFromGroup(port_id)
canvas.scene.removeItem(item) canvas.scene.removeItem(item)
del item

canvas.port_list.remove(port) canvas.port_list.remove(port)
del item


QTimer.singleShot(0, canvas.scene.update) QTimer.singleShot(0, canvas.scene.update)
return return
@@ -852,7 +863,7 @@ def removePort(group_id, port_id):


def renamePort(group_id, port_id, new_port_name): def renamePort(group_id, port_id, new_port_name):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::renamePort(%i, %i, %s)" % (group_id, port_id, new_port_name.encode()))
print("PatchCanvas::renamePort(%i, %i, %s)" % (group_id, port_id, new_port_name.encode()))


for port in canvas.port_list: for port in canvas.port_list:
if port.group_id == group_id and port.port_id == port_id: if port.group_id == group_id and port.port_id == port_id:
@@ -867,7 +878,7 @@ def renamePort(group_id, port_id, new_port_name):


def connectPorts(connection_id, group_out_id, port_out_id, group_in_id, port_in_id): def connectPorts(connection_id, group_out_id, port_out_id, group_in_id, port_in_id):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::connectPorts(%i, %i, %i, %i, %i)" % (connection_id, group_out_id, port_out_id, group_in_id, port_in_id))
print("PatchCanvas::connectPorts(%i, %i, %i, %i, %i)" % (connection_id, group_out_id, port_out_id, group_in_id, port_in_id))


port_out = None port_out = None
port_in = None port_in = None
@@ -915,13 +926,13 @@ def connectPorts(connection_id, group_out_id, port_out_id, group_in_id, port_in_


if options.eyecandy == EYECANDY_FULL: if options.eyecandy == EYECANDY_FULL:
item = connection_dict.widget item = connection_dict.widget
CanvasItemFX(item, True)
return CanvasItemFX(item, True, False)


QTimer.singleShot(0, canvas.scene.update) QTimer.singleShot(0, canvas.scene.update)


def disconnectPorts(connection_id): def disconnectPorts(connection_id):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::disconnectPorts(%i)" % connection_id)
print("PatchCanvas::disconnectPorts(%i)" % connection_id)


line = None line = None
item1 = None item1 = None
@@ -965,19 +976,20 @@ def disconnectPorts(connection_id):
item2.parentItem().removeLineFromGroup(connection_id) item2.parentItem().removeLineFromGroup(connection_id)


if options.eyecandy == EYECANDY_FULL: if options.eyecandy == EYECANDY_FULL:
CanvasItemFX(line, False, True)
else:
line.deleteFromScene()
return CanvasItemFX(line, False, True)

canvas.scene.removeItem(line)
del line


QTimer.singleShot(0, canvas.scene.update) QTimer.singleShot(0, canvas.scene.update)


def arrange(): def arrange():
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::arrange()")
print("PatchCanvas::arrange()")


def updateZValues(): def updateZValues():
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::updateZValues()")
print("PatchCanvas::updateZValues()")


for group in canvas.group_list: for group in canvas.group_list:
group.widgets[0].resetLinesZValue() group.widgets[0].resetLinesZValue()
@@ -987,7 +999,7 @@ def updateZValues():


def handlePluginRemoved(plugin_id): def handlePluginRemoved(plugin_id):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::handlePluginRemoved(%i)" % plugin_id)
print("PatchCanvas::handlePluginRemoved(%i)" % plugin_id)


for group in canvas.group_list: for group in canvas.group_list:
if group.plugin_id < plugin_id: if group.plugin_id < plugin_id:
@@ -1001,7 +1013,7 @@ def handlePluginRemoved(plugin_id):


def handleAllPluginsRemoved(): def handleAllPluginsRemoved():
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::handleAllPluginsRemoved()")
print("PatchCanvas::handleAllPluginsRemoved()")


for group in canvas.group_list: for group in canvas.group_list:
group.plugin_id -= 1 group.plugin_id -= 1
@@ -1014,7 +1026,7 @@ def handleAllPluginsRemoved():


def CanvasGetNewGroupPos(horizontal): def CanvasGetNewGroupPos(horizontal):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::CanvasGetNewGroupPos(%s)" % bool2str(horizontal))
print("PatchCanvas::CanvasGetNewGroupPos(%s)" % bool2str(horizontal))


new_pos = QPointF(canvas.initial_pos.x(), canvas.initial_pos.y()) new_pos = QPointF(canvas.initial_pos.x(), canvas.initial_pos.y())
items = canvas.scene.items() items = canvas.scene.items()
@@ -1040,7 +1052,7 @@ def CanvasGetNewGroupPos(horizontal):


def CanvasGetFullPortName(group_id, port_id): def CanvasGetFullPortName(group_id, port_id):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::CanvasGetFullPortName(%i, %i)" % (group_id, port_id))
print("PatchCanvas::CanvasGetFullPortName(%i, %i)" % (group_id, port_id))


for port in canvas.port_list: for port in canvas.port_list:
if port.group_id == group_id and port.port_id == port_id: if port.group_id == group_id and port.port_id == port_id:
@@ -1055,7 +1067,7 @@ def CanvasGetFullPortName(group_id, port_id):


def CanvasGetPortConnectionList(group_id, port_id): def CanvasGetPortConnectionList(group_id, port_id):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::CanvasGetPortConnectionList(%i, %i)" % (group_id, port_id))
print("PatchCanvas::CanvasGetPortConnectionList(%i, %i)" % (group_id, port_id))


conn_list = [] conn_list = []


@@ -1067,69 +1079,50 @@ def CanvasGetPortConnectionList(group_id, port_id):


return conn_list return conn_list


def CanvasRemoveAnimation(f_animation):
if canvas.debug:
qDebug("PatchCanvas::CanvasRemoveAnimation(%s)" % f_animation)

for animation in canvas.animation_list:
if animation.animation == f_animation:
canvas.animation_list.remove(animation)
del animation.animation
break

def CanvasCallback(action, value1, value2, value_str): def CanvasCallback(action, value1, value2, value_str):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::CanvasCallback(%i, %i, %i, %s)" % (action, value1, value2, value_str.encode()))
print("PatchCanvas::CanvasCallback(%i, %i, %i, %s)" % (action, value1, value2, value_str.encode()))


canvas.callback(action, value1, value2, value_str) canvas.callback(action, value1, value2, value_str)


def CanvasItemFX(item, show, destroy=False):
def CanvasItemFX(item, show, destroy):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::CanvasItemFX(%s, %s, %s)" % (item, bool2str(show), bool2str(destroy)))
print("PatchCanvas::CanvasItemFX(%s, %s, %s)" % (item, bool2str(show), bool2str(destroy)))


# Check if item already has an animationItemFX
# Check if the item already has an animation
for animation in canvas.animation_list: for animation in canvas.animation_list:
if animation.item == item:
animation.animation.stop()
if animation.item() == item:
animation.forceStop()
canvas.animation_list.remove(animation) canvas.animation_list.remove(animation)
del animation.animation
del animation
break break


animation = CanvasFadeAnimation(item, show) animation = CanvasFadeAnimation(item, show)
animation.setDuration(750 if show else 500) animation.setDuration(750 if show else 500)


animation_dict = animation_dict_t()
animation_dict.animation = animation
animation_dict.item = item
canvas.animation_list.append(animation_dict)

if show: if show:
animation.finished.connect(canvas.qobject.AnimationIdle)
animation.finished.connect(canvas.qobject.AnimationFinishedShow)
else: else:
if destroy: if destroy:
animation.finished.connect(canvas.qobject.AnimationDestroy)
animation.finished.connect(canvas.qobject.AnimationFinishedDestroy)
else: else:
animation.finished.connect(canvas.qobject.AnimationHide)
animation.finished.connect(canvas.qobject.AnimationFinishedHide)

canvas.animation_list.append(animation)


animation.start() animation.start()


def CanvasRemoveItemFX(item): def CanvasRemoveItemFX(item):
if canvas.debug: if canvas.debug:
qDebug("PatchCanvas::CanvasRemoveItemFX(%s)" % item)
print("PatchCanvas::CanvasRemoveItemFX(%s)" % item)


if item.type() == CanvasBoxType: if item.type() == CanvasBoxType:
item.removeIconFromScene() item.removeIconFromScene()
canvas.scene.removeItem(item)

elif item.type() == CanvasPortType:
canvas.scene.removeItem(item)


elif item.type() in (CanvasLineType, CanvasBezierLineType):
pass #item.deleteFromScene()
canvas.scene.removeItem(item)
del item


# Force deletion of item if needed
if item.type() in (CanvasBoxType, CanvasPortType):
del item
QTimer.singleShot(0, canvas.scene.update)


# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# patchscene.cpp # patchscene.cpp
@@ -1367,12 +1360,15 @@ class PatchScene(QGraphicsScene):


QGraphicsScene.wheelEvent(self, event) QGraphicsScene.wheelEvent(self, event)


#def contextMenuEvent(self, event):
#print("context menu event")

# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# canvasfadeanimation.cpp # canvasfadeanimation.cpp


class CanvasFadeAnimation(QAbstractAnimation): class CanvasFadeAnimation(QAbstractAnimation):
def __init__(self, item, show, parent=None):
QAbstractAnimation.__init__(self, parent)
def __init__(self, item, show):
QAbstractAnimation.__init__(self)


self.m_show = show self.m_show = show
self.m_duration = 0 self.m_duration = 0
@@ -1381,6 +1377,10 @@ class CanvasFadeAnimation(QAbstractAnimation):
def item(self): def item(self):
return self.m_item return self.m_item


def forceStop(self):
self.blockSignals(True)
self.stop()

def setDuration(self, time): def setDuration(self, time):
if self.m_item.opacity() == 0 and not self.m_show: if self.m_item.opacity() == 0 and not self.m_show:
self._duration = 0 self._duration = 0
@@ -1400,7 +1400,13 @@ class CanvasFadeAnimation(QAbstractAnimation):
else: else:
value = 1.0 - (float(time) / self.m_duration) value = 1.0 - (float(time) / self.m_duration)


self.m_item.setOpacity(value)
try:
self.m_item.setOpacity(value)
except:
print("Error: failed to animate canvas item, already destroyed?")
self.forceStop()
canvas.animation_list.remove(self)
return


if self.m_item.type() == CanvasBoxType: if self.m_item.type() == CanvasBoxType:
self.m_item.setShadowOpacity(value) self.m_item.setShadowOpacity(value)
@@ -1427,10 +1433,6 @@ class CanvasLine(QGraphicsLineItem):
self.setGraphicsEffect(None) self.setGraphicsEffect(None)
self.updateLinePos() self.updateLinePos()


def deleteFromScene(self):
canvas.scene.removeItem(self)
del self

def isLocked(self): def isLocked(self):
return self.m_locked return self.m_locked


@@ -1524,10 +1526,6 @@ class CanvasBezierLine(QGraphicsPathItem):
self.setGraphicsEffect(None) self.setGraphicsEffect(None)
self.updateLinePos() self.updateLinePos()


def deleteFromScene(self):
canvas.scene.removeItem(self)
del self

def isLocked(self): def isLocked(self):
return self.m_locked return self.m_locked


@@ -1643,10 +1641,6 @@ class CanvasLineMov(QGraphicsLineItem):


self.setPen(pen) self.setPen(pen)


def deleteFromScene(self):
canvas.scene.removeItem(self)
del self

def updateLinePos(self, scenePos): def updateLinePos(self, scenePos):
item_pos = [0, 0] item_pos = [0, 0]


@@ -1701,10 +1695,6 @@ class CanvasBezierLineMov(QGraphicsPathItem):
self.setBrush(QColor(0, 0, 0, 0)) self.setBrush(QColor(0, 0, 0, 0))
self.setPen(pen) self.setPen(pen)


def deleteFromScene(self):
canvas.scene.removeItem(self)
del self

def updateLinePos(self, scenePos): def updateLinePos(self, scenePos):
if self.m_port_mode == PORT_MODE_INPUT: if self.m_port_mode == PORT_MODE_INPUT:
old_x = 0 old_x = 0
@@ -1886,9 +1876,11 @@ class CanvasPort(QGraphicsItem):


def mouseReleaseEvent(self, event): def mouseReleaseEvent(self, event):
if self.m_mouse_down: if self.m_mouse_down:
if self.m_line_mov:
self.m_line_mov.deleteFromScene()
if self.m_line_mov is not None:
item = self.m_line_mov
self.m_line_mov = None self.m_line_mov = None
canvas.scene.removeItem(item)
del item


for connection in canvas.connection_list: for connection in canvas.connection_list:
if ((connection.group_out_id == self.m_group_id and connection.port_out_id == self.m_port_id) or if ((connection.group_out_id == self.m_group_id and connection.port_out_id == self.m_port_id) or
@@ -2197,7 +2189,7 @@ class CanvasBox(QGraphicsItem):
self.m_plugin_ui = hasUi self.m_plugin_ui = hasUi


def setIcon(self, icon): def setIcon(self, icon):
if self.icon_svg:
if self.icon_svg is not None:
self.icon_svg.setIcon(icon, self.m_group_name) self.icon_svg.setIcon(icon, self.m_group_name)


def setSplit(self, split, mode=PORT_MODE_NULL): def setSplit(self, split, mode=PORT_MODE_NULL):
@@ -2216,7 +2208,7 @@ class CanvasBox(QGraphicsItem):
if len(self.m_port_list_ids) == 0: if len(self.m_port_list_ids) == 0:
if options.auto_hide_groups: if options.auto_hide_groups:
if options.eyecandy == EYECANDY_FULL: if options.eyecandy == EYECANDY_FULL:
CanvasItemFX(self, True)
CanvasItemFX(self, True, False)
self.setVisible(True) self.setVisible(True)


new_widget = CanvasPort(self.m_group_id, port_id, port_name, port_mode, port_type, is_alternate, self) new_widget = CanvasPort(self.m_group_id, port_id, port_name, port_mode, port_type, is_alternate, self)
@@ -2247,7 +2239,7 @@ class CanvasBox(QGraphicsItem):
elif self.isVisible(): elif self.isVisible():
if options.auto_hide_groups: if options.auto_hide_groups:
if options.eyecandy == EYECANDY_FULL: if options.eyecandy == EYECANDY_FULL:
CanvasItemFX(self, False)
CanvasItemFX(self, False, False)
else: else:
self.setVisible(False) self.setVisible(False)


@@ -2280,8 +2272,13 @@ class CanvasBox(QGraphicsItem):
self.setPos(pos.x(), canvas.size_rect.height() - self.p_height) self.setPos(pos.x(), canvas.size_rect.height() - self.p_height)


def removeIconFromScene(self): def removeIconFromScene(self):
if self.icon_svg:
canvas.scene.removeItem(self.icon_svg)
if self.icon_svg is None:
return

item = self.icon_svg
self.icon_svg = None
canvas.scene.removeItem(item)
del item


def updatePositions(self): def updatePositions(self):
self.prepareGeometryChange() self.prepareGeometryChange()


Loading…
Cancel
Save