CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Protected Attributes | Private Types | Private Member Functions | Private Attributes
FWDetailViewManager Class Reference

#include <Fireworks/Core/interface/FWDetailViewManager.h>

Classes

struct  ViewFrame
 

Public Member Functions

void colorsChanged ()
 
std::vector< std::string > detailViewsFor (const FWModelId &) const
 
void eveWindowDestroyed (TEveWindow *)
 
 FWDetailViewManager (fireworks::Context *)
 
void newEventCallback ()
 
void openDetailViewFor (const FWModelId &, const std::string &)
 
virtual ~FWDetailViewManager ()
 

Protected Attributes

fireworks::Contextm_context
 

Private Types

typedef vViews_t::iterator vViews_i
 
typedef std::vector< ViewFramevViews_t
 

Private Member Functions

std::vector< std::string > findViewersFor (const std::string &) const
 
 FWDetailViewManager (const FWDetailViewManager &)=delete
 
const FWDetailViewManageroperator= (const FWDetailViewManager &)=delete
 

Private Attributes

std::map< std::string, std::vector< std::string > > m_typeToViewers
 
vViews_t m_views
 

Detailed Description

Description: <one line="" class="" summary>="">

Usage: <usage>

Definition at line 36 of file FWDetailViewManager.h.

Member Typedef Documentation

typedef vViews_t::iterator FWDetailViewManager::vViews_i
private

Definition at line 74 of file FWDetailViewManager.h.

typedef std::vector<ViewFrame> FWDetailViewManager::vViews_t
private

Definition at line 73 of file FWDetailViewManager.h.

Constructor & Destructor Documentation

FWDetailViewManager::FWDetailViewManager ( fireworks::Context iCtx)

Definition at line 52 of file FWDetailViewManager.cc.

References fireworks::Context::colorManager(), colorsChanged(), FWColorManager::colorsHaveChanged_, and m_context.

52  :
53  m_context(iCtx)
54 {
55  // force white background for all embedded canvases
56  gROOT->SetStyle("Plain");
57 
59  gEve->GetWindowManager()->Connect( "WindowDeleted(TEveWindow*)", "FWDetailViewManager", this, "eveWindowDestroyed(TEveWindow*)");
60 }
FWColorManager * colorManager() const
Definition: Context.h:65
fireworks::Context * m_context
sigc::signal< void > colorsHaveChanged_
FWDetailViewManager::~FWDetailViewManager ( )
virtual

Definition at line 62 of file FWDetailViewManager.cc.

References newEventCallback().

63 {
65  gEve->GetWindowManager()->Disconnect("WindowDeleted(TEveWindow*)", this, "eveWindowDestroyed(TEveWindow*)" );
66 }
FWDetailViewManager::FWDetailViewManager ( const FWDetailViewManager )
privatedelete

Member Function Documentation

void FWDetailViewManager::colorsChanged ( )

Definition at line 207 of file FWDetailViewManager.cc.

References FWColorManager::background(), fireworks::Context::colorManager(), mps_fire::i, m_context, and m_views.

Referenced by FWDetailViewManager().

208 {
209  for (vViews_i i = m_views.begin(); i != m_views.end(); ++i)
210  (*i).m_detailView->setBackgroundColor(m_context->colorManager()->background());
211 }
Color_t background() const
FWColorManager * colorManager() const
Definition: Context.h:65
vViews_t::iterator vViews_i
fireworks::Context * m_context
std::vector< std::string > FWDetailViewManager::detailViewsFor ( const FWModelId iId) const

Definition at line 116 of file FWDetailViewManager.cc.

References a, b, findViewersFor(), FWModelId::item(), FWEventItem::modelType(), edm::TypeWithDict::name(), AlCaHLTBitMon_QueryRunRegistry::string, create_public_lumi_plots::transform, and viewNameFrom().

Referenced by FWModelContextMenuHandler::chosenItem(), CmsShowModelPopup::clicked(), CmsShowModelPopup::fillModelPopup(), CmsShowModelPopup::openDetailedView(), and FWModelContextMenuHandler::showSelectedModelContext().

117 {
118  std::string typeName = edm::TypeWithDict(*(iId.item()->modelType()->GetTypeInfo())).name();
119  std::vector<std::string> fullNames = findViewersFor(typeName);
120  std::vector<std::string> justViewNames;
121  justViewNames.reserve(fullNames.size());
122  std::transform(fullNames.begin(),fullNames.end(),std::back_inserter(justViewNames),&viewNameFrom);
123  return justViewNames;
124 }
static std::string viewNameFrom(const std::string &iFull)
std::vector< std::string > findViewersFor(const std::string &) const
std::string name() const
const TClass * modelType() const
Definition: FWEventItem.cc:566
const FWEventItem * item() const
Definition: FWModelId.h:44
void FWDetailViewManager::eveWindowDestroyed ( TEveWindow *  ew)

