]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Changed current-event pointer from TObject to EventBase; made global-store and event...
authormtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 10 Jul 2006 17:36:02 +0000 (17:36 +0000)
committermtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 10 Jul 2006 17:36:02 +0000 (17:36 +0000)
EVE/Reve/RGTopFrame.cxx
EVE/Reve/RGTopFrame.h

index 4ea17a45fe4e96ba4596eec44fac9432134eb2e3..c52ba89a79dbf0edece2f27b8433f9d84baef170 100644 (file)
@@ -2,9 +2,9 @@
 
 #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>
@@ -90,11 +90,10 @@ void RGTopFrame::Init()
 
   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()");
 }
@@ -192,8 +191,11 @@ RGTopFrame::RGTopFrame(const TGWindow *p, UInt_t w, UInt_t h, LookType_e look)
   /**************************************************************************/
   /**************************************************************************/
 
-  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");
@@ -206,22 +208,11 @@ RGTopFrame::RGTopFrame(const TGWindow *p, UInt_t w, UInt_t h, LookType_e look)
 
 /**************************************************************************/
 
-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
 /**************************************************************************/
@@ -297,55 +288,74 @@ int RGTopFrame::SpawnGuiAndRun(int argc, char **argv)
 /**************************************************************************/
 /**************************************************************************/
 
-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();
@@ -377,14 +387,20 @@ void RGTopFrame::RenderElementChecked(TObject* obj, Bool_t state)
 
 /**************************************************************************/
 
-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
 /**************************************************************************/
index efa2ebd4bf6b52ce201173d0f75d4ca081992cd0..218ead2f7ab43a63b7ca6a265fe2811a4cd6820b 100644 (file)
@@ -21,7 +21,12 @@ namespace Reve {
 class VSDSelector;
 class RGBrowser;
 class RGEditor;
+
 class RenderElement;
+class RenderElementList;
+
+class EventBase;
+
 
 class RGTopFrame : public TGMainFrame
 {
@@ -41,12 +46,10 @@ private:
 
   RGEditor            *fEditor;
 
-  TObject             *fCurrentEvent;
-  TGListTreeItem      *fCurrentEventLTI;
+  EventBase           *fCurrentEvent;
+  RenderElementList   *fGlobalStore;
 
-  TGListTreeItem      *fGeometryLTI;
-
-  Bool_t               fRedrawDisabled;
+  Int_t                fRedrawDisabled;
   Bool_t               fTimerActive;
   TTimer               fRedrawTimer;
 
@@ -63,9 +66,9 @@ public:
   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;
@@ -73,28 +76,31 @@ public:
   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);