HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
OP_Value.h
Go to the documentation of this file.
1 /*
2  * PROPRIETARY INFORMATION. This software is proprietary to
3  * Side Effects Software Inc., and is not to be reproduced,
4  * transmitted, or disclosed in any way without written permission.
5  *
6  * NAME: OP library (C++)
7  *
8  * COMMENTS: Value for expressing interest in a node...
9  *
10  */
11 
12 #ifndef __OP_Value_h__
13 #define __OP_Value_h__
14 
15 #include "OP_API.h"
16 #include <UT/UT_ValArray.h>
17 #include <UT/UT_WorkBuffer.h>
18 
19 class OP_Node;
20 class OP_EventHandler;
21 
22 typedef enum
23 {
24  OP_CHILD_CREATED, // A new node has been created -- DATA: ptr to child
25  OP_CHILD_REORDERED, // A child's index has been changed
26  // -- DATA: child ptr
27 
28  OP_NODE_DELETED, // This node was deleted
29  OP_CHILD_DELETED, // Let the network know about the above.
30 
31  OP_CHILD_UNSTOWED, // These are used by OH to signal that an OH gadget
32  OP_NODE_STOWED, // is stow/unstowed and should have interests added
33  // or removed appropriately.
34  OP_NODE_HIDDEN, // Almost the same as a STOWED. UNSTOW is opposite.
35  OP_CHILD_REVEALED, // Almost the same as a UNSTOWED. STOW is opposite.
36  OP_CHILD_HIDDEN, // Let network know about the above.
37 
38  OP_CHILD_SWITCHED, // Change to networks current, display or render node.
39 
40  OP_NAME_CHANGED, // This node's name changed
41 
42  // these five need to be propagated to dependents so that we can recook
43  OP_INPUT_REWIRED, // One of this node's inputs was connected to
44  // a different node -- DATA: input index
45  OP_INPUT_CHANGED, // One of the input nodes has changed
46  OP_FLAG_CHANGED, // Something like the display flag changed
47 
48 
49  // of the following three events, each implies the preceeding ones
50  OP_PARM_UICHANGED, // A parameter's appearance changed
51  // -- DATA: parm index
52  OP_PARM_CHANGED, // A parameter's value changed -- DATA: parm index
53  OP_PARM_ANIMATED, // One of the node's channels has changed in a drastic
54  // way eg keyframe added/removed -- DATA: parm index
55  OP_PARM_CHANNELS, // A channel has been added, deleted, or renamed
56  // -- DATA: parm index
57 
58  OP_UI_CHANGED, // for example error status, current, selected
59  // -- DATA: OP_UIChangeType
60  OP_UI_CURRENT_CHANGED, // The current node has been set when emitted
61  // from OPgetDirector() -- DATA: node pointer
62  OP_UI_EDIT_CURRENT_CHANGED, // The current node has been set when emitted
63  // from OPgetDirector() and is meant to be
64  // edited -- DATA: node pointer
65  OP_UI_EDIT_NETWORK, // Our picked network has changed.
66  // This is only emitted from OP_Director
67  // -- DATA: network node pointer
68  OP_UI_MOVED, // location change
69  OP_OUTPUT_CHANGED, // the output of a node has changed
70  OP_OUTPUT_CHANGED_FOR_COOK_TYPE, // the output of a node has changed as the
71  // node changed from cooking for render to
72  // cooking for display or vice versa.
73  // This change, unlike OP_OUTPUT_CHANGED,
74  // is not propagated to dependents!
75  // -- DATA: 0 = cooked for display
76  // -- DATA: 1 = cooked for render
77  OP_GROUPLIST_CHANGED,// The network group list or selection has changed
78  OP_INDIRECT_CREATED,// An OP_IndirectInput object was added to the net
79  OP_INDIRECT_DELETED,// or deleted from the net.
80 
81  OP_COOKING_CHANGED, // current status of cook state (for performance)
82 
83  OP_GROUP_CREATED, // An OP_Group object was added to the net
84  OP_GROUP_DELETED, // or deleted from the net.
85  OP_GROUP_CHANGED, // An OP_Group was renamed or its membership
86  // changed.
87 
88  OP_GEOSELECTION_CHANGED, // The geometry's selection changed
89 
90  // These CHGROUP events are only triggered on the OP_Director
91  // data is (CH_Group*)
92  OP_CHGROUP_CREATED, // Channel group added (must be first)
93  OP_CHGROUP_REMOVED, // Channel group removed
94  OP_CHGROUP_RENAMED, // Channel group renamed
95  OP_CHGROUP_MOVED, // Channel group changed index
96  OP_CHGROUP_SELCHANGED, // Group selection changed
97  OP_CHGROUP_CURCHANGED, // Current group changed
98  OP_CHGROUP_CHANGED, // Channel group membership has changed
99  // (stays last)
100 
101  OP_INPUT_RENAMED, // One of our inputs was renamed
102 
103  OP_CHSCOPE_CHANGED, // Channel scope has changed (only OP_Director)
104  OP_CHSCOPEPIN_CHANGED, // Channel selection has changed
105  OP_CHSCOPESELECTION_CHANGED,// Channel selection has changed
106  // (only OP_Director)
107  OP_CHSCOPE_DISPLAY_CHANGED, // Channel selection has changed
108  // (only OP_Director)
109 
110  OP_CHILD_PICK_CHANGED, // A selection has changed for our children
111 
112  OP_NODE_PREDELETE, // This node will be deleted
113 
114  OP_NETWORKBOX_CREATED, // A network box was created within the network
115  // -- DATA: OP_NetworkBox*
116  OP_NETWORKBOX_DELETED, // A network box was removed from the network
117  // -- DATA: OP_NetworkBox*
118  OP_NETWORKBOX_CHANGED, // The contents of a network box have changed
119  // -- DATA: OP_NetworkBox*
120  OP_NETWORKBOX_STOWED, // An OP_NetworkBox has been stowed, similar to
121  // OP_NODE_STOWED
122 
123  OP_SPAREPARM_MODIFIED, // A Spare parm was created or deleted.
124 
125  OP_MULTIPARM_MODIFIED, // A Multiparm instance was created or deleted.
126 
127  OP_PARM_ENABLE_CHANGED, // Parm's enable state changed.
128  // -- DATA: parm index
129 
130  OP_POSTIT_NOTE_CREATED, // A post it note was created within the network
131  OP_POSTIT_NOTE_DELETED, // A post it note was removed from the network
132  OP_POSTIT_NOTE_CHANGED, // The contents of a post it note have changed
133  OP_POSTIT_NOTE_STOWED, // An OP_PostIt has been stowed, similar to
134  // OP_NODE_STOWED
136 
137  OP_UI_REFRESH_EXPOSED, // Send after an event that could have changed
138  // exposed flags in a network.
139 
140  OP_PARM_VISIBLE_CHANGED, // Parms' visible state changed.
141  // -- DATA: parm index
142 
144 
145 } OP_EventType;
146 
147 typedef void (*OP_EventMethod)(OP_Node *caller, void *callee,
148  OP_EventType type, void *data);
149 
150 OP_API extern const char *OPeventToString(OP_EventType type);
151 
152 // UTformat support.
153 static inline size_t
154 format(char *buffer, size_t buffer_size, const OP_EventType &v)
155 {
156  UT_WorkBuffer eventtext;
157  eventtext.sprintf("%s (%d)", OPeventToString(v), (int)(v));
158  if (!buffer)
159  return eventtext.length();
160  else
161  {
162  size_t len = std::min(size_t(eventtext.length()), buffer_size);
163  ::memcpy(buffer, eventtext.buffer(), len);
164  return len;
165  }
166 }
168 {
169 public:
170  OP_Value(OP_Node *owner);
171  ~OP_Value();
172 
173  int hasOpInterest (void *data, OP_EventMethod eventHandler) const;
174  void addOpInterest (void *data, OP_EventMethod eventHandler);
175  void removeOpInterest(void *data, OP_EventMethod eventHandler);
176  void changed (OP_EventType type, void *data=0) const;
177 
178  unsigned numInterests() const;
179 
180  int64 getMemoryUsage(bool inclusive) const;
181 
182 private:
184  OP_Node *myOwner;
185 };
186 
187 #endif
const hboost::disable_if_c< VecTraits< T >::IsVec, T >::type & min(const T &a, const T &b)
Definition: Composite.h:128
const GLdouble * v
Definition: glcorearb.h:836
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
GLuint buffer
Definition: glcorearb.h:659
long long int64
Definition: SYS_Types.h:100
void(* OP_EventMethod)(OP_Node *caller, void *callee, OP_EventType type, void *data)
Definition: OP_Value.h:147
GLboolean * data
Definition: glcorearb.h:130
int sprintf(const char *fmt,...) SYS_PRINTF_CHECK_ATTRIBUTE(2
GLint GLint GLsizei GLint GLenum format
Definition: glcorearb.h:107
#define OP_API
Definition: OP_API.h:10
png_infop png_bytep png_size_t buffer_size
Definition: png.h:2124
OP_EventType
Definition: OP_Value.h:22
const char * buffer() const
GLint GLint GLsizei GLint GLenum GLenum type
Definition: glcorearb.h:107
exint length() const
OP_API const char * OPeventToString(OP_EventType type)