Merge from EVE-dev.
[u/mrichter/AliRoot.git] / EVE / Reve / RGTopFrame.h
1 // $Header$
2
3 #ifndef REVE_RGTopFrame_H
4 #define REVE_RGTopFrame_H
5
6 #include <TGFrame.h>
7 #include <TGeoManager.h>
8 #include <TGStatusBar.h>
9
10 #include <map>
11
12 class TMacro;
13 class TFolder;
14 class TCanvas;
15 class TGStatusBar;
16 class TGListTree;
17 class TGListTreeItem;
18
19 namespace Reve {
20
21 class VSDSelector;
22 class RGBrowser;
23 class RGEditor;
24
25 class RenderElement;
26 class RenderElementList;
27
28 class EventBase;
29
30
31 class RGTopFrame : public TGMainFrame
32 {
33 public:
34   enum LookType_e { LT_Classic, LT_Editor, LT_GLViewer };
35
36 private:
37   void                Init();
38   TCanvas             *fCC;
39   TCanvas             *fHistoCanvas;
40   VSDSelector         *fSelector;
41   RGBrowser           *fBrowser;
42   TGStatusBar         *fStatusBar;
43   const char          *fVSDFile;
44
45   TFolder             *fMacroFolder;
46
47   RGEditor            *fEditor;
48
49   EventBase           *fCurrentEvent;
50   RenderElementList   *fGlobalStore;
51
52   Int_t                fRedrawDisabled;
53   Bool_t               fResetCameras;
54   Bool_t               fTimerActive;
55   TTimer               fRedrawTimer;
56
57 protected:
58   LookType_e           fLook;
59
60   std::map<TString, TGeoManager*> fGeometries;
61
62 public:
63   RGTopFrame(const TGWindow *p, UInt_t w, UInt_t h, LookType_e look=LT_Classic);
64
65   TCanvas*     GetCC()         { return fCC; }
66   VSDSelector* GetSelector()   { return fSelector; }
67   RGBrowser*   GetBrowser()    { return fBrowser; }
68   TGStatusBar* GetStatusBar()  { return fStatusBar; }
69
70   TGListTree*        GetListTree() const;
71   EventBase*         GetCurrentEvent() const { return fCurrentEvent; }
72   RenderElementList* GetGlobalStore()  const { return fGlobalStore; }
73
74   TFolder* GetMacroFolder() const { return fMacroFolder; }
75   TMacro*  GetMacro(const Text_t* name) const;
76
77   RGEditor* GetEditor() const { return fEditor; }
78   void EditRenderElement(RenderElement* rnr_element);
79
80   void DisableRedraw() { ++fRedrawDisabled; }
81   void EnableRedraw()  { --fRedrawDisabled; if(fRedrawDisabled <= 0) Redraw3D(); }
82
83   void Redraw3D(Bool_t resetCameras=kFALSE) {
84     if(fRedrawDisabled <= 0 && !fTimerActive) RegisterRedraw3D();
85     if(resetCameras) fResetCameras = kTRUE;
86   }
87   void RegisterRedraw3D();
88   void DoRedraw3D();
89
90   static int SpawnGuiAndRun(int argc, char **argv);
91
92   // These are more like ReveManager stuff.
93   TGListTreeItem* AddEvent(EventBase* event); // Could have Reve::Event ...
94   TGListTreeItem* AddRenderElement(RenderElement* rnr_element);
95   TGListTreeItem* AddRenderElement(RenderElement* parent, RenderElement* rnr_element);
96   TGListTreeItem* AddGlobalRenderElement(RenderElement* rnr_element);
97   TGListTreeItem* AddGlobalRenderElement(RenderElement* parent, RenderElement* rnr_element);
98
99   void RemoveRenderElement(RenderElement* parent, RenderElement* rnr_element);
100
101   void DrawRenderElement(RenderElement* rnr_element, TVirtualPad* pad=0);
102   void UndrawRenderElement(RenderElement* rnr_element, TVirtualPad* pad=0);
103
104   void RenderElementChecked(TObject* obj, Bool_t state);
105
106   void NotifyBrowser(TGListTreeItem* parent_lti=0);
107   void NotifyBrowser(RenderElement* parent);
108
109   // Hmmph ... geometry management?
110   TGeoManager* GetGeometry(const TString& filename);
111
112   ClassDef(RGTopFrame, 0);
113 };
114
115 } // namespace Reve
116
117 extern Reve::RGTopFrame* gReve;
118
119 #endif