// @(#)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_TEveBrowser
#define ROOT_TEveBrowser

#include "TEveElement.h"

#include "TRootBrowser.h"
#include "TGListTree.h"

#include "TContextMenu.h"

class TGFileBrowser;
class TGSplitter;

class TEveGedEditor;


class TEveListTreeItem : public TGListTreeItem
{
private:
   TEveListTreeItem(const TEveListTreeItem&);             // not implemented
   TEveListTreeItem& operator=(const TEveListTreeItem&);  // not implemented

protected:
   TEveElement* fElement;

   void NotSupported(const char* func) const;

public:
   TEveListTreeItem(TEveElement* el) : TGListTreeItem(), fElement(el) {}
   virtual ~TEveListTreeItem() {}

   virtual Bool_t          IsActive()       const { return fElement->GetSelectedLevel() != 0; }
   virtual Pixel_t         GetActiveColor() const;
   virtual void            SetActive(Bool_t)      { NotSupported("SetActive"); }

   virtual const char     *GetText()          const { return fElement->GetElementName(); }
   virtual Int_t           GetTextLength()    const { return strlen(fElement->GetElementName()); }
   virtual const char     *GetTipText()       const { return fElement->GetElementTitle(); }
   virtual Int_t           GetTipTextLength() const { return strlen(fElement->GetElementTitle()); }
   virtual void            SetText(const char *)    { NotSupported("SetText"); }
   virtual void            SetTipText(const char *) { NotSupported("SetTipText"); }

   virtual void            SetUserData(void *, Bool_t=kFALSE) { NotSupported("SetUserData"); }
   virtual void           *GetUserData() const { return fElement; }

   virtual const TGPicture*GetPicture()         const { return fElement->GetListTreeIcon(fOpen); }
   virtual const TGPicture*GetCheckBoxPicture() const { return fElement->GetListTreeCheckBoxIcon(); }

   virtual void            SetPictures(const TGPicture*, const TGPicture*) { NotSupported("SetUserData"); }
   virtual void            SetCheckBoxPictures(const TGPicture*, const TGPicture*) { NotSupported("SetUserData"); }

   virtual void            SetCheckBox(Bool_t=kTRUE) { NotSupported("SetCheckBox"); }
   virtual Bool_t          HasCheckBox()       const { return kTRUE; }
   virtual void            CheckItem(Bool_t=kTRUE)   { printf("TEveListTreeItem::CheckItem - to be ignored ... all done via signal Checked().\n"); }
   virtual void            Toggle();
   virtual Bool_t          IsChecked()         const { return fElement->GetRnrState(); }

   // Propagation of checked-state form children to parents. Not needed, ignore.

   // Item coloration (underline + minibox)
   virtual Bool_t          HasColor()  const { return fElement->HasMainColor(); }
   virtual Color_t         GetColor()  const { return fElement->GetMainColor(); }
   virtual void            SetColor(Color_t) { NotSupported("SetColor"); }
   virtual void            ClearColor()      { NotSupported("ClearColor"); }

   ClassDef(TEveListTreeItem,0); // Special llist-tree-item for Eve.
};


class TEveGListTreeEditorFrame : public TGMainFrame
{
   TEveGListTreeEditorFrame(const TEveGListTreeEditorFrame&);            // Not implemented
   TEveGListTreeEditorFrame& operator=(const TEveGListTreeEditorFrame&); // Not implemented

   friend class TEveManager;

protected:
   TGCompositeFrame *fFrame;
   TGCompositeFrame *fLTFrame;

   TGCanvas         *fLTCanvas;
   TGListTree       *fListTree;
   TGSplitter       *fSplitter;
   TEveGedEditor    *fEditor;

   TContextMenu     *fCtxMenu;

   Bool_t            fSignalsConnected;

   static TString    fgEditorClass;

public:
   TEveGListTreeEditorFrame(const TGWindow* p=0, Int_t width=250, Int_t height=700);
   virtual ~TEveGListTreeEditorFrame();

