Browse Source

Import updated patchcanvas.py file from Carla

tags/v0.9.0
falkTX 11 years ago
parent
commit
123999121f
1 changed files with 45 additions and 45 deletions
  1. +45
    -45
      src/patchcanvas.py

+ 45
- 45
src/patchcanvas.py View File

@@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-


# PatchBay Canvas engine using QGraphicsView/Scene # PatchBay Canvas engine using QGraphicsView/Scene
# Copyright (C) 2010-2012 Filipe Coelho <falktx@falktx.com>
# Copyright (C) 2010-2013 Filipe Coelho <falktx@falktx.com>
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@@ -14,17 +14,16 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
# #
# For a full copy of the GNU General Public License see the COPYING file

# TODO - apply last changes to c++ (2 commits + theme changes)
# For a full copy of the GNU General Public License see the GPL.txt file


# Imports (Global) # Imports (Global)
from PyQt4.QtCore import pyqtSlot, qDebug, qCritical, qFatal, qWarning, Qt, QObject, SIGNAL, SLOT
from PyQt4.QtCore import pyqtSignal, pyqtSlot, qDebug, 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, QInputDialog, QLineEdit, QMenu
from PyQt4.QtGui import QCursor, QFont, QFontMetrics
from PyQt4.QtGui import QGraphicsScene, QGraphicsItem, QGraphicsLineItem, QGraphicsPathItem from PyQt4.QtGui import QGraphicsScene, QGraphicsItem, QGraphicsLineItem, QGraphicsPathItem
from PyQt4.QtGui import QGraphicsColorizeEffect, QGraphicsDropShadowEffect from PyQt4.QtGui import QGraphicsColorizeEffect, QGraphicsDropShadowEffect
from PyQt4.QtGui import QInputDialog, QLineEdit, QMenu
from PyQt4.QtSvg import QGraphicsSvgItem, QSvgRenderer from PyQt4.QtSvg import QGraphicsSvgItem, QSvgRenderer


# Imports (Theme) # Imports (Theme)
@@ -195,10 +194,6 @@ class CanvasObject(QObject):
CanvasRemoveItemFX(item) CanvasRemoveItemFX(item)
CanvasRemoveAnimation(animation) CanvasRemoveAnimation(animation)


@pyqtSlot()
def CanvasPostponedGroups(self):
CanvasPostponedGroups()

@pyqtSlot() @pyqtSlot()
def PortContextMenuDisconnect(self): def PortContextMenuDisconnect(self):
try: try:
@@ -320,7 +315,7 @@ def init(appName, scene, callback, debug=False):
canvas.size_rect = QRectF() canvas.size_rect = QRectF()


if not canvas.qobject: canvas.qobject = CanvasObject() if not canvas.qobject: canvas.qobject = CanvasObject()
if not canvas.settings: canvas.settings = QSettings("Cadence", appName)
if not canvas.settings: canvas.settings = QSettings("falkTX", appName)


if canvas.theme: if canvas.theme:
del canvas.theme del canvas.theme
@@ -437,6 +432,8 @@ def addGroup(group_id, group_name, split=SPLIT_UNDEF, icon=ICON_APPLICATION):
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)


group_sbox.checkItemPos()

else: else:
group_box.setSplit(False) group_box.setSplit(False)


@@ -457,7 +454,7 @@ def addGroup(group_id, group_name, split=SPLIT_UNDEF, icon=ICON_APPLICATION):
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) CanvasItemFX(group_box, True)


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


def removeGroup(group_id): def removeGroup(group_id):
if canvas.debug: if canvas.debug:
@@ -497,7 +494,7 @@ def removeGroup(group_id):


canvas.group_list.remove(group) canvas.group_list.remove(group)


QTimer.singleShot(0, canvas.scene, SLOT("update()"))
QTimer.singleShot(0, canvas.scene.update)
return return


