00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ROOT_TGFSContainer
00013 #define ROOT_TGFSContainer
00014
00015
00016
00017
00018
00019
00020
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
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;
00061 const TGPicture *fSlpic;
00062 const TGPicture *fLcurrent;
00063 Int_t fType;
00064 Int_t fUid, fGid;
00065 Bool_t fIsLink;
00066 Long_t fModTime;
00067 Long64_t fSize;
00068 TBufferFile *fBuf;
00069 TDNDData fDNDData;
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)
00144 };
00145
00146
00147 class TGFileContainer : public TGLVContainer {
00148
00149 friend class TGFSFrameElement;
00150
00151 protected:
00152 EFSSortMode fSortType;
00153 TRegexp *fFilter;
00154 TViewUpdateTimer *fRefresh;
00155 ULong_t fMtime;
00156 TString fDirectory;
00157 TList *fCleanups;
00158 const TGPicture *fFolder_t;
00159 const TGPicture *fFolder_s;
00160 const TGPicture *fApp_t;
00161 const TGPicture *fApp_s;
00162 const TGPicture *fDoc_t;
00163 const TGPicture *fDoc_s;
00164 const TGPicture *fSlink_t;
00165 const TGPicture *fSlink_s;
00166 Bool_t fCachePictures;
00167 Bool_t fDisplayStat;
00168
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)
00204 };
00205
00206 #endif