15 #include <boost/bind.hpp>
22 #include "TEveManager.h"
23 #include "TEveWindowManager.h"
24 #include "TEveWindow.h"
43 return iFull.substr(first+1,second-first-1);
50 m_colorManager(colMng)
53 gROOT->SetStyle(
"Plain");
56 gEve->GetWindowManager()->Connect(
"WindowDeleted(TEveWindow*)",
"FWDetailViewManager",
this,
"eveWindowDestroyed(TEveWindow*)");
62 gEve->GetWindowManager()->Disconnect(
"WindowDeleted(TEveWindow*)",
this,
"eveWindowDestroyed(TEveWindow*)" );
68 TEveWindowSlot* slot = TEveWindow::CreateWindowMainFrame();
69 TEveCompositeFrameInMainFrame* eveFrame = (TEveCompositeFrameInMainFrame*)slot->GetEveFrame();
72 std::string typeName = Reflex::Type::ByTypeInfo(*(
id.item()->modelType()->GetTypeInfo())).Name(Reflex::SCOPED);
74 if(0==viewerNames.size()) {
76 "use for object " <<
id.item()->name() << std::endl;
77 assert(0!=viewerNames.size());
82 for(std::vector<std::string>::iterator it = viewerNames.begin(), itEnd = viewerNames.end(); it != itEnd; ++it) {
90 assert(match.size() != 0);
92 assert(0!=detailView);
94 TEveWindowSlot* ws = (TEveWindowSlot*)(eveFrame->GetEveWindow());
96 detailView->build(
id);
99 TGMainFrame* mf = (TGMainFrame*)(eveFrame->GetParent());
100 mf->SetWindowName(Form(
"%s Detail View [%d]",
id.item()->
name().c_str(),
id.
index()));
102 m_views.push_back(
ViewFrame(eveFrame, detailView, eveFrame->GetEveWindow()));
107 std::vector<std::string>
110 std::string typeName = Reflex::Type::ByTypeInfo(*(iId.
item()->
modelType()->GetTypeInfo())).Name(Reflex::SCOPED);
112 std::vector<std::string> justViewNames;
113 justViewNames.reserve(fullNames.size());
115 return justViewNames;
118 std::vector<std::string>
121 std::vector<std::string> returnValue;
123 std::map<std::string,std::vector<std::string> >::const_iterator itFind =
m_typeToViewers.find(iType);
125 return itFind->second;
128 std::set<std::string> detailViews;
133 std::inserter(detailViews,detailViews.begin()),
135 unsigned int closestMatch= 0xFFFFFFFF;
136 for(std::set<std::string>::iterator it = detailViews.begin(), itEnd=detailViews.end();
140 std::string
type = it->substr(0,first);
150 returnValue.push_back(*it);
170 m_views.front().m_eveWindow->DestroyWindowAndSlot();
179 if (ew ==
i->m_eveWindow)
182 delete i->m_detailView;
FWDetailViewManager(FWColorManager *)
virtual FWRepresentationInfo infoFor(const std::string &iTypeName) const
Color_t background() const
vViews_t::iterator vViews_i
static std::string viewNameFrom(const std::string &iFull)
std::vector< std::string > findViewersFor(const std::string &) const
unsigned int proximity() const
measures how 'close' this representation is to the type in question, the large the number the farther...
void eveWindowDestroyed(TEveWindow *)
U second(std::pair< T, U > const &p)
std::map< std::string, std::vector< std::string > > m_typeToViewers
FWColorManager * m_colorManager
std::vector< std::string > detailViewsFor(const FWModelId &) const
void openDetailViewFor(const FWModelId &, const std::string &)
const TClass * modelType() const
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
sigc::signal< void > colorsHaveChanged_
virtual ~FWDetailViewManager()
const FWEventItem * item() const
T get(const Candidate &c)