Skip to content
Snippets Groups Projects

Add scheduler GUI

Merged Oscar Gustafsson requested to merge scheduler-gui into master
1 file
+ 54
0
Compare changes
  • Side-by-side
  • Inline
+ 54
0
 
from typing import Optional
 
 
from qtpy.QtWidgets import QGraphicsItem, QGraphicsPathItem
 
from qtpy.QtGui import QPainterPath, QPen
 
from qtpy.QtCore import Qt, QPointF
 
 
# B-ASIC
 
from b_asic.signal import Signal
 
from graphics_component_item import GraphicsComponentItem
 
 
class GraphicsSignal(QGraphicsPathItem):
 
_path: Optional[QPainterPath] = None
 
_src_operation: GraphicsComponentItem
 
_dest_operation: GraphicsComponentItem
 
_signal: Signal
 
def __init__(self,
 
src_operation: GraphicsComponentItem,
 
dest_operation: GraphicsComponentItem,
 
signal: Signal, pen: Optional[QPen] = None,
 
parent: Optional[QGraphicsItem] = None):
 
super().__init__(parent=parent)
 
self._src_operation = src_operation
 
self._dest_operation = dest_operation
 
self._signal = signal
 
if pen is None:
 
pen = QPen(Qt.black)
 
pen.setWidthF(0.03)
 
self.setPen(pen)
 
self.update_path()
 
 
def update_path(self):
 
"""
 
Create a new path after moving connected operations.
 
"""
 
source_point = self._src_operation.get_port_location(
 
f"out{self._signal.source.index}")
 
dest_point = self._dest_operation.get_port_location(
 
f"in{self._signal.destination.index}")
 
path = QPainterPath()
 
path.moveTo(source_point)
 
source_x = source_point.x()
 
source_y = source_point.y()
 
dest_x = dest_point.x()
 
dest_y = dest_point.y()
 
if abs(source_x - dest_x) <= 0.1:
 
ctrl_point1 = QPointF(source_x + 0.5, source_y)
 
ctrl_point2 = QPointF(source_x - 0.5, dest_y)
 
else:
 
mid_x = (source_x + dest_x)/2
 
ctrl_point1 = QPointF(mid_x, source_y)
 
ctrl_point2 = QPointF(mid_x, dest_y)
 
 
path.cubicTo(ctrl_point1, ctrl_point2, dest_point)
 
self.setPath(path)
Loading