]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/Reve/RGTopFrame.h
Added nested class RedrawDisabler allowing exception-safe disabling of 3d-redraw.
[u/mrichter/AliRoot.git] / EVE / Reve / RGTopFrame.h
CommitLineData
5a5a1232 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
3adb4b94 12class TMacro;
13class TFolder;
5a5a1232 14class TCanvas;
a8600b56 15class TGTab;
5a5a1232 16class TGStatusBar;
17class TGListTree;
18class TGListTreeItem;
19
20namespace Reve {
21
22class VSDSelector;
23class RGBrowser;
24class RGEditor;
1a4ab447 25
5a5a1232 26class RenderElement;
1a4ab447 27class RenderElementList;
28
29class EventBase;
30
5a5a1232 31
32class RGTopFrame : public TGMainFrame
33{
265ecb21 34 RGTopFrame(const RGTopFrame&); // Not implemented
35 RGTopFrame& operator=(const RGTopFrame&); // Not implemented
36
5a5a1232 37public:
38 enum LookType_e { LT_Classic, LT_Editor, LT_GLViewer };
39
cd405991 40 class RedrawDisabler
41 {
42 private:
43 RGTopFrame* fFrame;
44 public:
45 RedrawDisabler(RGTopFrame* f) : fFrame(f)
46 { if (fFrame) fFrame->DisableRedraw(); }
47 ~RedrawDisabler()
48 { if (fFrame) fFrame->EnableRedraw(); }
49 };
50
5a5a1232 51private:
a8600b56 52 TGCompositeFrame *fMasterFrame;
53 TGTab *fMasterTab;
54
55 TCanvas *fGLCanvas;
5a5a1232 56 VSDSelector *fSelector;
57 RGBrowser *fBrowser;
58 TGStatusBar *fStatusBar;
59 const char *fVSDFile;
60
3adb4b94 61 TFolder *fMacroFolder;
62
5a5a1232 63 RGEditor *fEditor;
64
1a4ab447 65 EventBase *fCurrentEvent;
66 RenderElementList *fGlobalStore;
5a5a1232 67
1a4ab447 68 Int_t fRedrawDisabled;
426530cc 69 Bool_t fResetCameras;
5a5a1232 70 Bool_t fTimerActive;
71 TTimer fRedrawTimer;
72
73protected:
74 LookType_e fLook;
75
76 std::map<TString, TGeoManager*> fGeometries;
77
78public:
79 RGTopFrame(const TGWindow *p, UInt_t w, UInt_t h, LookType_e look=LT_Classic);
80
a8600b56 81 TGCompositeFrame* GetMasterFrame() { return fMasterFrame; }
82 TGTab* GetMasterTab() { return fMasterTab; }
83
84 TCanvas* GetGLCanvas() { return fGLCanvas; }
5a5a1232 85 VSDSelector* GetSelector() { return fSelector; }
86 RGBrowser* GetBrowser() { return fBrowser; }
87 TGStatusBar* GetStatusBar() { return fStatusBar; }
88
a8600b56 89 TCanvas* AddCanvasTab(const char* name);
90
1a4ab447 91 TGListTree* GetListTree() const;
92 EventBase* GetCurrentEvent() const { return fCurrentEvent; }
93 RenderElementList* GetGlobalStore() const { return fGlobalStore; }
5a5a1232 94
3adb4b94 95 TFolder* GetMacroFolder() const { return fMacroFolder; }
96 TMacro* GetMacro(const Text_t* name) const;
97
5a5a1232 98 RGEditor* GetEditor() const { return fEditor; }
99 void EditRenderElement(RenderElement* rnr_element);
100
1a4ab447 101 void DisableRedraw() { ++fRedrawDisabled; }
102 void EnableRedraw() { --fRedrawDisabled; if(fRedrawDisabled <= 0) Redraw3D(); }
5a5a1232 103
426530cc 104 void Redraw3D(Bool_t resetCameras=kFALSE) {
105 if(fRedrawDisabled <= 0 && !fTimerActive) RegisterRedraw3D();
106 if(resetCameras) fResetCameras = kTRUE;
107 }
5a5a1232 108 void RegisterRedraw3D();
109 void DoRedraw3D();
110
a8600b56 111 static int SpawnGuiAndRun(int argc, char **argv);
112 static void SpawnGui(LookType_e revemode = LT_Editor);
5a5a1232 113
114 // These are more like ReveManager stuff.
1a4ab447 115 TGListTreeItem* AddEvent(EventBase* event); // Could have Reve::Event ...
5a5a1232 116 TGListTreeItem* AddRenderElement(RenderElement* rnr_element);
1a4ab447 117 TGListTreeItem* AddRenderElement(RenderElement* parent, RenderElement* rnr_element);
5a5a1232 118 TGListTreeItem* AddGlobalRenderElement(RenderElement* rnr_element);
1a4ab447 119 TGListTreeItem* AddGlobalRenderElement(RenderElement* parent, RenderElement* rnr_element);
120
121 void RemoveRenderElement(RenderElement* parent, RenderElement* rnr_element);
a8600b56 122 void PreDeleteRenderElement(RenderElement* rnr_element);
5a5a1232 123
124 void DrawRenderElement(RenderElement* rnr_element, TVirtualPad* pad=0);
5a34ca2d 125 void UndrawRenderElement(RenderElement* rnr_element, TVirtualPad* pad=0);
5a5a1232 126
127 void RenderElementChecked(TObject* obj, Bool_t state);
128
1a4ab447 129 void NotifyBrowser(TGListTreeItem* parent_lti=0);
130 void NotifyBrowser(RenderElement* parent);
5a5a1232 131
132 // Hmmph ... geometry management?
133 TGeoManager* GetGeometry(const TString& filename);
134
a8600b56 135 void ThrowException(const char* text="foo");
136
5a5a1232 137 ClassDef(RGTopFrame, 0);
138};
139
140} // namespace Reve
141
142extern Reve::RGTopFrame* gReve;
143
144#endif