Skip to content
Snippets Groups Projects
Commit b4a524e8 authored by Andreas Bolin's avatar Andreas Bolin
Browse files

workspace dump

parent 6d806be4
No related branches found
No related tags found
1 merge request!78Add scheduler GUI
Pipeline #73150 passed
...@@ -37,7 +37,7 @@ from graphics_graph_event import GraphicsGraphEvent ...@@ -37,7 +37,7 @@ from graphics_graph_event import GraphicsGraphEvent
class GraphicsAxisItem(QGraphicsItemGroup, GraphicsGraphEvent): class GraphicsAxisItem(QGraphicsItemGroup):
_scale: float = 1.0 # static, changed from MainWindow _scale: float = 1.0 # static, changed from MainWindow
_width: float _width: float
...@@ -55,7 +55,7 @@ class GraphicsAxisItem(QGraphicsItemGroup, GraphicsGraphEvent): ...@@ -55,7 +55,7 @@ class GraphicsAxisItem(QGraphicsItemGroup, GraphicsGraphEvent):
# self.setFlag(QGraphicsItem.ItemIsSelectable) # self.setFlag(QGraphicsItem.ItemIsSelectable)
# self.setAcceptHoverEvents(True) # self.setAcceptHoverEvents(True)
self.update(width, height, x_indent) self.update_(width, height, x_indent)
@property @property
...@@ -82,7 +82,7 @@ class GraphicsAxisItem(QGraphicsItemGroup, GraphicsGraphEvent): ...@@ -82,7 +82,7 @@ class GraphicsAxisItem(QGraphicsItemGroup, GraphicsGraphEvent):
# for child in self._axis.values(): # for child in self._axis.values():
# del child # del child
def update(self, width, height, x_indent) -> None: def update_(self, width, height, x_indent) -> None:
self._width = width self._width = width
self._height = height self._height = height
self._x_indent = x_indent self._x_indent = x_indent
......
...@@ -16,7 +16,7 @@ from qtpy import QtWidgets ...@@ -16,7 +16,7 @@ from qtpy import QtWidgets
# QGraphics and QPainter imports # QGraphics and QPainter imports
from qtpy.QtCore import ( from qtpy.QtCore import (
Qt, QObject, QRect, QRectF, QPoint, QSize, QSizeF, QByteArray, Slot) Qt, QObject, QRect, QRectF, QPoint, QSize, QSizeF, QByteArray, Slot, QEvent)
from qtpy.QtGui import ( from qtpy.QtGui import (
QPaintEvent, QPainter, QPainterPath, QColor, QBrush, QPen, QFont, QPolygon, QIcon, QPixmap, QPaintEvent, QPainter, QPainterPath, QColor, QBrush, QPen, QFont, QPolygon, QIcon, QPixmap,
QLinearGradient, QTransform) QLinearGradient, QTransform)
...@@ -34,7 +34,7 @@ from b_asic.schedule import Schedule ...@@ -34,7 +34,7 @@ from b_asic.schedule import Schedule
from graphics_component_event import GraphicsComponentEvent from graphics_component_event import GraphicsComponentEvent
class GraphicsComponentItem(QGraphicsItemGroup, GraphicsComponentEvent): class GraphicsComponentItem(QGraphicsItemGroup):
_scale: float = 1.0 # static, changed from MainWindow _scale: float = 1.0 # static, changed from MainWindow
_height: float _height: float
...@@ -49,18 +49,24 @@ class GraphicsComponentItem(QGraphicsItemGroup, GraphicsComponentEvent): ...@@ -49,18 +49,24 @@ class GraphicsComponentItem(QGraphicsItemGroup, GraphicsComponentEvent):
self._height = height self._height = height
self._component_item = QGraphicsPathItem() self._component_item = QGraphicsPathItem()
self._item_group = QGraphicsItemGroup() self._item_group = QGraphicsItemGroup()
self.setFlag(QGraphicsItem.ItemIsMovable) self.setHandlesChildEvents(True) # PySide2 QGraphicsItemGroup default: true. PyQt5 not an option
# self.setFlag(QGraphicsItem.ItemIsSelectable) self.setFlag(QGraphicsItem.ItemIsMovable) # mouse move events
self.setFlag(QGraphicsItem.ItemIsSelectable) # mouse click events
# self.setFlag(QGraphicsItem.ItemSendsGeometryChanges) # self.setFlag(QGraphicsItem.ItemSendsGeometryChanges)
self.setAcceptHoverEvents(True) # self.setAcceptHoverEvents(True)
# self.setAcceptTouchEvents(True) # self.setAcceptTouchEvents(True)
# self.setAcceptDrops(True) # self.setAcceptDrops(True)
self.setAcceptedMouseButtons(Qt.AllButtons) # self.setAcceptedMouseButtons(Qt.AllButtons)
# self.setAcceptedMouseButtons(Qt.LeftButton) # self.setAcceptedMouseButtons(Qt.LeftButton)
# self.setAcceptedMouseButtons(Qt.NoButton) # self.setAcceptedMouseButtons(Qt.NoButton)
self._populate() self._populate()
def sceneEvent(self, event: QEvent) -> bool:
print(f'Component -->\t\t\t\t{event.type()}')
# event.accept()
# QApplication.sendEvent(self.scene(), event)
return True
@property @property
def height(self) -> float: def height(self) -> float:
......
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
"""TODO""" """B-ASIC Scheduler-gui Graphics Graph Event Module.
Contains event filters and handlers for GraphicsGraphItem objects."""
import os import os
import sys import sys
...@@ -19,66 +21,120 @@ from qtpy import QtWidgets ...@@ -19,66 +21,120 @@ from qtpy import QtWidgets
# QGraphics and QPainter imports # QGraphics and QPainter imports
from qtpy.QtCore import ( from qtpy.QtCore import (
Qt, QObject, QRect, QRectF, QPoint, QSize, QSizeF, QByteArray, Slot) Qt, QObject, QRect, QRectF, QPoint, QSize, QSizeF, QByteArray, Slot, QEvent)
from qtpy.QtGui import ( from qtpy.QtGui import (
QPaintEvent, QPainter, QPainterPath, QColor, QBrush, QPen, QFont, QPolygon, QIcon, QPixmap, QPaintEvent, QPainter, QPainterPath, QColor, QBrush, QPen, QFont, QPolygon, QIcon, QPixmap,
QLinearGradient, QTransform, QCursor) QLinearGradient, QTransform, QCursor, QFocusEvent)
from qtpy.QtWidgets import ( from qtpy.QtWidgets import (
QGraphicsView, QGraphicsScene, QGraphicsWidget, QGraphicsView, QGraphicsScene, QGraphicsWidget,
QGraphicsLayout, QGraphicsLinearLayout, QGraphicsGridLayout, QGraphicsLayoutItem, QGraphicsAnchorLayout, QGraphicsLayout, QGraphicsLinearLayout, QGraphicsGridLayout, QGraphicsLayoutItem, QGraphicsAnchorLayout,
QGraphicsItem, QGraphicsItemGroup, QGraphicsPathItem, QGraphicsLineItem, QGraphicsRectItem, QGraphicsItem, QGraphicsItemGroup, QGraphicsPathItem, QGraphicsLineItem, QGraphicsRectItem,
QStyleOptionGraphicsItem, QWidget, QStyleOptionGraphicsItem, QWidget,
QGraphicsObject, QGraphicsSceneMouseEvent, QGraphicsSceneHoverEvent, QGraphicsSceneContextMenuEvent) QGraphicsObject, QGraphicsSceneMouseEvent, QGraphicsSceneHoverEvent, QGraphicsSceneContextMenuEvent,
QGraphicsSceneDragDropEvent, QGraphicsSceneWheelEvent)
from qtpy.QtCore import ( from qtpy.QtCore import (
QPoint, QPointF) QPoint, QPointF)
from abc import ABC
from graphics_component_item import GraphicsComponentItem
# class GraphicsGraphEvent(ABC):
class GraphicsGraphEvent(QGraphicsItem): class GraphicsGraphEvent(QGraphicsItem):
"""Event handler for GraphicsComponentItem""" """Event filter and handlers for GraphicsGraphItem"""
# _component_group: list[GraphicsComponentItem]
def __init__(self, parent): def __init__(self, parent: QGraphicsItem = None):
super().__init__() super().__init__(parent)
# self.setAcceptedMouseButtons(Qt.LeftButton) # self.setAcceptedMouseButtons(Qt.LeftButton)
# self.setFlag(QGraphicsItem.ItemIsMovable) # self.setFlag(QGraphicsItem.ItemIsMovable)
# self.setFlag(QGraphicsItem.ItemIsSelectable) # self.setFlag(QGraphicsItem.ItemIsSelectable)
# self.setAcceptHoverEvents(True) # self.setAcceptHoverEvents(True)
# self.setFlag(QGraphicsItem.ItemSendsGeometryChanges) # self.setFlag(QGraphicsItem.ItemSendsGeometryChanges)
# self.setFlag(QGraphicsItem.ItemIsMovable)
# self.setFlag(QGraphicsItem.ItemIsSelectable)
self.setAcceptHoverEvents(True)
print(f'GraphicsGraphItem.handlesChildEvents(): {self.handlesChildEvents()}')
self.setHandlesChildEvents(True) # PySide2 QGraphicsItemGroup default: true. PyQt5 not an option
# self.setAcceptedMouseButtons(Qt.NoButton)
def mouseMoveEvent(self, event: QGraphicsSceneMouseEvent) -> None: #################
"""Set the position of the graphical element in the graphic scene, #### Filters ####
translate coordinates of the cursor within the graphic element #################
in the coordinate system of the graphic scenes""" def installSceneEventFilters(self) -> None:
print('GraphicsGraphEvent.mouseMoveEvent()') """Installs an event filter for 'item' on 'self', causing
# Qt.DragMoveCursor all events for 'item' to first pass through 'self's
# self.setPos(self.mapToScene(event.pos())) sceneEventFilter() function."""
super().mouseMoveEvent(event) for item in self._component_group:
item.installSceneEventFilter(self)
def mousePressEvent(self, event: QGraphicsSceneMouseEvent) -> None: self.setFiltersChildEvents(True) # default false
"""Changes the cursor to ClosedHandCursor when grabbing an object"""
print('GraphicsGraphEvent.mousePressEvent()') def removeSceneEventFilters(self) -> None:
super().mousePressEvent(event) """Removes an event filter on 'item' from 'self'."""
# self.setCursor(QCursor(Qt.ClosedHandCursor)) for item in self._component_group:
# event.accept() item.removeSceneEventFilter(self)
self.setFiltersChildEvents(False)
def mouseReleaseEvent(self, event: QGraphicsSceneMouseEvent) -> None:
"""Changes the cursor to OpenHandCursor when releasing an object"""
print('GraphicsGraphEvent.mouseReleaseEvent()')
super().mouseReleaseEvent(event)
# self.setCursor(QCursor(Qt.OpenHandCursor))
# event.accept()
def hoverEnterEvent(self, event: QGraphicsSceneHoverEvent) -> None: def sceneEventFilter(self, item: QGraphicsItem, event: QEvent) -> bool:
"""Changes the cursor to OpenHandCursor when hovering an object""" """Returns true if the event was filtered (i.e. stopped), otherwise false."""
print('GraphicsGraphEvent.hoverEnterEvent()') type_ = event.type()
super().hoverEnterEvent(event) if type_ != QEvent.GraphicsSceneHoverMove: print(f'Graph -->\t{type(item).__name__}\t{type_}')
# self.setCursor(QCursor(Qt.OpenHandCursor)) print(__name__)
# if event.button():
# # print(f'Graph -->\t{type_}\t{item}')
# print(f'-------->\t{event.button()}')
if type(item) == GraphicsComponentItem:
switch = {
QEvent.FocusIn: self.graph_focusInEvent(item, QFocusEvent(event)),
QEvent.GraphicsSceneContextMenu: self.graph_contextMenuEvent(item, QGraphicsSceneContextMenuEvent(event)),
QEvent.GraphicsSceneDragEnter: self.graph_dragEnterEvent(item, QGraphicsSceneDragDropEvent(event)),
QEvent.GraphicsSceneDragMove: self.graph_dragMoveEvent(item, QGraphicsSceneDragDropEvent(event)),
QEvent.GraphicsSceneDragLeave: self.graph_dragLeaveEvent(item, QGraphicsSceneDragDropEvent(event)),
QEvent.GraphicsSceneDrop: self.graph_dropEvent(item, QGraphicsSceneDragDropEvent(event)),
QEvent.GraphicsSceneHoverEnter: self.graph_hoverEnterEvent(item, QGraphicsSceneHoverEvent(event)),
QEvent.GraphicsSceneHoverMove: self.graph_hoverMoveEvent(item, QGraphicsSceneHoverEvent(event)),
QEvent.GraphicsSceneHoverLeave: self.graph_hoverLeaveEvent(item, QGraphicsSceneHoverEvent(event)),
QEvent.GraphicsSceneMouseMove: self.graph_mouseMoveEvent(item, QGraphicsSceneMouseEvent(event)),
QEvent.GraphicsSceneMousePress: self.graph_mousePressEvent(item, QGraphicsSceneMouseEvent(event)),
QEvent.GraphicsSceneMouseRelease: self.graph_mouseReleaseEvent(item, QGraphicsSceneMouseEvent(event)),
QEvent.GraphicsSceneMouseDoubleClick: self.graph_mouseDoubleClickEvent(item, QGraphicsSceneMouseEvent(event)),
QEvent.GraphicsSceneWheel: self.graph_wheelEvent(item, QGraphicsSceneWheelEvent(event))
}
# return switch.get(event.type(), self.log(item, event); False)
return switch.get(event.type(), False)
else:
print(f'Graph -->\t{type(item).__name__}\t{type_}')
return False # returns False if event is ignored and pass through event to its child
# def sceneEvent(self, event: QEvent) -> bool:
# print(f'sceneEvent() --> {event.type()}')
# # event.accept()
# # QApplication.sendEvent(self.scene(), event)
# return False
# def hoverMoveEvent(event: QGraphicsSceneHoverEvent) -> None: ...
# def contextMenuEvent(event: QGraphicsSceneContextMenuEvent) -> None: ...
def hoverLeaveEvent(self, event: QGraphicsSceneHoverEvent) -> None: ########################
"""Changes the cursor to ArrowCursor when leaving an object""" #### Event Handlers ####
print('GraphicsGraphEvent.hoverLeaveEvent()') ########################
super().hoverLeaveEvent(event) def graph_focusInEvent(self, item: QGraphicsItem, event: QFocusEvent) -> bool: ...
# self.setCursor(QCursor(Qt.ArrowCursor)) def graph_contextMenuEvent(self, item: QGraphicsItem, event: QGraphicsSceneContextMenuEvent) -> bool: ...
def graph_dragEnterEvent(self, item: QGraphicsItem, event: QGraphicsSceneDragDropEvent) -> bool: ...
def graph_dragMoveEvent(self, item: QGraphicsItem, event: QGraphicsSceneDragDropEvent) -> bool: ...
def graph_dragLeaveEvent(self, item: QGraphicsItem, event: QGraphicsSceneDragDropEvent) -> bool: ...
def graph_dropEvent(self, item: QGraphicsItem, event: QGraphicsSceneDragDropEvent) -> bool: ...
def graph_hoverEnterEvent(self, item: QGraphicsItem, event: QGraphicsSceneHoverEvent) -> bool: ...
def graph_hoverMoveEvent(self, item: QGraphicsItem, event: QGraphicsSceneHoverEvent) -> bool: ...
def graph_hoverLeaveEvent(self, item: QGraphicsItem, event: QGraphicsSceneHoverEvent) -> bool: ...
def graph_mouseMoveEvent(self, item: QGraphicsItem, event: QGraphicsSceneMouseEvent) -> bool: ...
def graph_mousePressEvent(self, item: QGraphicsItem, event: QGraphicsSceneMouseEvent) -> bool: ...
def graph_mouseReleaseEvent(self, item: QGraphicsItem, event: QGraphicsSceneMouseEvent) -> bool: ...
def graph_mouseDoubleClickEvent(self, item: QGraphicsItem, event: QGraphicsSceneMouseEvent) -> bool: ...
def graph_wheelEvent(self, item: QGraphicsItem, event: QGraphicsSceneWheelEvent) -> bool: ...
\ No newline at end of file
...@@ -26,7 +26,8 @@ from qtpy.QtWidgets import ( ...@@ -26,7 +26,8 @@ from qtpy.QtWidgets import (
QGraphicsView, QGraphicsScene, QGraphicsWidget, QGraphicsView, QGraphicsScene, QGraphicsWidget,
QGraphicsLayout, QGraphicsLinearLayout, QGraphicsGridLayout, QGraphicsLayoutItem, QGraphicsAnchorLayout, QGraphicsLayout, QGraphicsLinearLayout, QGraphicsGridLayout, QGraphicsLayoutItem, QGraphicsAnchorLayout,
QGraphicsItem, QGraphicsItemGroup, QGraphicsPathItem, QGraphicsLineItem, QGraphicsRectItem, QGraphicsItem, QGraphicsItemGroup, QGraphicsPathItem, QGraphicsLineItem, QGraphicsRectItem,
QStyleOptionGraphicsItem, QWidget, QGraphicsObject) QStyleOptionGraphicsItem, QWidget, QGraphicsObject,
QGraphicsSceneContextMenuEvent, QGraphicsSceneHoverEvent)
from qtpy.QtCore import ( from qtpy.QtCore import (
QPoint, QPointF, QEvent) QPoint, QPointF, QEvent)
...@@ -50,11 +51,12 @@ class GraphicsGraphItem(QGraphicsItemGroup): ...@@ -50,11 +51,12 @@ class GraphicsGraphItem(QGraphicsItemGroup):
def __init__(self, schedule: Schedule, parent: QGraphicsItem = None): def __init__(self, schedule: Schedule, parent: QGraphicsItem = None):
super().__init__(parent) super().__init__(parent)
# self.setFlag(QGraphicsItem.ItemIsMovable) # # self.setFlag(QGraphicsItem.ItemIsMovable)
# self.setFlag(QGraphicsItem.ItemIsSelectable) # # self.setFlag(QGraphicsItem.ItemIsSelectable)
self.setAcceptHoverEvents(True) # self.setAcceptHoverEvents(True)
self.setHandlesChildEvents(False) # print(f'GraphicsGraphItem.handlesChildEvents(): {self.handlesChildEvents()}')
# self.setAcceptedMouseButtons(Qt.NoButton) # self.setHandlesChildEvents(True) # PySide2 QGraphicsItemGroup default: true. PyQt5 not an option
# # self.setAcceptedMouseButtons(Qt.NoButton)
self._schedule = deepcopy(schedule) self._schedule = deepcopy(schedule)
...@@ -92,32 +94,48 @@ class GraphicsGraphItem(QGraphicsItemGroup): ...@@ -92,32 +94,48 @@ class GraphicsGraphItem(QGraphicsItemGroup):
item.installSceneEventFilter(self) item.installSceneEventFilter(self)
# for item in self._component_group.childItems(): # for item in self._component_group.childItems():
# item.installSceneEventFilter(self) # item.installSceneEventFilter(self)
self.setFiltersChildEvents(True) self.setFiltersChildEvents(True) # default false
def sceneEventFilter(self, ojb: QGraphicsItem, event: QEvent) -> bool: def sceneEventFilter(self, item: QGraphicsItem, event: QEvent) -> bool:
"""Returns true if the event was filtered (i.e. stopped), otherwise false""" """Returns true if the event was filtered (i.e. stopped), otherwise false."""
type_ = event.type() type_ = event.type()
if type_ != QEvent.GraphicsSceneHoverMove: print(f'---> Event: {type_}') if type_ != QEvent.GraphicsSceneHoverMove: print(f'Graph -->\t{type(item).__name__}\t{type_}')
print(__name__)
if type_ == QEvent.GraphicsSceneHoverEnter: ... # if event.button():
# print('\t\tQEvent.GraphicsSceneHoverEnter') # # print(f'Graph -->\t{type_}\t{item}')
elif type_ == QEvent.GraphicsSceneHoverLeave: ... # print(f'-------->\t{event.button()}')
# print('\t\tQEvent.GraphicsSceneHoverLeave')
elif type_ == QEvent.GraphicsSceneContextMenu: ... if type(item) == GraphicsComponentItem:
# elif type_ == QEvent.mousePressEvent:
# print('\t\tQEvent.mousePressEvent') switch = {
# elif type_ == QEvent.mouseReleaseEvent: QEvent.FocusIn: self.graph_focusInEvent(item, Qt.QFocusEvent(event)),
# print('\t\tQEvent.mouseReleaseEvent') QEvent.GraphicsSceneContextMenu: self.graph_contextMenuEvent(item, Qt.QGraphicsSceneContextMenuEvent(event)),
else: ... #False QEvent.GraphicsSceneDragEnter: self.graph_dragEnterEvent(item, Qt.QGraphicsSceneDragDropEvent(event)),
QEvent.GraphicsSceneDragMove: self.graph_dragMoveEvent(item, Qt.QGraphicsSceneDragDropEvent(event)),
QEvent.GraphicsSceneDragLeave: self.graph_dragLeaveEvent(item, Qt.QGraphicsSceneDragDropEvent(event)),
QEvent.GraphicsSceneDrop: self.graph_dropEvent(item, Qt.QGraphicsSceneDragDropEvent(event)),
QEvent.GraphicsSceneHoverEnter: self.graph_hoverEnterEvent(item, Qt.QGraphicsSceneHoverEvent(event)),
QEvent.GraphicsSceneHoverMove: self.graph_hoverMoveEvent(item, Qt.QGraphicsSceneHoverEvent(event)),
QEvent.GraphicsSceneHoverLeave: self.graph_hoverLeaveEvent(item, Qt.QGraphicsSceneHoverEvent(event)),
QEvent.GraphicsSceneMouseMove: self.graph_mouseMoveEvent(item, Qt.QGraphicsSceneMouseEvent(event)),
QEvent.GraphicsSceneMousePress: self.graph_mousePressEvent(item, Qt.QGraphicsSceneMouseEvent(event)),
QEvent.GraphicsSceneMouseRelease: self.graph_mouseReleaseEvent(item, Qt.QGraphicsSceneMouseEvent(event)),
QEvent.GraphicsSceneMouseDoubleClick: self.graph_mouseDoubleClickEvent(item, Qt.QGraphicsSceneMouseEvent(event)),
QEvent.GraphicsSceneWheel: self.graph_wheelEvent(item, Qt.QGraphicsSceneWheelEvent(event))
}
return switch.get(event.type(), self.log(item, event); False)
return switch.get(event.type(), False)
else:
print(f'Graph -->\t{type(item).__name__}\t{type_}')
return False return False # returns False if event is ignored and passed through to its child
# def sceneEvent(self, event: QEvent) -> bool: # # def sceneEvent(self, event: QEvent) -> bool:
# print(f'sceneEvent() --> {event.type()}') # # print(f'sceneEvent() --> {event.type()}')
# # event.accept() # # # event.accept()
# # QApplication.sendEvent(self.scene(), event) # # # QApplication.sendEvent(self.scene(), event)
# return False # # return False
def update_(self) -> None: def update_(self) -> None:
# self.prepareGeometryChange() # self.prepareGeometryChange()
......
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" B-ASIC Scheduler-gui Logger Module. """B-ASIC Scheduler-gui Logger Module.
Contains a logger that logs to the console and a file using levels. It is based Contains a logger that logs to the console and a file using levels. It is based
on the `logging` module and has predefined levels of logging. on the `logging` module and has predefined levels of logging.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment