diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5da3c2d78a9017e2f1862a6c8f6cce2630684e9c..229f5638b35cb402fa1d22b9329e5545bd906061 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,7 +7,12 @@ before_script: - apt-get install --yes build-essential cmake libfmt-dev pybind11-dev graphviz python3-pyqt5 xvfb xdg-utils lcov - python -m pip install --upgrade pip - python --version - - pip install pytest pytest-cov sphinx furo numpydoc pytest-xvfb pytest-qt setuptools_scm sphinx-qt-documentation pytest-xdist pytest-mpl + - pip install -r requirements.txt + - pip install -r requirements_doc.txt + - pip install -r requirements_test.txt + - pip install $QT_API + - export PYTEST_QT_API=$QT_API + - export QT_API=$QT_API # - export CXXFLAGS='--coverage' - pip install -ve . # Move file, but should be handled by installation @@ -17,7 +22,7 @@ before_script: .run-test: stage: test script: - - pytest --cov=b_asic --cov-report=xml:cov.xml --cov-report=term --color=yes test --mpl + - pytest --cov=b_asic --cov-report=xml:cov.xml --cov-report=term --color=yes test --mpl --timeout=20 --durations=10 # - lcov --capture --directory . --output-file coverage.info # - lcov --output-file coverage.info --extract coverage.info $PWD/src/'*' $PWD/b_asic/'*' # - lcov --list coverage.info @@ -30,19 +35,59 @@ before_script: coverage: /(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/ -run-test-3.8: +run-test-3.8-pyside2: + variables: + QT_API: pyside2 image: python:3.8 extends: ".run-test" -run-test-3.9: +run-test-3.8-pyqt5: + variables: + QT_API: pyqt5 + image: python:3.8 + extends: ".run-test" + +run-test-3.9-pyside2: + variables: + QT_API: pyside2 + image: python:3.9 + extends: ".run-test" + +run-test-3.9-pyqt5: + variables: + QT_API: pyqt5 image: python:3.9 extends: ".run-test" -run-test-3.10: +run-test-3.10-pyside2: + variables: + QT_API: pyside2 + image: python:3.10 + extends: ".run-test" + +run-test-3.10-pyqt5: + variables: + QT_API: pyqt5 + image: python:3.10 + extends: ".run-test" + +run-test-3.10-pyside6: + variables: + QT_API: pyside6 + image: python:3.10 + extends: ".run-test" + allow_failure: true + +run-test-3.10-pyqt6: + variables: + QT_API: pyqt6 image: python:3.10 extends: ".run-test" + allow_failure: true run-doc-test: + variables: + QT_API: pyside2 image: python:3.10 stage: test script: @@ -53,6 +98,8 @@ run-doc-test: # extends: ".run-test" pages: + variables: + QT_API: pyqt5 stage: deploy image: python:3.10 script: diff --git a/b_asic/GUI/drag_button.py b/b_asic/GUI/drag_button.py index a07f0e79b81864b3542e023cebb0379c527ae2df..d9a0ef4f16a8cf9dd2471260e1e2d5041cf7d7c2 100644 --- a/b_asic/GUI/drag_button.py +++ b/b_asic/GUI/drag_button.py @@ -83,22 +83,30 @@ class DragButton(QPushButton): def mousePressEvent(self, event): if event.button() == Qt.MouseButton.LeftButton: self._m_press = True - self._mouse_press_pos = event.pos() - self._mouse_move_pos = event.pos() + pos = event.globalPosition().toPoint() + self._mouse_press_pos = pos + self._mouse_move_pos = pos super().mousePressEvent(event) def mouseMoveEvent(self, event): if event.buttons() == Qt.MouseButton.LeftButton and self._m_press: self._m_drag = True - self.move(self.mapToParent(event.pos() - self._mouse_press_pos)) + self.move( + self.mapToParent( + event.globalPosition().toPoint() - self._mouse_press_pos + ) + ) if self in self._window.pressed_operations: for button in self._window.pressed_operations: if button is self: continue button.move( - button.mapToParent(event.pos() - self._mouse_press_pos) + button.mapToParent( + event.globalPosition().toPoint() + - self._mouse_press_pos + ) ) self._window.scene.update() @@ -109,7 +117,9 @@ class DragButton(QPushButton): self._m_press = False if self._m_drag: if self._mouse_press_pos is not None: - moved = event.pos() - self._mouse_press_pos + moved = ( + event.globalPosition().toPoint() - self._mouse_press_pos + ) if moved.manhattanLength() > 3: event.ignore() diff --git a/b_asic/GUI/main_window.py b/b_asic/GUI/main_window.py index 0a9cc98258b9d6304ea0a4e3d5837921c32782d5..942bcd5b2eab169464158a91c828ebcd2da4fdec 100644 --- a/b_asic/GUI/main_window.py +++ b/b_asic/GUI/main_window.py @@ -16,6 +16,7 @@ from qtpy.QtWidgets import ( QAction, QApplication, QFileDialog, + QGraphicsItem, QGraphicsScene, QGraphicsTextItem, QGraphicsView, @@ -527,7 +528,7 @@ class MainWindow(QMainWindow): attr_button_scene.moveBy( int(self.scene.width() / 4), int(self.scene.height() / 4) ) - attr_button_scene.setFlag(attr_button_scene.ItemIsSelectable, True) + attr_button_scene.setFlag(QGraphicsItem.ItemIsSelectable, True) operation_label = QGraphicsTextItem(op.name, attr_button_scene) if not self.is_show_names: operation_label.setOpacity(0) diff --git a/b_asic/scheduler_gui/axes_item.py b/b_asic/scheduler_gui/axes_item.py index 39bb40a034e42a2f0bfcd36f2648d4f3768c705b..adea4568f3cecae757f6ca2d20eb173198653b20 100644 --- a/b_asic/scheduler_gui/axes_item.py +++ b/b_asic/scheduler_gui/axes_item.py @@ -9,7 +9,7 @@ from math import pi, sin from typing import List, Optional, Union # QGraphics and QPainter imports -from qtpy.QtCore import QPoint, QPointF, Qt +from qtpy.QtCore import QPointF, Qt from qtpy.QtGui import QBrush, QPen, QPolygonF from qtpy.QtWidgets import ( QGraphicsItem, @@ -318,7 +318,7 @@ class AxesItem(QGraphicsItemGroup): self._append_x_tick() pos = self._x_ledger[-1].pos() self._x_ledger[-1].setPos( - pos + QPoint(self._width, 0) + pos + QPointF(self._width, 0) ) # move timeline # y-axis diff --git a/b_asic/scheduler_gui/main_window.ui b/b_asic/scheduler_gui/main_window.ui index ca6fcd2c851ef5d8f8777156c6e38ecd5b2fbc7e..836cf8c9e578f3cc5fc9324522fb695aa99bd27e 100644 --- a/b_asic/scheduler_gui/main_window.ui +++ b/b_asic/scheduler_gui/main_window.ui @@ -57,7 +57,7 @@ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> </property> <property name="renderHints"> - <set>QPainter::HighQualityAntialiasing|QPainter::TextAntialiasing</set> + <set>QPainter::Antialiasing|QPainter::TextAntialiasing</set> </property> <property name="viewportUpdateMode"> <enum>QGraphicsView::FullViewportUpdate</enum> @@ -126,7 +126,7 @@ </property> <property name="font"> <font> - <weight>75</weight> + <weight>Bold</weight> <bold>true</bold> </font> </property> @@ -158,7 +158,7 @@ </property> <property name="font"> <font> - <weight>75</weight> + <weight>Bold</weight> <bold>true</bold> </font> </property> diff --git a/b_asic/scheduler_gui/ui_main_window.py b/b_asic/scheduler_gui/ui_main_window.py index f197afcdaf82b2c4cd17bfbe4d09fbfdc68da4f8..cefa07fa640bee3c2a7e22825c66960a541020b3 100644 --- a/b_asic/scheduler_gui/ui_main_window.py +++ b/b_asic/scheduler_gui/ui_main_window.py @@ -55,8 +55,7 @@ class Ui_MainWindow(object): QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop ) self.view.setRenderHints( - QtGui.QPainter.HighQualityAntialiasing - | QtGui.QPainter.TextAntialiasing + QtGui.QPainter.Antialiasing | QtGui.QPainter.TextAntialiasing ) self.view.setViewportUpdateMode( QtWidgets.QGraphicsView.FullViewportUpdate @@ -89,7 +88,7 @@ class Ui_MainWindow(object): item = QtWidgets.QTableWidgetItem() font = QtGui.QFont() font.setBold(True) - font.setWeight(75) + font.setWeight(QtGui.QFont.Bold) item.setFont(font) brush = QtGui.QBrush(QtGui.QColor(160, 160, 164)) brush.setStyle(QtCore.Qt.SolidPattern) @@ -108,7 +107,7 @@ class Ui_MainWindow(object): item = QtWidgets.QTableWidgetItem() font = QtGui.QFont() font.setBold(True) - font.setWeight(75) + font.setWeight(QtGui.QFont.Bold) item.setFont(font) brush = QtGui.QBrush(QtGui.QColor(160, 160, 164)) brush.setStyle(QtCore.Qt.SolidPattern) diff --git a/pyproject.toml b/pyproject.toml index 32b7026b95ee88bf1b6bc6c47a2fe68b2b4e2773..180be81b1c97329fdf0c89ea90477a0083a361b4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ requires-python = ">=3.8" dependencies = [ "numpy", "pybind11>=2.3.0", - "pyside2", + # "pyside2", "qtpy", "graphviz>=0.19", "matplotlib", diff --git a/requirements_test.txt b/requirements_test.txt index 64543e503881b8b3e3d227bc2af1c259e8403256..bd51fe8943cd07d3c7e8f7b1cc98a0597d55fec0 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -2,5 +2,6 @@ pytest pytest-cov pytest-qt pytest-mpl +pytest-timeout pytest-xvfb pytest-xdist