00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __UT_Playback__
00024 #define __UT_Playback__
00025
00026 #include "UT_API.h"
00027 #include <iostream.h>
00028 #include <SYS/SYS_Types.h>
00029 #include "UT_PtrArray.h"
00030
00031 class ut_PlayCB;
00032
00033
00034 typedef void (*UT_PlayCallback)(void *, int, fpreal, fpreal);
00035
00036 class UT_API UT_Playback
00037 {
00038 public:
00039
00040 UT_Playback();
00041 ~UT_Playback();
00042
00043 enum UT_PlaybackMode {
00044 REVERSE,
00045 STOPPED,
00046 FORWARD,
00047 SCRUB,
00048 RESET
00049 };
00050
00051 void setPlaybackMode(UT_PlaybackMode mode);
00052
00053 UT_PlaybackMode getPlaybackMode() const
00054 { return myPlayback; }
00055
00056 int getStopCount() const
00057 { return myStopCount; }
00058
00059 void setRealtimeMode(bool mode)
00060 { myRealtimeMode = mode; }
00061
00062 bool getRealtimeMode() const
00063 { return myRealtimeMode; }
00064
00065 void setPlaybackRange(fpreal start,fpreal end)
00066 { myStartRange = start; myEndRange = end; }
00067
00068 void getPlaybackRange(float &start, float &end) const
00069 { start = myStartRange; end = myEndRange; }
00070
00071 bool isPlaybackReset();
00072
00073 void setCurrentFrame(fpreal frame);
00074 fpreal getCurrentFrame() { return myCurrentFrame; }
00075
00076 void resetAbsoluteFrame();
00077 unsigned long getAbsoluteFrame() { return myAbsoluteFrame; }
00078
00079
00080 void stopPlayback();
00081 void setStopCallback(void (*cb)(void *), void *data);
00082
00083 void setInterceptMode(int mode) { myInterceptMode = mode; }
00084 int getInterceptMode() const { return myInterceptMode; }
00085
00086
00087 void addPlayCallback(UT_PlayCallback cb, void *cbdata);
00088 void removePlayCallback(UT_PlayCallback cb, void *cbdata);
00089
00090 static UT_Playback *getPlayback();
00091
00092 private:
00093
00094 static UT_Playback * myPlaybackObject;
00095
00096 UT_PlaybackMode myPlayback;
00097 float myStartRange;
00098 float myEndRange;
00099 float myCurrentFrame;
00100 unsigned long myAbsoluteFrame;
00101 bool myRealtimeMode;
00102 bool myResetFlag;
00103 int myInterceptMode;
00104 UT_PtrArray<ut_PlayCB *> myPlayCallbacks;
00105
00106 int myStopCount;
00107 };
00108
00109 #endif
00110