Definition at line 224 of file FWDetailViewManager.cc.

References mps_fire::i, and m_views.

225 {
226  for (vViews_i i = m_views.begin(); i != m_views.end(); ++i)
227  {
228  if (ew == i->m_eveWindow)
229  {
230  // printf("========================== delete %s \n", ew->GetElementName());
231  m_views.erase(i);
232  break;
233  }
234  }
235 }
vViews_t::iterator vViews_i
std::vector< std::string > FWDetailViewManager::findViewersFor ( const std::string &  iType) const
private

Definition at line 136 of file FWDetailViewManager.cc.

References Vispa.Plugins.EdmBrowser.EdmDataAccessor::all(), taus_updatedMVAIds_cff::category, edmplugin::PluginManager::categoryToInfos(), SoftLeptonByDistance_cfi::distance, plotBeamSpotDB::first, runEdmFileComparison::found, fwLog, reco::get(), edmplugin::PluginManager::get(), fireworks::Context::getHidePFBuilders(), FWJobMetadataManager::hasModuleLabel(), info(), FWSimpleRepresentationChecker::infoFor(), fwlog::kDebug, m_context, m_typeToViewers, fireworks::Context::metadataManager(), edmplugin::PluginInfo::name_, FWRepresentationInfo::proximity(), AlCaHLTBitMon_QueryRunRegistry::string, create_public_lumi_plots::transform, and tier0::unique().

Referenced by detailViewsFor(), and openDetailViewFor().

137 {
138 
139  std::vector<std::string> returnValue;
140 
141  std::map<std::string,std::vector<std::string> >::const_iterator itFind = m_typeToViewers.find(iType);
142  if(itFind != m_typeToViewers.end()) {
143  return itFind->second;
144  }
145 
146  std::set<std::string> detailViews;
147 
148  std::vector<edmplugin::PluginInfo> all = edmplugin::PluginManager::get()->categoryToInfos().find(FWDetailViewFactory::get()->category())->second;
149  std::transform(all.begin(),
150  all.end(),
151  std::inserter(detailViews,detailViews.begin()),
152  boost::bind(&edmplugin::PluginInfo::name_,_1));
153  unsigned int closestMatch= 0xFFFFFFFF;
154 
155 
156  for(std::set<std::string>::iterator it = detailViews.begin(), itEnd=detailViews.end();
157  it!=itEnd;
158  ++it) {
159 
160  if (m_context->getHidePFBuilders()) {
161  std::size_t found = it->find("PF ");
162  if (found != std::string::npos)
163  continue;
164  }
165  std::string::size_type first = it->find_first_of('@');
166  std::string type = it->substr(0,first);
167 
168  //see if we match via inheritance
169  FWSimpleRepresentationChecker checker(type,"",0,false);
170  FWRepresentationInfo info = checker.infoFor(iType);
171  bool pass = false;
172  if(closestMatch > info.proximity()) {
173  pass = true;
174  std::string::size_type firstD = it->find_first_of('&')+1;
175  if(firstD != std::string::npos) {
176  std::stringstream ss(it->substr(firstD));
177  std::string ml;
178  while(std::getline(ss, ml, '&')) {
180  fwLog(fwlog::kDebug) << "DetailView "<< *it << " requires module label " << ml << std::endl;
181  pass = false;
182  break;
183  }
184  }
185  }
186  if (pass) {
187  returnValue.push_back(*it);
188  }
189  else {
190  std::string::size_type first = (*it).find_first_of('@');
191  std::string vn = *it;
192  vn.insert(++first, "!");
193  returnValue.push_back(vn);
194  }
195  }
196  }
197 
198  std::vector<std::string>::iterator it;
199  it = std::unique (returnValue.begin(), returnValue.end(), pluginComapreFunc);
200  returnValue.resize( std::distance(returnValue.begin(),it) );
201 
202  m_typeToViewers[iType]=returnValue;
203  return returnValue;
204 }
const CategoryToInfos & categoryToInfos() const
Definition: PluginManager.h:83
type
Definition: HCALResponse.h:21
static const TGPicture * info(bool iBackgroundIsBlack)
virtual bool hasModuleLabel(std::string &moduleLabel)=0
uint16_t size_type
unsigned int proximity() const
measures how &#39;close&#39; this representation is to the type in question, the large the number the farther...
std::map< std::string, std::vector< std::string > > m_typeToViewers
def unique(seq, keepstr=True)
Definition: tier0.py:25
bool getHidePFBuilders() const
Definition: Context.h:91
fireworks::Context * m_context
#define fwLog(_level_)
Definition: fwLog.h:50
FWJobMetadataManager * metadataManager() const
Definition: Context.h:69
std::string name_
Definition: PluginInfo.h:29
static PluginManager * get()
T get(const Candidate &c)
Definition: component.h:55
void FWDetailViewManager::newEventCallback ( )

