// @(#)root/eve:$Id$
// Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

/*************************************************************************
 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TEveScene
#define ROOT_TEveScene

#include "TEveElement.h"

class TEvePad;
class TGLScenePad;

class TExMap;

/******************************************************************************/
// TEveScene
/******************************************************************************/

class TEveScene : public TEveElementList
{
private:
   TEveScene(const TEveScene&);            // Not implemented
   TEveScene& operator=(const TEveScene&); // Not implemented

protected:
   TEvePad     *fPad;
   TGLScenePad *fGLScene;

   Bool_t       fChanged;
   Bool_t       fSmartRefresh;
   Bool_t       fHierarchical;

   void RetransHierarchicallyRecurse(TEveElement* el, const TEveTrans& tp);

public:
   TEveScene(const char* n="TEveScene", const char* t="");
   TEveScene(TGLScenePad* gl_scene, const char* n="TEveScene", const char* t="");
   virtual ~TEveScene();

   virtual void CollectSceneParents(List_t& scenes);

   virtual Bool_t SingleRnrState() const { return kTRUE; }

   void   Changed()         { fChanged = kTRUE; }
   Bool_t IsChanged() const { return fChanged;  }

   void   SetHierarchical(Bool_t h) { fHierarchical = h;    }
   Bool_t GetHierarchical()   const { return fHierarchical; }

   void   Repaint(Bool_t dropLogicals=kFALSE);
   void   RetransHierarchically();

   TGLScenePad* GetGLScene() const { return fGLScene; }
   void SetGLScene(TGLScenePad* s) { fGLScene = s; }

   virtual void SetName(const char* n);
   virtual void Paint(Option_t* option = "");

   void DestroyElementRenderers(TEveElement* element);
   void DestroyElementRenderers(TObject* rnrObj);

   virtual const TGPicture* GetListTreeIcon(Bool_t open=kFALSE);

   ClassDef(TEveScene, 0); // Reve representation of TGLScene.
};


/******************************************************************************/
// TEveSceneList
/******************************************************************************/

class TEveSceneList : public TEveElementList
{
private:
   TEveSceneList(const TEveSceneList&);            // Not implemented
   TEveSceneList& operator=(const TEveSceneList&); // Not implemented

protected:

public:
   TEveSceneList(const char* n="TEveSceneList", const char* t="");
   virtual ~TEveSceneList() {}

   void DestroyScenes();

   void RepaintChangedScenes(Bool_t dropLogicals);
   void RepaintAllScenes(Bool_t dropLogicals);

   void DestroyElementRenderers(TEveElement* element);

   void ProcessSceneChanges(Bool_t dropLogicals, TExMap* stampMap);

   ClassDef(TEveSceneList, 0); // List of Scenes providing common operations on TEveScene collections.
};

#endif
 TEveScene.h:1
 TEveScene.h:2
 TEveScene.h:3
 TEveScene.h:4
 TEveScene.h:5
 TEveScene.h:6
 TEveScene.h:7
 TEveScene.h:8
 TEveScene.h:9
 TEveScene.h:10
 TEveScene.h:11
 TEveScene.h:12
 TEveScene.h:13
 TEveScene.h:14
 TEveScene.h:15
 TEveScene.h:16
 TEveScene.h:17
 TEveScene.h:18
 TEveScene.h:19
 TEveScene.h:20
 TEveScene.h:21
 TEveScene.h:22
 TEveScene.h:23
 TEveScene.h:24
 TEveScene.h:25
 TEveScene.h:26
 TEveScene.h:27
 TEveScene.h:28
 TEveScene.h:29
 TEveScene.h:30
 TEveScene.h:31
 TEveScene.h:32
 TEveScene.h:33
 TEveScene.h:34
 TEveScene.h:35
 TEveScene.h:36
 TEveScene.h:37
 TEveScene.h:38
 TEveScene.h:39
 TEveScene.h:40
 TEveScene.h:41
 TEveScene.h:42
 TEveScene.h:43
 TEveScene.h:44
 TEveScene.h:45
 TEveScene.h:46
 TEveScene.h:47
 TEveScene.h:48
 TEveScene.h:49
 TEveScene.h:50
 TEveScene.h:51
 TEveScene.h:52
 TEveScene.h:53
 TEveScene.h:54
 TEveScene.h:55
 TEveScene.h:56
 TEveScene.h:57
 TEveScene.h:58
 TEveScene.h:59
 TEveScene.h:60
 TEveScene.h:61
 TEveScene.h:62
 TEveScene.h:63
 TEveScene.h:64
 TEveScene.h:65
 TEveScene.h:66
 TEveScene.h:67
 TEveScene.h:68
 TEveScene.h:69
 TEveScene.h:70
 TEveScene.h:71
 TEveScene.h:72
 TEveScene.h:73
 TEveScene.h:74
 TEveScene.h:75
 TEveScene.h:76
 TEveScene.h:77
 TEveScene.h:78
 TEveScene.h:79
 TEveScene.h:80
 TEveScene.h:81
 TEveScene.h:82
 TEveScene.h:83
 TEveScene.h:84
 TEveScene.h:85
 TEveScene.h:86
 TEveScene.h:87
 TEveScene.h:88
 TEveScene.h:89
 TEveScene.h:90
 TEveScene.h:91
 TEveScene.h:92
 TEveScene.h:93
 TEveScene.h:94
 TEveScene.h:95
 TEveScene.h:96
 TEveScene.h:97
 TEveScene.h:98
 TEveScene.h:99
 TEveScene.h:100
 TEveScene.h:101
 TEveScene.h:102
 TEveScene.h:103