#include "RGBrowser.h"
#include "RGEditor.h"
-#include "VSDSelector.h"
-#include <Reve/RenderElement.h>
+#include <Reve/EventBase.h>
+#include "VSDSelector.h"
#include <TGMenu.h>
#include <TGTab.h>
fEditor = 0;
- fCurrentEvent = 0;
- fCurrentEventLTI = 0;
- fGeometryLTI = 0;
+ fCurrentEvent = 0;
+ fGlobalStore = 0;
- fRedrawDisabled = false;
+ fRedrawDisabled = 0;
fTimerActive = false;
fRedrawTimer.Connect("Timeout()", "Reve::RGTopFrame", this, "DoRedraw3D()");
}
/**************************************************************************/
/**************************************************************************/
- fGeometryLTI = GetListTree()->AddItem(0, "Geometry");
- GetListTree()->OpenItem(fGeometryLTI);
+ fGlobalStore = new RenderElementList("Geometry", "");
+ fGlobalStore->SetDenyDestroy(kTRUE);
+ TGListTreeItem* glti = fGlobalStore->AddIntoListTree(GetListTree(), (TGListTreeItem*)0);
+ GetListTree()->OpenItem(glti);
+ DrawRenderElement(fGlobalStore);
Resize(GetDefaultSize()); // this is used here to init layout algorithm
SetWindowName("Reve");
/**************************************************************************/
-TGListTree* RGTopFrame::GetListTree()
+TGListTree* RGTopFrame::GetListTree() const
{
return fBrowser->GetListTree();
}
-TGListTreeItem* RGTopFrame::GetEventTreeItem()
-{
- // return fBrowser->GetListTree()->FindItemByPathname("Event");
- return fCurrentEventLTI;
-}
-
-TGListTreeItem* RGTopFrame::GetGlobalTreeItem()
-{
- return fGeometryLTI;
-}
-
/**************************************************************************/
// Macro management
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
-TGListTreeItem* RGTopFrame::AddEvent(TObject* event)
+TGListTreeItem* RGTopFrame::AddEvent(EventBase* event)
{
fCurrentEvent = event;
- RenderElementObjPtr* rnrEv = new RenderElementObjPtr(event);
- fCurrentEventLTI = rnrEv->AddIntoListTree(GetListTree(), 0);
- GetListTree()->OpenItem(fCurrentEventLTI);
- return fCurrentEventLTI;
+ fCurrentEvent->SetDenyDestroy(kTRUE);
+ TGListTreeItem* elti = event->AddIntoListTree(GetListTree(), (TGListTreeItem*)0);
+ GetListTree()->OpenItem(elti);
+ DrawRenderElement(event);
+ return elti;
}
TGListTreeItem* RGTopFrame::AddRenderElement(RenderElement* rnr_element)
{
- return AddRenderElement(GetEventTreeItem(), rnr_element);
+ return AddRenderElement(fCurrentEvent, rnr_element);
}
-TGListTreeItem* RGTopFrame::AddRenderElement(TGListTreeItem* parent,
+TGListTreeItem* RGTopFrame::AddRenderElement(RenderElement* parent,
RenderElement* rnr_element)
{
static const Exc_t eH("RGTopFrame::AddRenderElement ");
// Here could route rnr-element to several browsers/pads.
+ RenderElementListBase* rel = dynamic_cast<RenderElementListBase*>(parent);
+ if(rel)
+ rel->AddElement(rnr_element);
+
TGListTreeItem* newitem =
rnr_element->AddIntoListTree(GetListTree(), parent);
- NotifyBrowser();
return newitem;
}
TGListTreeItem* RGTopFrame::AddGlobalRenderElement(RenderElement* rnr_element)
{
- return AddGlobalRenderElement(GetGlobalTreeItem(), rnr_element);
+ return AddGlobalRenderElement(fGlobalStore, rnr_element);
}
-TGListTreeItem* RGTopFrame::AddGlobalRenderElement(TGListTreeItem* parent,
+TGListTreeItem* RGTopFrame::AddGlobalRenderElement(RenderElement* parent,
RenderElement* rnr_element)
{
static const Exc_t eH("RGTopFrame::AddGlobalRenderElement ");
// Here could route rnr-element to several browsers/pads.
+ RenderElementListBase* rel = dynamic_cast<RenderElementListBase*>(parent);
+ if(rel)
+ rel->AddElement(rnr_element);
+
TGListTreeItem* newitem =
rnr_element->AddIntoListTree(GetListTree(), parent);
- NotifyBrowser();
return newitem;
}
/**************************************************************************/
+void RGTopFrame::RemoveRenderElement(RenderElement* parent,
+ RenderElement* rnr_element)
+{
+ rnr_element->RemoveFromListTree(GetListTree());
+
+ RenderElementListBase* rel = dynamic_cast<RenderElementListBase*>(parent);
+ if(rel)
+ rel->RemoveElement(rnr_element);
+}
+
+/**************************************************************************/
+
void RGTopFrame::DrawRenderElement(RenderElement* rnr_element, TVirtualPad* pad)
{
if(pad == 0) pad = GetCC();
/**************************************************************************/
-void RGTopFrame::NotifyBrowser(TGListTreeItem* parent)
+void RGTopFrame::NotifyBrowser(TGListTreeItem* parent_lti)
{
TGListTree* l_tree = GetListTree();
- if(parent)
- l_tree->OpenItem(parent);
+ if(parent_lti)
+ l_tree->OpenItem(parent_lti);
gClient->NeedRedraw(l_tree);
}
+void RGTopFrame::NotifyBrowser(RenderElement* parent)
+{
+ TGListTreeItem* parent_lti = parent ? parent->FindListTreeItem(GetListTree()) : 0;
+ NotifyBrowser(parent_lti);
+}
+
/**************************************************************************/
// GeoManager registration
/**************************************************************************/
class VSDSelector;
class RGBrowser;
class RGEditor;
+
class RenderElement;
+class RenderElementList;
+
+class EventBase;
+
class RGTopFrame : public TGMainFrame
{
RGEditor *fEditor;
- TObject *fCurrentEvent;
- TGListTreeItem *fCurrentEventLTI;
+ EventBase *fCurrentEvent;
+ RenderElementList *fGlobalStore;
- TGListTreeItem *fGeometryLTI;
-
- Bool_t fRedrawDisabled;
+ Int_t fRedrawDisabled;
Bool_t fTimerActive;
TTimer fRedrawTimer;
RGBrowser* GetBrowser() { return fBrowser; }
TGStatusBar* GetStatusBar() { return fStatusBar; }
- TGListTree* GetListTree();
- TGListTreeItem* GetEventTreeItem();
- TGListTreeItem* GetGlobalTreeItem();
+ TGListTree* GetListTree() const;
+ EventBase* GetCurrentEvent() const { return fCurrentEvent; }
+ RenderElementList* GetGlobalStore() const { return fGlobalStore; }
TFolder* GetMacroFolder() const { return fMacroFolder; }
TMacro* GetMacro(const Text_t* name) const;
RGEditor* GetEditor() const { return fEditor; }
void EditRenderElement(RenderElement* rnr_element);
- void DisableRedraw() { fRedrawDisabled = true; }
- void EnableRedraw() { fRedrawDisabled = false; Redraw3D(); }
+ void DisableRedraw() { ++fRedrawDisabled; }
+ void EnableRedraw() { --fRedrawDisabled; if(fRedrawDisabled <= 0) Redraw3D(); }
- void Redraw3D() { if(!fRedrawDisabled && !fTimerActive) RegisterRedraw3D(); }
+ void Redraw3D() { if(fRedrawDisabled <= 0 && !fTimerActive) RegisterRedraw3D(); }
void RegisterRedraw3D();
void DoRedraw3D();
static int SpawnGuiAndRun(int argc, char **argv);
// These are more like ReveManager stuff.
- TGListTreeItem* AddEvent(TObject* event); // Could have Reve::Event ...
+ TGListTreeItem* AddEvent(EventBase* event); // Could have Reve::Event ...
TGListTreeItem* AddRenderElement(RenderElement* rnr_element);
- TGListTreeItem* AddRenderElement(TGListTreeItem* parent, RenderElement* rnr_element);
+ TGListTreeItem* AddRenderElement(RenderElement* parent, RenderElement* rnr_element);
TGListTreeItem* AddGlobalRenderElement(RenderElement* rnr_element);
- TGListTreeItem* AddGlobalRenderElement(TGListTreeItem* parent, RenderElement* rnr_element);
+ TGListTreeItem* AddGlobalRenderElement(RenderElement* parent, RenderElement* rnr_element);
+
+ void RemoveRenderElement(RenderElement* parent, RenderElement* rnr_element);
void DrawRenderElement(RenderElement* rnr_element, TVirtualPad* pad=0);
void UndrawRenderElement(RenderElement* rnr_element, TVirtualPad* pad=0);
void RenderElementChecked(TObject* obj, Bool_t state);
- void NotifyBrowser(TGListTreeItem* parent=0);
+ void NotifyBrowser(TGListTreeItem* parent_lti=0);
+ void NotifyBrowser(RenderElement* parent);
// Hmmph ... geometry management?
TGeoManager* GetGeometry(const TString& filename);