qCritical("PatchCanvas::removeGroup(%i) - unable to find group to remove" % group_id) qCritical("PatchCanvas::removeGroup(%i) - unable to find group to remove" % group_id)
@@ -514,7 +511,7 @@ def renameGroup(group_id, new_group_name):
if group.split and group.widgets[1]: if group.split and group.widgets[1]:
group.widgets[1].setGroupName(new_group_name) group.widgets[1].setGroupName(new_group_name)


QTimer.singleShot(0, canvas.scene, SLOT("update()"))
QTimer.singleShot(0, canvas.scene.update)
return return


qCritical("PatchCanvas::renameGroup(%i, %s) - unable to find group to rename" % (group_id, new_group_name.encode())) qCritical("PatchCanvas::renameGroup(%i, %s) - unable to find group to rename" % (group_id, new_group_name.encode()))
@@ -585,7 +582,7 @@ def splitGroup(group_id):
for conn in conns_data: for conn in conns_data:
connectPorts(conn.connection_id, conn.port_out_id, conn.port_in_id) connectPorts(conn.connection_id, conn.port_out_id, conn.port_in_id)


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


def joinGroup(group_id): def joinGroup(group_id):
if canvas.debug: if canvas.debug:
@@ -661,7 +658,7 @@ def joinGroup(group_id):
for conn in conns_data: for conn in conns_data:
connectPorts(conn.connection_id, conn.port_out_id, conn.port_in_id) connectPorts(conn.connection_id, conn.port_out_id, conn.port_in_id)


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


def getGroupPos(group_id, port_mode=PORT_MODE_OUTPUT): def getGroupPos(group_id, port_mode=PORT_MODE_OUTPUT):
if canvas.debug: if canvas.debug:
@@ -696,7 +693,7 @@ def setGroupPosFull(group_id, group_pos_x_o, group_pos_y_o, group_pos_x_i, group
if group.split and group.widgets[1]: if group.split and group.widgets[1]:
group.widgets[1].setPos(group_pos_x_i, group_pos_y_i) group.widgets[1].setPos(group_pos_x_i, group_pos_y_i)


QTimer.singleShot(0, canvas.scene, SLOT("update()"))
QTimer.singleShot(0, canvas.scene.update)
return return


qCritical("PatchCanvas::setGroupPos(%i, %i, %i, %i, %i) - unable to find group to reposition" % (group_id, group_pos_x_o, group_pos_y_o, group_pos_x_i, group_pos_y_i)) qCritical("PatchCanvas::setGroupPos(%i, %i, %i, %i, %i) - unable to find group to reposition" % (group_id, group_pos_x_o, group_pos_y_o, group_pos_x_i, group_pos_y_i))
@@ -713,7 +710,7 @@ def setGroupIcon(group_id, icon):
if group.split and group.widgets[1]: if group.split and group.widgets[1]:
group.widgets[1].setIcon(icon) group.widgets[1].setIcon(icon)


QTimer.singleShot(0, canvas.scene, SLOT("update()"))
QTimer.singleShot(0, canvas.scene.update)
return return


qCritical("PatchCanvas::setGroupIcon(%i, %s) - unable to find group to change icon" % (group_id, icon2str(icon))) qCritical("PatchCanvas::setGroupIcon(%i, %s) - unable to find group to change icon" % (group_id, icon2str(icon)))
@@ -758,7 +755,7 @@ def addPort(group_id, port_id, port_name, port_mode, port_type):


box_widget.updatePositions() box_widget.updatePositions()


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


def removePort(port_id): def removePort(port_id):
if canvas.debug: if canvas.debug:
@@ -773,7 +770,7 @@ def removePort(port_id):


canvas.port_list.remove(port) canvas.port_list.remove(port)


QTimer.singleShot(0, canvas.scene, SLOT("update()"))
QTimer.singleShot(0, canvas.scene.update)
return return


qCritical("PatchCanvas::removePort(%i) - Unable to find port to remove" % port_id) qCritical("PatchCanvas::removePort(%i) - Unable to find port to remove" % port_id)
@@ -788,7 +785,7 @@ def renamePort(port_id, new_port_name):
port.widget.setPortName(new_port_name) port.widget.setPortName(new_port_name)
port.widget.parentItem().updatePositions() port.widget.parentItem().updatePositions()


QTimer.singleShot(0, canvas.scene, SLOT("update()"))
QTimer.singleShot(0, canvas.scene.update)
return return


qCritical("PatchCanvas::renamePort(%i, %s) - Unable to find port to rename" % (port_id, new_port_name.encode())) qCritical("PatchCanvas::renamePort(%i, %s) - Unable to find port to rename" % (port_id, new_port_name.encode()))
@@ -825,6 +822,8 @@ def connectPorts(connection_id, port_out_id, port_in_id):
else: else:
connection_dict.widget = CanvasLine(port_out, port_in, None) connection_dict.widget = CanvasLine(port_out, port_in, None)


canvas.scene.addItem(connection_dict.widget)

port_out_parent.addLineFromGroup(connection_dict.widget, connection_id) port_out_parent.addLineFromGroup(connection_dict.widget, connection_id)
port_in_parent.addLineFromGroup(connection_dict.widget, connection_id) port_in_parent.addLineFromGroup(connection_dict.widget, connection_id)


@@ -841,7 +840,7 @@ def connectPorts(connection_id, port_out_id, port_in_id):
item = connection_dict.widget item = connection_dict.widget
CanvasItemFX(item, True) CanvasItemFX(item, True)


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


def disconnectPorts(connection_id): def disconnectPorts(connection_id):
if canvas.debug: if canvas.debug:
@@ -890,7 +889,7 @@ def disconnectPorts(connection_id):
else: else:
line.deleteFromScene() line.deleteFromScene()


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


def arrange(): def arrange():
if canvas.debug: if canvas.debug:
@@ -1007,10 +1006,6 @@ def CanvasRemoveAnimation(f_animation):
del animation.animation del animation.animation
break break


def CanvasPostponedGroups():
if canvas.debug:
qDebug("PatchCanvas::CanvasPostponedGroups()")

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())) qDebug("PatchCanvas::CanvasCallback(%i, %i, %i, %s)" % (action, value1, value2, value_str.encode()))
@@ -1038,12 +1033,12 @@ def CanvasItemFX(item, show, destroy=False):
canvas.animation_list.append(animation_dict) canvas.animation_list.append(animation_dict)


