]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/Reve/RenderElement.cxx
Implemented dtor for RenderElement removing all instances from browsers.
[u/mrichter/AliRoot.git] / EVE / Reve / RenderElement.cxx
index ae1ac13703b373fe49df76c60c804b2e83283d44..97e8a8a9c59b652823b7be636597afc464b04393 100644 (file)
@@ -19,13 +19,21 @@ ClassImp(RenderElement)
 
 RenderElement::RenderElement()
 {
-  fRnrElement    = true;
+  fRnrElement    = kTRUE;
   fMainColorPtr  = 0;
 }
 
 RenderElement::RenderElement(Color_t& main_color) : fMainColorPtr(&main_color)
 {
-  fRnrElement    = true;
+  fRnrElement    = kTRUE;
+}
+
+RenderElement::~RenderElement()
+{
+  for(sLTI_i i=fItems.begin(); i!=fItems.end(); ++i) {
+    i->fTree->DeleteItem(i->fItem);
+    gClient->NeedRedraw(i->fTree);
+  }
 }
 
 /**************************************************************************/
@@ -46,11 +54,10 @@ TGListTreeItem* RenderElement::AddIntoListTree(TGListTree* ltree,
   static const Exc_t eH("RenderElement::AddIntoListTree ");
 
   TObject* tobj = GetObject(eH);
-  TGListTreeItem* item = ltree->AddItem(parent, tobj->GetName(), tobj,
-                                        0, 0, kTRUE);
+  TGListTreeItem* item = ltree->AddItem(parent, tobj->GetName(), this,
+                                       0, 0, kTRUE);
   item->CheckItem(GetRnrElement());
-  item->SetColor(GetMainColor());
-  // printf("%s setting title for %s, '%s'\n", eH.Data(), tobj->GetName(), tobj->GetTitle());
+  if(fMainColorPtr != 0) item->SetColor(GetMainColor());
   item->SetTipText(tobj->GetTitle());
 
   fItems.insert(ListTreeInfo(ltree, item));
@@ -65,7 +72,7 @@ void RenderElement::FullUpdate()
   for(sLTI_i i=fItems.begin(); i!=fItems.end(); ++i) {
     // Setup name and title/tooltip? Need update calls from setname/title as well.
     i->fItem->CheckItem(fRnrElement);
-    i->fItem->SetColor(GetMainColor());
+    if(fMainColorPtr != 0) i->fItem->SetColor(GetMainColor());
   }
   gReve->Redraw3D();
   gReve->NotifyBrowser();
@@ -119,6 +126,7 @@ void RenderElement::SetRnrElement(Bool_t rnr)
     FullUpdate();
   }
 }
+
 /**************************************************************************/
 
 void RenderElement::SetMainColor(Color_t color)
@@ -137,6 +145,48 @@ void RenderElement::SetMainColorByPixel(Pixel_t pixel)
 /**************************************************************************/
 /**************************************************************************/
 
+ClassImp(RenderElementObjPtr)
+
+RenderElementObjPtr::RenderElementObjPtr(TObject* obj) :
+  RenderElement(),
+  fObject(obj)  
+{}
+
+RenderElementObjPtr::RenderElementObjPtr(TObject* obj, Color_t& mainColor) :
+  RenderElement(mainColor),
+  fObject(obj)  
+{}
+
+RenderElementObjPtr::~RenderElementObjPtr()
+{
+  delete fObject;
+}
+
+/**************************************************************************/
+
+TObject* RenderElementObjPtr::GetObject(Reve::Exc_t eh)
+{
+  if(fObject == 0)
+    throw(eh + "fObject not set.");
+  return fObject;
+}
+
+void RenderElementObjPtr::SetRnrElement(Bool_t rnr)
+{
+  if(rnr != fRnrElement) {
+    fRnrElement = rnr;
+    if(rnr) {
+      gReve->GetCC()->GetListOfPrimitives()->Add(fObject);
+    } else {
+      gReve->GetCC()->GetListOfPrimitives()->Remove(fObject);
+    }
+    FullUpdate();
+  }
+}
+
+/**************************************************************************/
+/**************************************************************************/
+
 ClassImp(RenderElementListBase)
 
 Int_t RenderElementListBase::ExpandIntoListTree(TGListTree* ltree,
@@ -166,13 +216,13 @@ Int_t RenderElementListBase::ExpandIntoListTree(TGListTree* ltree,
 void RenderElementListBase::EnableListElements()
 {
   for(lpRE_i i=fList.begin(); i!=fList.end(); ++i)
-    (*i)->SetRnrElement(true);
+    (*i)->SetRnrElement(kTRUE);
 }
 
 void RenderElementListBase::DisableListElements()
 {
   for(lpRE_i i=fList.begin(); i!=fList.end(); ++i)
-    (*i)->SetRnrElement(false);
+    (*i)->SetRnrElement(kFALSE);
 }
 
 /**************************************************************************/