   void ConnectSignals();
   void DisconnectSignals();

   void ReconfToHorizontal();
   void ReconfToVertical();

   TGListTree*    GetListTree() const { return fListTree; }
   TEveGedEditor* GetEditor()   const { return fEditor; }

   void ItemBelowMouse(TGListTreeItem *entry, UInt_t mask);
   void ItemClicked(TGListTreeItem *entry, Int_t btn, UInt_t mask, Int_t x, Int_t y);
   void ItemDblClicked(TGListTreeItem* item, Int_t btn);
   void ItemKeyPress(TGListTreeItem *entry, UInt_t keysym, UInt_t mask);

   static void SetEditorClass(const char* edclass);

   ClassDef(TEveGListTreeEditorFrame, 0); // Composite GUI frame for parallel display of a TGListTree and TEveGedEditor.
};

// ----------------------------------------------------------------

class TEveBrowser : public TRootBrowser
{
   TEveBrowser(const TEveBrowser&);            // Not implemented
   TEveBrowser& operator=(const TEveBrowser&); // Not implemented

protected:
   void SetupCintExport(TClass* cl);
   void CalculateReparentXY(TGObject* parent, Int_t& x, Int_t& y);

   TGFileBrowser    *fFileBrowser;
   TGPopupMenu      *fEvePopup;
   TGPopupMenu      *fSelPopup;
   TGPopupMenu      *fHilPopup;

public:
   TEveBrowser(UInt_t w, UInt_t h);
   virtual ~TEveBrowser() {}

   virtual void ReallyDelete();
   virtual void CloseTab(Int_t id);
   virtual void CloseWindow();

   void InitPlugins(Option_t *opt="FI");

   TGFileBrowser* MakeFileBrowser(Bool_t make_default=kFALSE);
   TGFileBrowser* GetFileBrowser() const;
   void           SetFileBrowser(TGFileBrowser* b);

   void EveMenu(Int_t id);

   // Some getters missing in TRootBrowser
   TGMenuBar*         GetMenuBar()      const { return fMenuBar; }
   TGHorizontalFrame* GetTopMenuFrame() const { return fTopMenuFrame; }

   void HideBottomTab();

   void SanitizeTabCounts();

   ClassDef(TEveBrowser, 0); // Specialization of TRootBrowser for Eve.
};

