Skip to content
Snippets Groups Projects
Commit 07c94da9 authored by Oscar Gustafsson's avatar Oscar Gustafsson :bicyclist:
Browse files

Move add_ports logic to drag_button

parent 5e253f97
No related branches found
No related tags found
No related merge requests found
Pipeline #88153 failed
......@@ -12,7 +12,13 @@ from qtpy.QtWidgets import QAction, QMenu, QPushButton
from b_asic.GUI.properties_window import PropertiesWindow
from b_asic.GUI.utils import decorate_class, handle_error
from b_asic.GUI._preferences import GRID, MINBUTTONSIZE, PORTWIDTH
from b_asic.GUI._preferences import (
GAP,
GRID,
MINBUTTONSIZE,
PORTHEIGHT,
PORTWIDTH,
)
from b_asic.port import InputPort
......@@ -67,8 +73,7 @@ class DragButton(QPushButton):
menu.exec_(self.cursor().pos())
def show_properties_window(self, event):
self.properties_window = PropertiesWindow(self, self._window)
self.properties_window.show()
PropertiesWindow(self, self._window).show()
def add_label(self, label):
self.label = label
......@@ -146,9 +151,7 @@ class DragButton(QPushButton):
path_to_image = os.path.join(
os.path.dirname(__file__),
"operation_icons",
(
f"{self.operation_path_name}{'_grey.png' if self.pressed else '.png'}"
),
f"{self.operation_path_name}{'_grey.png' if self.pressed else '.png'}",
)
self.setIcon(QIcon(path_to_image))
self.setIconSize(QSize(MINBUTTONSIZE, MINBUTTONSIZE))
......@@ -227,3 +230,37 @@ class DragButton(QPushButton):
if self.operation in self._window.operationDragDict:
del self._window.operationDragDict[self.operation]
def add_ports(self):
def _determine_port_distance(height, ports):
"""Determine the distance between each port on the side of an operation.
The method returns the distance that each port should have from 0.
"""
return (
[(height - PORTHEIGHT) // 2]
if ports == 1
else [(PORTHEIGHT + GAP) * i for i in range(ports)]
)
def _get_button_height(op):
max_ports = max(op.input_count, op.output_count)
return max(
MINBUTTONSIZE, max_ports * PORTHEIGHT + (max_ports - 1) * GAP
)
op = self.operation
# TODO: get height from operation
height = _get_button_height(op)
_output_ports_dist = _determine_port_distance(height, op.output_count)
_input_ports_dist = _determine_port_distance(height, op.input_count)
for i, dist in enumerate(_input_ports_dist):
port = PortButton(">", self, op.input(i), self._window)
self.ports.append(port)
port.move(0, dist)
port.show()
for i, dist in enumerate(_output_ports_dist):
port = PortButton(">", self, op.output(i), self._window)
self.ports.append(port)
port.move(MINBUTTONSIZE - PORTWIDTH, dist)
port.show()
......@@ -452,40 +452,6 @@ class MainWindow(QMainWindow):
self.dialog.add_sfg_to_dialog()
self.dialog.show()
def _determine_port_distance(self, height, ports):
"""Determine the distance between each port on the side of an operation.
The method returns the distance that each port should have from 0.
"""
return (
[(height - PORTHEIGHT) // 2]
if ports == 1
else [(PORTHEIGHT + GAP) * i for i in range(ports)]
)
def add_ports(self, operation):
op = operation.operation
height = self._get_button_height(op)
_output_ports_dist = self._determine_port_distance(
height, op.output_count
)
_input_ports_dist = self._determine_port_distance(
height, op.input_count
)
self.portDict[operation] = []
for i, dist in enumerate(_input_ports_dist):
port = PortButton(">", operation, op.input(i), self)
self.portDict[operation].append(port)
operation.ports.append(port)
port.move(0, dist)
port.show()
for i, dist in enumerate(_output_ports_dist):
port = PortButton(">", operation, op.output(i), self)
self.portDict[operation].append(port)
operation.ports.append(port)
port.move(MINBUTTONSIZE - PORTWIDTH, dist)
port.show()
def get_operations_from_namespace(self, namespace):
self.logger.info(
f"Fetching operations from namespace: {namespace.__name__}."
......@@ -549,7 +515,8 @@ class MainWindow(QMainWindow):
"background-color: white; border-style: solid;"
"border-color: black; border-width: 2px"
)
self.add_ports(attr_button)
attr_button.add_ports()
self.portDict[attr_button] = attr_button.ports
icon_path = os.path.join(
os.path.dirname(__file__),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment