14 #include <boost/bind.hpp> 22 #include "TEveManager.h" 23 #include "TEveWindowManager.h" 24 #include "TEveWindow.h" 47 return iFull.substr(first+1,second-first-1);
56 gROOT->SetStyle(
"Plain");
59 gEve->GetWindowManager()->Connect(
"WindowDeleted(TEveWindow*)",
"FWDetailViewManager",
this,
"eveWindowDestroyed(TEveWindow*)");
65 gEve->GetWindowManager()->Disconnect(
"WindowDeleted(TEveWindow*)",
this,
"eveWindowDestroyed(TEveWindow*)" );
69 m_eveFrame(f), m_detailView(
std::
move(v)), m_eveWindow(w) {}
76 TEveWindowSlot* slot = TEveWindow::CreateWindowMainFrame();
77 TEveCompositeFrameInMainFrame* eveFrame = (TEveCompositeFrameInMainFrame*)slot->GetEveFrame();
82 if(viewerNames.empty()) {
84 "use for object " <<
id.item()->name() << std::endl;
85 assert(!viewerNames.empty());
90 for(std::vector<std::string>::iterator it = viewerNames.begin(), itEnd = viewerNames.end(); it != itEnd; ++it) {
98 assert(!match.empty());
100 assert(
nullptr!=detailView);
102 TEveWindowSlot* ws = (TEveWindowSlot*)(eveFrame->GetEveWindow());
103 detailView->init(ws);
104 detailView->build(
id);
107 TGMainFrame* mf = (TGMainFrame*)(eveFrame->GetParent());
108 mf->SetWindowName(Form(
"%s Detail View [%d]",
id.item()->
name().c_str(),
id.
index()));
110 m_views.emplace_back(eveFrame,
std::move(detailView), eveFrame->GetEveWindow());
115 std::vector<std::string>
120 std::vector<std::string> justViewNames;
121 justViewNames.reserve(fullNames.size());
123 return justViewNames;
135 std::vector<std::string>
139 std::vector<std::string> returnValue;
141 std::map<std::string,std::vector<std::string> >::const_iterator itFind =
m_typeToViewers.find(iType);
143 return itFind->second;
146 std::set<std::string> detailViews;
151 std::inserter(detailViews,detailViews.begin()),
153 unsigned int closestMatch= 0xFFFFFFFF;
156 for(std::set<std::string>::iterator it = detailViews.begin(), itEnd=detailViews.end();
161 std::size_t
found = it->find(
"PF ");
162 if (found != std::string::npos)
175 if(firstD != std::string::npos) {
176 std::stringstream ss(it->substr(firstD));
178 while(std::getline(ss, ml,
'&')) {
180 fwLog(
fwlog::kDebug) <<
"DetailView "<< *it <<
" requires module label " << ml << std::endl;
187 returnValue.push_back(*it);
192 vn.insert(++first,
"!");
193 returnValue.push_back(vn);
198 std::vector<std::string>::iterator it;
199 it =
std::unique (returnValue.begin(), returnValue.end(), pluginComapreFunc);
219 m_views.front().m_eveWindow->DestroyWindowAndSlot();
228 if (ew ==
i->m_eveWindow)
const CategoryToInfos & categoryToInfos() const
Color_t background() const
FWColorManager * colorManager() 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
def unique(seq, keepstr=True)
bool getHidePFBuilders() const
fireworks::Context * m_context
ViewFrame(TEveCompositeFrameInMainFrame *f, std::unique_ptr< FWDetailViewBase > v, TEveWindow *w)
FWJobMetadataManager * metadataManager() const
std::vector< std::string > detailViewsFor(const FWModelId &) const
void openDetailViewFor(const FWModelId &, const std::string &)
const TClass * modelType() const
FWDetailViewManager(fireworks::Context *)
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
sigc::signal< void > colorsHaveChanged_
static PluginManager * get()
virtual ~FWDetailViewManager()
const FWEventItem * item() const
T get(const Candidate &c)
FWRepresentationInfo infoFor(const std::string &iTypeName) const override