From 74daa7fdcbf29ed0a8fa612aedcd250513a74f22 Mon Sep 17 00:00:00 2001 From: wyzula-jan Date: Thu, 15 Oct 2026 18:03:02 +0000 Subject: [PATCH] refactor(examples): remove the TicTacToe Designer plugin example --- .../plugin_example_pyside/__init__.py | 0 .../examples/plugin_example_pyside/main.py | 18 --- .../registertictactoe.py | 13 -- .../taskmenuextension.pyproject | 4 - .../plugin_example_pyside/tictactoe.py | 135 ------------------ .../plugin_example_pyside/tictactoeplugin.py | 73 ---------- .../tictactoetaskmenu.py | 68 --------- 7 files changed, 311 deletions(-) delete mode 100644 bec_widgets/examples/plugin_example_pyside/__init__.py delete mode 100644 bec_widgets/examples/plugin_example_pyside/main.py delete mode 100644 bec_widgets/examples/plugin_example_pyside/registertictactoe.py delete mode 100644 bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject delete mode 100644 bec_widgets/examples/plugin_example_pyside/tictactoe.py delete mode 100644 bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py delete mode 100644 bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py diff --git a/bec_widgets/examples/plugin_example_pyside/__init__.py b/bec_widgets/examples/plugin_example_pyside/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/bec_widgets/examples/plugin_example_pyside/main.py b/bec_widgets/examples/plugin_example_pyside/main.py deleted file mode 100644 index 58992ed1..00000000 --- a/bec_widgets/examples/plugin_example_pyside/main.py +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -"""PySide6 port of the Qt Designer taskmenuextension example from Qt v6.x""" - -import sys - -from bec_ipython_client.main import BECIPythonClient -from qtpy.QtWidgets import QApplication - -from bec_widgets.examples.plugin_example_pyside.tictactoe import TicTacToe - -if __name__ == "__main__": # pragma: no cover - app = QApplication(sys.argv) - window = TicTacToe() - window.state = "-X-XO----" - window.show() - sys.exit(app.exec()) diff --git a/bec_widgets/examples/plugin_example_pyside/registertictactoe.py b/bec_widgets/examples/plugin_example_pyside/registertictactoe.py deleted file mode 100644 index f3052770..00000000 --- a/bec_widgets/examples/plugin_example_pyside/registertictactoe.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -from qtpy.QtDesigner import QPyDesignerCustomWidgetCollection - -from bec_widgets.examples.plugin_example_pyside.tictactoe import TicTacToe -from bec_widgets.examples.plugin_example_pyside.tictactoeplugin import TicTacToePlugin - -# Set PYSIDE_DESIGNER_PLUGINS to point to this directory and load the plugin - - -if __name__ == "__main__": # pragma: no cover - QPyDesignerCustomWidgetCollection.addCustomWidget(TicTacToePlugin()) diff --git a/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject b/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject deleted file mode 100644 index 29ec5245..00000000 --- a/bec_widgets/examples/plugin_example_pyside/taskmenuextension.pyproject +++ /dev/null @@ -1,4 +0,0 @@ -{ - "files": ["tictactoe.py", "main.py", "registertictactoe.py", "tictactoeplugin.py", - "tictactoetaskmenu.py"] -} diff --git a/bec_widgets/examples/plugin_example_pyside/tictactoe.py b/bec_widgets/examples/plugin_example_pyside/tictactoe.py deleted file mode 100644 index 9a8e5ac1..00000000 --- a/bec_widgets/examples/plugin_example_pyside/tictactoe.py +++ /dev/null @@ -1,135 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -from qtpy.QtCore import Property, QPoint, QRect, QSize, Qt, Slot -from qtpy.QtGui import QPainter, QPen -from qtpy.QtWidgets import QWidget - -EMPTY = "-" -CROSS = "X" -NOUGHT = "O" -DEFAULT_STATE = "---------" - - -class TicTacToe(QWidget): # pragma: no cover - def __init__(self, parent=None): - super().__init__(parent) - self._state = DEFAULT_STATE - self._turn_number = 0 - - def minimumSizeHint(self): - return QSize(200, 200) - - def sizeHint(self): - return QSize(200, 200) - - def setState(self, new_state): - self._turn_number = 0 - self._state = DEFAULT_STATE - for position in range(min(9, len(new_state))): - mark = new_state[position] - if mark == CROSS or mark == NOUGHT: - self._turn_number += 1 - self._change_state_at(position, mark) - position += 1 - self.update() - - def state(self): - return self._state - - @Slot() - def clear_board(self): - self._state = DEFAULT_STATE - self._turn_number = 0 - self.update() - - def _change_state_at(self, pos, new_state): - self._state = self._state[:pos] + new_state + self._state[pos + 1 :] - - def mousePressEvent(self, event): - if self._turn_number == 9: - self.clear_board() - return - for position in range(9): - cell = self._cell_rect(position) - if cell.contains(event.position().toPoint()): - if self._state[position] == EMPTY: - new_state = CROSS if self._turn_number % 2 == 0 else NOUGHT - self._change_state_at(position, new_state) - self._turn_number += 1 - self.update() - - def paintEvent(self, event): - with QPainter(self) as painter: - painter.setRenderHint(QPainter.Antialiasing) - - painter.setPen(QPen(Qt.darkGreen, 1)) - painter.drawLine(self._cell_width(), 0, self._cell_width(), self.height()) - painter.drawLine(2 * self._cell_width(), 0, 2 * self._cell_width(), self.height()) - painter.drawLine(0, self._cell_height(), self.width(), self._cell_height()) - painter.drawLine(0, 2 * self._cell_height(), self.width(), 2 * self._cell_height()) - - painter.setPen(QPen(Qt.darkBlue, 2)) - - for position in range(9): - cell = self._cell_rect(position) - if self._state[position] == CROSS: - painter.drawLine(cell.topLeft(), cell.bottomRight()) - painter.drawLine(cell.topRight(), cell.bottomLeft()) - elif self._state[position] == NOUGHT: - painter.drawEllipse(cell) - - painter.setPen(QPen(Qt.yellow, 3)) - - for position in range(0, 8, 3): - if ( - self._state[position] != EMPTY - and self._state[position + 1] == self._state[position] - and self._state[position + 2] == self._state[position] - ): - y = self._cell_rect(position).center().y() - painter.drawLine(0, y, self.width(), y) - self._turn_number = 9 - - for position in range(3): - if ( - self._state[position] != EMPTY - and self._state[position + 3] == self._state[position] - and self._state[position + 6] == self._state[position] - ): - x = self._cell_rect(position).center().x() - painter.drawLine(x, 0, x, self.height()) - self._turn_number = 9 - - if ( - self._state[0] != EMPTY - and self._state[4] == self._state[0] - and self._state[8] == self._state[0] - ): - painter.drawLine(0, 0, self.width(), self.height()) - self._turn_number = 9 - - if ( - self._state[2] != EMPTY - and self._state[4] == self._state[2] - and self._state[6] == self._state[2] - ): - painter.drawLine(0, self.height(), self.width(), 0) - self._turn_number = 9 - - def _cell_rect(self, position): - h_margin = self.width() / 30 - v_margin = self.height() / 30 - row = int(position / 3) - column = position - 3 * row - pos = QPoint(column * self._cell_width() + h_margin, row * self._cell_height() + v_margin) - size = QSize(self._cell_width() - 2 * h_margin, self._cell_height() - 2 * v_margin) - return QRect(pos, size) - - def _cell_width(self): - return self.width() / 3 - - def _cell_height(self): - return self.height() / 3 - - state = Property(str, state, setState) diff --git a/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py b/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py deleted file mode 100644 index 82137570..00000000 --- a/bec_widgets/examples/plugin_example_pyside/tictactoeplugin.py +++ /dev/null @@ -1,73 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause -import os - -from qtpy.QtDesigner import QDesignerCustomWidgetInterface - -import bec_widgets -from bec_widgets.examples.plugin_example_pyside.tictactoe import TicTacToe -from bec_widgets.examples.plugin_example_pyside.tictactoetaskmenu import TicTacToeTaskMenuFactory -from bec_widgets.utils.bec_designer import designer_material_icon - -DOM_XML = """ - - - - - 0 - 0 - 200 - 200 - - - - -X-XO---- - - - -""" - -MODULE_PATH = os.path.dirname(bec_widgets.__file__) - - -class TicTacToePlugin(QDesignerCustomWidgetInterface): # pragma: no cover - def __init__(self): - super().__init__() - self._form_editor = None - - def createWidget(self, parent): - t = TicTacToe(parent) - return t - - def domXml(self): - return DOM_XML - - def group(self): - return "Games" - - def icon(self): - return designer_material_icon("sports_esports") - - def includeFile(self): - return "tictactoe" - - def initialize(self, form_editor): - self._form_editor = form_editor - manager = form_editor.extensionManager() - iid = TicTacToeTaskMenuFactory.task_menu_iid() - manager.registerExtensions(TicTacToeTaskMenuFactory(manager), iid) - - def isContainer(self): - return False - - def isInitialized(self): - return self._form_editor is not None - - def name(self): - return "TicTacToe" - - def toolTip(self): - return "Tic Tac Toe Example, demonstrating class QDesignerTaskMenuExtension (Python)" - - def whatsThis(self): - return self.toolTip() diff --git a/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py b/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py deleted file mode 100644 index cb4a1500..00000000 --- a/bec_widgets/examples/plugin_example_pyside/tictactoetaskmenu.py +++ /dev/null @@ -1,68 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -from qtpy.QtDesigner import QExtensionFactory, QPyDesignerTaskMenuExtension -from qtpy.QtGui import QAction -from qtpy.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout - -from bec_widgets.examples.plugin_example_pyside.tictactoe import TicTacToe -from bec_widgets.utils.error_popups import SafeSlot as Slot - - -class TicTacToeDialog(QDialog): # pragma: no cover - def __init__(self, parent): - super().__init__(parent) - layout = QVBoxLayout(self) - self._ticTacToe = TicTacToe(self) - layout.addWidget(self._ticTacToe) - button_box = QDialogButtonBox( - QDialogButtonBox.Ok | QDialogButtonBox.Cancel | QDialogButtonBox.Reset - ) - button_box.accepted.connect(self.accept) - button_box.rejected.connect(self.reject) - reset_button = button_box.button(QDialogButtonBox.Reset) - reset_button.clicked.connect(self._ticTacToe.clear_board) - layout.addWidget(button_box) - - def set_state(self, new_state): - self._ticTacToe.setState(new_state) - - def state(self): - return self._ticTacToe.state - - -class TicTacToeTaskMenu(QPyDesignerTaskMenuExtension): - def __init__(self, ticTacToe, parent): - super().__init__(parent) - self._ticTacToe = ticTacToe - self._edit_state_action = QAction("Edit State...", None) - self._edit_state_action.triggered.connect(self._edit_state) - - def taskActions(self): - return [self._edit_state_action] - - def preferredEditAction(self): - return self._edit_state_action - - @Slot() - def _edit_state(self): - dialog = TicTacToeDialog(self._ticTacToe) - dialog.set_state(self._ticTacToe.state) - if dialog.exec() == QDialog.Accepted: - self._ticTacToe.state = dialog.state() - - -class TicTacToeTaskMenuFactory(QExtensionFactory): - def __init__(self, extension_manager): - super().__init__(extension_manager) - - @staticmethod - def task_menu_iid(): - return "org.qt-project.Qt.Designer.TaskMenu" - - def createExtension(self, object, iid, parent): - if iid != TicTacToeTaskMenuFactory.task_menu_iid(): - return None - if object.__class__.__name__ != "TicTacToe": - return None - return TicTacToeTaskMenu(object, parent)