Katana Plug-in APIs 0.1

LiveRenderControlModule.h

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
 All Classes Functions Variables Typedefs Enumerations Enumerator