Callbacks and Events
====================

Registering a Callback
----------------------

.. module:: Callbacks
.. autofunction:: addCallback
.. autofunction:: delCallback

Registering an Event Handler
----------------------------

.. automodule:: Utils.EventModule

Callback Types
--------------

To see a list of callback types::

    from Katana import Callbacks

    print(dir(Callbacks.Type))


Event Types
-----------

.. currentmodule:: None

To see a list of event types::

    from Katana import Utils

    print(sorted(Utils.EventModule.GetAllRegisteredEventTypes()))

.. data:: node_create

    A node is created

    :param eventID: ``hash(Node)``
    :param node: the created node
    :param nodeType: the type used to create the node
    :param nodeName: the name of the node created
    :see: :py:func:`NodegraphAPI.CreateNode`

.. data:: node_setName

    Node name changed

    :param eventID: ``hash(Node)``
    :param node: the node renamed
    :param oldName: previous node name
    :param newName: current node name
    :see: :py:func:`NodegraphAPI.Node.setName`

.. data:: node_setParent

    Indicates a change of parent node for a particular node.

    :param eventID: ``hash(Node)``
    :param node: node parented
    :param nodeName: name of the node parented
    :param oldParent: old parent node
    :param oldParentName: old parent node name
    :param newParent: new parent node
    :param newParentName: new parent node name
    :see: :py:func:`NodegraphAPI.Node.setParent`

.. data:: node_setLocked

    Node locked or unlocked

    :param eventID: ``hash(Node)``
    :param node: node locked
    :param locked: boolean state of node lock
    :see: :py:func:`NodegraphAPI.Node.setLocked`

.. data:: node_setBypassed

    Node ignored

    :param eventID: ``hash(Node)``
    :param node: node locked
    :param bypassed: boolean state of node bypass
    :see: :py:func:`NodegraphAPI.Node.setBypassed`

.. data:: node_setFloating

    Node floating state changed

    :param eventID: ``hash(Node)``
    :param node: node floated
    :see: :py:func:`NodegraphAPI.SetNodeFloating`

.. data:: node_setHidden

    Node hidden state changed

    :param eventID: ``hash(Node)``
    :param node: node hidden
    :see: :py:func:`NodegraphAPI.SetNodeHidden`

.. data:: node_setEdited

    Node edit state changed

    :param eventID: ``hash(Node)``
    :param node: node edited
    :see: :py:func:`NodegraphAPI.SetNodeEdited`

.. data:: node_setViewed

    Node view state changed

    :param eventID: ``hash(Node)``
    :param node: node viewed
    :see: :py:func:`NodegraphAPI.SetNodeViewed`

.. data:: node_setSelected

    Node selection state changed

    :param eventID: ``hash(Node)``
    :param node: node selected
    :see: :py:func:`NodegraphAPI.SetNodeSelected`

.. data:: node_attributeEditorSetActive

    AttributeEditor node active state changed

    :param eventID: ``hash(Node)``
    :param node: AttributeEditor node changed
    :see: :py:func:`NodegraphAPI.SetAttributeEditorNodeActive`

.. data:: node_setPosition

    Node moved in graph view

    :param eventID: ``hash(Node)``
    :param node: node moved
    :param nodeName: name of the node moved
    :param oldPosition: previous (x,y) position
    :param newPosition: current (x,y) position
    :see: :py:func:`NodegraphAPI.SetNodePosition`

.. data:: node_delete

    Node destroyed

    :param eventID: ``hash(Node)``
    :param node: node in a zombie state
    :param oldName: name of the node before death
    :see: :py:func:`NodegraphAPI.Node.delete`

.. data:: node_addInputPort

    Node input port added

    :param eventID: ``hash(Node)``
    :param node: node modified
    :param nodeName: name of node modified
    :param port: port object added
    :param portName: name of new port
    :see: :py:func:`NodegraphAPI.Node.addInputPort`

.. data:: node_addOutputPort

    Node output port added

    :param eventID: ``hash(Node)``
    :param node: node modified
    :param nodeName: name of node modified
    :param port: port object added
    :param portName: name of new port
    :see: :py:func:`NodegraphAPI.Node.addOutputPort`

.. data:: node_renameInputPort

    Node input port renamed

    :param eventID: ``hash(Node)``
    :param node: node modified
    :param nodeName: name of node modified
    :param oldPortName: old name of renamed input port
    :param newPortName: new name of renamed input port
    :see: :py:func:`NodegraphAPI.Node.renameInputPort`

