00001 #ifndef CONTROLLER_H 00002 #define CONTROLLER_H 00003 00004 #include "AbstractEditor.h" 00005 #include "AbstractEditable.h" 00006 #include "SpecificKeyIterator.h" 00007 #include <string> 00008 00010 template<class T> 00011 class VController : public VAbstractEditable, public VSpecificKeyIterator<T> 00012 { 00013 protected: 00014 T m_CurrentValue; 00015 int m_nStartFrame, m_nEndFrame; 00016 00017 public: 00018 VController() {} 00019 VController(VController<T> *p) 00020 { 00021 if (p != NULL) 00022 { 00023 m_CurrentValue = p->m_CurrentValue; 00024 m_nStartFrame = p->m_nStartFrame; 00025 m_nEndFrame = p->m_nEndFrame; 00026 } 00027 } 00028 00029 virtual VController<T>* Clone() = 0; 00030 00032 virtual T Evaluate(int nFrame)=0; 00033 00035 virtual VAbstractEditor* CreateEditor() = 0; 00036 00037 00039 void StartFrame(int nFrame) { m_nStartFrame = nFrame; } 00041 int StartFrame() const { return m_nStartFrame; } 00042 00044 void EndFrame(int nFrame) { m_nEndFrame = nFrame; } 00046 int EndFrame() const { return m_nEndFrame; } 00047 00048 00050 virtual void OnLink( ) {} 00051 00054 00055 00056 virtual int Count() const 00057 { 00058 return -1; 00059 } 00060 00061 virtual void SetFrame(int pos, int f) 00062 { 00063 } 00064 00065 virtual int GetFrame(int pos) 00066 { 00067 return -1; 00068 } 00069 00070 virtual void SetKey(int pos, T key) 00071 { 00072 } 00073 00074 virtual T GetKey(int pos) 00075 { 00076 return m_CurrentValue; 00077 } 00078 00079 virtual void AddUpdate(int f, T key) 00080 { 00081 } 00082 00083 virtual void Delete(int pos) 00084 { 00085 } 00086 00088 virtual bool SupportsDirectManipulation() const { return false;} 00089 00091 00093 virtual string Identify() const = 0; 00094 00096 virtual bool MaintainsLinkToShape(void*) const 00097 { 00098 return false; 00099 } 00100 00102 virtual void UnlinkShape(void*) {} 00103 }; 00104 00105 00106 #endif