// @(#)root/gui:$Name:  $:$Id: TGFileDialog.h,v 1.8 2006/05/23 04:47:38 brun Exp $
// Author: Fons Rademakers   20/01/98

/*************************************************************************
 * Copyright (C) 1995-2000, 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_TGFileDialog
#define ROOT_TGFileDialog

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGFileDialog                                                         //
//                                                                      //
// This class creates a file selection dialog. It contains a combo box  //
// to select the desired directory. A listview with the different       //
// files in the current directory and a combo box with which you can    //
// select a filter (on file extensions).                                //
// When creating a file dialog one passes a pointer to a TGFileInfo     //
// object. In this object you can set the fFileTypes and fIniDir to     //
// specify the list of file types for the filter combo box and the      //
// initial directory. When the TGFileDialog ctor returns the selected   //
// file name can be found in the TGFileInfo::fFilename field and the    //
// selected directory in TGFileInfo::fIniDir. The fFilename and         //
// fIniDir are deleted by the TGFileInfo dtor.                          //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TGFrame
#include "TGFrame.h"
#endif


enum EFileDialogMode {
   kFDOpen,
   kFDSave
};


class TGTextBuffer;
class TGTextEntry;
class TGComboBox;
class TGPictureButton;
class TGTextButton;
class TGCheckButton;
class TGListView;
class TGFileContainer;
class TGFSComboBox;


class TGFileInfo {

protected:
   TGFileInfo(const TGFileInfo&);
   TGFileInfo& operator=(const TGFileInfo&);

public:
   char         *fFilename;    // selected file name
   char         *fIniDir;      // on input: initial directory, on output: new directory
   const char  **fFileTypes;   // file types used to filter selectable files
   Int_t         fFileTypeIdx; // selected file type, index in fFileTypes
   Bool_t        fOverwrite;   // if true overwrite the file with existing name on save

   TGFileInfo() : fFilename(0), fIniDir(0), fFileTypes(0), fFileTypeIdx(0), fOverwrite(kFALSE) { }
   ~TGFileInfo() { delete [] fFilename; delete [] fIniDir; }
};


class TGFileDialog : public TGTransientFrame {

protected:
   TGTextBuffer      *fTbfname;  // text buffer of file name
   TGTextEntry       *fName;     // file name text entry
   TGComboBox        *fTypes;    // file type combo box
   TGFSComboBox      *fTreeLB;   // file system path combo box
   TGPictureButton   *fCdup;     // top toolbar button
   TGPictureButton   *fNewf;     // top toolbar button
   TGPictureButton   *fList;     // top toolbar button
   TGPictureButton   *fDetails;  // top toolbar button
   TGCheckButton     *fOverWR;   // set on/off file overwriting 
   const TGPicture   *fPcdup;    // picture for fCdup
   const TGPicture   *fPnewf;    // picture for fNewf
   const TGPicture   *fPlist;    // picture for fList
   const TGPicture   *fPdetails; // picture for fDetails
   TGTextButton      *fOk;       // ok button
   TGTextButton      *fCancel;   // cancel button
   TGListView        *fFv;       // file list view
   TGFileContainer   *fFc;       // file list view container (containing the files)
   TGFileInfo        *fFileInfo; // file info passed to this dialog

   TGFileDialog(const TGFileDialog&);
   TGFileDialog& operator=(const TGFileDialog&);

public:
   TGFileDialog(const TGWindow *p = 0, const TGWindow *main = 0,
                EFileDialogMode dlg_type = kFDOpen, TGFileInfo *file_info = 0);
   virtual ~TGFileDialog();

   virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
   virtual void CloseWindow();

   ClassDef(TGFileDialog,0)  //File selection dialog
};

#endif
