//+SEQ,CopyRight,T=NOINCLUDE.

#ifndef ROOT_TRootBrowser
#define ROOT_TRootBrowser

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TRootBrowser                                                         //
//                                                                      //
// This class creates a ROOT object browser (looking like Windows       //
// Explorer). The widgets used are the new native ROOT GUI widgets.     //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TBrowserImp
//*KEEP,TBrowserImp.
#include "TBrowserImp.h"
//*KEND.
#endif
#ifndef ROOT_TGFrame
//*KEEP,TGFrame.
#include "TGFrame.h"
//*KEND.
#endif

class TGMenuBar;
class TGPopupMenu;
class TGLayoutHints;
class TGStatusBar;
class TGHorizontal3DLine;
class TGToolBar;
class TGButton;
class TGFSComboBox;
class TGLabel;
class TGListView;
class TRootIconBox;
class TGCanvas;
class TGListTree;
class TGListTreeItem;
class TGFileItem;
class TList;


class TRootBrowser : public TGMainFrame, public TBrowserImp {

private:
   TGHorizontal3DLine  *fToolBarSep;
   TGToolBar           *fToolBar;
   TGButton            *fToolBarButton[7];  // same size as gToolBarData[]
   TGFSComboBox        *fFSComboBox;
   TGStatusBar         *fStatusBar;
   TGVerticalFrame     *fV1;
   TGVerticalFrame     *fV2;
   TGLabel             *fLbl1;
   TGLabel             *fLbl2;
   TGHorizontalFrame   *fHf;
   TGCompositeFrame    *fTreeHdr;
   TGCompositeFrame    *fListHdr;
   TGListView          *fListView;
   TRootIconBox        *fIconBox;

   TGCanvas            *fTreeView;
   TGListTree          *fLt;

   TGLayoutHints       *fMenuBarLayout;
   TGLayoutHints       *fMenuBarItemLayout;
   TGLayoutHints       *fMenuBarHelpLayout;
   TGLayoutHints       *fComboLayout;
   TGLayoutHints       *fBarLayout;

   TGMenuBar           *fMenuBar;
   TGPopupMenu         *fFileMenu;
   TGPopupMenu         *fViewMenu;
   TGPopupMenu         *fOptionMenu;
   TGPopupMenu         *fHelpMenu;
   TGPopupMenu         *fSortMenu;

   TList               *fWidgets;

   char                 fCurrentDir[1024];
   Cursor_t             fWaitCursor;        // busy cursor
   TGListTreeItem      *fListLevel;         // current TGListTree level
   Bool_t               fTreeLock;          // true when we want to lock TGListTree
   Int_t                fViewMode;          // current IconBox view mode
   Int_t                fSortMode;          // current IconBox sort mode

   void  CreateBrowser(const char *name);
   void  ListTreeHighlight(TGListTreeItem *item);
   void  IconBoxAction(TObject *obj);
   void  Chdir(TGListTreeItem *item);
   void  DisplayDirectory();
   void  DisplayTotal(Int_t total, Int_t selected);
   void  SetDefaults();
   void  SetViewMode(Int_t new_mode, Bool_t force = kFALSE);
   void  SetSortMode(Int_t new_mode);

public:
   TRootBrowser(TBrowser *b, const char *title, UInt_t width, UInt_t height);
   TRootBrowser(TBrowser *b, const char *title, Int_t x, Int_t y, UInt_t width, UInt_t height);
   virtual ~TRootBrowser();

   void     Add(TObject *obj, const char *name = 0);
   void     AddToBox(TObject *obj, const char *name);
   void     AddToTree(TObject *obj, const char *name);
   void     BrowseObj(TObject *obj);
   void     ExecuteDefaultAction(TObject *obj);
   void     Iconify() { }
   void     RecursiveRemove(TObject *obj);
   void     Refresh(Bool_t force = kFALSE);
   void     ResizeBrowser() { }
   void     ShowToolBar(Bool_t show = kTRUE);
   void     ShowStatusBar(Bool_t show = kTRUE);
   void     Show() { MapRaised(); }

   // overridden from TGMainFrame
   void     CloseWindow();
   Bool_t   ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);

   ClassDef(TRootBrowser,0)  //ROOT native GUI version of browser
};

#endif