if show: if show:
canvas.qobject.connect(animation, SIGNAL("finished()"), SLOT("AnimationIdle()"))
animation.finished.connect(canvas.qobject.AnimationIdle)
else: else:
if destroy: if destroy:
canvas.qobject.connect(animation, SIGNAL("finished()"), SLOT("AnimationDestroy()"))
animation.finished.connect(canvas.qobject.AnimationDestroy)
else: else:
canvas.qobject.connect(animation, SIGNAL("finished()"), SLOT("AnimationHide()"))
animation.finished.connect(canvas.qobject.AnimationHide)


animation.start() animation.start()


@@ -1069,6 +1064,9 @@ def CanvasRemoveItemFX(item):
# patchscene.cpp # patchscene.cpp


class PatchScene(QGraphicsScene): class PatchScene(QGraphicsScene):
scaleChanged = pyqtSignal(float)
sceneGroupMoved = pyqtSignal(int, int, QPointF)

def __init__(self, parent, view): def __init__(self, parent, view):
QGraphicsScene.__init__(self, parent) QGraphicsScene.__init__(self, parent)


@@ -1103,7 +1101,7 @@ class PatchScene(QGraphicsScene):
elif scale < 0.2: elif scale < 0.2:
self.m_view.resetTransform() self.m_view.resetTransform()
self.m_view.scale(0.2, 0.2) self.m_view.scale(0.2, 0.2)
self.emit(SIGNAL("scaleChanged(double)"), self.m_view.transform().m11())
self.scaleChanged.emit(self.m_view.transform().m11())