.. data:: node_renameOutputPort

    Node output port renamed

    :param eventID: ``hash(Node)``
    :param node: node modified
    :param nodeName: name of node modified
    :param oldPortName: old name of renamed output port
    :param newPortName: new name of renamed output port
    :see: :py:func:`NodegraphAPI.Node.renameOutputPort`

.. data:: node_removeInputPort

    Node input port removed

    :param eventID: ``hash(Node)``
    :param node: node modified
    :param nodeName: name of node modified
    :param port: port object removed
    :param portName: name of removed port
    :see: :py:func:`NodegraphAPI.Node.removeInputPort`

.. data:: node_removeOutputPort

    Node output port removed

    :param eventID: ``hash(Node)``
    :param node: node modified
    :param nodeName: name of node modified
    :param port: port object removed
    :param portName: name of removed port
    :see: :py:func:`NodegraphAPI.Node.removeOutputPort`

.. data:: node_tagFlavor

    Node flavor changed

    :param eventID: ``0``
    :param flavor: the flavor that was added, removed, or cleared
    :see: :py:func:`NodegraphAPI.AddNodeFlavor`,
        :py:func:`NodegraphAPI.RemoveNodeFlavor`,
        :py:func:`NodegraphAPI.ClearFlavorNodes`

.. data:: parameter_setValue

    Parameter's value changed (during continuous manipulation)

    :param eventID: ``hash(Node)``
    :param param: parameter changed
    :param node: parameter node
    :see: :py:func:`NodegraphAPI.Parameter.setValue`

.. data:: parameter_finalizeValue

    Parameter's value changed (on pen up)

    :param eventID: ``hash(Node)``
    :param param: parameter changed
    :param node: parameter node
    :see: :py:func:`NodegraphAPI.Parameter.setValue`

.. data:: parameter_setKey

    Key about to be added to parameter curve

    :param eventID: ``hash(Node)``
    :param param: parameter changed
    :param keyTime: time of keyframe added
    :param node: parameter node
    :see: :py:func:`NodegraphAPI.Parameter.setKey`

.. data:: parameter_removeKey

    Key about to be removed from parameter curve

    :param eventID: ``hash(Node)``
    :param param: parameter changed
    :param keyTime: time of keyframe changed
    :param node: parameter node
    :see: :py:func:`NodegraphAPI.Parameter.removeKey`

.. data:: parameter_removeKeys

    Keys about to be removed from parameter curve

    :param eventID: ``hash(Node)``
    :param param: parameter changed
    :param node: parameter node
    :see: :py:func:`NodegraphAPI.Parameter.removeKeys`

.. data:: parameter_moveKeys

    Keys about to be moved on parameter curve

    :param eventID: ``hash(Node)``
    :param param: parameter changed
    :param node: parameter node
    :see: :py:func:`NodegraphAPI.Parameter.moveKeys`

.. data:: parameter_createChild

    Child parameter created

    :param eventID: ``hash(Node)``
    :param param: the parent parameter under which a child parameter has been created
    :param paramName: the full name of the parent parameter
    :param node: the node that contains the parent parameter and its new child
    :param childParam: the child parameter that has been created
    :param element: a PyXmlIO element representing the new child parameter
    :param index: the index of the child parameter within its parent parameter
    :see: :py:func:`NodegraphAPI.Parameter.createChildGroup`,
        :py:func:`NodegraphAPI.Parameter.createChildNumber`,
        :py:func:`NodegraphAPI.Parameter.createChildNumberArray`,
        :py:func:`NodegraphAPI.Parameter.createChildString`,
        :py:func:`NodegraphAPI.Parameter.createChildStringArray`,
        :py:func:`NodegraphAPI.Parameter.createChildXmlIO`,

.. data:: parameter_deleteChild

    Child parameter deleted

    :param eventID: ``hash(Node)``
    :param param: the parent parameter under which a child parameter has been deleted
    :param paramName: the full name of the parent parameter
    :param node: the node that contains the parent parameter
    :param childParam: the child parameter that has been deleted
    :param element: a PyXmlIO element representing the deleted child parameter
    :param childName: the name of the deleted child parameter
    :param index: the previous index of the child parameter within its parent parameter
    :see: :py:func:`NodegraphAPI.Parameter.deleteChild`

