16 #ifndef __OP_Operator_h__
17 #define __OP_Operator_h__
48 #define ENGLISH_NAME "englishname"
49 #define VOPNET_TAB_MENU_FLAG_NAME "tabmenuflag"
77 class OP_EventScriptPathCache;
80 #define OP_FLAG_NETWORK 0x01
81 #define OP_FLAG_GENERATOR 0x02
82 #define OP_FLAG_UNORDERED 0x04
83 #define OP_FLAG_SCRIPTDEF 0x08
84 #define OP_FLAG_MANAGER 0x10
85 #define OP_FLAG_PRIMARYSUBNET 0x20
86 #define OP_FLAG_OUTPUT 0x40
87 #define OP_FLAG_EDITABLE_INPUT_DATA 0x80
90 #define OP_MAX_INPUT_LABELS 4
93 #define OP_MULTI_INPUT_MAX 9999
97 #define OP_MAX_INDIRECT_INPUTS 500
100 #define OP_MULTI_OUTPUT_MAX 9999
106 typedef std::function<OP_Ptr(OP_Network *, const char *, OP_Operator *)>
OP_Constructor;
121 virtual void saveToDialogScript(std::ostream &os)
const = 0;
149 unsigned min_sources,
150 unsigned max_sources = 9999,
153 const char **inputlabels = 0,
155 const char *tab_submenu_path = 0);
161 unsigned min_sources,
162 unsigned max_sources = 9999,
165 const char **inputlabels = 0,
167 const char *tab_submenu_path = 0);
173 const char *child_table_name,
174 unsigned min_sources,
175 unsigned max_sources = 9999,
178 const char **inputlabels = 0,
180 const char *tab_submenu_path = 0);
186 const char *child_table_name,
187 unsigned min_sources,
188 unsigned max_sources = 9999,
191 const char **inputlabels = 0,
193 const char *tab_submenu_path = 0);
198 int getNumActiveNodes()
const;
199 OP_Node *getActiveNode(
int i)
const;
200 void nodeDestroyed(
OP_Node *node);
217 void getOriginalTableAndName(
UT_String &name)
const;
220 {
return myOTLDefinition.getName(); }
227 { myOTLDefinition.getTableAndName(name); }
229 { myOTLDefinition.getTableAndName(name); }
232 {
return myOTLDefinition.getLabel(); }
233 virtual UT_Color getDefaultColor()
const;
239 virtual bool getOpHelpURL(
UT_String &url);
241 void setOpTabSubMenuPath(
const char *tab_submenu_path);
246 bool hasPotentialEditableSubNodes();
251 void getDiveTarget(
UT_String &divetarget,
252 bool allow_refresh =
true);
253 void getDescriptiveParmName(
UT_String &descrparm);
254 void getDefaultState(
UT_String &statename);
255 void getFunctionName(
UT_String &function_name);
256 void getSecondaryFunctionsNames(
269 void getHelpFileDirAndName(
UT_String & script_dir,
272 void getDefinitionSource(
UT_String &defsource)
const;
275 { ourLastHelpOp = 0; }
276 OP_Node *getDefiningNetwork()
const;
282 {
return myOTLDefinition.getIndexPath(); }
284 {
return myOTLDefinition.getIndexFile(); }
286 {
return myOTLDefinition.getIsSubnet(); }
292 {
return myVexContextType; }
294 {
return myRslContextType; }
296 {
return myOTLDefinition.getModTime(); }
298 {
return myOTLDefinition.getIsDummyDefinition(); }
302 {
return myOTLDefinition.getIsPython(); }
304 { myOTLDefinition.setIsPython(is_python); }
308 {
return myOTLDefinition.getExtraInfo(); }
310 {
return myOTLDefinition.getExtraInfoBuffer(); }
315 {
return myOTLDefinition; }
319 { myOTLLibrary = library; }
321 {
return myOTLLibrary; }
325 virtual bool hasSectionData(
const UT_StringRef &name)
const;
327 bool hasContentsSection();
331 {
return getOTLIndexFilePtr(check_timestamp).get(); }
344 virtual void clearOTLIndexFile();
350 FS_IndexFile *createOTLIndexFile(
bool reservedsectionsonly,
355 void getDefinitionSectionName(
UT_String §name)
const;
369 const char *opdef_or_oplib,
370 const char *section_name)
const;
372 const char *opdef_or_oplib,
378 void listContainedOperators(
UT_StringSet &contents_list);
382 const char *getIconName()
const;
383 void setIconName(
const char *name);
384 void setDefaultIconName();
388 {
return myOTLDefinition.getResolvedIcon(); }
393 return myOTLDefinition.resolveRelativeOpDefPath(
398 {
return myOTLDefinition.getMinInputs(); }
400 {
return myOTLDefinition.getMaxInputs(); }
408 { myOTLDefinition.setNumOrderedInputs(inputs); }
410 {
return myOTLDefinition.getNumOrderedInputs(); }
423 void setLegacyInputsMap(
const char *map);
424 void getLegacyInputsMap(
UT_String &map)
const;
432 return isManagementOp()
434 : myOTLDefinition.getMaxOutputs();
439 virtual bool hasLoadedParmTemplates()
const;
440 virtual int updateParmTemplates();
443 virtual void forceUpdateParmTemplates();
469 {
return myBaseOverrideLayout; }
472 {
return myObsoleteTemplates; }
474 { myObsoleteTemplates = tmpl; }
480 bool getOverrideLayoutParmTemplateFile(
502 bool isCustomDSO()
const;
528 return myCreatingNode;
532 return myChangingParmTemplates;
536 return myLoadingContentsSectionCount > 0;
540 myLoadingContentsSectionCount++;
544 myLoadingContentsSectionCount--;
552 return getNumActiveNodes() > 0 || myRefreshingLib;
556 OP_COMPARE_GEN_ENGLISH = 0,
557 OP_COMPARE_GEN_NAME = 1,
558 OP_COMPARE_ENGLISH = 2,
564 virtual int compareOperator(
const OP_Operator *other,
573 {
return myInputNames; }
576 {
return myInputLabels; }
579 {
return myInputReferences; }
580 virtual bool allowsInputNameEditing()
const;
585 {
return myOutputLabels; }
588 unsigned getPermissionMask()
const;
596 virtual bool wantsParametersAnimatable()
const;
599 virtual bool wantsInputEditor()
const;
602 virtual bool wantsParmOrderEditor()
const;
605 virtual bool wantsOutputNameEditor()
const;
608 virtual bool wantsParentInputs()
const;
612 {
return myInputDataEditorConfig; }
615 { myInputDataEditorConfig = config; }
616 void setInputDataEditorConfig(
621 virtual const char *getOperatorShortHelpString();
626 virtual void getOperatorSpecificInfoText(
int verbose,
638 virtual void fillInfoTreeOperatorSpecific(
UT_InfoTree &tree,
642 static int loadFromOpType(
const char *fname,
const char *savedir);
643 static int uninstallOpType(
const char *
path,
644 const char *tablename,
const char *opname,
645 const char *indexpath,
const char *indexfile);
647 static void removeHelpCardOverrides(
UT_FileUtil *fu,
648 const char *
path,
const char *tablename,
649 const char *opname,
int flags);
651 const char *
path,
const char *tablename,
652 const char *opname,
int flags);
654 const char *
path,
const char *tablename,
655 const char *opname,
int flags);
657 const char *
path,
const char *tablename,
658 const char *opname,
int flags);
660 static void getDefaultIconName(
const char *tablename,
667 const char *getTableName()
const;
683 void setDefinition(
const char *def);
685 void setEnglish(
const char *english);
689 void informOfTabMenuFlagChange();
693 virtual void setName(
const char *name);
704 void setMinInputs(
int inputs);
705 void setMaxInputs(
int inputs);
706 void setIsGenerator(
bool isgen);
710 void updatePresetInfo();
730 bool full_path =
false,
732 bool *node_deleted_by_script =
nullptr);
738 {
return myPythonModuleDicts; }
740 {
return myHasLoadedPythonModuleSection; }
741 void loadPythonModuleSection(
bool force=
false);
744 {
return myViewerStateModuleDicts; }
746 {
return myHasLoadedViewerStateModuleSection; }
747 void loadViewerStateModuleSection(
bool force=
false);
750 {
return myViewerHandleModuleDicts; }
752 {
return myHasLoadedViewerHandleModuleSection; }
753 void loadViewerHandleModuleSection(
bool force=
false);
756 void clearEventScriptPathCache();
759 void getCachedEventScriptPaths(
762 bool only_nonempty)
const;
768 {
return myIsThreadSafe; }
773 { myIsThreadSafe = is_safe; }
775 static const char *getCurrentPythonModuleKey();
776 static const OP_Operator *mapSecurityKeyToOperator(
const char *key);
777 static void registerPythonModuleKeyClient(
void *client);
778 static bool verifyPythonModuleKeyClient(
800 void notifyUpdateTemplatesSinksOfUpdate();
802 void notifyUpdateTemplatesSinksOfDelete();
805 void notifyActiveNodesOfTemplatesUpdate();
814 { myDescriptiveParmName = parm; }
816 void dirtyParmTemplatesLoaded();
818 virtual bool loadParmTemplatesSubclass();
821 bool loadAndCreateLayoutParmTemplates(
828 int base_controls_switcher_index,
829 int base_controls_insert_index,
830 int base_controls_switcher_page_num,
832 bool hide_default_parms);
873 void getContentSectionTypeNames(
UT_IStream &is,
877 static void handleDefiningNetworkChange(
OP_Node *caller,
889 bool &node_deleted_by_script,
891 void runHscriptEventScript(
893 const char *script_path,
896 const char *extra_args);
897 void runPythonEventScript(
899 const char *script_path,
901 const char *kwargs_dict,
903 const char *script_source);
905 void formatErrorSource(
912 OP_EventScriptPathCache *getEventScriptPathCache();
916 void loadOverrideLayoutParmTemplates();
918 void ensureParmTemplatesLoaded();
930 OP_EventScriptPathCache *myEventScriptPathCache;
932 bool myChangingParmTemplates;
933 bool myRefreshingLib;
934 bool myDestroyingSelf;
935 int myLoadingContentsSectionCount;
940 bool myHasLoadedPythonModuleSection;
943 bool myHasLoadedViewerStateModuleSection;
946 bool myHasLoadedViewerHandleModuleSection;
959 void updateCachedOpSectionData();
963 friend class SHOP_ScriptOperator;
967 static int ourLastHelpLevel;
969 static bool ourHelpIsHtml;
977 { removeAllTemplatesSinks(); }
981 { removeUpdateTemplatesSink(op); }
987 op->addUpdateTemplatesSink(
this);
988 myOperators.append(op, 1);
992 return myOperators.find(op) >= 0;
997 op->removeUpdateTemplatesSink(
this);
998 myOperators.findAndRemove(op);
1002 for(
int i = myOperators.entries(); i --> 0; )
1003 removeUpdateTemplatesSink(myOperators(i));
unsigned maxInputs() const
virtual ~OP_SpecificData()
unsigned minInputs() const
PRM_ScriptImports * myLayoutParmImports
int getVersion(int version)
std::function< OP_Ptr(OP_Network *, const char *, OP_Operator *)> OP_Constructor
GT_API const UT_StringHolder filename
virtual ~OP_UpdateTemplatesSink()
bool getScriptIsSubnet() const
UT_StringArray myInputLabels
const OP_OTLDefinition & getOTLDefinition() const
void setIsThreadSafe(bool is_safe)
void getTableAndName(UT_String &name) const
bool shouldPreserve() const
static void clearOperatorHelpCache()
CH_LocalVariable * myVariables
bool getScriptIsRsl() const
PRM_Template * myBaseOverrideLayout
GLsizei const GLfloat * value
GLsizei const GLchar *const * path
#define OP_FLAG_NETWORK
Flags passed to the contructor:
const UT_StringHolder & getExtraInfo() const
VEX_ContextType getVexContextType() const
int getVariableCount() const
OP_OTLDefinition myOTLDefinition
virtual void getRefreshPICommands(OP_Node *, std::ostream &)
bool isManagementOp() const
#define OP_FLAG_GENERATOR
GLboolean GLboolean GLboolean GLboolean a
void removeAllTemplatesSinks()
void removeUpdateTemplatesSink(OP_Operator *op)
bool resolveRelativeOpDefPath(UT_WorkBuffer &result, const char *path)
**But if you need a result
void setNumOrderedInputs(int inputs)
PY_EvaluationContext * getViewerHandleModuleDicts()
UT_StringArray myInputNames
UT_StringHolder myChildTableName
#define OP_FLAG_PRIMARYSUBNET
const UT_StringArray & getOutputLabels() const
bool hasLoadedViewerStateModuleSection() const
UT_Array< bool > myInputReferences
const UT_StringHolder & getName() const
virtual void updateExtraInfoBuffer(OP_ExtraInfoBuffer &b) const
bool myHasContentsSection
bool isScriptedOp() const
virtual bool getHDKHelp(UT_String &) const
const OP_ExtraInfoBuffer & getExtraInfoBuffer() const
GLint GLint GLsizei GLint GLenum GLenum type
const UT_StringHolder & getIndexFile() const
FS_IndexFile * getOTLIndexFile(bool check_timestamp=true)
#define OP_FLAG_SCRIPTDEF
virtual const OP_SpecificData * getOpSpecificData() const
static int operatorNameCompare(const OP_Operator *a, const OP_Operator *b)
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
bool getIsPrimarySubnetType() const
bool isCreatingNode() const
bool hasLoadedViewerHandleModuleSection() const
int numOrderedInputs() const
void setInputDataEditorConfigEx(const OP_InputDataEditorConfigEx &config)
PRM_Template * myLayoutParmTemplates
bool hasLoadedPythonModuleSection() const
bool isChangingParmTemplates() const
bool operator<(const GU_TetrahedronFacet &a, const GU_TetrahedronFacet &b)
UT_StringHolder myOverriddenOperatorName
PY_EvaluationContext * getViewerStateModuleDicts()
void setScriptIsPython(bool is_python)
UT_StringHolder myTabSubmenuPath
UT_StringArray myOutputLabels
time_t getModTime() const
GLuint const GLchar * name
bool isThreadSafe() const
const UT_StringArray & getInputLabels() const
Accessing operator inputs name, label, and reference flag.
RSL_ContextType getRslContextType() const
GLboolean GLboolean GLboolean b
void setDescriptiveParmName(const UT_StringHolder &parm)
void setObsoleteTemplates(PRM_Template *tmpl)
PRM_Template * getBaseOverrideLayoutParmTemplates()
void beginLoadingContentsSectionForNode()
GT_API const UT_StringHolder version
PRM_Template * myObsoleteTemplates
A map of string to various well defined value types.
void getTableAndName(UT_WorkBuffer &name) const
const UT_StringArray & getInputNames() const
Accessing operator inputs name, label, and reference flag.
GA_API const UT_StringHolder parms
Parameters for OP_Node::fillInfoTree()/OP_Node::fillInfoTreeNodeSpecific()
UT_ValArray< OP_Operator * > OP_OperatorList
SIM_API const UT_StringHolder force
virtual unsigned maxOutputs()
bool hasTemplatesSink(OP_Operator *op)
#define OP_FLAG_UNORDERED
PRM_Template * myParmTemplates
void endLoadingContentsSectionForNode()
VEX_ContextType myVexContextType
OP_OTLLibrary * getOTLLibrary()
CH_LocalVariable * getVariables() const
virtual OP_SpecificData * getOpSpecificData()
const UT_StringHolder & getIndexPath() const
bool getScriptIsVex() const
RSL_ContextType
RenderMan shader context types.
#define OP_FLAG_EDITABLE_INPUT_DATA
bool myParmTemplatesLoaded
UT_SharedPtr< PRM_ScriptPage > myOverrideLayoutParmScriptPage
bool getIsDummyDefinition() const
virtual void operatorDeleted(OP_Operator *op)
const UT_Array< bool > & getInputAreReferences() const
Accessing operator inputs name, label, and reference flag.
PRM_ScriptImports * myImports
virtual PRM_Template * getObsoleteTemplates()
UT_StringHolder getResolvedIconName() const
Get icon name with opdef:.?section references resolved.
const OP_InputDataEditorConfigEx & getInputDataEditorConfigEx() const
PY_EvaluationContext * getPythonModuleDicts()
virtual const PRM_Template * getBaseParmTemplates()
void addUpdateTemplatesSink(OP_Operator *op)
bool getScriptIsPython() const
const UT_StringHolder & getEnglish() const
OP_InputDataEditorConfigEx myInputDataEditorConfig
RSL_ContextType myRslContextType
bool hasNodeLoadingContentsSection() const
bool unorderedInputs() const
void setOTLLibrary(OP_OTLLibrary *library)
bool hasEditableInputData() const