diff --git a/b_asic/GUI/drag_button.py b/b_asic/GUI/drag_button.py index 79a03c9a37244cfe1cae63dfb62601eb66902fa6..002f03c1e6cd885bfe5abbe1a48611bbb6f11d5e 100644 --- a/b_asic/GUI/drag_button.py +++ b/b_asic/GUI/drag_button.py @@ -12,7 +12,8 @@ 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 +from b_asic.GUI._preferences import GRID, MINBUTTONSIZE, PORTWIDTH +from b_asic.port import InputPort @decorate_class(handle_error) @@ -47,6 +48,7 @@ class DragButton(QPushButton): self._m_drag = False self._mouse_press_pos = None self._mouse_move_pos = None + self._flipped = False super().__init__(parent) def contextMenuEvent(self, event): @@ -58,6 +60,10 @@ class DragButton(QPushButton): delete = QAction("Delete") menu.addAction(delete) delete.triggered.connect(self.remove) + + flip = QAction("Flip horizontal") + menu.addAction(flip) + flip.triggered.connect(self._flip) menu.exec_(self.cursor().pos()) def show_properties_window(self, event): @@ -116,6 +122,20 @@ class DragButton(QPushButton): self._window.graphic_view.update() super().mouseReleaseEvent(event) + def _flip(self, event): + self._flipped = not self._flipped + for pb in self.ports: + if isinstance(pb.port, InputPort): + newx = MINBUTTONSIZE - PORTWIDTH if self._flipped else 0 + else: + newx = 0 if self._flipped else MINBUTTONSIZE - PORTWIDTH + text = "<" if self._flipped else ">" + pb.move(newx, pb.pos().y()) + pb.setText(text) + + self._window.scene.update() + self._window.graphic_view.update() + def _toggle_button(self, pressed=False): self.pressed = not pressed self.setStyleSheet( @@ -133,6 +153,10 @@ class DragButton(QPushButton): self.setIcon(QIcon(path_to_image)) self.setIconSize(QSize(MINBUTTONSIZE, MINBUTTONSIZE)) + def is_flipped(self): + """Return True if the button is flipped (inputs to the right).""" + return self._is_flipped + def select_button(self, modifiers=None): if modifiers != Qt.KeyboardModifier.ControlModifier: for button in self._window.pressed_operations: