diff --git a/NodeGraphQt/base/commands.py b/NodeGraphQt/base/commands.py index 261606a9..184245b6 100644 --- a/NodeGraphQt/base/commands.py +++ b/NodeGraphQt/base/commands.py @@ -1,7 +1,7 @@ #!/usr/bin/python from Qt import QtWidgets -from NodeGraphQt.constants import IN_PORT, OUT_PORT +from NodeGraphQt.constants import PortTypeEnum class PropertyChangedCmd(QtWidgets.QUndoCommand): @@ -158,7 +158,7 @@ class NodeInputConnectedCmd(QtWidgets.QUndoCommand): def __init__(self, src_port, trg_port): QtWidgets.QUndoCommand.__init__(self) - if src_port.type_() == IN_PORT: + if src_port.type_() == PortTypeEnum.IN.value: self.source = src_port self.target = trg_port else: @@ -185,7 +185,7 @@ class NodeInputDisconnectedCmd(QtWidgets.QUndoCommand): def __init__(self, src_port, trg_port): QtWidgets.QUndoCommand.__init__(self) - if src_port.type_() == IN_PORT: + if src_port.type_() == PortTypeEnum.IN.value: self.source = src_port self.target = trg_port else: @@ -355,9 +355,9 @@ def set_visible(self, visible): self.port.view.setVisible(visible) node_view = self.port.node().view text_item = None - if self.port.type_() == IN_PORT: + if self.port.type_() == PortTypeEnum.IN.value: text_item = node_view.get_input_text_item(self.port.view) - elif self.port.type_() == OUT_PORT: + elif self.port.type_() == PortTypeEnum.OUT.value: text_item = node_view.get_output_text_item(self.port.view) if text_item: text_item.setVisible(visible) diff --git a/NodeGraphQt/base/graph.py b/NodeGraphQt/base/graph.py index 2654ebb0..caa27ad6 100644 --- a/NodeGraphQt/base/graph.py +++ b/NodeGraphQt/base/graph.py @@ -5,7 +5,7 @@ import os import re -from Qt import QtCore, QtWidgets, QtGui +from Qt import QtCore, QtWidgets from NodeGraphQt.base.commands import (NodeAddedCmd, NodeRemovedCmd, @@ -18,10 +18,10 @@ from NodeGraphQt.base.port import Port from NodeGraphQt.constants import ( NODE_LAYOUT_DIRECTION, NODE_LAYOUT_HORIZONTAL, NODE_LAYOUT_VERTICAL, - PIPE_LAYOUT_CURVED, PIPE_LAYOUT_STRAIGHT, PIPE_LAYOUT_ANGLE, + PipeLayoutEnum, URI_SCHEME, URN_SCHEME, - IN_PORT, OUT_PORT, - VIEWER_GRID_LINES + PortTypeEnum, + ViewerEnum ) from NodeGraphQt.nodes.backdrop_node import BackdropNode from NodeGraphQt.nodes.base_node import BaseNode @@ -369,7 +369,8 @@ def _on_connection_changed(self, disconnected, connected): return label = 'connect node(s)' if connected else 'disconnect node(s)' - ptypes = {IN_PORT: 'inputs', OUT_PORT: 'outputs'} + ptypes = {PortTypeEnum.IN.value: 'inputs', + PortTypeEnum.OUT.value: 'outputs'} self._undo_stack.beginMacro(label) for p1_view, p2_view in disconnected: @@ -396,7 +397,8 @@ def _on_connection_sliced(self, ports): """ if not ports: return - ptypes = {IN_PORT: 'inputs', OUT_PORT: 'outputs'} + ptypes = {PortTypeEnum.IN.value: 'inputs', + PortTypeEnum.OUT.value: 'outputs'} self._undo_stack.beginMacro('slice connections') for p1_view, p2_view in ports: node1 = self._model.nodes[p1_view.node.id] @@ -553,7 +555,7 @@ def set_grid_color(self, r, g, b): self.scene().grid_color = (r, g, b) self._viewer.force_update() - def set_grid_mode(self, mode=VIEWER_GRID_LINES): + def set_grid_mode(self, mode=None): """ Set node graph grid mode. @@ -562,13 +564,20 @@ def set_grid_mode(self, mode=VIEWER_GRID_LINES): Node graph background types: - * :attr:`NodeGraphQt.constants.VIEWER_GRID_NONE` - * :attr:`NodeGraphQt.constants.VIEWER_GRID_DOTS` - * :attr:`NodeGraphQt.constants.VIEWER_GRID_LINES` + * :attr:`NodeGraphQt.constants.ViewerEnum.GRID_DISPLAY_NONE.value` + * :attr:`NodeGraphQt.constants.ViewerEnum.GRID_DISPLAY_DOTS.value` + * :attr:`NodeGraphQt.constants.ViewerEnum.GRID_DISPLAY_LINES.value` Args: mode (int): background style. """ + display_types = [ + ViewerEnum.GRID_DISPLAY_NONE.value, + ViewerEnum.GRID_DISPLAY_DOTS.value, + ViewerEnum.GRID_DISPLAY_LINES.value + ] + if mode not in display_types: + mode = ViewerEnum.GRID_DISPLAY_LINES.value self.scene().grid_mode = mode self._viewer.force_update() @@ -752,7 +761,7 @@ def set_pipe_collision(self, mode=True): self._model.pipe_collision = mode self._viewer.pipe_collision = mode - def set_pipe_style(self, style=PIPE_LAYOUT_CURVED): + def set_pipe_style(self, style=PipeLayoutEnum.CURVED.value): """ Set node graph pipes to be drawn as straight, curved or angled. @@ -764,17 +773,17 @@ def set_pipe_style(self, style=PIPE_LAYOUT_CURVED): Pipe Layout Styles: - * :attr:`NodeGraphQt.constants.PIPE_LAYOUT_CURVED` - * :attr:`NodeGraphQt.constants.PIPE_LAYOUT_STRAIGHT` - * :attr:`NodeGraphQt.constants.PIPE_LAYOUT_ANGLE` + * :attr:`NodeGraphQt.constants.PipeLayoutEnum.CURVED.value` + * :attr:`NodeGraphQt.constants.PipeLayoutEnum.STRAIGHT.value` + * :attr:`NodeGraphQt.constants.PipeLayoutEnum.ANGLE.value` Args: style (int): pipe layout style. """ - pipe_max = max([PIPE_LAYOUT_CURVED, - PIPE_LAYOUT_STRAIGHT, - PIPE_LAYOUT_ANGLE]) - style = style if 0 <= style <= pipe_max else PIPE_LAYOUT_CURVED + pipe_max = max([PipeLayoutEnum.CURVED.value, + PipeLayoutEnum.STRAIGHT.value, + PipeLayoutEnum.ANGLE.value]) + style = style if 0 <= style <= pipe_max else PipeLayoutEnum.CURVED.value self._viewer.set_pipe_layout(style) def fit_to_selection(self): @@ -1246,16 +1255,20 @@ def _serialize(self, nodes): for pname, conn_data in inputs.items(): for conn_id, prt_names in conn_data.items(): for conn_prt in prt_names: - pipe = {IN_PORT: [n_id, pname], - OUT_PORT: [conn_id, conn_prt]} + pipe = { + PortTypeEnum.IN.value: [n_id, pname], + PortTypeEnum.OUT.value: [conn_id, conn_prt] + } if pipe not in serial_data['connections']: serial_data['connections'].append(pipe) for pname, conn_data in outputs.items(): for conn_id, prt_names in conn_data.items(): for conn_prt in prt_names: - pipe = {OUT_PORT: [n_id, pname], - IN_PORT: [conn_id, conn_prt]} + pipe = { + PortTypeEnum.OUT.value: [n_id, pname], + PortTypeEnum.IN.value: [conn_id, conn_prt] + } if pipe not in serial_data['connections']: serial_data['connections'].append(pipe) @@ -2362,8 +2375,10 @@ def get_node_by_port(self, port): Returns: PortInputNode or PortOutputNode: port node object. """ - func_type = {IN_PORT: self.get_input_port_nodes, - OUT_PORT: self.get_output_port_nodes} + func_type = { + PortTypeEnum.IN.value: self.get_input_port_nodes, + PortTypeEnum.OUT.value: self.get_output_port_nodes + } for n in func_type.get(port.type_(), []): if port == n.parent_port: return n diff --git a/NodeGraphQt/base/graph_actions.py b/NodeGraphQt/base/graph_actions.py index 69e2c226..b77fe3d6 100644 --- a/NodeGraphQt/base/graph_actions.py +++ b/NodeGraphQt/base/graph_actions.py @@ -256,48 +256,48 @@ def _curved_pipe(graph): """ Set node graph pipes layout as curved. """ - from NodeGraphQt.constants import PIPE_LAYOUT_CURVED - graph.set_pipe_style(PIPE_LAYOUT_CURVED) + from NodeGraphQt.constants import PipeLayoutEnum + graph.set_pipe_style(PipeLayoutEnum.CURVED.value) def _straight_pipe(graph): """ Set node graph pipes layout as straight. """ - from NodeGraphQt.constants import PIPE_LAYOUT_STRAIGHT - graph.set_pipe_style(PIPE_LAYOUT_STRAIGHT) + from NodeGraphQt.constants import PipeLayoutEnum + graph.set_pipe_style(PipeLayoutEnum.STRAIGHT.value) def _angle_pipe(graph): """ Set node graph pipes layout as angled. """ - from NodeGraphQt.constants import PIPE_LAYOUT_ANGLE - graph.set_pipe_style(PIPE_LAYOUT_ANGLE) + from NodeGraphQt.constants import PipeLayoutEnum + graph.set_pipe_style(PipeLayoutEnum.ANGLE.value) def _bg_grid_none(graph): """ Turn off the background patterns. """ - from NodeGraphQt.constants import VIEWER_GRID_NONE - graph.set_grid_mode(VIEWER_GRID_NONE) + from NodeGraphQt.constants import ViewerEnum + graph.set_grid_mode(ViewerEnum.GRID_DISPLAY_NONE.value) def _bg_grid_dots(graph): """ Set background node graph background with grid dots. """ - from NodeGraphQt.constants import VIEWER_GRID_DOTS - graph.set_grid_mode(VIEWER_GRID_DOTS) + from NodeGraphQt.constants import ViewerEnum + graph.set_grid_mode(ViewerEnum.GRID_DISPLAY_DOTS.value) def _bg_grid_lines(graph): """ Set background node graph background with grid lines. """ - from NodeGraphQt.constants import VIEWER_GRID_LINES - graph.set_grid_mode(VIEWER_GRID_LINES) + from NodeGraphQt.constants import ViewerEnum + graph.set_grid_mode(ViewerEnum.GRID_DISPLAY_LINES.value) def _layout_graph_down(graph): diff --git a/NodeGraphQt/base/port.py b/NodeGraphQt/base/port.py index e4b7bce2..15896b5a 100644 --- a/NodeGraphQt/base/port.py +++ b/NodeGraphQt/base/port.py @@ -9,7 +9,7 @@ NodeInputDisconnectedCmd ) from NodeGraphQt.base.model import PortModel -from NodeGraphQt.constants import IN_PORT, OUT_PORT +from NodeGraphQt.constants import PortTypeEnum from NodeGraphQt.errors import PortError @@ -196,9 +196,9 @@ def connected_ports(self): for node_id, port_names in self.model.connected_ports.items(): for port_name in port_names: node = graph.get_node_by_id(node_id) - if self.type_() == IN_PORT: + if self.type_() == PortTypeEnum.IN.value: ports.append(node.outputs()[port_name]) - elif self.type_() == OUT_PORT: + elif self.type_() == PortTypeEnum.OUT.value: ports.append(node.inputs()[port_name]) return ports @@ -284,7 +284,8 @@ def connect_to(self, port=None, push_undo=True): # emit "port_connected" signal from the parent graph. ports = {p.type_(): p for p in [self, port]} - graph.port_connected.emit(ports[IN_PORT], ports[OUT_PORT]) + graph.port_connected.emit(ports[PortTypeEnum.IN.value], + ports[PortTypeEnum.OUT.value]) def disconnect_from(self, port=None, push_undo=True): """ @@ -315,7 +316,8 @@ def disconnect_from(self, port=None, push_undo=True): # emit "port_disconnected" signal from the parent graph. ports = {p.type_(): p for p in [self, port]} - graph.port_disconnected.emit(ports[IN_PORT], ports[OUT_PORT]) + graph.port_disconnected.emit(ports[PortTypeEnum.IN.value], + ports[PortTypeEnum.OUT.value]) def clear_connections(self, push_undo=True): """ diff --git a/NodeGraphQt/constants.py b/NodeGraphQt/constants.py index 1159f720..ca70c7be 100644 --- a/NodeGraphQt/constants.py +++ b/NodeGraphQt/constants.py @@ -3,110 +3,16 @@ import os from Qt import QtWidgets +from enum import Enum -from .pkg_info import __version__ +from .pkg_info import __version__ as _v __doc__ = """ -The ``NodeGraphQt.constants`` namespace contains variables used throughout -the whole ``NodeGraphQt`` library. +| The :py:mod:`NodeGraphQt.constants` namespace contains variables and enums + used throughout the NodeGraphQt library. """ -#: Current version of the NodeGraphQt framework. -VERSION = __version__ - -# === PIPE === - -PIPE_WIDTH = 1.2 -PIPE_STYLE_DEFAULT = 0 -PIPE_STYLE_DASHED = 1 -PIPE_STYLE_DOTTED = 2 -PIPE_DEFAULT_COLOR = (175, 95, 30, 255) -PIPE_DISABLED_COLOR = (190, 20, 20, 255) -PIPE_ACTIVE_COLOR = (70, 255, 220, 255) -PIPE_HIGHLIGHT_COLOR = (232, 184, 13, 255) -PIPE_SLICER_COLOR = (255, 50, 75) -#: Style to draw the connection pipes as straight lines. -PIPE_LAYOUT_STRAIGHT = 0 -#: Style to draw the connection pipes as curved lines. -PIPE_LAYOUT_CURVED = 1 -#: Style to draw the connection pipes as angled lines. -PIPE_LAYOUT_ANGLE = 2 - -# === PORT === - -#: Connection type for input ports. -IN_PORT = 'in' -#: Connection type for output ports. -OUT_PORT = 'out' - -PORT_DEFAULT_SIZE = 22.0 -PORT_DEFAULT_COLOR = (49, 115, 100, 255) -PORT_DEFAULT_BORDER_COLOR = (29, 202, 151, 255) -PORT_ACTIVE_COLOR = (14, 45, 59, 255) -PORT_ACTIVE_BORDER_COLOR = (107, 166, 193, 255) -PORT_HOVER_COLOR = (17, 43, 82, 255) -PORT_HOVER_BORDER_COLOR = (136, 255, 35, 255) -PORT_FALLOFF = 15.0 - -# === NODE === - -NODE_WIDTH = 160 -NODE_HEIGHT = 60 -NODE_ICON_SIZE = 18 -NODE_SEL_COLOR = (255, 255, 255, 30) -NODE_SEL_BORDER_COLOR = (254, 207, 42, 255) - -# === NODE PROPERTY === - -#: Property type will hidden in the properties bin (default). -NODE_PROP = 0 -#: Property type represented with a QLabel widget in the properties bin. -NODE_PROP_QLABEL = 2 -#: Property type represented with a QLineEdit widget in the properties bin. -NODE_PROP_QLINEEDIT = 3 -#: Property type represented with a QTextEdit widget in the properties bin. -NODE_PROP_QTEXTEDIT = 4 -#: Property type represented with a QComboBox widget in the properties bin. -NODE_PROP_QCOMBO = 5 -#: Property type represented with a QCheckBox widget in the properties bin. -NODE_PROP_QCHECKBOX = 6 -#: Property type represented with a QSpinBox widget in the properties bin. -NODE_PROP_QSPINBOX = 7 -#: Property type represented with a ColorPicker widget in the properties bin. -NODE_PROP_COLORPICKER = 8 -#: Property type represented with a Slider widget in the properties bin. -NODE_PROP_SLIDER = 9 -#: Property type represented with a file selector widget in the properties bin. -NODE_PROP_FILE = 10 -#: Property type represented with a file save widget in the properties bin. -NODE_PROP_FILE_SAVE = 11 -#: Property type represented with a vector2 widget in the properties bin. -NODE_PROP_VECTOR2 = 12 -#: Property type represented with vector3 widget in the properties bin. -NODE_PROP_VECTOR3 = 13 -#: Property type represented with vector4 widget in the properties bin. -NODE_PROP_VECTOR4 = 14 -#: Property type represented with float widget in the properties bin. -NODE_PROP_FLOAT = 15 -#: Property type represented with int widget in the properties bin. -NODE_PROP_INT = 16 -#: Property type represented with button widget in the properties bin. -NODE_PROP_BUTTON = 17 - -# === NODE VIEWER === - -#: Style to render the node graph background with nothing. -VIEWER_GRID_NONE = 0 -#: Style to render the node graph background with dots. -VIEWER_GRID_DOTS = 1 -#: Style to render the node graph background with grid lines. -VIEWER_GRID_LINES = 2 - -VIEWER_NAV_BG_COLOR = (25, 25, 25) -VIEWER_NAV_ITEM_COLOR = (35, 35, 35) -VIEWER_BG_COLOR = (35, 35, 35) -VIEWER_GRID_COLOR = (45, 45, 45) -VIEWER_GRID_SIZE = 50 +# ================================== PRIVATE =================================== URI_SCHEME = 'nodegraphqt://' URN_SCHEME = 'nodegraphqt::' @@ -142,3 +48,194 @@ #: Variable for setting the node layout direction. # NODE_LAYOUT_DIRECTION = NODE_LAYOUT_VERTICAL NODE_LAYOUT_DIRECTION = NODE_LAYOUT_HORIZONTAL + +# =================================== GLOBAL =================================== + + +class VersionEnum(Enum): + """ + Current framework version. + :py:mod:`NodeGraphQt.constants.VersionEnum` + """ + #: + VERSION = _v + #: + MAJOR = int(_v.split('.')[0]) + #: + MINOR = int(_v.split('.')[1]) + #: + PATCH = int(_v.split('.')[2]) + +# =================================== VIEWER =================================== + + +class ViewerEnum(Enum): + """ + Node graph viewer styling layout: + :py:mod:`NodeGraphQt.constants.ViewerEnum` + """ + #: default background color for the node graph. + BACKGROUND_COLOR = (35, 35, 35) + #: style node graph background with no grid or dots. + GRID_DISPLAY_NONE = 0 + #: style node graph background with dots. + GRID_DISPLAY_DOTS = 1 + #: style node graph background with grid lines. + GRID_DISPLAY_LINES = 2 + #: grid size when styled with grid lines. + GRID_SIZE = 50 + #: grid line color. + GRID_COLOR = (45, 45, 45) + + +class ViewerNavEnum(Enum): + """ + Node graph viewer navigation styling layout: + :py:mod:`NodeGraphQt.constants.ViewerNavEnum` + """ + #: default background color. + BACKGROUND_COLOR = (25, 25, 25) + #: default item color. + ITEM_COLOR = (35, 35, 35) + +# ==================================== NODE ==================================== + + +class NodeEnum(Enum): + """ + Node styling layout: + :py:mod:`NodeGraphQt.constants.NodeEnum` + """ + #: default node width. + WIDTH = 160 + #: default node height. + HEIGHT = 60 + #: default node icon size (WxH). + ICON_SIZE = 18 + #: default node overlay color when selected. + SELECTED_COLOR = (255, 255, 255, 30) + #: default node border color when selected. + SELECTED_BORDER_COLOR = (254, 207, 42, 255) + +# ==================================== PORT ==================================== + + +class PortEnum(Enum): + """ + Port styling layout: + :py:mod:`NodeGraphQt.constants.PortEnum` + """ + #: default port size. + SIZE = 22.0 + #: default port color. (r, g, b, a) + COLOR = (49, 115, 100, 255) + #: default port border color. + BORDER_COLOR = (29, 202, 151, 255) + #: port color when selected. + ACTIVE_COLOR = (14, 45, 59, 255) + #: port border color when selected. + ACTIVE_BORDER_COLOR = (107, 166, 193, 255) + #: port color on mouse over. + HOVER_COLOR = (17, 43, 82, 255) + #: port border color on mouse over. + HOVER_BORDER_COLOR = (136, 255, 35, 255) + #: threshold for selecting a port. + CLICK_FALLOFF = 15.0 + + +class PortTypeEnum(Enum): + """ + Port connection types: + :py:mod:`NodeGraphQt.constants.PortTypeEnum` + """ + #: Connection type for input ports. + IN = 'in' + #: Connection type for output ports. + OUT = 'out' + +# ==================================== PIPE ==================================== + + +class PipeEnum(Enum): + """ + Pipe styling layout: + :py:mod:`NodeGraphQt.constants.PipeEnum` + """ + #: default width. + WIDTH = 1.2 + #: default color. + COLOR = (175, 95, 30, 255) + #: pipe color to a node when it's disabled. + DISABLED_COLOR = (190, 20, 20, 255) + #: pipe color when selected or mouse over. + ACTIVE_COLOR = (70, 255, 220, 255) + #: pipe color to a node when it's selected. + HIGHLIGHT_COLOR = (232, 184, 13, 255) + #: draw connection as a line. + DRAW_TYPE_DEFAULT = 0 + #: draw connection as dashed lines. + DRAW_TYPE_DASHED = 1 + #: draw connection as a dotted line. + DRAW_TYPE_DOTTED = 2 + + +class PipeSlicerEnum(Enum): + """ + Slicer Pipe styling layout: + :py:mod:`NodeGraphQt.constants.PipeSlicerEnum` + """ + #: default width. + WIDTH = 1.5 + #: default color. + COLOR = (255, 50, 75) + + +class PipeLayoutEnum(Enum): + """ + Pipe connection drawing layout: + :py:mod:`NodeGraphQt.constants.PipeLayoutEnum` + """ + #: draw straight lines for pipe connections. + STRAIGHT = 0 + #: draw curved lines for pipe connections. + CURVED = 1 + #: draw angled lines for pipe connections. + ANGLE = 2 + + +# === PROPERTY BIN WIDGET === + +#: Property type will hidden in the properties bin (default). +NODE_PROP = 0 +#: Property type represented with a QLabel widget in the properties bin. +NODE_PROP_QLABEL = 2 +#: Property type represented with a QLineEdit widget in the properties bin. +NODE_PROP_QLINEEDIT = 3 +#: Property type represented with a QTextEdit widget in the properties bin. +NODE_PROP_QTEXTEDIT = 4 +#: Property type represented with a QComboBox widget in the properties bin. +NODE_PROP_QCOMBO = 5 +#: Property type represented with a QCheckBox widget in the properties bin. +NODE_PROP_QCHECKBOX = 6 +#: Property type represented with a QSpinBox widget in the properties bin. +NODE_PROP_QSPINBOX = 7 +#: Property type represented with a ColorPicker widget in the properties bin. +NODE_PROP_COLORPICKER = 8 +#: Property type represented with a Slider widget in the properties bin. +NODE_PROP_SLIDER = 9 +#: Property type represented with a file selector widget in the properties bin. +NODE_PROP_FILE = 10 +#: Property type represented with a file save widget in the properties bin. +NODE_PROP_FILE_SAVE = 11 +#: Property type represented with a vector2 widget in the properties bin. +NODE_PROP_VECTOR2 = 12 +#: Property type represented with vector3 widget in the properties bin. +NODE_PROP_VECTOR3 = 13 +#: Property type represented with vector4 widget in the properties bin. +NODE_PROP_VECTOR4 = 14 +#: Property type represented with float widget in the properties bin. +NODE_PROP_FLOAT = 15 +#: Property type represented with int widget in the properties bin. +NODE_PROP_INT = 16 +#: Property type represented with button widget in the properties bin. +NODE_PROP_BUTTON = 17 diff --git a/NodeGraphQt/nodes/base_node.py b/NodeGraphQt/nodes/base_node.py index cef3d184..8ad5a84e 100644 --- a/NodeGraphQt/nodes/base_node.py +++ b/NodeGraphQt/nodes/base_node.py @@ -7,7 +7,7 @@ NODE_PROP_QLINEEDIT, NODE_PROP_QCOMBO, NODE_PROP_QCHECKBOX, - IN_PORT, OUT_PORT, + PortTypeEnum, NODE_LAYOUT_VERTICAL, NODE_LAYOUT_HORIZONTAL) from NodeGraphQt.errors import (PortError, @@ -261,7 +261,7 @@ def add_input(self, name='input', multi_input=False, display_name=True, view.border_color = [min([255, max([0, i + 80])]) for i in color] port = Port(self, view) - port.model.type_ = IN_PORT + port.model.type_ = PortTypeEnum.IN.value port.model.name = name port.model.display_name = display_name port.model.multi_connection = multi_input @@ -303,7 +303,7 @@ def add_output(self, name='output', multi_output=True, display_name=True, view.color = color view.border_color = [min([255, max([0, i + 80])]) for i in color] port = Port(self, view) - port.model.type_ = OUT_PORT + port.model.type_ = PortTypeEnum.OUT.value port.model.name = name port.model.display_name = display_name port.model.multi_connection = multi_output @@ -632,4 +632,3 @@ def on_input_disconnected(self, in_port, out_port): out_port (NodeGraphQt.Port): output port that was disconnected. """ return - diff --git a/NodeGraphQt/qgraphics/node_abstract.py b/NodeGraphQt/qgraphics/node_abstract.py index 2241f4bd..ca996da3 100644 --- a/NodeGraphQt/qgraphics/node_abstract.py +++ b/NodeGraphQt/qgraphics/node_abstract.py @@ -1,10 +1,7 @@ #!/usr/bin/python from Qt import QtCore, QtWidgets -from NodeGraphQt.constants import (Z_VAL_NODE, - NODE_WIDTH, - NODE_HEIGHT, - ITEM_CACHE_MODE) +from NodeGraphQt.constants import Z_VAL_NODE, NodeEnum, ITEM_CACHE_MODE class AbstractNodeItem(QtWidgets.QGraphicsItem): @@ -28,8 +25,8 @@ def __init__(self, name='node', parent=None): 'disabled': False, 'visible': False, } - self._width = NODE_WIDTH - self._height = NODE_HEIGHT + self._width = NodeEnum.WIDTH.value + self._height = NodeEnum.HEIGHT.value def __repr__(self): return '{}.{}(\'{}\')'.format( diff --git a/NodeGraphQt/qgraphics/node_backdrop.py b/NodeGraphQt/qgraphics/node_backdrop.py index 7d3f2d8e..4e806653 100644 --- a/NodeGraphQt/qgraphics/node_backdrop.py +++ b/NodeGraphQt/qgraphics/node_backdrop.py @@ -1,9 +1,7 @@ #!/usr/bin/python from Qt import QtGui, QtCore, QtWidgets -from NodeGraphQt.constants import (Z_VAL_PIPE, - NODE_SEL_COLOR, - NODE_SEL_BORDER_COLOR) +from NodeGraphQt.constants import Z_VAL_PIPE, NodeEnum from NodeGraphQt.qgraphics.node_abstract import AbstractNodeItem from NodeGraphQt.qgraphics.pipe import PipeItem from NodeGraphQt.qgraphics.port import PortItem @@ -88,7 +86,7 @@ def paint(self, painter, option, widget): item = self.parentItem() if item and item.selected: - color = QtGui.QColor(*NODE_SEL_BORDER_COLOR) + color = QtGui.QColor(*NodeEnum.SELECTED_BORDER_COLOR.value) else: color = QtGui.QColor(*item.color) color = color.darker(110) @@ -221,7 +219,7 @@ def paint(self, painter, option, widget): self.backdrop_text) if self.selected: - sel_color = [x for x in NODE_SEL_COLOR] + sel_color = [x for x in NodeEnum.SELECTED_COLOR.value] sel_color[-1] = 15 painter.setBrush(QtGui.QColor(*sel_color)) painter.setPen(QtCore.Qt.NoPen) @@ -234,9 +232,9 @@ def paint(self, painter, option, widget): border = 0.8 border_color = self.color - if self.selected and NODE_SEL_BORDER_COLOR: + if self.selected and NodeEnum.SELECTED_BORDER_COLOR.value: border = 1.0 - border_color = NODE_SEL_BORDER_COLOR + border_color = NodeEnum.SELECTED_BORDER_COLOR.value painter.setBrush(QtCore.Qt.NoBrush) painter.setPen(QtGui.QPen(QtGui.QColor(*border_color), border)) painter.drawRoundedRect(rect, radius, radius) diff --git a/NodeGraphQt/qgraphics/node_base.py b/NodeGraphQt/qgraphics/node_base.py index 41ddf02e..9bb8dc4c 100644 --- a/NodeGraphQt/qgraphics/node_base.py +++ b/NodeGraphQt/qgraphics/node_base.py @@ -3,12 +3,14 @@ from Qt import QtGui, QtCore, QtWidgets -from NodeGraphQt.constants import (IN_PORT, OUT_PORT, - NODE_WIDTH, NODE_HEIGHT, - NODE_ICON_SIZE, ICON_NODE_BASE, - NODE_SEL_COLOR, NODE_SEL_BORDER_COLOR, - PORT_FALLOFF, Z_VAL_NODE, - ITEM_CACHE_MODE) +from NodeGraphQt.constants import ( + ITEM_CACHE_MODE, + ICON_NODE_BASE, + NodeEnum, + PortEnum, + PortTypeEnum, + Z_VAL_NODE +) from NodeGraphQt.errors import NodeWidgetError from NodeGraphQt.qgraphics.node_abstract import AbstractNodeItem from NodeGraphQt.qgraphics.node_overlay_disabled import XDisabledItem @@ -28,9 +30,10 @@ class NodeItem(AbstractNodeItem): def __init__(self, name='node', parent=None): super(NodeItem, self).__init__(name, parent) pixmap = QtGui.QPixmap(ICON_NODE_BASE) - if pixmap.size().height() > NODE_ICON_SIZE: + if pixmap.size().height() > NodeEnum.ICON_SIZE.value: pixmap = pixmap.scaledToHeight( - NODE_ICON_SIZE, QtCore.Qt.SmoothTransformation + NodeEnum.ICON_SIZE.value, + QtCore.Qt.SmoothTransformation ) self._properties['icon'] = ICON_NODE_BASE self._icon_item = QtWidgets.QGraphicsPixmapItem(pixmap, self) @@ -73,7 +76,7 @@ def paint(self, painter, option, widget): # light overlay on background when selected. if self.selected: - painter.setBrush(QtGui.QColor(*NODE_SEL_COLOR)) + painter.setBrush(QtGui.QColor(*NodeEnum.SELECTED_COLOR.value)) painter.drawRoundedRect(rect, radius, radius) # node name background. @@ -84,7 +87,7 @@ def paint(self, painter, option, widget): rect.width() - padding[0] - margin, text_rect.height() - (padding[1] * 2)) if self.selected: - painter.setBrush(QtGui.QColor(*NODE_SEL_COLOR)) + painter.setBrush(QtGui.QColor(*NodeEnum.SELECTED_COLOR.value)) else: painter.setBrush(QtGui.QColor(0, 0, 0, 80)) painter.drawRoundedRect(text_rect, 3.0, 3.0) @@ -92,7 +95,9 @@ def paint(self, painter, option, widget): # node border if self.selected: border_width = 1.2 - border_color = QtGui.QColor(*NODE_SEL_BORDER_COLOR) + border_color = QtGui.QColor( + *NodeEnum.SELECTED_BORDER_COLOR.value + ) else: border_width = 0.8 border_color = QtGui.QColor(*self.border_color) @@ -202,10 +207,10 @@ def _set_base_size(self, add_w=0.0, add_h=0.0): add_h (float): add additional height. """ self._width, self._height = self.calc_size(add_w, add_h) - if self._width < NODE_WIDTH: - self._width = NODE_WIDTH - if self._height < NODE_HEIGHT: - self._height = NODE_HEIGHT + if self._width < NodeEnum.WIDTH.value: + self._width = NodeEnum.WIDTH.value + if self._height < NodeEnum.HEIGHT.value: + self._height = NodeEnum.HEIGHT.value def _set_text_color(self, color): """ @@ -384,7 +389,7 @@ def align_ports(self, v_offset=0.0): v_offset (float): port vertical offset. """ width = self._width - txt_offset = PORT_FALLOFF - 2 + txt_offset = PortEnum.CLICK_FALLOFF.value - 2 spacing = 1 # adjust input position @@ -524,9 +529,11 @@ def icon(self, path=None): self._properties['icon'] = path path = path or ICON_NODE_BASE pixmap = QtGui.QPixmap(path) - if pixmap.size().height() > NODE_ICON_SIZE: - pixmap = pixmap.scaledToHeight(NODE_ICON_SIZE, - QtCore.Qt.SmoothTransformation) + if pixmap.size().height() > NodeEnum.ICON_SIZE.value: + pixmap = pixmap.scaledToHeight( + NodeEnum.ICON_SIZE.value, + QtCore.Qt.SmoothTransformation + ) self._icon_item.setPixmap(pixmap) if self.scene(): self.post_init() @@ -624,9 +631,9 @@ def _add_port(self, port): text.setFont(text.font()) text.setVisible(port.display_name) text.setCacheMode(ITEM_CACHE_MODE) - if port.port_type == IN_PORT: + if port.port_type == PortTypeEnum.IN.value: self._input_items[port] = text - elif port.port_type == OUT_PORT: + elif port.port_type == PortTypeEnum.OUT.value: self._output_items[port] = text if self.scene(): self.post_init() @@ -653,7 +660,7 @@ def add_input(self, name='input', multi_port=False, display_name=True, else: port = PortItem(self) port.name = name - port.port_type = IN_PORT + port.port_type = PortTypeEnum.IN.value port.multi_connection = multi_port port.display_name = display_name port.locked = locked @@ -680,7 +687,7 @@ def add_output(self, name='output', multi_port=False, display_name=True, else: port = PortItem(self) port.name = name - port.port_type = OUT_PORT + port.port_type = PortTypeEnum.OUT.value port.multi_connection = multi_port port.display_name = display_name port.locked = locked @@ -808,14 +815,16 @@ def paint(self, painter, option, widget): # light overlay on background when selected. if self.selected: - painter.setBrush(QtGui.QColor(*NODE_SEL_COLOR)) + painter.setBrush( + QtGui.QColor(*NodeEnum.SELECTED_COLOR.value) + ) painter.drawRoundedRect(rect, radius, radius) # top & bottom edge background. padding = 2.0 height = 10 if self.selected: - painter.setBrush(QtGui.QColor(*NODE_SEL_COLOR)) + painter.setBrush(QtGui.QColor(*NodeEnum.SELECTED_COLOR.value)) else: painter.setBrush(QtGui.QColor(0, 0, 0, 80)) for y in [rect.y() + padding, rect.height() - height - 1]: @@ -828,7 +837,9 @@ def paint(self, painter, option, widget): border_color = QtGui.QColor(*self.border_color) if self.selected: border_width = 1.2 - border_color = QtGui.QColor(*NODE_SEL_BORDER_COLOR) + border_color = QtGui.QColor( + *NodeEnum.SELECTED_BORDER_COLOR.value + ) border_rect = QtCore.QRectF(rect.left(), rect.top(), rect.width(), rect.height()) diff --git a/NodeGraphQt/qgraphics/node_group.py b/NodeGraphQt/qgraphics/node_group.py index 26f4298b..fa4e91dd 100644 --- a/NodeGraphQt/qgraphics/node_group.py +++ b/NodeGraphQt/qgraphics/node_group.py @@ -1,9 +1,7 @@ #!/usr/bin/python from Qt import QtCore, QtGui, QtWidgets -from NodeGraphQt.constants import (NODE_SEL_BORDER_COLOR, - NODE_SEL_COLOR, - PORT_FALLOFF) +from NodeGraphQt.constants import NodeEnum, PortEnum from NodeGraphQt.qgraphics.node_base import NodeItem @@ -65,9 +63,11 @@ def paint(self, painter, option, widget): painter.drawRect(rect_2) if self.selected: - border_color = QtGui.QColor(*NODE_SEL_BORDER_COLOR) + border_color = QtGui.QColor( + *NodeEnum.SELECTED_BORDER_COLOR.value + ) # light overlay on background when selected. - painter.setBrush(QtGui.QColor(*NODE_SEL_COLOR)) + painter.setBrush(QtGui.QColor(*NodeEnum.SELECTED_COLOR.value)) painter.drawRect(rect_2) else: border_color = QtGui.QColor(*self.border_color) @@ -80,7 +80,7 @@ def paint(self, painter, option, widget): rect.right() - (padding[0] * 2) - margin, text_rect.height() - (padding[1] * 2)) if self.selected: - painter.setBrush(QtGui.QColor(*NODE_SEL_COLOR)) + painter.setBrush(QtGui.QColor(*NodeEnum.SELECTED_COLOR.value)) else: painter.setBrush(QtGui.QColor(0, 0, 0, 80)) painter.setPen(QtCore.Qt.NoPen) @@ -114,7 +114,7 @@ def align_ports(self, v_offset=0.0): v_offset (float): port vertical offset. """ width = self._width - txt_offset = PORT_FALLOFF - 2 + txt_offset = PortEnum.CLICK_FALLOFF.value - 2 spacing = 1 # adjust input position @@ -242,9 +242,11 @@ def paint(self, painter, option, widget): painter.drawRect(rect_2) if self.selected: - border_color = QtGui.QColor(*NODE_SEL_BORDER_COLOR) + border_color = QtGui.QColor( + *NodeEnum.SELECTED_BORDER_COLOR.value + ) # light overlay on background when selected. - painter.setBrush(QtGui.QColor(*NODE_SEL_COLOR)) + painter.setBrush(QtGui.QColor(*NodeEnum.SELECTED_COLOR.value)) painter.drawRect(rect_2) else: border_color = QtGui.QColor(*self.border_color) @@ -253,7 +255,7 @@ def paint(self, painter, option, widget): padding = 2.0 height = 10 if self.selected: - painter.setBrush(QtGui.QColor(*NODE_SEL_COLOR)) + painter.setBrush(QtGui.QColor(*NodeEnum.SELECTED_COLOR.value)) else: painter.setBrush(QtGui.QColor(0, 0, 0, 80)) diff --git a/NodeGraphQt/qgraphics/node_port_in.py b/NodeGraphQt/qgraphics/node_port_in.py index 6a981246..e76e5d73 100644 --- a/NodeGraphQt/qgraphics/node_port_in.py +++ b/NodeGraphQt/qgraphics/node_port_in.py @@ -1,7 +1,7 @@ #!/usr/bin/python from Qt import QtCore, QtGui, QtWidgets -from NodeGraphQt.constants import (NODE_SEL_BORDER_COLOR, NODE_SEL_COLOR) +from NodeGraphQt.constants import NodeEnum from NodeGraphQt.qgraphics.node_base import NodeItem, NodeItemVertical @@ -74,8 +74,10 @@ def paint(self, painter, option, widget): poly = transform.map(triangle) if self.selected: - pen = QtGui.QPen(QtGui.QColor(*NODE_SEL_BORDER_COLOR), 1.3) - painter.setBrush(QtGui.QColor(*NODE_SEL_COLOR)) + pen = QtGui.QPen( + QtGui.QColor(*NodeEnum.SELECTED_BORDER_COLOR.value), 1.3 + ) + painter.setBrush(QtGui.QColor(*NodeEnum.SELECTED_COLOR.value)) else: pen = QtGui.QPen(QtGui.QColor(*self.border_color), 1.2) painter.setBrush(QtGui.QColor(0, 0, 0, 50)) @@ -220,8 +222,10 @@ def paint(self, painter, option, widget): poly = transform.map(triangle) if self.selected: - pen = QtGui.QPen(QtGui.QColor(*NODE_SEL_BORDER_COLOR), 1.3) - painter.setBrush(QtGui.QColor(*NODE_SEL_COLOR)) + pen = QtGui.QPen( + QtGui.QColor(*NodeEnum.SELECTED_BORDER_COLOR.value), 1.3 + ) + painter.setBrush(QtGui.QColor(*NodeEnum.SELECTED_COLOR.value)) else: pen = QtGui.QPen(QtGui.QColor(*self.border_color), 1.2) painter.setBrush(QtGui.QColor(0, 0, 0, 50)) diff --git a/NodeGraphQt/qgraphics/node_port_out.py b/NodeGraphQt/qgraphics/node_port_out.py index c834c7ea..a692c74a 100644 --- a/NodeGraphQt/qgraphics/node_port_out.py +++ b/NodeGraphQt/qgraphics/node_port_out.py @@ -1,7 +1,7 @@ #!/usr/bin/python from Qt import QtCore, QtGui, QtWidgets -from NodeGraphQt.constants import (NODE_SEL_BORDER_COLOR, NODE_SEL_COLOR) +from NodeGraphQt.constants import NodeEnum from NodeGraphQt.qgraphics.node_base import NodeItem, NodeItemVertical @@ -74,8 +74,10 @@ def paint(self, painter, option, widget): poly = transform.map(triangle) if self.selected: - pen = QtGui.QPen(QtGui.QColor(*NODE_SEL_BORDER_COLOR), 1.3) - painter.setBrush(QtGui.QColor(*NODE_SEL_COLOR)) + pen = QtGui.QPen( + QtGui.QColor(*NodeEnum.SELECTED_BORDER_COLOR.value), 1.3 + ) + painter.setBrush(QtGui.QColor(*NodeEnum.SELECTED_COLOR.value)) else: pen = QtGui.QPen(QtGui.QColor(*self.border_color), 1.2) painter.setBrush(QtGui.QColor(0, 0, 0, 50)) @@ -229,8 +231,10 @@ def paint(self, painter, option, widget): poly = transform.map(triangle) if self.selected: - pen = QtGui.QPen(QtGui.QColor(*NODE_SEL_BORDER_COLOR), 1.3) - painter.setBrush(QtGui.QColor(*NODE_SEL_COLOR)) + pen = QtGui.QPen( + QtGui.QColor(*NodeEnum.SELECTED_BORDER_COLOR.value), 1.3 + ) + painter.setBrush(QtGui.QColor(*NodeEnum.SELECTED_COLOR.value)) else: pen = QtGui.QPen(QtGui.QColor(*self.border_color), 1.2) painter.setBrush(QtGui.QColor(0, 0, 0, 50)) diff --git a/NodeGraphQt/qgraphics/pipe.py b/NodeGraphQt/qgraphics/pipe.py index b2b48c12..29beada0 100644 --- a/NodeGraphQt/qgraphics/pipe.py +++ b/NodeGraphQt/qgraphics/pipe.py @@ -4,21 +4,18 @@ from Qt import QtCore, QtGui, QtWidgets from NodeGraphQt.constants import ( - PIPE_DEFAULT_COLOR, PIPE_ACTIVE_COLOR, - PIPE_HIGHLIGHT_COLOR, PIPE_DISABLED_COLOR, - PIPE_STYLE_DASHED, PIPE_STYLE_DEFAULT, PIPE_STYLE_DOTTED, - PIPE_LAYOUT_STRAIGHT, PIPE_WIDTH, IN_PORT, OUT_PORT, Z_VAL_PIPE, + PipeEnum, PipeLayoutEnum, PortTypeEnum, Z_VAL_PIPE, Z_VAL_NODE_WIDGET, - PIPE_LAYOUT_ANGLE, PIPE_LAYOUT_CURVED, ITEM_CACHE_MODE, NODE_LAYOUT_VERTICAL, NODE_LAYOUT_HORIZONTAL, - NODE_LAYOUT_DIRECTION) + NODE_LAYOUT_DIRECTION +) from NodeGraphQt.qgraphics.port import PortItem PIPE_STYLES = { - PIPE_STYLE_DEFAULT: QtCore.Qt.SolidLine, - PIPE_STYLE_DASHED: QtCore.Qt.DashLine, - PIPE_STYLE_DOTTED: QtCore.Qt.DotLine + PipeEnum.DRAW_TYPE_DEFAULT.value: QtCore.Qt.SolidLine, + PipeEnum.DRAW_TYPE_DASHED.value: QtCore.Qt.DashLine, + PipeEnum.DRAW_TYPE_DOTTED.value: QtCore.Qt.DotLine } @@ -32,8 +29,8 @@ def __init__(self, input_port=None, output_port=None): self.setZValue(Z_VAL_PIPE) self.setAcceptHoverEvents(True) self.setFlag(QtWidgets.QGraphicsItem.ItemIsSelectable) - self._color = PIPE_DEFAULT_COLOR - self._style = PIPE_STYLE_DEFAULT + self._color = PipeEnum.COLOR.value + self._style = PipeEnum.DRAW_TYPE_DEFAULT.value self._active = False self._highlight = False self._input_port = input_port @@ -76,22 +73,22 @@ def paint(self, painter, option, widget): """ color = QtGui.QColor(*self._color) pen_style = PIPE_STYLES.get(self.style) - pen_width = PIPE_WIDTH + pen_width = PipeEnum.WIDTH.value if self._active: - color = QtGui.QColor(*PIPE_ACTIVE_COLOR) + color = QtGui.QColor(*PipeEnum.ACTIVE_COLOR.value) if pen_style == QtCore.Qt.DashDotDotLine: pen_width += 1 else: pen_width += 0.35 elif self._highlight: - color = QtGui.QColor(*PIPE_HIGHLIGHT_COLOR) - pen_style = PIPE_STYLES.get(PIPE_STYLE_DEFAULT) + color = QtGui.QColor(*PipeEnum.HIGHLIGHT_COLOR.value) + pen_style = PIPE_STYLES.get(PipeEnum.DRAW_TYPE_DEFAULT.value) if self.disabled(): if not self._active: - color = QtGui.QColor(*PIPE_DISABLED_COLOR) + color = QtGui.QColor(*PipeEnum.DISABLED_COLOR.value) pen_width += 0.2 - pen_style = PIPE_STYLES.get(PIPE_STYLE_DOTTED) + pen_style = PIPE_STYLES.get(PipeEnum.DRAW_TYPE_DOTTED.value) pen = QtGui.QPen(color, pen_width, pen_style) pen.setCapStyle(QtCore.Qt.RoundCap) @@ -154,13 +151,13 @@ def __draw_path_vertical(self, start_port, pos1, pos2, path): pos2 (QPointF): end port position. path (QPainterPath): path to draw. """ - if self.viewer_pipe_layout() == PIPE_LAYOUT_CURVED: + if self.viewer_pipe_layout() == PipeLayoutEnum.CURVED.value: ctr_offset_y1, ctr_offset_y2 = pos1.y(), pos2.y() tangent = abs(ctr_offset_y1 - ctr_offset_y2) max_height = start_port.node.boundingRect().height() tangent = min(tangent, max_height) - if start_port.port_type == IN_PORT: + if start_port.port_type == PortTypeEnum.IN.value: ctr_offset_y1 -= tangent ctr_offset_y2 += tangent else: @@ -171,10 +168,10 @@ def __draw_path_vertical(self, start_port, pos1, pos2, path): ctr_point2 = QtCore.QPointF(pos2.x(), ctr_offset_y2) path.cubicTo(ctr_point1, ctr_point2, pos2) self.setPath(path) - elif self.viewer_pipe_layout() == PIPE_LAYOUT_ANGLE: + elif self.viewer_pipe_layout() == PipeLayoutEnum.ANGLE.value: ctr_offset_y1, ctr_offset_y2 = pos1.y(), pos2.y() distance = abs(ctr_offset_y1 - ctr_offset_y2)/2 - if start_port.port_type == IN_PORT: + if start_port.port_type == PortTypeEnum.IN.value: ctr_offset_y1 -= distance ctr_offset_y2 += distance else: @@ -198,13 +195,13 @@ def __draw_path_horizontal(self, start_port, pos1, pos2, path): pos2 (QPointF): end port position. path (QPainterPath): path to draw. """ - if self.viewer_pipe_layout() == PIPE_LAYOUT_CURVED: + if self.viewer_pipe_layout() == PipeLayoutEnum.CURVED.value: ctr_offset_x1, ctr_offset_x2 = pos1.x(), pos2.x() tangent = abs(ctr_offset_x1 - ctr_offset_x2) max_width = start_port.node.boundingRect().width() tangent = min(tangent, max_width) - if start_port.port_type == IN_PORT: + if start_port.port_type == PortTypeEnum.IN.value: ctr_offset_x1 -= tangent ctr_offset_x2 += tangent else: @@ -215,10 +212,10 @@ def __draw_path_horizontal(self, start_port, pos1, pos2, path): ctr_point2 = QtCore.QPointF(ctr_offset_x2, pos2.y()) path.cubicTo(ctr_point1, ctr_point2, pos2) self.setPath(path) - elif self.viewer_pipe_layout() == PIPE_LAYOUT_ANGLE: + elif self.viewer_pipe_layout() == PipeLayoutEnum.ANGLE.value: ctr_offset_x1, ctr_offset_x2 = pos1.x(), pos2.x() distance = abs(ctr_offset_x1 - ctr_offset_x2) / 2 - if start_port.port_type == IN_PORT: + if start_port.port_type == PortTypeEnum.IN.value: ctr_offset_x1 -= distance ctr_offset_x2 += distance else: @@ -260,7 +257,7 @@ def draw_path(self, start_port, end_port=None, cursor_pos=None): path = QtGui.QPainterPath() path.moveTo(line.x1(), line.y1()) - if self.viewer_pipe_layout() == PIPE_LAYOUT_STRAIGHT: + if self.viewer_pipe_layout() == PipeLayoutEnum.STRAIGHT.value: path.lineTo(pos2) self.setPath(path) return @@ -298,8 +295,10 @@ def viewer_pipe_layout(self): def activate(self): self._active = True - color = QtGui.QColor(*PIPE_ACTIVE_COLOR) - pen = QtGui.QPen(color, 2.5, PIPE_STYLES.get(PIPE_STYLE_DEFAULT)) + color = QtGui.QColor(*PipeEnum.ACTIVE_COLOR.value) + pen = QtGui.QPen( + color, 2.5, PIPE_STYLES.get(PipeEnum.DRAW_TYPE_DEFAULT.value) + ) self.setPen(pen) def active(self): @@ -307,8 +306,10 @@ def active(self): def highlight(self): self._highlight = True - color = QtGui.QColor(*PIPE_HIGHLIGHT_COLOR) - pen = QtGui.QPen(color, 2, PIPE_STYLES.get(PIPE_STYLE_DEFAULT)) + color = QtGui.QColor(*PipeEnum.HIGHLIGHT_COLOR.value) + pen = QtGui.QPen( + color, 2, PIPE_STYLES.get(PipeEnum.DRAW_TYPE_DEFAULT.value) + ) self.setPen(pen) def highlighted(self): @@ -326,10 +327,10 @@ def set_connections(self, port1, port2): port1.port_type: port1, port2.port_type: port2 } - self.input_port = ports[IN_PORT] - self.output_port = ports[OUT_PORT] - ports[IN_PORT].add_pipe(self) - ports[OUT_PORT].add_pipe(self) + self.input_port = ports[PortTypeEnum.IN.value] + self.output_port = ports[PortTypeEnum.OUT.value] + ports[PortTypeEnum.IN.value].add_pipe(self) + ports[PortTypeEnum.OUT.value].add_pipe(self) def disabled(self): if self.input_port and self.input_port.node.disabled: @@ -409,9 +410,9 @@ def paint(self, painter, option, widget): used to describe the parameters needed to draw. widget (QtWidgets.QWidget): not used. """ - color = QtGui.QColor(*PIPE_ACTIVE_COLOR) - pen_style = PIPE_STYLES.get(PIPE_STYLE_DASHED) - pen_width = PIPE_WIDTH + 0.35 + color = QtGui.QColor(*PipeEnum.ACTIVE_COLOR.value) + pen_style = PIPE_STYLES.get(PipeEnum.DRAW_TYPE_DASHED.value) + pen_width = PipeEnum.WIDTH.value + 0.35 pen = QtGui.QPen(color, pen_width) pen.setStyle(pen_style) diff --git a/NodeGraphQt/qgraphics/port.py b/NodeGraphQt/qgraphics/port.py index 2c723980..78c8a0ad 100644 --- a/NodeGraphQt/qgraphics/port.py +++ b/NodeGraphQt/qgraphics/port.py @@ -2,15 +2,7 @@ from Qt import QtGui, QtCore, QtWidgets from NodeGraphQt.constants import ( - IN_PORT, OUT_PORT, - PORT_DEFAULT_COLOR, - PORT_DEFAULT_BORDER_COLOR, - PORT_DEFAULT_SIZE, - PORT_FALLOFF, - PORT_HOVER_COLOR, - PORT_HOVER_BORDER_COLOR, - PORT_ACTIVE_COLOR, - PORT_ACTIVE_BORDER_COLOR, + PortTypeEnum, PortEnum, Z_VAL_PORT, ITEM_CACHE_MODE) @@ -28,13 +20,13 @@ def __init__(self, parent=None): self.setFlag(self.ItemSendsScenePositionChanges, True) self.setZValue(Z_VAL_PORT) self._pipes = [] - self._width = PORT_DEFAULT_SIZE - self._height = PORT_DEFAULT_SIZE + self._width = PortEnum.SIZE.value + self._height = PortEnum.SIZE.value self._hovered = False self._name = 'port' self._display_name = True - self._color = PORT_DEFAULT_COLOR - self._border_color = PORT_DEFAULT_BORDER_COLOR + self._color = PortEnum.COLOR.value + self._border_color = PortEnum.BORDER_COLOR.value self._border_size = 1 self._port_type = None self._multi_connection = False @@ -47,7 +39,9 @@ def __repr__(self): return '{}.PortItem("{}")'.format(self.__module__, self.name) def boundingRect(self): - return QtCore.QRectF(0.0, 0.0, self._width + PORT_FALLOFF, self._height) + return QtCore.QRectF(0.0, 0.0, + self._width + PortEnum.CLICK_FALLOFF.value, + self._height) def paint(self, painter, option, widget): """ @@ -76,11 +70,11 @@ def paint(self, painter, option, widget): port_rect = QtCore.QRectF(rect_x, rect_y, rect_w, rect_h) if self._hovered: - color = QtGui.QColor(*PORT_HOVER_COLOR) - border_color = QtGui.QColor(*PORT_HOVER_BORDER_COLOR) + color = QtGui.QColor(*PortEnum.HOVER_COLOR.value) + border_color = QtGui.QColor(*PortEnum.HOVER_BORDER_COLOR.value) elif self.connected_pipes: - color = QtGui.QColor(*PORT_ACTIVE_COLOR) - border_color = QtGui.QColor(*PORT_ACTIVE_BORDER_COLOR) + color = QtGui.QColor(*PortEnum.ACTIVE_COLOR.value) + border_color = QtGui.QColor(*PortEnum.ACTIVE_BORDER_COLOR.value) else: color = QtGui.QColor(*self.color) border_color = QtGui.QColor(*self.border_color) @@ -146,9 +140,9 @@ def redraw_connected_pipes(self): if not self.connected_pipes: return for pipe in self.connected_pipes: - if self.port_type == IN_PORT: + if self.port_type == PortTypeEnum.IN.value: pipe.draw_path(self, pipe.output_port) - elif self.port_type == OUT_PORT: + elif self.port_type == PortTypeEnum.OUT.value: pipe.draw_path(pipe.input_port, self) def add_pipe(self, pipe): @@ -164,7 +158,10 @@ def connected_pipes(self): @property def connected_ports(self): ports = [] - port_types = {IN_PORT: 'output_port', OUT_PORT: 'input_port'} + port_types = { + PortTypeEnum.IN.value: 'output_port', + PortTypeEnum.OUT.value: 'input_port' + } for pipe in self.connected_pipes: ports.append(getattr(pipe, port_types[self.port_type])) return ports @@ -266,7 +263,10 @@ def connect_to(self, port): self.update() def disconnect_from(self, port): - port_types = {IN_PORT: 'output_port', OUT_PORT: 'input_port'} + port_types = { + PortTypeEnum.IN.value: 'output_port', + PortTypeEnum.OUT.value: 'input_port' + } for pipe in self.connected_pipes: connected_port = getattr(pipe, port_types[self.port_type]) if connected_port == port: diff --git a/NodeGraphQt/qgraphics/slicer.py b/NodeGraphQt/qgraphics/slicer.py index 11c480f9..08282840 100644 --- a/NodeGraphQt/qgraphics/slicer.py +++ b/NodeGraphQt/qgraphics/slicer.py @@ -3,7 +3,7 @@ from Qt import QtCore, QtGui, QtWidgets -from NodeGraphQt.constants import Z_VAL_NODE_WIDGET, PIPE_SLICER_COLOR +from NodeGraphQt.constants import Z_VAL_NODE_WIDGET, PipeSlicerEnum class SlicerPipeItem(QtWidgets.QGraphicsPathItem): @@ -25,7 +25,7 @@ def paint(self, painter, option, widget): used to describe the parameters needed to draw. widget (QtWidgets.QWidget): not used. """ - color = QtGui.QColor(*PIPE_SLICER_COLOR) + color = QtGui.QColor(*PipeSlicerEnum.COLOR.value) p1 = self.path().pointAtPercent(0) p2 = self.path().pointAtPercent(1) size = 6.0 @@ -42,15 +42,21 @@ def paint(self, painter, option, widget): text_x = painter.fontMetrics().width(text) / 2 text_y = painter.fontMetrics().height() / 1.5 text_pos = QtCore.QPointF(p1.x() - text_x, p1.y() - text_y) - text_color = QtGui.QColor(*PIPE_SLICER_COLOR) + text_color = QtGui.QColor(*PipeSlicerEnum.COLOR.value) text_color.setAlpha(80) - painter.setPen(QtGui.QPen(text_color, 1.5, QtCore.Qt.SolidLine)) + painter.setPen(QtGui.QPen( + text_color, PipeSlicerEnum.WIDTH.value, QtCore.Qt.SolidLine + )) painter.drawText(text_pos, text) - painter.setPen(QtGui.QPen(color, 1.5, QtCore.Qt.DashDotLine)) + painter.setPen(QtGui.QPen( + color, PipeSlicerEnum.WIDTH.value, QtCore.Qt.DashDotLine + )) painter.drawPath(self.path()) - pen = QtGui.QPen(color, 1.5, QtCore.Qt.SolidLine) + pen = QtGui.QPen( + color, PipeSlicerEnum.WIDTH.value, QtCore.Qt.SolidLine + ) pen.setCapStyle(QtCore.Qt.RoundCap) pen.setJoinStyle(QtCore.Qt.MiterJoin) painter.setPen(pen) diff --git a/NodeGraphQt/widgets/actions.py b/NodeGraphQt/widgets/actions.py index 0f9b1784..4ec9ce1d 100644 --- a/NodeGraphQt/widgets/actions.py +++ b/NodeGraphQt/widgets/actions.py @@ -1,7 +1,7 @@ #!/usr/bin/python from Qt import QtCore, QtWidgets -from NodeGraphQt.constants import VIEWER_BG_COLOR +from NodeGraphQt.constants import ViewerEnum class BaseMenu(QtWidgets.QMenu): @@ -13,7 +13,9 @@ def __init__(self, *args, **kwargs): style_dict = { 'QMenu': { 'color': 'rgb({0},{1},{2})'.format(*text_color), - 'background-color': 'rgb({0},{1},{2})'.format(*VIEWER_BG_COLOR), + 'background-color': 'rgb({0},{1},{2})'.format( + *ViewerEnum.BACKGROUND_COLOR.value + ), 'border': '1px solid rgba({0},{1},{2},30)'.format(*text_color), 'border-radius': '3px', }, diff --git a/NodeGraphQt/widgets/node_graph.py b/NodeGraphQt/widgets/node_graph.py index 786e746b..7998ad02 100644 --- a/NodeGraphQt/widgets/node_graph.py +++ b/NodeGraphQt/widgets/node_graph.py @@ -1,10 +1,9 @@ from Qt import QtWidgets, QtGui from NodeGraphQt.constants import ( - NODE_SEL_BORDER_COLOR, - VIEWER_BG_COLOR, - VIEWER_NAV_BG_COLOR + NodeEnum, ViewerEnum, ViewerNavEnum ) + from NodeGraphQt.widgets.viewer_nav import NodeNavigationWidget @@ -15,13 +14,18 @@ def __init__(self, parent=None): self.setTabsClosable(True) self.setTabBarAutoHide(True) text_color = self.palette().text().color().toTuple() - bg_color = QtGui.QColor(*VIEWER_BG_COLOR).darker(120).toTuple() + bg_color = QtGui.QColor( + *ViewerEnum.BACKGROUND_COLOR.value).darker(120).toTuple() style_dict = { 'QWidget': { - 'background-color': 'rgb({0},{1},{2})'.format(*VIEWER_BG_COLOR), + 'background-color': 'rgb({0},{1},{2})'.format( + *ViewerEnum.BACKGROUND_COLOR.value + ), }, 'QTabWidget::pane': { - 'background': 'rgb({0},{1},{2})'.format(*VIEWER_BG_COLOR), + 'background': 'rgb({0},{1},{2})'.format( + *ViewerEnum.BACKGROUND_COLOR.value + ), 'border': '0px', 'border-top': '0px solid rgb({0},{1},{2})'.format(*bg_color), }, @@ -34,14 +38,16 @@ def __init__(self, parent=None): }, 'QTabBar::tab:selected': { 'color': 'rgb({0},{1},{2})'.format(*text_color), - 'background': 'rgb({0},{1},{2})'.format(*VIEWER_NAV_BG_COLOR), + 'background': 'rgb({0},{1},{2})'.format( + *ViewerNavEnum.BACKGROUND_COLOR.value + ), 'border-top': '1px solid rgb({0},{1},{2})' - .format(*NODE_SEL_BORDER_COLOR), + .format(*NodeEnum.SELECTED_BORDER_COLOR.value), }, 'QTabBar::tab:hover': { 'color': 'rgb({0},{1},{2})'.format(*text_color), 'border-top': '1px solid rgb({0},{1},{2})' - .format(*NODE_SEL_BORDER_COLOR), + .format(*NodeEnum.SELECTED_BORDER_COLOR.value), } } stylesheet = '' diff --git a/NodeGraphQt/widgets/node_widgets.py b/NodeGraphQt/widgets/node_widgets.py index 8fa8e257..e2bf29f2 100644 --- a/NodeGraphQt/widgets/node_widgets.py +++ b/NodeGraphQt/widgets/node_widgets.py @@ -1,7 +1,7 @@ #!/usr/bin/python from Qt import QtCore, QtWidgets -from NodeGraphQt.constants import VIEWER_GRID_COLOR, Z_VAL_NODE_WIDGET +from NodeGraphQt.constants import ViewerEnum, Z_VAL_NODE_WIDGET from NodeGraphQt.errors import NodeWidgetError @@ -329,7 +329,7 @@ def __init__(self, parent=None, name='', label='', text=''): 'QLineEdit': { 'background': 'rgba({0},{1},{2},20)'.format(*bg_color), 'border': '1px solid rgb({0},{1},{2})' - .format(*VIEWER_GRID_COLOR), + .format(*ViewerEnum.GRID_COLOR.value), 'border-radius': '3px', 'color': 'rgba({0},{1},{2},150)'.format(*text_color), 'selection-background-color': 'rgba({0},{1},{2},100)' diff --git a/NodeGraphQt/widgets/scene.py b/NodeGraphQt/widgets/scene.py index 54309ea7..91e7ccfa 100644 --- a/NodeGraphQt/widgets/scene.py +++ b/NodeGraphQt/widgets/scene.py @@ -1,20 +1,16 @@ #!/usr/bin/python from Qt import QtGui, QtCore, QtWidgets -from NodeGraphQt.constants import (VIEWER_BG_COLOR, - VIEWER_GRID_SIZE, - VIEWER_GRID_COLOR, - VIEWER_GRID_DOTS, - VIEWER_GRID_LINES) +from NodeGraphQt.constants import ViewerEnum class NodeScene(QtWidgets.QGraphicsScene): def __init__(self, parent=None): super(NodeScene, self).__init__(parent) - self._grid_mode = VIEWER_GRID_LINES - self._grid_color = VIEWER_GRID_COLOR - self._bg_color = VIEWER_BG_COLOR + self._grid_mode = ViewerEnum.GRID_DISPLAY_LINES.value + self._grid_color = ViewerEnum.GRID_COLOR.value + self._bg_color = ViewerEnum.BACKGROUND_COLOR.value self.setBackgroundBrush(QtGui.QColor(*self._bg_color)) def __repr__(self): @@ -98,21 +94,25 @@ def drawBackground(self, painter, rect): painter.setRenderHint(QtGui.QPainter.Antialiasing, False) painter.setBrush(self.backgroundBrush()) - if self._grid_mode is VIEWER_GRID_DOTS: + if self._grid_mode is ViewerEnum.GRID_DISPLAY_DOTS.value: pen = QtGui.QPen(QtGui.QColor(*self.grid_color), 0.65) - self._draw_dots(painter, rect, pen, VIEWER_GRID_SIZE) + self._draw_dots(painter, rect, pen, ViewerEnum.GRID_SIZE.value) - elif self._grid_mode is VIEWER_GRID_LINES: + elif self._grid_mode is ViewerEnum.GRID_DISPLAY_LINES.value: zoom = self.viewer().get_zoom() if zoom > -0.5: pen = QtGui.QPen(QtGui.QColor(*self.grid_color), 0.65) - self._draw_grid(painter, rect, pen, VIEWER_GRID_SIZE) + self._draw_grid( + painter, rect, pen, ViewerEnum.GRID_SIZE.value + ) color = QtGui.QColor(*self._bg_color).darker(150) if zoom < -0.0: color = color.darker(100 - int(zoom * 110)) pen = QtGui.QPen(color, 0.65) - self._draw_grid(painter, rect, pen, VIEWER_GRID_SIZE * 8) + self._draw_grid( + painter, rect, pen, ViewerEnum.GRID_SIZE.value * 8 + ) painter.restore() @@ -148,7 +148,9 @@ def grid_mode(self): return self._grid_mode @grid_mode.setter - def grid_mode(self, mode=VIEWER_GRID_LINES): + def grid_mode(self, mode=None): + if mode is None: + mode = ViewerEnum.GRID_DISPLAY_LINES.value self._grid_mode = mode @property diff --git a/NodeGraphQt/widgets/tab_search.py b/NodeGraphQt/widgets/tab_search.py index 5500c226..1e80af3f 100644 --- a/NodeGraphQt/widgets/tab_search.py +++ b/NodeGraphQt/widgets/tab_search.py @@ -4,7 +4,7 @@ from Qt import QtCore, QtWidgets, QtGui -from NodeGraphQt.constants import VIEWER_BG_COLOR, VIEWER_NAV_BG_COLOR +from NodeGraphQt.constants import ViewerEnum, ViewerNavEnum class TabSearchCompleter(QtWidgets.QCompleter): @@ -62,12 +62,15 @@ def __init__(self, parent=None): style_dict = { 'QLineEdit': { 'color': 'rgb({0},{1},{2})'.format(*text_color), - 'border': '1px solid rgb({0},{1},{2})' - .format(*selected_color), + 'border': '1px solid rgb({0},{1},{2})'.format( + *selected_color + ), 'border-radius': '3px', 'padding': '2px 4px', 'margin': '2px 4px 8px 4px', - 'background': 'rgb({0},{1},{2})'.format(*VIEWER_NAV_BG_COLOR), + 'background': 'rgb({0},{1},{2})'.format( + *ViewerNavEnum.BACKGROUND_COLOR.value + ), 'selection-background-color': 'rgba({0},{1},{2},200)' .format(*selected_color), } @@ -110,7 +113,9 @@ def __init__(self, node_dict=None): style_dict = { 'QMenu': { 'color': 'rgb({0},{1},{2})'.format(*text_color), - 'background-color': 'rgb({0},{1},{2})'.format(*VIEWER_BG_COLOR), + 'background-color': 'rgb({0},{1},{2})'.format( + *ViewerEnum.BACKGROUND_COLOR.value + ), 'border': '1px solid rgba({0},{1},{2},30)'.format(*text_color), 'border-radius': '3px', }, diff --git a/NodeGraphQt/widgets/viewer.py b/NodeGraphQt/widgets/viewer.py index f575b8ae..6fc3e744 100644 --- a/NodeGraphQt/widgets/viewer.py +++ b/NodeGraphQt/widgets/viewer.py @@ -6,7 +6,7 @@ from Qt import QtGui, QtCore, QtWidgets from NodeGraphQt.base.menu import BaseMenu -from NodeGraphQt.constants import IN_PORT, OUT_PORT, PIPE_LAYOUT_CURVED +from NodeGraphQt.constants import PortTypeEnum, PipeLayoutEnum from NodeGraphQt.qgraphics.node_abstract import AbstractNodeItem from NodeGraphQt.qgraphics.node_backdrop import BackdropNodeItem from NodeGraphQt.qgraphics.pipe import PipeItem, LivePipeItem @@ -71,7 +71,7 @@ def __init__(self, parent=None, undo_stack=None): self._update_scene() self._last_size = self.size() - self._pipe_layout = PIPE_LAYOUT_CURVED + self._pipe_layout = PipeLayoutEnum.CURVED.value self._detached_port = None self._start_port = None self._origin_pos = None @@ -696,7 +696,10 @@ def sceneMousePressEvent(self, event): from_port.hovered = True - attr = {IN_PORT: 'output_port', OUT_PORT: 'input_port'} + attr = { + PortTypeEnum.IN.value: 'output_port', + PortTypeEnum.OUT.value: 'input_port' + } self._detached_port = getattr(pipe, attr[from_port.port_type]) self.start_live_connection(from_port) self._LIVE_PIPE.draw_path(self._start_port, cursor_pos=pos) @@ -829,9 +832,9 @@ def start_live_connection(self, selected_port): if not selected_port: return self._start_port = selected_port - if self._start_port.type == IN_PORT: + if self._start_port.type == PortTypeEnum.IN.value: self._LIVE_PIPE.input_port = self._start_port - elif self._start_port == OUT_PORT: + elif self._start_port == PortTypeEnum.OUT.value: self._LIVE_PIPE.output_port = self._start_port self._LIVE_PIPE.setVisible(True) @@ -873,7 +876,10 @@ def acyclic_check(start_port, end_port): """ start_node = start_port.node check_nodes = [end_port.node] - io_types = {IN_PORT: 'outputs', OUT_PORT: 'inputs'} + io_types = { + PortTypeEnum.IN.value: 'outputs', + PortTypeEnum.OUT.value: 'inputs' + } while check_nodes: check_node = check_nodes.pop(0) for check_port in getattr(check_node, io_types[end_port.port_type]): diff --git a/NodeGraphQt/widgets/viewer_nav.py b/NodeGraphQt/widgets/viewer_nav.py index 89bacab9..573d611f 100644 --- a/NodeGraphQt/widgets/viewer_nav.py +++ b/NodeGraphQt/widgets/viewer_nav.py @@ -1,10 +1,6 @@ from Qt import QtWidgets, QtCore, QtGui -from NodeGraphQt.constants import ( - NODE_SEL_BORDER_COLOR, - VIEWER_NAV_BG_COLOR, - VIEWER_NAV_ITEM_COLOR -) +from NodeGraphQt.constants import NodeEnum, ViewerNavEnum class NodeNavigationDelagate(QtWidgets.QStyledItemDelegate): @@ -36,11 +32,11 @@ def paint(self, painter, option, index): painter.setRenderHint(QtGui.QPainter.Antialiasing, True) # background. - bg_color = QtGui.QColor(*VIEWER_NAV_ITEM_COLOR) + bg_color = QtGui.QColor(*ViewerNavEnum.ITEM_COLOR.value) itm_color = QtGui.QColor(80, 128, 123) if option.state & QtWidgets.QStyle.State_Selected: bg_color = bg_color.lighter(120) - itm_color = QtGui.QColor(*NODE_SEL_BORDER_COLOR) + itm_color = QtGui.QColor(*NodeEnum.SELECTED_BORDER_COLOR.value) roundness = 2.0 painter.setBrush(bg_color) @@ -109,7 +105,7 @@ def __init__(self, parent=None): # self.viewport().setAutoFillBackground(False) self.setStyleSheet( 'QListView {{border: 0px;background-color: rgb({0},{1},{2});}}' - .format(*VIEWER_NAV_BG_COLOR) + .format(*ViewerNavEnum.BACKGROUND_COLOR.value) ) self.setItemDelegate(NodeNavigationDelagate(self))