def updateTheme(self): def updateTheme(self):
self.setBackgroundBrush(canvas.theme.canvas_bg) self.setBackgroundBrush(canvas.theme.canvas_bg)
@@ -1151,16 +1149,16 @@ class PatchScene(QGraphicsScene):
def zoom_in(self): def zoom_in(self):
if self.m_view.transform().m11() < 3.0: if self.m_view.transform().m11() < 3.0:
self.m_view.scale(1.2, 1.2) self.m_view.scale(1.2, 1.2)
self.emit(SIGNAL("scaleChanged(double)"), self.m_view.transform().m11())
self.scaleChanged.emit(self.m_view.transform().m11())


def zoom_out(self): def zoom_out(self):
if self.m_view.transform().m11() > 0.2: if self.m_view.transform().m11() > 0.2:
self.m_view.scale(0.8, 0.8) self.m_view.scale(0.8, 0.8)
self.emit(SIGNAL("scaleChanged(double)"), self.m_view.transform().m11())
self.scaleChanged.emit(self.m_view.transform().m11())


def zoom_reset(self): def zoom_reset(self):
self.m_view.resetTransform() self.m_view.resetTransform()
self.emit(SIGNAL("scaleChanged(double)"), 1.0)
self.scaleChanged.emit(1.0)


def keyPressEvent(self, event): def keyPressEvent(self, event):
if not self.m_view: if not self.m_view:
@@ -1246,7 +1244,7 @@ class PatchScene(QGraphicsScene):
for item in items_list: for item in items_list:
if item and item.isVisible() and item.type() == CanvasBoxType: if item and item.isVisible() and item.type() == CanvasBoxType:
item.checkItemPos() item.checkItemPos()
self.emit(SIGNAL("sceneGroupMoved(int, int, QPointF)"), item.getGroupId(), item.getSplittedMode(), item.scenePos())
self.sceneGroupMoved.emit(item.getGroupId(), item.getSplittedMode(), item.scenePos())


if len(items_list) > 1: if len(items_list) > 1:
canvas.scene.update() canvas.scene.update()
@@ -1317,7 +1315,7 @@ class CanvasFadeAnimation(QAbstractAnimation):


class CanvasLine(QGraphicsLineItem): class CanvasLine(QGraphicsLineItem):
def __init__(self, item1, item2, parent): def __init__(self, item1, item2, parent):
QGraphicsLineItem.__init__(self, parent, canvas.scene)
QGraphicsLineItem.__init__(self, parent)


self.item1 = item1 self.item1 = item1
self.item2 = item2 self.item2 = item2
@@ -1413,7 +1411,7 @@ class CanvasLine(QGraphicsLineItem):


class CanvasBezierLine(QGraphicsPathItem): class CanvasBezierLine(QGraphicsPathItem):
def __init__(self, item1, item2, parent): def __init__(self, item1, item2, parent):
QGraphicsPathItem.__init__(self, parent, canvas.scene)
QGraphicsPathItem.__init__(self, parent)


self.item1 = item1 self.item1 = item1
self.item2 = item2 self.item2 = item2
@@ -1520,7 +1518,7 @@ class CanvasBezierLine(QGraphicsPathItem):


class CanvasLineMov(QGraphicsLineItem): class CanvasLineMov(QGraphicsLineItem):
def __init__(self, port_mode, port_type, parent): def __init__(self, port_mode, port_type, parent):
QGraphicsLineItem.__init__(self, parent, canvas.scene)
QGraphicsLineItem.__init__(self, parent)


self.m_port_mode = port_mode self.m_port_mode = port_mode
self.m_port_type = port_type self.m_port_type = port_type
@@ -1577,7 +1575,7 @@ class CanvasLineMov(QGraphicsLineItem):


class CanvasBezierLineMov(QGraphicsPathItem): class CanvasBezierLineMov(QGraphicsPathItem):
def __init__(self, port_mode, port_type, parent): def __init__(self, port_mode, port_type, parent):
QGraphicsPathItem.__init__(self, parent, canvas.scene)
QGraphicsPathItem.__init__(self, parent)


self.m_port_mode = port_mode self.m_port_mode = port_mode
self.m_port_type = port_type self.m_port_type = port_type
@@ -1641,7 +1639,7 @@ class CanvasBezierLineMov(QGraphicsPathItem):


