Audio plugin host https://kx.studio/carla
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

129 lines
4.5KB

  1. #!/usr/bin/env python3
  2. # SPDX-FileCopyrightText: 2011-2024 Filipe Coelho <falktx@falktx.com>
  3. # SPDX-License-Identifier: GPL-2.0-or-later
  4. # ------------------------------------------------------------------------------------------------------------
  5. # Imports (Global)
  6. from qt_compat import qt_config
  7. if qt_config == 5:
  8. from PyQt5.QtCore import qCritical, QPointF, QTimer
  9. elif qt_config == 6:
  10. from PyQt6.QtCore import qCritical, QPointF, QTimer
  11. # ------------------------------------------------------------------------------------------------------------
  12. # Imports (Custom)
  13. from . import bool2str, canvas, CanvasBoxType
  14. from .canvasfadeanimation import CanvasFadeAnimation
  15. # ------------------------------------------------------------------------------------------------------------
  16. def CanvasGetNewGroupPos(horizontal):
  17. if canvas.debug:
  18. print("PatchCanvas::CanvasGetNewGroupPos(%s)" % bool2str(horizontal))
  19. new_pos = QPointF(canvas.initial_pos)
  20. items = canvas.scene.items()
  21. #break_loop = False
  22. while True:
  23. break_for = False
  24. for i, item in enumerate(items):
  25. if item and item.type() == CanvasBoxType:
  26. if item.sceneBoundingRect().adjusted(-5, -5, 5, 5).contains(new_pos):
  27. itemRect = item.boundingRect()
  28. if horizontal:
  29. new_pos += QPointF(itemRect.width() + 50, 0)
  30. else:
  31. itemHeight = itemRect.height()
  32. if itemHeight < 30:
  33. new_pos += QPointF(0, itemHeight + 50)
  34. else:
  35. new_pos.setY(item.scenePos().y() + itemHeight + 20)
  36. break_for = True
  37. break
  38. else:
  39. if not break_for:
  40. break
  41. #break_loop = True
  42. return new_pos
  43. def CanvasGetFullPortName(group_id, port_id):
  44. if canvas.debug:
  45. print("PatchCanvas::CanvasGetFullPortName(%i, %i)" % (group_id, port_id))
  46. for port in canvas.port_list:
  47. if port.group_id == group_id and port.port_id == port_id:
  48. group_id = port.group_id
  49. for group in canvas.group_list:
  50. if group.group_id == group_id:
  51. return group.group_name + ":" + port.port_name
  52. break
  53. qCritical("PatchCanvas::CanvasGetFullPortName(%i, %i) - unable to find port" % (group_id, port_id))
  54. return ""
  55. def CanvasGetPortConnectionList(group_id, port_id):
  56. if canvas.debug:
  57. print("PatchCanvas::CanvasGetPortConnectionList(%i, %i)" % (group_id, port_id))
  58. conn_list = []
  59. for connection in canvas.connection_list:
  60. if connection.group_out_id == group_id and connection.port_out_id == port_id:
  61. conn_list.append((connection.connection_id, connection.group_in_id, connection.port_in_id))
  62. elif connection.group_in_id == group_id and connection.port_in_id == port_id:
  63. conn_list.append((connection.connection_id, connection.group_out_id, connection.port_out_id))
  64. return conn_list
  65. def CanvasCallback(action, value1, value2, value_str):
  66. if canvas.debug:
  67. print("PatchCanvas::CanvasCallback(%i, %i, %i, %s)" % (action, value1, value2, value_str.encode()))
  68. canvas.callback(action, value1, value2, value_str)
  69. def CanvasItemFX(item, show, destroy):
  70. if canvas.debug:
  71. print("PatchCanvas::CanvasItemFX(%s, %s, %s)" % (item, bool2str(show), bool2str(destroy)))
  72. # Check if the item already has an animation
  73. for animation in canvas.animation_list:
  74. if animation.item() == item:
  75. animation.forceStop()
  76. canvas.animation_list.remove(animation)
  77. del animation
  78. break
  79. animation = CanvasFadeAnimation(item, show)
  80. animation.setDuration(750 if show else 500)
  81. if show:
  82. animation.finished.connect(canvas.qobject.AnimationFinishedShow)
  83. else:
  84. if destroy:
  85. animation.finished.connect(canvas.qobject.AnimationFinishedDestroy)
  86. else:
  87. animation.finished.connect(canvas.qobject.AnimationFinishedHide)
  88. canvas.animation_list.append(animation)
  89. animation.start()
  90. def CanvasRemoveItemFX(item):
  91. if canvas.debug:
  92. print("PatchCanvas::CanvasRemoveItemFX(%s)" % item)
  93. if item.type() == CanvasBoxType:
  94. item.removeIconFromScene()
  95. canvas.scene.removeItem(item)
  96. del item
  97. QTimer.singleShot(0, canvas.scene.update)
  98. # ------------------------------------------------------------------------------------------------------------