// @(#)root/gviz3d:$Id$
// Author: Tomasz Sosnicki   18/09/09

/************************************************************************
* Copyright (C) 1995-2009, 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_TStructViewer
#define ROOT_TStructViewer

#include <TObject.h>
#include <TExMap.h>
#include <TObjArray.h>
#include <TList.h>
#include <TCanvas.h>
#include <TColor.h>

class TStructViewerGUI;
class TStructNode;
class TGMainFrame;

class TStructViewer : public TObject {

private:
   void             *fPointer;            // Main pointer to represented object
   TClass           *fPointerClass;       // TClass of a main pointer
   TStructViewerGUI *fGUI;                // Pointer to GUI class
   TExMap            fLevelMembersCount;  // Contains number of objects on each level
   TExMap            fLevelSize;          // Contains total size in bytes of a level
   TExMap            fPointers;           // Map of pointer to avoid circulation
   TObjArray         fLevelArray;         // Array with pointers to nodes on each level
   TStructNode      *fTopNode;            // Master node for fPointer
   TList             fColors;             // List with properties used to color nodes


private:
   void     AddNode(TStructNode* node, ULong_t size);
   void     CountMembers(TClass* cl, TStructNode* parent, void* pointer);
   void     Prepare();
   void     Reset();

public:
   TStructViewer(void* ptr = NULL, const char * clname = NULL);
   ~TStructViewer();

   void     Draw(Option_t *option = "");
   TCanvas* GetCanvas();
   TGMainFrame* GetFrame();
   TColor   GetColor(const char* typeName);
   TExMap   GetLevelMembersCount() const;
   TExMap   GetLevelSize() const;
   Bool_t   GetLinksVisibility() const;
   void    *GetPointer() const;
   void     SetColor(TString name, Int_t color);
   void     SetLinksVisibility(Bool_t val);
   void     SetPointer(void* ptr, const char* clname = NULL);

   ClassDef(TStructViewer, 0); // A 3D struct viewer
};

#endif
 TStructViewer.h:1
 TStructViewer.h:2
 TStructViewer.h:3
 TStructViewer.h:4
 TStructViewer.h:5
 TStructViewer.h:6
 TStructViewer.h:7
 TStructViewer.h:8
 TStructViewer.h:9
 TStructViewer.h:10
 TStructViewer.h:11
 TStructViewer.h:12
 TStructViewer.h:13
 TStructViewer.h:14
 TStructViewer.h:15
 TStructViewer.h:16
 TStructViewer.h:17
 TStructViewer.h:18
 TStructViewer.h:19
 TStructViewer.h:20
 TStructViewer.h:21
 TStructViewer.h:22
 TStructViewer.h:23
 TStructViewer.h:24
 TStructViewer.h:25
 TStructViewer.h:26
 TStructViewer.h:27
 TStructViewer.h:28
 TStructViewer.h:29
 TStructViewer.h:30
 TStructViewer.h:31
 TStructViewer.h:32
 TStructViewer.h:33
 TStructViewer.h:34
 TStructViewer.h:35
 TStructViewer.h:36
 TStructViewer.h:37
 TStructViewer.h:38
 TStructViewer.h:39
 TStructViewer.h:40
 TStructViewer.h:41
 TStructViewer.h:42
 TStructViewer.h:43
 TStructViewer.h:44
 TStructViewer.h:45
 TStructViewer.h:46
 TStructViewer.h:47
 TStructViewer.h:48
 TStructViewer.h:49
 TStructViewer.h:50
 TStructViewer.h:51
 TStructViewer.h:52
 TStructViewer.h:53
 TStructViewer.h:54
 TStructViewer.h:55
 TStructViewer.h:56
 TStructViewer.h:57
 TStructViewer.h:58
 TStructViewer.h:59
 TStructViewer.h:60
 TStructViewer.h:61
 TStructViewer.h:62
 TStructViewer.h:63
 TStructViewer.h:64
 TStructViewer.h:65