class CanvasPort(QGraphicsItem): class CanvasPort(QGraphicsItem):
def __init__(self, port_id, port_name, port_mode, port_type, parent): def __init__(self, port_id, port_name, port_mode, port_type, parent):
QGraphicsItem.__init__(self, parent, canvas.scene)
QGraphicsItem.__init__(self, parent)


# Save Variables, useful for later # Save Variables, useful for later
self.m_port_id = port_id self.m_port_id = port_id
@@ -1694,14 +1692,14 @@ class CanvasPort(QGraphicsItem):


def setPortName(self, port_name): def setPortName(self, port_name):
if QFontMetrics(self.m_port_font).width(port_name) < QFontMetrics(self.m_port_font).width(self.m_port_name): if QFontMetrics(self.m_port_font).width(port_name) < QFontMetrics(self.m_port_font).width(self.m_port_name):
QTimer.singleShot(0, canvas.scene, SLOT("update()"))
QTimer.singleShot(0, canvas.scene.update)


self.m_port_name = port_name self.m_port_name = port_name
self.update() self.update()


def setPortWidth(self, port_width): def setPortWidth(self, port_width):
if port_width < self.m_port_width: if port_width < self.m_port_width:
QTimer.singleShot(0, canvas.scene, SLOT("update()"))
QTimer.singleShot(0, canvas.scene.update)


self.m_port_width = port_width self.m_port_width = port_width
self.update() self.update()
@@ -1814,7 +1812,7 @@ class CanvasPort(QGraphicsItem):
port_con_id = CanvasGetConnectedPort(port_id, self.m_port_id) port_con_id = CanvasGetConnectedPort(port_id, self.m_port_id)
act_x_disc = discMenu.addAction(CanvasGetFullPortName(port_con_id)) act_x_disc = discMenu.addAction(CanvasGetFullPortName(port_con_id))
act_x_disc.setData(port_id) act_x_disc.setData(port_id)
QObject.connect(act_x_disc, SIGNAL("triggered()"), canvas.qobject, SLOT("PortContextMenuDisconnect()"))
act_x_disc.triggered.connect(canvas.qobject.PortContextMenuDisconnect)
else: else:
act_x_disc = discMenu.addAction("No connections") act_x_disc = discMenu.addAction("No connections")
act_x_disc.setEnabled(False) act_x_disc.setEnabled(False)
@@ -1977,7 +1975,7 @@ class cb_line_t(object):


class CanvasBox(QGraphicsItem): class CanvasBox(QGraphicsItem):
def __init__(self, group_id, group_name, icon, parent=None): def __init__(self, group_id, group_name, icon, parent=None):
QGraphicsItem.__init__(self, parent, canvas.scene)
QGraphicsItem.__init__(self, parent)


# Save Variables, useful for later # Save Variables, useful for later
self.m_group_id = group_id self.m_group_id = group_id
@@ -2025,6 +2023,8 @@ class CanvasBox(QGraphicsItem):


self.updatePositions() self.updatePositions()


canvas.scene.addItem(self)

def getGroupId(self): def getGroupId(self):
return self.m_group_id return self.m_group_id


@@ -2353,7 +2353,7 @@ class CanvasBox(QGraphicsItem):
port_con_id = CanvasGetConnectedPort(port_con_list[i], port_con_list_ids[i]) port_con_id = CanvasGetConnectedPort(port_con_list[i], port_con_list_ids[i])
act_x_disc = discMenu.addAction(CanvasGetFullPortName(port_con_id)) act_x_disc = discMenu.addAction(CanvasGetFullPortName(port_con_id))
act_x_disc.setData(port_con_list[i]) act_x_disc.setData(port_con_list[i])
QObject.connect(act_x_disc, SIGNAL("triggered()"), canvas.qobject, SLOT("PortContextMenuDisconnect()"))
act_x_disc.triggered.connect(canvas.qobject.PortContextMenuDisconnect)
else: else:
act_x_disc = discMenu.addAction("No connections") act_x_disc = discMenu.addAction("No connections")
act_x_disc.setEnabled(False) act_x_disc.setEnabled(False)


Loading…
Cancel
Save