Definition at line 215 of file FWDetailViewManager.cc.

References m_views.

Referenced by FWGUIManager::eventChangedCallback(), and ~FWDetailViewManager().

216 {
217  while (!m_views.empty())
218  {
219  m_views.front().m_eveWindow->DestroyWindowAndSlot();
220  }
221 }
void FWDetailViewManager::openDetailViewFor ( const FWModelId id,
const std::string &  iViewName 
)

Definition at line 73 of file FWDetailViewManager.cc.

References FWColorManager::background(), fireworks::Context::colorManager(), findViewersFor(), fwLog, reco::get(), fwlog::kError, m_context, m_views, match(), eostools::move(), dataset::name, edm::TypeWithDict::name(), AlCaHLTBitMon_QueryRunRegistry::string, protons_cff::t, and viewNameFrom().

Referenced by FWModelContextMenuHandler::chosenItem(), CmsShowModelPopup::clicked(), and CmsShowModelPopup::openDetailedView().

74 {
75 
76  TEveWindowSlot* slot = TEveWindow::CreateWindowMainFrame();
77  TEveCompositeFrameInMainFrame* eveFrame = (TEveCompositeFrameInMainFrame*)slot->GetEveFrame();
78 
79  // find the right viewer for this item
80  std::string typeName = edm::TypeWithDict(*(id.item()->modelType()->GetTypeInfo())).name();
81  std::vector<std::string> viewerNames = findViewersFor(typeName);
82  if(viewerNames.empty()) {
83  fwLog(fwlog::kError) << "FWDetailViewManager: don't know what detailed view to "
84  "use for object " << id.item()->name() << std::endl;
85  assert(!viewerNames.empty());
86  }
87 
88  //see if one of the names matches iViewName
90  for(std::vector<std::string>::iterator it = viewerNames.begin(), itEnd = viewerNames.end(); it != itEnd; ++it) {
91  std::string t = viewNameFrom(*it);
92  //std::cout <<"'"<<iViewName<< "' '"<<t<<"'"<<std::endl;
93  if(t == iViewName) {
94  match = *it;
95  break;
96  }
97  }
98  assert(!match.empty());
99  std::unique_ptr<FWDetailViewBase> detailView{FWDetailViewFactory::get()->create(match)};
100  assert(nullptr!=detailView);
101 
102  TEveWindowSlot* ws = (TEveWindowSlot*)(eveFrame->GetEveWindow());
103  detailView->init(ws);
104  detailView->build(id);
105  detailView->setBackgroundColor(m_context->colorManager()->background());
106 
107  TGMainFrame* mf = (TGMainFrame*)(eveFrame->GetParent());
108  mf->SetWindowName(Form("%s Detail View [%d]", id.item()->name().c_str(), id.index()));
109 
110  m_views.emplace_back(eveFrame, std::move(detailView), eveFrame->GetEveWindow());
111 
112  mf->MapRaised();
113 }
Color_t background() const
FWColorManager * colorManager() const
Definition: Context.h:65
static std::string viewNameFrom(const std::string &iFull)
std::vector< std::string > findViewersFor(const std::string &) const
std::string name() const
fireworks::Context * m_context
#define fwLog(_level_)
Definition: fwLog.h:50
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
def move(src, dest)
Definition: eostools.py:511
T get(const Candidate &c)
Definition: component.h:55
const FWDetailViewManager& FWDetailViewManager::operator= ( const FWDetailViewManager )
privatedelete

Member Data Documentation

fireworks::Context* FWDetailViewManager::m_context
protected
std::map<std::string, std::vector<std::string> > FWDetailViewManager::m_typeToViewers
mutableprivate

Definition at line 77 of file FWDetailViewManager.h.

Referenced by findViewersFor().

vViews_t FWDetailViewManager::m_views
private