From cd56c5777318bf7c5cdafb5bd8fb95e64d9c34f1 Mon Sep 17 00:00:00 2001 From: jchanvfx Date: Fri, 28 May 2021 22:58:45 +1200 Subject: [PATCH] implemented nodes palette widget #40 --- NodeGraphQt/__init__.py | 6 +- NodeGraphQt/widgets/nodes_palette.py | 252 ++++++++++++++++++ .../widgets/{node_tree.py => nodes_tree.py} | 21 +- docs/_images/nodes_palette.png | Bin 0 -> 83408 bytes docs/custom_widgets.rst | 30 +++ 5 files changed, 300 insertions(+), 9 deletions(-) create mode 100644 NodeGraphQt/widgets/nodes_palette.py rename NodeGraphQt/widgets/{node_tree.py => nodes_tree.py} (84%) create mode 100644 docs/_images/nodes_palette.png diff --git a/NodeGraphQt/__init__.py b/NodeGraphQt/__init__.py index 37421125..aa66c449 100644 --- a/NodeGraphQt/__init__.py +++ b/NodeGraphQt/__init__.py @@ -34,7 +34,7 @@ into applications that supports **PySide2**. project: https://github.com/jchanvfx/NodeGraphQt -documantation: https://jchanvfx.github.io/NodeGraphQt/api/html/index.html +documentation: https://jchanvfx.github.io/NodeGraphQt/api/html/index.html example code: @@ -87,7 +87,8 @@ def __init__(self): update_nodes_by_up, update_nodes_by_down # widgets -from .widgets.node_tree import NodeTreeWidget +from .widgets.nodes_tree import NodeTreeWidget +from .widgets.nodes_palette import NodesPaletteWidget from .widgets.properties_bin import PropertiesBinWidget from .widgets.node_publish_widget import NodePublishWidget from .widgets.node_widgets import NodeBaseWidget @@ -103,6 +104,7 @@ def __init__(self): 'NodeGraphCommand', 'NodeGraphMenu', 'NodeObject', + 'NodesPaletteWidget', 'NodeTreeWidget', 'NodesMenu', 'Port', diff --git a/NodeGraphQt/widgets/nodes_palette.py b/NodeGraphQt/widgets/nodes_palette.py new file mode 100644 index 00000000..4f326abd --- /dev/null +++ b/NodeGraphQt/widgets/nodes_palette.py @@ -0,0 +1,252 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +from collections import defaultdict + +from Qt import QtWidgets, QtCore, QtGui + +from ..constants import URN_SCHEME + + +class NodesGridDelagate(QtWidgets.QStyledItemDelegate): + + def paint(self, painter, option, index): + """ + Args: + painter (QtGui.QPainter): + option (QtGui.QStyleOptionViewItem): + index (QtCore.QModelIndex): + """ + if index.column() != 0: + super(NodesGridDelagate, self).paint(painter, option, index) + return + + model = index.model().sourceModel() + item = model.item(index.row(), index.column()) + + sub_margin = 2 + radius = 5 + + base_rect = QtCore.QRectF( + option.rect.x() + sub_margin, + option.rect.y() + sub_margin, + option.rect.width() - (sub_margin * 2), + option.rect.height() - (sub_margin * 2) + ) + + painter.save() + painter.setRenderHint(QtGui.QPainter.Antialiasing, True) + + # background. + bg_color = option.palette.window().color() + pen_color = option.palette.midlight().color().lighter(120) + if option.state & QtWidgets.QStyle.State_Selected: + bg_color = bg_color.lighter(120) + pen_color = pen_color.lighter(160) + + pen = QtGui.QPen(pen_color, 3.0) + pen.setCapStyle(QtCore.Qt.RoundCap) + painter.setPen(pen) + painter.setBrush(QtGui.QBrush(bg_color)) + painter.drawRoundRect(base_rect, + int(base_rect.height()/radius), + int(base_rect.width()/radius)) + + pen_color = option.palette.midlight().color().darker(130) + if option.state & QtWidgets.QStyle.State_Selected: + pen_color = option.palette.highlight().color() + pen = QtGui.QPen(pen_color, 1.0) + pen.setCapStyle(QtCore.Qt.RoundCap) + painter.setPen(pen) + painter.setBrush(QtCore.Qt.NoBrush) + + sub_margin = 6 + sub_rect = QtCore.QRectF( + base_rect.x() + sub_margin, + base_rect.y() + sub_margin, + base_rect.width() - (sub_margin * 2), + base_rect.height() - (sub_margin * 2) + ) + painter.drawRoundRect(sub_rect, + int(sub_rect.height() / radius), + int(sub_rect.width() / radius)) + + painter.setBrush(QtGui.QBrush(pen_color)) + edge_size = 2, sub_rect.height() - 6 + left_x = sub_rect.left() + right_x = sub_rect.right() - edge_size[0] + pos_y = sub_rect.center().y() - (edge_size[1] / 2) + + for pos_x in [left_x, right_x]: + painter.drawRect(QtCore.QRectF( + pos_x, pos_y, edge_size[0], edge_size[1] + )) + + # painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtGui.QBrush(bg_color)) + dot_size = 4 + left_x = sub_rect.left() - 1 + right_x = sub_rect.right() - (dot_size - 1) + pos_y = sub_rect.center().y() - (dot_size / 2) + for pos_x in [left_x, right_x]: + painter.drawEllipse(QtCore.QRectF( + pos_x, pos_y, dot_size, dot_size + )) + pos_x -= dot_size + 2 + + # text + pen_color = option.palette.text().color() + pen = QtGui.QPen(pen_color, 0.5) + pen.setCapStyle(QtCore.Qt.RoundCap) + painter.setPen(pen) + + font = painter.font() + font_metrics = QtGui.QFontMetrics(font) + font_width = font_metrics.width(item.text().replace(' ', '_')) + font_height = font_metrics.height() + text_rect = QtCore.QRectF( + sub_rect.center().x() - (font_width / 2), + sub_rect.center().y() - (font_height * 0.55), + font_width, font_height) + painter.drawText(text_rect, item.text()) + painter.restore() + + +class NodesGridProxyModel(QtCore.QSortFilterProxyModel): + + def __init__(self, parent=None): + super(NodesGridProxyModel, self).__init__(parent) + + def mimeData(self, indexes): + node_ids = ['node:{}'.format(i.data(QtCore.Qt.ToolTipRole)) + for i in indexes] + node_urn = URN_SCHEME + ';'.join(node_ids) + mime_data = super(NodesGridProxyModel, self).mimeData(indexes) + mime_data.setUrls([node_urn]) + return mime_data + + +class NodesGridView(QtWidgets.QListView): + + def __init__(self, parent=None): + super(NodesGridView, self).__init__(parent) + self.setSelectionMode(self.ExtendedSelection) + self.setUniformItemSizes(True) + self.setResizeMode(self.Adjust) + self.setViewMode(self.IconMode) + self.setDragDropMode(self.DragOnly) + self.setDragEnabled(True) + self.setMinimumSize(450, 300) + self.setSpacing(4) + + model = QtGui.QStandardItemModel() + proxy_model = NodesGridProxyModel() + proxy_model.setSourceModel(model) + self.setModel(proxy_model) + self.setItemDelegate(NodesGridDelagate(self)) + + def clear(self): + self.model().sourceMode().clear() + + def add_item(self, label, tooltip=''): + item = QtGui.QStandardItem(label) + item.setSizeHint(QtCore.QSize(130, 40)) + item.setToolTip(tooltip) + model = self.model().sourceModel() + model.appendRow(item) + + +class NodesPaletteWidget(QtWidgets.QWidget): + + def __init__(self, parent=None, node_graph=None): + super(NodesPaletteWidget, self).__init__(parent) + self.setWindowTitle('Nodes') + + self._category_tabs = {} + self._custom_labels = {} + self._factory = node_graph.node_factory if node_graph else None + + self._tab_widget = QtWidgets.QTabWidget() + self._tab_widget.setMovable(True) + + layout = QtWidgets.QVBoxLayout(self) + layout.addWidget(self._tab_widget) + + self._build_ui() + + def __repr__(self): + return '<{} object at {}>'.format( + self.__class__.__name__, hex(id(self)) + ) + + def _build_ui(self): + """ + populate the ui + """ + categories = set() + node_types = defaultdict(list) + for name, node_ids in self._factory.names.items(): + for nid in node_ids: + category = '.'.join(nid.split('.')[:-1]) + categories.add(category) + node_types[category].append((nid, name)) + + for category, nodes_list in node_types.items(): + grid_view = self._add_category_tab(category) + for node_id, node_name in nodes_list: + grid_view.add_item(node_name, node_id) + + def _set_node_factory(self, factory): + """ + Set current node factory. + + Args: + factory (NodeFactory): node factory. + """ + self._factory = factory + + def _add_category_tab(self, category): + """ + Adds a new tab to the node palette widget. + + Args: + category (str): node identifier category eg. ``"nodes.widgets"`` + + Returns: + NodesGridView: nodes grid view widget. + """ + if category not in self._category_tabs: + grid_widget = NodesGridView(self) + self._tab_widget.addTab(grid_widget, category) + self._category_tabs[category] = grid_widget + return self._category_tabs[category] + + def set_category_label(self, category, label): + """ + Override tab label for a node category tab. + + Args: + category (str): node identifier category eg. ``"nodes.widgets"`` + label (str): custom display label. eg. ``"Node Widgets"`` + """ + if label in self._custom_labels.values(): + labels = {v: k for k, v in self._custom_labels.items()} + raise ValueError('label "{}" already in use for "{}"' + .format(label, labels[label])) + previous_label = self._custom_labels.get(category, '') + for idx in range(self._tab_widget.count()): + tab_text = self._tab_widget.tabText(idx) + if tab_text in [category, previous_label]: + self._tab_widget.setTabText(idx, label) + break + self._custom_labels[category] = label + + def update(self): + """ + Update and refresh the node palette widget. + """ + self._build_tree() + + + + + diff --git a/NodeGraphQt/widgets/node_tree.py b/NodeGraphQt/widgets/nodes_tree.py similarity index 84% rename from NodeGraphQt/widgets/node_tree.py rename to NodeGraphQt/widgets/nodes_tree.py index 4410a9bd..147318f5 100644 --- a/NodeGraphQt/widgets/node_tree.py +++ b/NodeGraphQt/widgets/nodes_tree.py @@ -30,14 +30,18 @@ class NodeTreeWidget(QtWidgets.QTreeWidget): def __init__(self, parent=None, node_graph=None): super(NodeTreeWidget, self).__init__(parent) self.setDragDropMode(QtWidgets.QAbstractItemView.DragOnly) + self.setSelectionMode(self.ExtendedSelection) self.setHeaderHidden(True) self.setWindowTitle('Nodes') - self._factory = None + + self._factory = node_graph.node_factory if node_graph else None self._custom_labels = {} - self._set_node_factory(node_graph.node_factory) + self._category_items = {} def __repr__(self): - return '<{} object at {}>'.format(self.__class__.__name__, hex(id(self))) + return '<{} object at {}>'.format( + self.__class__.__name__, hex(id(self)) + ) def mimeData(self, items): node_ids = ['node:{}'.format(i.toolTip(0)) for i in items] @@ -59,7 +63,7 @@ def _build_tree(self): categories.add('.'.join(nid.split('.')[:-1])) node_types[nid] = name - category_items = {} + self._category_items = {} for category in sorted(categories): if category in self._custom_labels.keys(): label = self._custom_labels[category] @@ -72,11 +76,11 @@ def _build_tree(self): cat_item.setSizeHint(0, QtCore.QSize(100, 26)) self.addTopLevelItem(cat_item) cat_item.setExpanded(True) - category_items[category] = cat_item + self._category_items[category] = cat_item for node_id, node_name in node_types.items(): category = '.'.join(node_id.split('.')[:-1]) - category_item = category_items[category] + category_item = self._category_items[category] item = BaseNodeTreeItem(category_item, [node_name], type=TYPE_NODE) item.setToolTip(0, node_id) @@ -95,7 +99,7 @@ def _set_node_factory(self, factory): def set_category_label(self, category, label): """ - Set custom label for a node category root item. + Override the label for a node category root item. .. image:: _images/nodes_tree_category_label.png :width: 70% @@ -105,6 +109,9 @@ def set_category_label(self, category, label): label (str): custom display label. eg. ``"Node Widgets"`` """ self._custom_labels[category] = label + if category in self._category_items: + item = self._category_items[category] + item.setText(0, label) def update(self): """ diff --git a/docs/_images/nodes_palette.png b/docs/_images/nodes_palette.png new file mode 100644 index 0000000000000000000000000000000000000000..d82b6883dcc3b2d30d78dd3f2b499b62c83bafd3 GIT binary patch literal 83408 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 MU{}@hRc`wKKc_CV#Q*>R literal 0 HcmV?d00001 diff --git a/docs/custom_widgets.rst b/docs/custom_widgets.rst index cb0de962..a6dac192 100644 --- a/docs/custom_widgets.rst +++ b/docs/custom_widgets.rst @@ -33,6 +33,36 @@ example :members: :exclude-members: property_changed +Nodes Palette +************* + +The :class:`NodeGraphQt.NodesPaletteWidget` is a widget for displaying all +registered nodes from the node graph in a grid layout with this widget a user +can create nodes by dragging and dropping. + +.. image:: _images/nodes_palette.png + :width: 400px + +example + +.. code-block:: python + :linenos: + + from NodeGraphQt import NodeGraph, NodesPaletteWidget + + # create node graph. + graph = NodeGraph() + + # create nodes palette widget. + nodes_palette = NodesPaletteWidget(parent=None, node_graph=graph) + nodes_palette.show() + +---- + +.. autoclass:: NodeGraphQt.NodesPaletteWidget + :members: + :exclude-members: mimeData, + Nodes Tree **********