|
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
-
- # PatchBay Canvas engine using QGraphicsView/Scene
- # Copyright (C) 2010-2019 Filipe Coelho <falktx@falktx.com>
- #
- # 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 the Free Software Foundation; either version 2 of
- # the License, or any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # For a full copy of the GNU General Public License see the doc/GPL.txt file.
-
- # ------------------------------------------------------------------------------------------------------------
- # Imports (Global)
-
- from PyQt5.QtCore import qCritical, QPointF, QTimer
-
- # ------------------------------------------------------------------------------------------------------------
- # Imports (Custom)
-
- from . import bool2str, canvas, CanvasBoxType
- from .canvasfadeanimation import CanvasFadeAnimation
-
- # ------------------------------------------------------------------------------------------------------------
-
- def CanvasGetNewGroupPos(horizontal):
- if canvas.debug:
- print("PatchCanvas::CanvasGetNewGroupPos(%s)" % bool2str(horizontal))
-
- new_pos = QPointF(canvas.initial_pos)
- items = canvas.scene.items()
-
- #break_loop = False
- while True:
- break_for = False
- for i, item in enumerate(items):
- if item and item.type() == CanvasBoxType:
- if item.sceneBoundingRect().adjusted(-5, -5, 5, 5).contains(new_pos):
- itemRect = item.boundingRect()
- if horizontal:
- new_pos += QPointF(itemRect.width() + 50, 0)
- else:
- itemHeight = itemRect.height()
- if itemHeight < 30:
- new_pos += QPointF(0, itemHeight + 50)
- else:
- new_pos.setY(item.scenePos().y() + itemHeight + 20)
- break_for = True
- break
- else:
- if not break_for:
- break
- #break_loop = True
-
- return new_pos
-
- def CanvasGetFullPortName(group_id, port_id):
- if canvas.debug:
- print("PatchCanvas::CanvasGetFullPortName(%i, %i)" % (group_id, port_id))
-
- for port in canvas.port_list:
- if port.group_id == group_id and port.port_id == port_id:
- group_id = port.group_id
- for group in canvas.group_list:
- if group.group_id == group_id:
- return group.group_name + ":" + port.port_name
- break
-
- qCritical("PatchCanvas::CanvasGetFullPortName(%i, %i) - unable to find port" % (group_id, port_id))
- return ""
-
- def CanvasGetPortConnectionList(group_id, port_id):
- if canvas.debug:
- print("PatchCanvas::CanvasGetPortConnectionList(%i, %i)" % (group_id, port_id))
-
- conn_list = []
-
- for connection in canvas.connection_list:
- if connection.group_out_id == group_id and connection.port_out_id == port_id:
- conn_list.append((connection.connection_id, connection.group_in_id, connection.port_in_id))
- elif connection.group_in_id == group_id and connection.port_in_id == port_id:
- conn_list.append((connection.connection_id, connection.group_out_id, connection.port_out_id))
-
- return conn_list
-
- def CanvasCallback(action, value1, value2, value_str):
- if canvas.debug:
- print("PatchCanvas::CanvasCallback(%i, %i, %i, %s)" % (action, value1, value2, value_str.encode()))
-
- canvas.callback(action, value1, value2, value_str)
-
- def CanvasItemFX(item, show, destroy):
- if canvas.debug:
- print("PatchCanvas::CanvasItemFX(%s, %s, %s)" % (item, bool2str(show), bool2str(destroy)))
-
- # Check if the item already has an animation
- for animation in canvas.animation_list:
- if animation.item() == item:
- animation.forceStop()
- canvas.animation_list.remove(animation)
- del animation
- break
-
- animation = CanvasFadeAnimation(item, show)
- animation.setDuration(750 if show else 500)
-
- if show:
- animation.finished.connect(canvas.qobject.AnimationFinishedShow)
- else:
- if destroy:
- animation.finished.connect(canvas.qobject.AnimationFinishedDestroy)
- else:
- animation.finished.connect(canvas.qobject.AnimationFinishedHide)
-
- canvas.animation_list.append(animation)
-
- animation.start()
-
- def CanvasRemoveItemFX(item):
- if canvas.debug:
- print("PatchCanvas::CanvasRemoveItemFX(%s)" % item)
-
- if item.type() == CanvasBoxType:
- item.removeIconFromScene()
-
- canvas.scene.removeItem(item)
- del item
-
- QTimer.singleShot(0, canvas.scene.update)
-
- # ------------------------------------------------------------------------------------------------------------
|