diff --git a/DDEve/include/DDEve/Display.h b/DDEve/include/DDEve/Display.h index 6442f74cefb9ecf8aedd0881b9c5de24e46adcbd..19d82581ffe7c4d06174abf3383a71f9f8373ffd 100644 --- a/DDEve/include/DDEve/Display.h +++ b/DDEve/include/DDEve/Display.h @@ -101,6 +101,8 @@ namespace DD4hep { int m_visLevel; /// Load level for the eve geometry int m_loadLevel; + /// Name of the event handler plugin + std::string m_eventHandlerName; public: /// Standard constructor Display(TEveManager* eve); @@ -117,6 +119,10 @@ namespace DD4hep { void setVisLevel(int new_level) { m_visLevel = new_level; } /// Set Eve Geometry load level in manager (either from XML or BEFORE XML file was loaded) void setLoadLevel(int new_level) { m_loadLevel = new_level; } + /// Set Event Handler Plugin name + void setEventHandlerName(std::string eventHandlerName) {m_eventHandlerName = eventHandlerName;} + /// Get Event Handler Plugin name + std::string getEventHandlerName() {return m_eventHandlerName;} /// Access to X-client TGClient& client() const; diff --git a/DDEve/src/Display.cpp b/DDEve/src/Display.cpp index 71a0256ae8bb3440d8eb802e0b59797fdcebcc05..48fc9550713c9373e83c4b9851f48ae9b830ab79 100644 --- a/DDEve/src/Display.cpp +++ b/DDEve/src/Display.cpp @@ -62,7 +62,7 @@ using namespace DD4hep::Geometry; ClassImp(Display) namespace DD4hep { - void EveDisplay(const char* xmlConfig = 0) { + void EveDisplay(const char* xmlConfig = 0, const char* eventFileName = 0) { Display* display = new Display(TEveManager::Create(true,"VI")); if ( xmlConfig != 0 ) { char text[PATH_MAX]; @@ -79,6 +79,9 @@ namespace DD4hep { display->ChooseGeometry(); //display->LoadXML("file:../DD4hep/examples/CLICSiD/compact/DDEve.xml"); } + if (eventFileName != 0) { + display->eventHandler().Open(display->getEventHandlerName(),eventFileName); + } } } @@ -157,7 +160,9 @@ void Display::LoadXML(const char* xmlFile) { if ( m_dd4Menu && !m_geoTopics.empty() ) { m_dd4Menu->OnGeometryLoaded(); } + m_eve->FullRedraw3D(kTRUE); // Reset camera + BuildMenus(m_eve->GetBrowser()->GetMenuBar()); } /// Load geometry from compact xml file @@ -168,7 +173,6 @@ void Display::LoadGeometryRoot(const char* /* rootFile */) { /// Load geometry with panel void Display::ChooseGeometry() { m_dd4Menu->OnLoadXML(0,0); - BuildMenus(m_eve->GetBrowser()->GetMenuBar()); } /// Access to geometry hub diff --git a/DDEve/src/DisplayConfigurationParser.cpp b/DDEve/src/DisplayConfigurationParser.cpp index 5f4117533346c9ea7922f043f0066dba2af9a521..3dd5a87b9f27e69a2d1d04281d22a15cd2394ad0 100644 --- a/DDEve/src/DisplayConfigurationParser.cpp +++ b/DDEve/src/DisplayConfigurationParser.cpp @@ -264,6 +264,7 @@ template <> void Converter<include>::operator()(xml_h e) const { template <> void Converter<display>::operator()(xml_h e) const { Display* d = (Display*)param; if ( e.hasAttr(_Unicode(visLevel)) ) d->setVisLevel(e.attr<int>(_Unicode(visLevel))); + if ( e.hasAttr(_Unicode(eventHandler)) ) d->setEventHandlerName(e.attr<std::string>(_Unicode(eventHandler))); if ( e.hasAttr(_Unicode(loadLevel)) ) d->setLoadLevel(e.attr<int>(_Unicode(loadLevel))); } diff --git a/DDEve/src/EventControl.cpp b/DDEve/src/EventControl.cpp index 0cbd788713576238d33681f8f4440b0f87e1b04a..88c1000485c3ba2cae42ec2661b606fdd69f0119 100644 --- a/DDEve/src/EventControl.cpp +++ b/DDEve/src/EventControl.cpp @@ -82,7 +82,7 @@ bool EventControl::Open() { std::string fname = m_display->OpenEventFileDialog("."); if ( !fname.empty() ) { - return m_display->eventHandler().Open("",fname); + return m_display->eventHandler().Open(m_display->getEventHandlerName(),fname); } return false; } diff --git a/DDEve/src/GenericEventHandler.cpp b/DDEve/src/GenericEventHandler.cpp index 1e4b2a59cfbf912fc021197f7dd58f22915a179a..a5e9e3dcdb5b5702fd1babcc800f4050bb2c1089 100644 --- a/DDEve/src/GenericEventHandler.cpp +++ b/DDEve/src/GenericEventHandler.cpp @@ -106,7 +106,12 @@ bool GenericEventHandler::Open(const string& file_type, const string& file_name) m_hasEvent = false; try { deletePtr(m_current); - if ( idx != string::npos ) { + // prefer event handler configured in xml + if ( file_type.find("FCC") != string::npos ) { + m_current = (EventHandler*)PluginService::Create<void*>("DDEve_FCCEventHandler",(const char*)0); + } + // fall back to defaults according to file ending + else if ( idx != string::npos ) { m_current = (EventHandler*)PluginService::Create<void*>("DDEve_LCIOEventHandler",(const char*)0); } else if ( idr != string::npos ) {