00001 #ifndef Fireworks_Core_CmsShowMainBase_h 00002 #define Fireworks_Core_CmsShowMainBase_h 00003 00004 #include "Fireworks/Core/interface/FWPhysicsObjectDesc.h" 00005 #include "Fireworks/Core/interface/FWGeometry.h" 00006 00007 #include "DataFormats/Provenance/interface/EventID.h" 00008 00009 #include <memory> 00010 #include <string> 00011 #include <cassert> 00012 #include "sigc++/signal.h" 00013 00014 #include "TTimer.h" 00015 00016 class FWEventItemsManager; 00017 class FWGUIManager; 00018 class FWJobMetadataManager; 00019 class FWNavigatorBase; 00020 00021 // replace forfard declaration with include to avoid compilation warnigs 00022 /* 00023 class FWModelChangeManager; 00024 class FWSelectionManager; 00025 class FWViewManagerManager; 00026 class CmsShowTaskExecutor; 00027 class FWChangeManager; 00028 class FWColorManager; 00029 class FWConfigurationManager; 00030 */ 00031 #include "Fireworks/Core/interface/FWColorManager.h" 00032 #include "Fireworks/Core/interface/FWModelChangeManager.h" 00033 #include "Fireworks/Core/interface/FWConfigurationManager.h" 00034 #include "Fireworks/Core/interface/FWEventItemsManager.h" 00035 #include "Fireworks/Core/interface/FWSelectionManager.h" 00036 #include "Fireworks/Core/interface/FWViewManagerManager.h" 00037 #include "Fireworks/Core/src/CmsShowTaskExecutor.h" 00038 00039 namespace fireworks { 00040 class Context; 00041 } 00042 00049 class CmsShowMainBase 00050 { 00051 public: 00052 CmsShowMainBase(); 00053 virtual ~CmsShowMainBase(); 00054 00055 FWModelChangeManager *changeManager() {return m_changeManager.get(); } 00056 FWColorManager *colorManager() { return m_colorManager.get(); } 00057 FWConfigurationManager *configurationManager() { return m_configurationManager.get(); } 00058 FWEventItemsManager *eiManager() { return m_eiManager.get(); } 00059 FWModelChangeManager *modelChangeManager() { return m_changeManager.get(); } 00060 FWSelectionManager *selectionManager() { return m_selectionManager.get(); } 00061 FWViewManagerManager *viewManager() { return m_viewManager.get(); } 00062 FWGUIManager *guiManager() 00063 { 00064 assert(m_guiManager.get() && "Call CmsShowMainBase::setup first!"); 00065 return m_guiManager.get(); 00066 } 00067 00068 CmsShowTaskExecutor *startupTasks() { return m_startupTasks.get(); } 00069 00070 void setup(FWNavigatorBase *navigator, 00071 fireworks::Context *context, 00072 FWJobMetadataManager *metadataManager); 00073 00074 void setupActions(); 00075 void setupViewManagers(); 00076 00077 // Configuration handling. 00078 void setConfigFilename(const std::string &f) { m_configFileName = f; }; 00079 const char *configFilename() const { return m_configFileName.c_str(); }; 00080 00081 void writeToConfigFile(const std::string &config); 00082 void writeToCurrentConfigFile(); 00083 void reloadConfiguration(const std::string &config); 00084 void setupConfiguration(); 00085 00086 void registerPhysicsObject(const FWPhysicsObjectDesc&iItem); 00087 void draw(); 00088 00089 // Geometry handling 00090 void loadGeometry(); 00091 void setGeometryFilename(const std::string &filename) {m_geometryFilename = filename; } 00092 const std::string &geometryFilename(void) { return m_geometryFilename; } 00093 FWGeometry& getGeom() { return m_geom; } 00094 00095 // Event navigation. 00096 void doFirstEvent(); 00097 void doPreviousEvent(); 00098 void doNextEvent(); 00099 void doLastEvent(); 00100 void goToRunEvent(edm::RunNumber_t, edm::LuminosityBlockNumber_t, edm::EventNumber_t); 00101 virtual void checkPosition() = 0; 00102 bool forward() const { return m_forward; } 00103 bool loop() const { return m_loop; } 00104 virtual void quit() = 0; 00105 00106 void setupAutoLoad(float x); 00107 void startAutoLoadTimer(); 00108 void stopAutoLoadTimer(); 00109 void setupDebugSupport(); 00110 00111 void setPlayDelay(Float_t val); 00112 void playForward(); 00113 void playBackward(); 00114 bool isPlaying() const { return m_isPlaying; } 00115 void setIsPlaying(bool value) { m_isPlaying = value; } 00116 virtual void stopPlaying() = 0; 00117 virtual void autoLoadNewEvent() = 0; 00118 00119 void setPlayLoop(); 00120 void unsetPlayLoop(); 00121 00122 void setAutoSaveAllViewsFormat(const std::string& fmt) { m_autoSaveAllViewsFormat = fmt; } 00123 00124 protected: 00125 class SignalTimer : public TTimer { 00126 public: 00127 virtual Bool_t Notify() { 00128 timeout_(); 00129 return true; 00130 } 00131 sigc::signal<void> timeout_; 00132 }; 00133 00134 void eventChangedSlot(); 00135 virtual void eventChangedImp(); 00136 00137 private: 00138 // The base class is responsible for the destruction of fwlite / FF 00139 // agnostic managers. 00140 std::auto_ptr<FWModelChangeManager> m_changeManager; 00141 std::auto_ptr<FWColorManager> m_colorManager; 00142 std::auto_ptr<FWConfigurationManager> m_configurationManager; 00143 std::auto_ptr<FWEventItemsManager> m_eiManager; 00144 std::auto_ptr<FWGUIManager> m_guiManager; 00145 std::auto_ptr<FWSelectionManager> m_selectionManager; 00146 std::auto_ptr<CmsShowTaskExecutor> m_startupTasks; 00147 std::auto_ptr<FWViewManagerManager> m_viewManager; 00148 00149 00150 00151 std::auto_ptr<SignalTimer> m_autoLoadTimer; 00152 00153 // These are actually set by the concrete implementation via the setup 00154 // method. 00155 FWNavigatorBase *m_navigatorPtr; 00156 FWJobMetadataManager *m_metadataManagerPtr; 00157 fireworks::Context *m_contextPtr; 00158 00159 void setPlayLoopImp(); 00160 void unsetPlayLoopImp(); 00161 00162 std::string m_autoSaveAllViewsFormat; 00163 bool m_autoLoadTimerRunning; 00164 bool m_forward; 00165 bool m_isPlaying; 00166 bool m_loop; 00167 Float_t m_playDelay; 00168 std::string m_configFileName; 00169 std::string m_geometryFilename; 00170 FWGeometry m_geom; 00171 }; 00172 00173 #endif