.. data:: parameter_replaceXML

    Parameter hierarchy changed

    :param eventID: ``hash(Node)``
    :param param: root parameter changed
    :param paramName: root parameter name
    :param oldXML: previous XML representation
    :param newXML: current XML representation
    :param node: parameter node
    :see: :py:func:`NodegraphAPI.Parameter.replaceXML`,
        :py:func:`NodegraphAPI.Parameter.replaceXmlIO`

.. data:: parameter_setAutoKeyAll

    Global auto-key state changed

    :param eventID: ``0``
    :see: :py:func:`NodegraphAPI.SetAutoKeyAll`

.. data:: port_connect

    Ports of nodes have been connected

    :param eventID: ``hash(Port)``
    :param portA: The output port that was connected to an input port.
    :param nodeNameA: The name of the node that contains the output port.
    :param portNameA: The name of the output port that was connected.
    :param portB: The input port that was connected to the output port.
    :param nodeNameB: The name of the node that contains the input port.
    :param portNameB: The name of the input port that was connected.
    :param oldSourceNode: The name of a node that contained the output port that was previously connected to the input port, if any.
    :param oldSourcePort: The name of an output port that was previously connected to the input port, if any.
    :see: :py:func:`NodegraphAPI.Port.connect`

.. data:: port_disconnect

    Ports of nodes have been disconnected

    :param eventID: ``hash(Port)``
    :param portA: The output port that was connected to an input port.
    :param nodeNameA: The name of the node that contains the output port.
    :param portNameA: The name of the output port that was connected.
    :param portB: The input port that was connected to the output port.
    :param nodeNameB: The name of the node that contains the input port.
    :param portNameB: The name of the input port that was connected.
    :param isPortASendPort: True if the upstream port A is a send port on the
        inside of a GroupNode, otherwise False.
    :param isPortBReturnPort: True if the downstream port B is a return port on
        the inside of a GroupNode, otherwise False.
    :param nodeAShapeAttrs: The node shape attributes of the node on which 
        port A belongs.
    :param nodeBShapeAttrs: The node shape attributes of the node on which 
        port B belongs.
    :see: :py:func:`NodegraphAPI.Port.disconnect`

.. data:: nodegraph_changed

    Called once per idle when any action has changed the node graph.

    :param eventID: ``0``

.. data:: nodegraph_setRootNode

    A new root node has been set

    :param eventID: ``0``
    :see: :py:func:`NodegraphAPI.SetRootNode`

.. data:: nodegraph_loadBegin

    About to load nodes from a node graph document.

    :param eventID: ``0``
    :see: :py:func:`NodegraphAPI.ParseNodegraphXmlIO`,
        :py:func:`NodegraphAPI.ParseNodesXmlIO`

.. data:: nodegraph_loadEnd

    Finished loading nodes from a node graph document.

    :param eventID: ``0``
    :see: :py:func:`NodegraphAPI.ParseNodegraphXmlIO`,
        :py:func:`NodegraphAPI.ParseNodesXmlIO`

.. data:: nodegraph_setCurrentTime

    Current frame changed.

    :param eventID: ``0``
    :param currentTime: current frame
    :see: :py:func:`NodegraphAPI.SetCurrentTime`

.. data:: nodegraph_setTimeRange

    inTime and outTime frames changed.

    :param eventID: ``0``
    :see: :py:func:`NodegraphAPI.SetInTime`, :py:func:`NodegraphAPI.SetOutTime`

.. data:: nodegraph_setWorkingTimeRange

    workingInTime and workingOutTime frames changed.

    :param eventID: ``0``
    :see: :py:func:`NodegraphAPI.SetWorkingInTime`,
        :py:func:`NodegraphAPI.SetWorkingOutTime`

.. data:: nodegraph_setTimeIncrement

    Time increment changed.

    :param eventID: ``0``
    :see: :py:func:`NodegraphAPI.SetTimeIncrement`

.. data:: nodegraph_registerType

    New node type registered

    :param eventID: ``0``
    :param type: Name of the newly registered type
    :see: :py:func:`NodegraphAPI.RegisterPythonNodeFactory`,
        :py:func:`NodegraphAPI.RegisterPythonNodeType`,`
        :py:func:`NodegraphAPI.RegisterPythonGroupType`,`


.. data:: event_idle

    Sent when each call to :func:`Utils.EventModule.ProcessEvents` is finished.