TGFSContainer.h

Go to the documentation of this file.
00001 // @(#)root/gui:$Id: TGFSContainer.h 36090 2010-10-05 17:32:34Z rdm $
00002 // Author: Fons Rademakers   19/01/98
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 #ifndef ROOT_TGFSContainer
00013 #define ROOT_TGFSContainer
00014 
00015 
00016 //////////////////////////////////////////////////////////////////////////
00017 //                                                                      //
00018 // TGFileIcon, TGFileEntry, TGFSContainer                               //
00019 //                                                                      //
00020 // Utility classes used by the file selection dialog (TGFileDialog).    //
00021 //                                                                      //
00022 //////////////////////////////////////////////////////////////////////////
00023 
00024 #ifndef ROOT_TGListView
00025 #include "TGListView.h"
00026 #endif
00027 #ifndef ROOT_TDNDManager
00028 #include "TGDNDManager.h"
00029 #endif
00030 #ifndef ROOT_TBufferFile
00031 #include "TBufferFile.h"
00032 #endif
00033 #include <stdlib.h>
00034 
00035 //----- file sort mode
00036 enum EFSSortMode {
00037    kSortByName,
00038    kSortByType,
00039    kSortBySize,
00040    kSortByDate,
00041    kSortByOwner,
00042    kSortByGroup
00043 };
00044 
00045 
00046 class TRegexp;
00047 class TGPicture;
00048 class TGFileContainer;
00049 class TViewUpdateTimer;
00050 class TGFileIcon;
00051 class TGFileItem;
00052 class TTimer;
00053 class TString;
00054 struct FileStat_t;
00055 
00056 
00057 class TGFileItem : public TGLVEntry {
00058 
00059 protected:
00060    const TGPicture  *fBlpic;        // big icon
00061    const TGPicture  *fSlpic;        // small icon
00062    const TGPicture  *fLcurrent;     // current icon
00063    Int_t             fType;         // file type
00064    Int_t             fUid, fGid;    // file uid and gid
00065    Bool_t            fIsLink;       // true if symbolic link
00066    Long_t            fModTime;      // modification time
00067    Long64_t          fSize;         // file size
00068    TBufferFile      *fBuf;          // buffer used for Drag and Drop
00069    TDNDData          fDNDData;      // Drag and Drop data
00070 
00071    void         Init(const TGPicture *blpic, const TGPicture *slpic,
00072                      FileStat_t &stat, EListViewMode viewMode);
00073    virtual void DoRedraw();
00074 
00075 public:
00076    TGFileItem(const TGWindow *p = 0,
00077               const TGPicture *bpic = 0, const TGPicture *blpic = 0,
00078               const TGPicture *spic = 0, const TGPicture *slpic = 0,
00079               TGString *name = 0, Int_t type = 0, Long64_t size = 1,
00080               Int_t uid = 0, Int_t gid = 0, Long_t modtime = 0,
00081               EListViewMode viewMode = kLVList, UInt_t options = kVerticalFrame,
00082               Pixel_t back = GetWhitePixel());
00083 
00084    TGFileItem(const TGWindow *p,
00085               const TGPicture *bpic, const TGPicture *blpic,
00086               const TGPicture *spic, const TGPicture *slpic,
00087               TGString *name, FileStat_t &stat,
00088               EListViewMode viewMode = kLVList, UInt_t options = kVerticalFrame,
00089               Pixel_t back = GetWhitePixel());
00090 
00091    virtual ~TGFileItem();
00092 
00093    virtual void SetViewMode(EListViewMode viewMode);
00094 
00095    Bool_t   IsActive() const { return fActive; }
00096    Bool_t   IsSymLink() const { return fIsLink; }
00097    Int_t    GetType() const { return fType; }
00098    Long64_t GetSize() const { return fSize; }
00099    Long_t   GetModTime() const { return fModTime; }
00100    Int_t    GetUid() const { return fUid; }
00101    Int_t    GetGid() const { return fGid; }
00102 
00103    virtual TDNDData *GetDNDdata(Atom_t) {
00104       return &fDNDData;
00105    }
00106 
00107    virtual Atom_t HandleDNDEnter(Atom_t *) {
00108       if (!IsDNDTarget()) return kNone;
00109       return gVirtualX->InternAtom("application/root", kFALSE);
00110    }
00111 
00112    virtual Bool_t HandleDNDLeave() {
00113       return kTRUE;
00114    }
00115 
00116    virtual Atom_t HandleDNDPosition(int, int, Atom_t action, int, int) {
00117       if (action == TGDNDManager::GetDNDActionCopy()) return action;
00118       return kNone;
00119    }
00120 
00121    virtual Bool_t HandleDNDFinished() {
00122       return ((TGFrame *)(const_cast<TGWindow*>(GetParent())))->HandleDNDFinished();
00123    }
00124 
00125    void SetDNDData(TDNDData *data) {
00126       if (fDNDData.fDataLength > 0)
00127          free(fDNDData.fData);
00128       fDNDData.fData = calloc(sizeof(unsigned char), data->fDataLength);
00129       memcpy(fDNDData.fData, data->fData, data->fDataLength);
00130       fDNDData.fDataLength = data->fDataLength;
00131       fDNDData.fDataType = data->fDataType;
00132    }
00133 
00134    void SetDNDObject(TObject *obj) {
00135       if (fDNDData.fDataLength)
00136          free(fDNDData.fData);
00137       fBuf->WriteObject(obj);
00138       fDNDData.fData = fBuf->Buffer();
00139       fDNDData.fDataLength = fBuf->Length();
00140       fDNDData.fDataType = gVirtualX->InternAtom("application/root", kFALSE);
00141    }
00142 
00143    ClassDef(TGFileItem,0)   // Class representing file system object
00144 };
00145 
00146 
00147 class TGFileContainer : public TGLVContainer {
00148 
00149 friend class TGFSFrameElement;
00150 
00151 protected:
00152    EFSSortMode       fSortType;       // sorting mode of contents
00153    TRegexp          *fFilter;         // file filter
00154    TViewUpdateTimer *fRefresh;        // refresh timer
00155    ULong_t           fMtime;          // directory modification time
00156    TString           fDirectory;      // current directory
00157    TList            *fCleanups;       // list of pictures to cleanup
00158    const TGPicture  *fFolder_t;       // small folder icon
00159    const TGPicture  *fFolder_s;       // big folder icon
00160    const TGPicture  *fApp_t;          // small application icon
00161    const TGPicture  *fApp_s;          // big application icon
00162    const TGPicture  *fDoc_t;          // small document icon
00163    const TGPicture  *fDoc_s;          // big document icon
00164    const TGPicture  *fSlink_t;        // small symbolic link icon
00165    const TGPicture  *fSlink_s;        // big symbolic link icon
00166    Bool_t            fCachePictures;  // kTRUE use caching
00167    Bool_t            fDisplayStat;    // kFALSE to interrupt display directory
00168                                       // contents in case of many files inside
00169 
00170    void CreateFileList();
00171 
00172 public:
00173    TGFileContainer(const TGWindow *p = 0, UInt_t w = 1, UInt_t h = 1,
00174                    UInt_t options = kSunkenFrame,
00175                    Pixel_t back = GetDefaultFrameBackground());
00176    TGFileContainer(TGCanvas *p, UInt_t options = kSunkenFrame,
00177                    Pixel_t back = GetDefaultFrameBackground());
00178 
00179    virtual ~TGFileContainer();
00180 
00181    virtual Bool_t HandleTimer(TTimer *t);
00182    void StopRefreshTimer();
00183    void StartRefreshTimer(ULong_t msec=1000);
00184 
00185    virtual TGFileItem *AddFile(const char *name, const TGPicture *pic = 0, const TGPicture *lpic = 0);
00186    virtual TGFileItem *AddRemoteFile(TObject *obj, const TGPicture *ipic = 0, const TGPicture *ilpic = 0);
00187    virtual void AddFrame(TGFrame *f, TGLayoutHints *l = 0);
00188    virtual void Sort(EFSSortMode sortType);
00189    virtual void SetFilter(const char *filter);
00190    virtual void ChangeDirectory(const char *path);
00191    virtual void DisplayDirectory();
00192    virtual void SetDisplayStat(Bool_t stat = kTRUE) { fDisplayStat = stat; }
00193    Bool_t       GetDisplayStat() { return fDisplayStat; }
00194 
00195    const char *GetDirectory() const { return fDirectory.Data(); }
00196 
00197    virtual void GetFilePictures(const TGPicture **pic, const TGPicture **lpic,
00198                                 Int_t file_type, Bool_t is_link, const char *ext,
00199                                 Bool_t small);
00200 
00201    virtual void SavePrimitive(ostream &out, Option_t *option = "");
00202 
00203    ClassDef(TGFileContainer,0)  // Container containing file system objects
00204 };
00205 
00206 #endif

Generated on Tue Jul 5 14:20:02 2011 for ROOT_528-00b_version by  doxygen 1.5.1