|
Katana Plug-in APIs 0.1
|
00001 // Copyright (c) 2013 The Foundry Visionmongers Ltd. All Rights Reserved. 00002 00003 #ifndef FNRENDERERINFO_LIVERENDERCONTROLMODULE_H 00004 #define FNRENDERERINFO_LIVERENDERCONTROLMODULE_H 00005 00006 #include <FnRendererInfo/plugin/LiveRenderFilter.h> 00007 #include <FnRendererInfo/FnRendererInfoAPI.h> 00008 00009 #include <map> 00010 00011 namespace Foundry 00012 { 00013 namespace Katana 00014 { 00015 namespace RendererInfo 00016 { 00021 enum LiveRenderFilterMode 00022 { 00023 kLiveRenderFilterMode_Append, 00024 kLiveRenderFilterMode_Replace 00025 }; 00026 00027 enum LiveRenderRecookTiming 00028 { 00029 kLiveRenderRecookTiming_BeforeUpdate, 00030 kLiveRenderRecookTiming_AfterUpdate 00031 }; 00032 00033 class FNRENDERERINFO_API LiveRenderControlModule 00034 { 00035 public: 00036 LiveRenderControlModule(const std::string& name); 00037 virtual ~LiveRenderControlModule() {} 00038 00039 virtual void buildAttribute(FnAttribute::GroupBuilder& builder) const = 0; 00040 virtual void setLabel(const std::string& label); 00041 00042 protected: 00043 std::string _name; 00044 std::string _label; 00045 00046 std::string getModulePrefix() const; 00047 }; 00048 00049 class FNRENDERERINFO_API LiveRenderButtonWidget 00050 { 00051 public: 00052 LiveRenderButtonWidget() {} 00053 virtual ~LiveRenderButtonWidget() {} 00054 00055 virtual void buildWidgetAttribute(FnAttribute::GroupBuilder& builder, const std::string& prefix) const; 00056 void setIconFilename(const std::string& iconFilename); 00057 00058 private: 00059 std::string _iconFilename; 00060 }; 00061 00062 class FNRENDERERINFO_API LiveRenderUserInterfacePolicy 00063 { 00064 public: 00065 LiveRenderUserInterfacePolicy(const std::string& policy); 00066 virtual ~LiveRenderUserInterfacePolicy() {} 00067 00068 virtual void buildPolicyAttribute(FnAttribute::GroupBuilder& builder, const std::string& prefix) const; 00069 00070 private: 00071 std::string _policy; 00072 }; 00073 00074 // Concrete implementations for Live Render Control Modules 00075 class FNRENDERERINFO_API RenderConfigurationPolicyLRCM : public LiveRenderControlModule, 00076 public LiveRenderUserInterfacePolicy 00077 { 00078 public: 00079 RenderConfigurationPolicyLRCM(const std::string& name, 00080 const std::string& policy); 00081 00082 virtual ~RenderConfigurationPolicyLRCM() {} 00083 00084 virtual void buildAttribute(FnAttribute::GroupBuilder& builder) const; 00085 }; 00086 00087 class FNRENDERERINFO_API RecookLRCM : public LiveRenderControlModule 00088 { 00089 public: 00090 RecookLRCM(const std::string& name, 00091 LiveRenderRecookTiming recookTiming); 00092 00093 virtual ~RecookLRCM() {} 00094 00095 virtual void buildAttribute(FnAttribute::GroupBuilder& builder) const = 0; 00096 00097 protected: 00098 LiveRenderRecookTiming _recookTiming; 00099 }; 00100 00101 class FNRENDERERINFO_API RecookPolicyLRCM : public RecookLRCM, public LiveRenderUserInterfacePolicy 00102 { 00103 public: 00104 RecookPolicyLRCM(const std::string& name, 00105 LiveRenderRecookTiming recookTiming, 00106 const std::string& policy); 00107 00108 virtual ~RecookPolicyLRCM() {} 00109 00110 virtual void buildAttribute(FnAttribute::GroupBuilder& builder) const; 00111 }; 00112 00113 class FNRENDERERINFO_API RecookButtonLRCM : public RecookLRCM, public LiveRenderButtonWidget 00114 { 00115 public: 00116 RecookButtonLRCM(const std::string& name, 00117 LiveRenderRecookTiming recookTiming, 00118 const std::string& updateType); 00119 00120 virtual ~RecookButtonLRCM() {} 00121 00122 virtual void buildAttribute(FnAttribute::GroupBuilder& builder) const; 00123 00124 protected: 00125 std::string _updateType; 00126 }; 00127 00128 class FNRENDERERINFO_API FilteredRecookButtonLRCM : public RecookButtonLRCM 00129 { 00130 public: 00131 FilteredRecookButtonLRCM(const std::string& name, 00132 LiveRenderRecookTiming recookTiming); 00133 00134 virtual ~FilteredRecookButtonLRCM() {} 00135 00136 virtual void buildAttribute(FnAttribute::GroupBuilder& builder) const; 00137 00138 void setLiveRenderFilterMode(LiveRenderFilterMode filterMode); 00139 00140 void addLiveRenderFilter(const std::string& name, 00141 const std::string& updateType, 00142 const std::string& sgLocationType, 00143 const std::string& sgLocationOrigin, 00144 SceneGraphTraversalMode sgTraversalMode); 00145 00146 void addAttributeToRenderFilter(const std::string& name, 00147 const std::string& attributeName); 00148 00149 protected: 00150 LiveRenderFilterMode _filterMode; 00151 std::map<std::string, LiveRenderFilter> _filters; 00152 }; 00153 00154 class FNRENDERERINFO_API CommandButtonLRCM : public LiveRenderControlModule, public LiveRenderButtonWidget 00155 { 00156 public: 00157 CommandButtonLRCM(const std::string& name, 00158 const std::string& command); 00159 00160 virtual ~CommandButtonLRCM() {} 00161 00162 virtual void buildAttribute(FnAttribute::GroupBuilder& builder) const; 00163 00164 protected: 00165 std::string _command; 00166 }; 00167 00171 } 00172 } 00173 } 00174 00175 namespace FnKat = Foundry::Katana; 00176 00177 #endif
1.7.3