00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __PRM_Utils_h__
00018 #define __PRM_Utils_h__
00019
00020 #include "PRM_API.h"
00021 #include <UT/UT_ErrorManager.h>
00022 #include <UT/UT_Thread.h>
00023 #include <EXPR/EX_Error.h>
00024
00025 class UT_BitArray;
00026 class PRM_ParmList;
00027 class PRM_Parm;
00028
00029
00030 class PRM_API PRM_Utils
00031 {
00032 public:
00033 typedef void (*TraverseParmFunc)(const PRM_ParmList &, PRM_Parm *,
00034 int, void *data);
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 static int traverseFolder(PRM_ParmList &parmlist, PRM_Parm *switcher,
00050 int folder, int folder_start_index,
00051 bool traverse_multi_instances,
00052 TraverseParmFunc function, void *data);
00053
00054
00055
00056 static void flagMultiParmInstances(const PRM_ParmList &parmlist,
00057 PRM_Parm *multi, UT_BitArray &flags);
00058 };
00059
00060
00061
00062 class PRM_API PRM_AutoBlockErrors
00063 {
00064 public:
00065 PRM_AutoBlockErrors(int thread = -1)
00066 {
00067 if (thread < 0)
00068 myThread = UTgetSTID();
00069 else
00070 myThread = thread;
00071 myErrNo = ev_GetErrNo(myThread);
00072 UTpushErrorManager();
00073 }
00074 ~PRM_AutoBlockErrors()
00075 {
00076 UTpopErrorManager();
00077 ev_SetErrNo(myErrNo, myThread);
00078 }
00079
00080 private:
00081 int myThread;
00082 int myErrNo;
00083 };
00084
00085
00086 #endif