Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TEveManager.h
Go to the documentation of this file.
1 // @(#)root/eve:$Id$
2 // Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TEveManager
13 #define ROOT_TEveManager
14 
15 #include "TEveElement.h"
16 
17 #include "TSysEvtHandler.h"
18 #include "TTimer.h"
19 #include "TVirtualPad.h"
20 
21 class TMap;
22 class TExMap;
23 class TMacro;
24 class TFolder;
25 class TCanvas;
26 class TGeoManager;
27 
28 class TGTab;
29 class TGStatusBar;
30 class TGListTree;
31 class TGListTreeItem;
32 class TGStatusBar;
33 class TGWindow;
34 
35 class TGLViewer;
36 
37 class TEveSelection;
38 class TEveGListTreeEditorFrame;
39 class TEveBrowser;
40 class TEveGedEditor;
41 
42 class TEveViewer; class TEveViewerList;
43 class TEveScene; class TEveSceneList;
44 
45 class TEveEventManager;
46 class TEveWindowManager;
47 
48 
49 class TEveManager
50 {
51  TEveManager(const TEveManager&); // Not implemented
52  TEveManager& operator=(const TEveManager&); // Not implemented
53 
54 public:
55  class TRedrawDisabler
56  {
57  private:
58  TRedrawDisabler(const TRedrawDisabler&); // Not implemented
59  TRedrawDisabler& operator=(const TRedrawDisabler&); // Not implemented
60 
61  TEveManager* fMgr;
62  public:
63  TRedrawDisabler(TEveManager* m) : fMgr(m)
64  { if (fMgr) fMgr->DisableRedraw(); }
65  virtual ~TRedrawDisabler()
66  { if (fMgr) fMgr->EnableRedraw(); }
67 
68  ClassDef(TRedrawDisabler, 0); // Exception-safe EVE redraw-disabler.
69  };
70 
71  class TExceptionHandler : public TStdExceptionHandler
72  {
73  public:
74  TExceptionHandler() : TStdExceptionHandler() { Add(); }
75  virtual ~TExceptionHandler() { Remove(); }
76 
77  virtual EStatus Handle(std::exception& exc);
78 
79  ClassDef(TExceptionHandler, 0); // Exception handler for Eve exceptions.
80  };
81 
82 protected:
83  TExceptionHandler *fExcHandler;
84 
85  TMap *fVizDB;
86  Bool_t fVizDBReplace;
87  Bool_t fVizDBUpdate;
88 
89  TMap *fGeometries;
90  TMap *fGeometryAliases;
91 
92  TEveBrowser *fBrowser;
93  TEveGListTreeEditorFrame *fLTEFrame;
94 
95  TFolder *fMacroFolder;
96 
97  TEveWindowManager *fWindowManager;
98  TEveViewerList *fViewers;
99  TEveSceneList *fScenes;
100 
101  TEveScene *fGlobalScene;
102  TEveScene *fEventScene;
103  TEveEventManager *fCurrentEvent;
104 
105  Int_t fRedrawDisabled;
106  Bool_t fFullRedraw;
107  Bool_t fResetCameras;
108  Bool_t fDropLogicals;
109  Bool_t fKeepEmptyCont;
110  Bool_t fTimerActive;
111  TTimer fRedrawTimer;
112 
113  // Fine grained scene updates.
114  TExMap *fStampedElements;
115 
116  // Selection / hihglight elements
117  TEveSelection *fSelection;
118  TEveSelection *fHighlight;
119 
120  TEveElementList *fOrphanage;
121  Bool_t fUseOrphanage;
122 
123 public:
124  TEveManager(UInt_t w, UInt_t h, Bool_t map_window=kTRUE, Option_t* opt="FI");
125  virtual ~TEveManager();
126 
127  TExceptionHandler* GetExcHandler() const { return fExcHandler; }
128 
129  TEveSelection* GetSelection() const { return fSelection; }
130  TEveSelection* GetHighlight() const { return fHighlight; }
131 
132  TEveElementList* GetOrphanage() const { return fOrphanage; }
133  Bool_t GetUseOrphanage() const { return fUseOrphanage; }
134  void SetUseOrphanage(Bool_t o) { fUseOrphanage = o; }
135  void ClearOrphanage();
136 
137  TEveBrowser* GetBrowser() const { return fBrowser; }
138  TEveGListTreeEditorFrame* GetLTEFrame() const { return fLTEFrame; }
139  TEveGedEditor* GetEditor() const;
140  TGStatusBar* GetStatusBar() const;
141 
142  TEveWindowManager* GetWindowManager() const { return fWindowManager; }
143 
144  TEveSceneList* GetScenes() const { return fScenes; }
145  TEveViewerList* GetViewers() const { return fViewers; }
146 
147  TEveScene* GetGlobalScene() const { return fGlobalScene; }
148  TEveScene* GetEventScene() const { return fEventScene; }
149  TEveEventManager* GetCurrentEvent() const { return fCurrentEvent; }
150 
151  void SetCurrentEvent(TEveEventManager* mgr) { fCurrentEvent = mgr; }
152 
153  TCanvas* AddCanvasTab(const char* name);
154  TGWindow* GetMainWindow() const;
155  TEveViewer* GetDefaultViewer() const;
156  TGLViewer* GetDefaultGLViewer() const;
157  TEveViewer* SpawnNewViewer(const char* name, const char* title="", Bool_t embed=kTRUE);
158  TEveScene* SpawnNewScene(const char* name, const char* title="");
159 
160  TFolder* GetMacroFolder() const { return fMacroFolder; }
161  TMacro* GetMacro(const char* name) const;
162 
163  void EditElement(TEveElement* element);
164 
165  void DisableRedraw() { ++fRedrawDisabled; }
166  void EnableRedraw() { --fRedrawDisabled; if (fRedrawDisabled <= 0) Redraw3D(); }
167 
168  void Redraw3D(Bool_t resetCameras=kFALSE, Bool_t dropLogicals=kFALSE)
169  {
170  if (fRedrawDisabled <= 0 && !fTimerActive) RegisterRedraw3D();
171  if (resetCameras) fResetCameras = kTRUE;
172  if (dropLogicals) fDropLogicals = kTRUE;
173  }
174  void RegisterRedraw3D();
175  void DoRedraw3D();
176  void FullRedraw3D(Bool_t resetCameras=kFALSE, Bool_t dropLogicals=kFALSE);
177 
178  Bool_t GetKeepEmptyCont() const { return fKeepEmptyCont; }
179  void SetKeepEmptyCont(Bool_t k) { fKeepEmptyCont = k; }
180 
181  void ElementChanged(TEveElement* element, Bool_t update_scenes=kTRUE, Bool_t redraw=kFALSE);
182  void ScenesChanged(TEveElement::List_t& scenes);
183 
184  // Fine grained updates via stamping.
185  void ElementStamped(TEveElement* element);
186 
187  // These are more like TEveManager stuff.
188  TGListTree* GetListTree() const;
189  TGListTreeItem* AddToListTree(TEveElement* re, Bool_t open, TGListTree* lt=0);
190  void RemoveFromListTree(TEveElement* element, TGListTree* lt, TGListTreeItem* lti);
191 
192  TGListTreeItem* AddEvent(TEveEventManager* event);
193 
194  void AddElement(TEveElement* element, TEveElement* parent=0);
195  void AddGlobalElement(TEveElement* element, TEveElement* parent=0);
196 
197  void RemoveElement(TEveElement* element, TEveElement* parent);
198  void PreDeleteElement(TEveElement* element);
199 
200  void ElementSelect(TEveElement* element);
201  Bool_t ElementPaste(TEveElement* element);
202 
203  // VizDB - Visualization-parameter data-base.
204  Bool_t InsertVizDBEntry(const TString& tag, TEveElement* model,
205  Bool_t replace, Bool_t update);
206  Bool_t InsertVizDBEntry(const TString& tag, TEveElement* model);
207  TEveElement* FindVizDBEntry (const TString& tag);
208 
209  void LoadVizDB(const TString& filename, Bool_t replace, Bool_t update);
210  void LoadVizDB(const TString& filename);
211  void SaveVizDB(const TString& filename);
212 
213  Bool_t GetVizDBReplace() const { return fVizDBReplace; }
214  Bool_t GetVizDBUpdate () const { return fVizDBUpdate; }
215  void SetVizDBReplace(Bool_t r) { fVizDBReplace = r; }
216  void SetVizDBUpdate (Bool_t u) { fVizDBUpdate = u; }
217 
218 
219  // Geometry management.
220  TGeoManager* GetGeometry(const TString& filename);
221  TGeoManager* GetGeometryByAlias(const TString& alias);
222  TGeoManager* GetDefaultGeometry();
223  void RegisterGeometryAlias(const TString& alias, const TString& filename);
224 
225  void SetStatusLine(const char* text);
226  void ClearROOTClassSaved();
227 
228  void CloseEveWindow();
229 
230  static TEveManager* Create(Bool_t map_window=kTRUE, Option_t* opt="FIV");
231  static void Terminate();
232 
233  // Access to internals, needed for low-level control in advanced
234  // applications.
235 
236  void EnforceTimerActive (Bool_t ta) { fTimerActive = ta; }
237 
238  TExMap* PtrToStampedElements() { return fStampedElements; }
239 
240  ClassDef(TEveManager, 0); // Eve application manager.
241 };
242 
243 R__EXTERN TEveManager* gEve;
244 
245 #endif