#endif
 TEveBrowser.h:1
 TEveBrowser.h:2
 TEveBrowser.h:3
 TEveBrowser.h:4
 TEveBrowser.h:5
 TEveBrowser.h:6
 TEveBrowser.h:7
 TEveBrowser.h:8
 TEveBrowser.h:9
 TEveBrowser.h:10
 TEveBrowser.h:11
 TEveBrowser.h:12
 TEveBrowser.h:13
 TEveBrowser.h:14
 TEveBrowser.h:15
 TEveBrowser.h:16
 TEveBrowser.h:17
 TEveBrowser.h:18
 TEveBrowser.h:19
 TEveBrowser.h:20
 TEveBrowser.h:21
 TEveBrowser.h:22
 TEveBrowser.h:23
 TEveBrowser.h:24
 TEveBrowser.h:25
 TEveBrowser.h:26
 TEveBrowser.h:27
 TEveBrowser.h:28
 TEveBrowser.h:29
 TEveBrowser.h:30
 TEveBrowser.h:31
 TEveBrowser.h:32
 TEveBrowser.h:33
 TEveBrowser.h:34
 TEveBrowser.h:35
 TEveBrowser.h:36
 TEveBrowser.h:37
 TEveBrowser.h:38
 TEveBrowser.h:39
 TEveBrowser.h:40
 TEveBrowser.h:41
 TEveBrowser.h:42
 TEveBrowser.h:43
 TEveBrowser.h:44
 TEveBrowser.h:45
 TEveBrowser.h:46
 TEveBrowser.h:47
 TEveBrowser.h:48
 TEveBrowser.h:49
 TEveBrowser.h:50
 TEveBrowser.h:51
 TEveBrowser.h:52
 TEveBrowser.h:53
 TEveBrowser.h:54
 TEveBrowser.h:55
 TEveBrowser.h:56
 TEveBrowser.h:57
 TEveBrowser.h:58
 TEveBrowser.h:59
 TEveBrowser.h:60
 TEveBrowser.h:61
 TEveBrowser.h:62
 TEveBrowser.h:63
 TEveBrowser.h:64
 TEveBrowser.h:65
 TEveBrowser.h:66
 TEveBrowser.h:67
 TEveBrowser.h:68
 TEveBrowser.h:69
 TEveBrowser.h:70
 TEveBrowser.h:71
 TEveBrowser.h:72
 TEveBrowser.h:73
 TEveBrowser.h:74
 TEveBrowser.h:75
 TEveBrowser.h:76
 TEveBrowser.h:77
 TEveBrowser.h:78
 TEveBrowser.h:79
 TEveBrowser.h:80
 TEveBrowser.h:81
 TEveBrowser.h:82
 TEveBrowser.h:83
 TEveBrowser.h:84
 TEveBrowser.h:85
 TEveBrowser.h:86
 TEveBrowser.h:87
 TEveBrowser.h:88
 TEveBrowser.h:89
 TEveBrowser.h:90
 TEveBrowser.h:91
 TEveBrowser.h:92
 TEveBrowser.h:93
 TEveBrowser.h:94
 TEveBrowser.h:95
 TEveBrowser.h:96
 TEveBrowser.h:97
 TEveBrowser.h:98
 TEveBrowser.h:99
 TEveBrowser.h:100
 TEveBrowser.h:101
 TEveBrowser.h:102
 TEveBrowser.h:103
 TEveBrowser.h:104
 TEveBrowser.h:105
 TEveBrowser.h:106
 TEveBrowser.h:107
 TEveBrowser.h:108
 TEveBrowser.h:109
 TEveBrowser.h:110
 TEveBrowser.h:111
 TEveBrowser.h:112
 TEveBrowser.h:113
 TEveBrowser.h:114
 TEveBrowser.h:115
 TEveBrowser.h:116
 TEveBrowser.h:117
 TEveBrowser.h:118
 TEveBrowser.h:119
 TEveBrowser.h:120
 TEveBrowser.h:121
 TEveBrowser.h:122
 TEveBrowser.h:123
 TEveBrowser.h:124
 TEveBrowser.h:125
 TEveBrowser.h:126
 TEveBrowser.h:127
 TEveBrowser.h:128
 TEveBrowser.h:129
 TEveBrowser.h:130
 TEveBrowser.h:131
 TEveBrowser.h:132
 TEveBrowser.h:133
 TEveBrowser.h:134
 TEveBrowser.h:135
 TEveBrowser.h:136
 TEveBrowser.h:137
 TEveBrowser.h:138
 TEveBrowser.h:139
 TEveBrowser.h:140
 TEveBrowser.h:141
 TEveBrowser.h:142
 TEveBrowser.h:143
 TEveBrowser.h:144
 TEveBrowser.h:145
 TEveBrowser.h:146
 TEveBrowser.h:147
 TEveBrowser.h:148
 TEveBrowser.h:149
 TEveBrowser.h:150
 TEveBrowser.h:151
 TEveBrowser.h:152
 TEveBrowser.h:153
 TEveBrowser.h:154
 TEveBrowser.h:155
 TEveBrowser.h:156
 TEveBrowser.h:157
 TEveBrowser.h:158
 TEveBrowser.h:159
 TEveBrowser.h:160
 TEveBrowser.h:161
 TEveBrowser.h:162
 TEveBrowser.h:163
 TEveBrowser.h:164
 TEveBrowser.h:165
 TEveBrowser.h:166
 TEveBrowser.h:167
 TEveBrowser.h:168
 TEveBrowser.h:169