Skip to content
Snippets Groups Projects
Commit d6443d56 authored by Johannes Kung's avatar Johannes Kung
Browse files

Ports now has context menu for hiding ports and signals

parent f4108a6c
No related branches found
No related tags found
No related merge requests found
Pipeline #101004 passed
......@@ -166,6 +166,7 @@ class CpuGraphicsScene(QGraphicsScene):
for item in self.module_graphics_items.values():
item.setFlag(QGraphicsItem.ItemIsMovable, not is_layout_locked)
item.setLocked(is_layout_locked)
for item in self.signal_graphics_items:
item.setFlag(QGraphicsItem.ItemIsMovable, not is_layout_locked)
......
......@@ -59,6 +59,8 @@ class ModuleGraphicsItem(QGraphicsObject, QGraphicsItem):
self.actions = []
self.isLocked = False
# Do general draw
self.draw_graphics_item()
......@@ -197,6 +199,10 @@ class ModuleGraphicsItem(QGraphicsObject, QGraphicsItem):
for action in self.actions:
menu.addAction(action)
action.setData(self.name)
show_ports_action = QAction("Show all ports", menu)
show_ports_action.triggered.connect(self.showPorts)
show_ports_action.setEnabled(not self.isLocked)
menu.addAction(show_ports_action)
return menu
def getPortNames(self) -> list[str]:
......@@ -235,6 +241,11 @@ class ModuleGraphicsItem(QGraphicsObject, QGraphicsItem):
"""
return action.data()
def setLocked(self, locked: bool) -> None:
self.isLocked = locked
for port in self.ports:
port.setLocked(locked)
def load_state_from_str(self, state_str) -> None:
state = state_str.split()
......
......@@ -3,10 +3,12 @@ from typing import Optional
from PyQt5.QtCore import QObject, QPointF, Qt, pyqtSignal
from PyQt5.QtWidgets import (
QAction,
QGraphicsItemGroup,
QGraphicsLineItem,
QGraphicsSceneMouseEvent,
QGraphicsSimpleTextItem,
QMenu,
)
from simudator.core.signal import Signal
......@@ -51,6 +53,7 @@ class PortGraphicsItem(QGraphicsItemGroup):
self.parent = parent
self.signal = signal
self.orientation = orientation
self.isLocked = False
# Set up pyqt signals using a QObject instance since inheriting from
# QObject or QGraphicsObject directly does not work with subclasses
......@@ -58,6 +61,7 @@ class PortGraphicsItem(QGraphicsItemGroup):
self.pyqtSignalHolder = PyQtSignalHolder()
self.moved = self.pyqtSignalHolder.moved
self.toggled = self.pyqtSignalHolder.toggled
self.drawPort()
self.setOrientation(orientation)
self.left_click = False
......@@ -165,13 +169,13 @@ class PortGraphicsItem(QGraphicsItemGroup):
if event.button() == Qt.MouseButton.LeftButton:
self.left_click = True
elif event.button() == Qt.MouseButton.RightButton:
self.toggled.emit()
event.accept()
def mouseMoveEvent(self, event: QGraphicsSceneMouseEvent) -> None:
if not self.left_click and self.parent is not None:
return
if self.isLocked:
return
# Get mouses relative position to parent
current_mouse_point = event.scenePos()
......@@ -217,9 +221,24 @@ class PortGraphicsItem(QGraphicsItemGroup):
self.left_click = False
def contextMenuEvent(self, event: QGraphicsSceneMouseEvent) -> None:
# We do this so no menu is showen when right clicking a port
menu = QMenu()
hide_signal_action = QAction("Toggle signal visibility", menu)
hide_signal_action.triggered.connect(self.toggled)
hide_signal_action.setEnabled(not self.isLocked)
hide_port_action = QAction("Toggle port visibility", menu)
hide_port_action.triggered.connect(self.toggleVisibility)
hide_port_action.setEnabled(not self.isLocked)
menu.addAction(hide_signal_action)
menu.addAction(hide_port_action)
menu.exec_(event.screenPos())
event.accept()
def toggleVisibility(self) -> None:
self.setVisible(not self.isVisible())
self.toggled.emit()
def getDisplayName(self) -> str:
return self.name
......@@ -232,5 +251,8 @@ class PortGraphicsItem(QGraphicsItemGroup):
def setNameVisibility(self, is_visible):
self.name_label.setVisible(is_visible)
def setLocked(self, locked: bool) -> None:
self.isLocked = locked
def getOrientation(self) -> Orientation:
return self.orientation
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment