00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef FXDIRLIST_H
00025 #define FXDIRLIST_H
00026
00027 #ifndef FXTREELIST_H
00028 #include "FXTreeList.h"
00029 #endif
00030
00031 namespace FX {
00032
00033
00034 struct FXFileAssoc;
00035 class FXFileDict;
00036 class FXIcon;
00037 class FXDirList;
00038
00039
00040
00041 enum {
00042 DIRLIST_SHOWFILES = 0x08000000,
00043 DIRLIST_SHOWHIDDEN = 0x10000000,
00044 DIRLIST_NO_OWN_ASSOC = 0x20000000
00045 };
00046
00047
00048
00049 class FXAPI FXDirItem : public FXTreeItem {
00050 FXDECLARE(FXDirItem)
00051 friend class FXDirList;
00052 protected:
00053 FXFileAssoc *assoc;
00054 FXDirItem *link;
00055 FXDirItem *list;
00056 unsigned long size;
00057 FXTime date;
00058 protected:
00059 FXDirItem():assoc(NULL),link(NULL),list(NULL),size(0),date(0){}
00060 protected:
00061 enum {
00062 FOLDER = 512,
00063 EXECUTABLE = 1024,
00064 SYMLINK = 2048,
00065 CHARDEV = 4096,
00066 BLOCKDEV = 8192,
00067 FIFO = 16384,
00068 SOCK = 32768
00069 };
00070 public:
00071
00072
00073 FXDirItem(const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ptr=NULL):FXTreeItem(text,oi,ci,ptr),assoc(NULL),link(NULL),list(NULL),size(0),date(0){state=HASITEMS;}
00074
00075
00076 FXbool isFile() const { return (state&(FOLDER|BLOCKDEV|CHARDEV|FIFO|SOCK))==0; }
00077
00078
00079 FXbool isDirectory() const { return (state&FOLDER)!=0; }
00080
00081
00082 FXbool isExecutable() const { return (state&EXECUTABLE)!=0; }
00083
00084
00085 FXbool isSymlink() const { return (state&SYMLINK)!=0; }
00086
00087
00088 FXbool isChardev() const { return (state&CHARDEV)!=0; }
00089
00090
00091 FXbool isBlockdev() const { return (state&BLOCKDEV)!=0; }
00092
00093
00094 FXbool isFifo() const { return (state&FIFO)!=0; }
00095
00096
00097 FXbool isSocket() const { return (state&SOCK)!=0; }
00098
00099
00100 FXFileAssoc* getAssoc() const { return assoc; }
00101
00102
00103 unsigned long getSize() const { return size; }
00104
00105
00106 FXTime getDate() const { return date; }
00107 };
00108
00109
00110
00111 class FXAPI FXDirList : public FXTreeList {
00112 FXDECLARE(FXDirList)
00113 protected:
00114 FXFileDict *associations;
00115 FXDirItem *list;
00116 FXString dropdirectory;
00117 FXDragAction dropaction;
00118 FXString dragfiles;
00119 FXString pattern;
00120 FXuint matchmode;
00121 FXuint counter;
00122 FXIcon *open_folder;
00123 FXIcon *closed_folder;
00124 FXIcon *mini_doc;
00125 FXIcon *mini_app;
00126 FXIcon *cdromicon;
00127 FXIcon *harddiskicon;
00128 FXIcon *networkicon;
00129 FXIcon *floppyicon;
00130 FXIcon *zipdiskicon;
00131 protected:
00132 FXDirList();
00133 void listRootItems();
00134 void listChildItems(FXDirItem *par);
00135 virtual FXTreeItem* createItem(const FXString& text,FXIcon* oi,FXIcon* ci,void* ptr);
00136 private:
00137 FXDirList(const FXDirList&);
00138 FXDirList &operator=(const FXDirList&);
00139 public:
00140 long onRefreshTimer(FXObject*,FXSelector,void*);
00141 long onBeginDrag(FXObject*,FXSelector,void*);
00142 long onEndDrag(FXObject*,FXSelector,void*);
00143 long onDragged(FXObject*,FXSelector,void*);
00144 long onDNDEnter(FXObject*,FXSelector,void*);
00145 long onDNDLeave(FXObject*,FXSelector,void*);
00146 long onDNDMotion(FXObject*,FXSelector,void*);
00147 long onDNDDrop(FXObject*,FXSelector,void*);
00148 long onDNDRequest(FXObject*,FXSelector,void*);
00149 long onCmdSetValue(FXObject*,FXSelector,void*);
00150 long onCmdSetStringValue(FXObject*,FXSelector,void*);
00151 long onCmdGetStringValue(FXObject*,FXSelector,void*);
00152 long onCmdToggleHidden(FXObject*,FXSelector,void*);
00153 long onUpdToggleHidden(FXObject*,FXSelector,void*);
00154 long onCmdShowHidden(FXObject*,FXSelector,void*);
00155 long onUpdShowHidden(FXObject*,FXSelector,void*);
00156 long onCmdHideHidden(FXObject*,FXSelector,void*);
00157 long onUpdHideHidden(FXObject*,FXSelector,void*);
00158 long onCmdToggleFiles(FXObject*,FXSelector,void*);
00159 long onUpdToggleFiles(FXObject*,FXSelector,void*);
00160 long onCmdShowFiles(FXObject*,FXSelector,void*);
00161 long onUpdShowFiles(FXObject*,FXSelector,void*);
00162 long onCmdHideFiles(FXObject*,FXSelector,void*);
00163 long onUpdHideFiles(FXObject*,FXSelector,void*);
00164 long onCmdSetPattern(FXObject*,FXSelector,void*);
00165 long onUpdSetPattern(FXObject*,FXSelector,void*);
00166 long onCmdSortReverse(FXObject*,FXSelector,void*);
00167 long onUpdSortReverse(FXObject*,FXSelector,void*);
00168 long onCmdSortCase(FXObject*,FXSelector,void*);
00169 long onUpdSortCase(FXObject*,FXSelector,void*);
00170 long onCmdRefresh(FXObject*,FXSelector,void*);
00171 public:
00172 static FXint ascending(const FXTreeItem* a,const FXTreeItem* b);
00173 static FXint descending(const FXTreeItem* a,const FXTreeItem* b);
00174 static FXint ascendingCase(const FXTreeItem* a,const FXTreeItem* b);
00175 static FXint descendingCase(const FXTreeItem* a,const FXTreeItem* b);
00176 public:
00177 enum {
00178 ID_REFRESHTIMER=FXTreeList::ID_LAST,
00179 ID_SHOW_FILES,
00180 ID_HIDE_FILES,
00181 ID_TOGGLE_FILES,
00182 ID_SHOW_HIDDEN,
00183 ID_HIDE_HIDDEN,
00184 ID_TOGGLE_HIDDEN,
00185 ID_SET_PATTERN,
00186 ID_SORT_REVERSE,
00187 ID_SORT_CASE,
00188 ID_REFRESH,
00189 ID_LAST
00190 };
00191 public:
00192
00193
00194 FXDirList(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0);
00195
00196
00197 virtual void create();
00198
00199
00200 virtual void detach();
00201
00202
00203 virtual void destroy();
00204
00205
00206 void scan(FXbool force=TRUE);
00207
00208
00209 FXbool isItemDirectory(const FXTreeItem* item) const;
00210
00211
00212 FXbool isItemFile(const FXTreeItem* item) const;
00213
00214
00215 FXbool isItemExecutable(const FXTreeItem* item) const;
00216
00217
00218 virtual FXbool collapseTree(FXTreeItem* tree,FXbool notify=FALSE);
00219
00220
00221 virtual FXbool expandTree(FXTreeItem* tree,FXbool notify=FALSE);
00222
00223
00224 void setCurrentFile(const FXString& file,FXbool notify=FALSE);
00225
00226
00227 FXString getCurrentFile() const;
00228
00229
00230 void setDirectory(const FXString& path,FXbool notify=FALSE);
00231
00232
00233 FXString getDirectory() const;
00234
00235
00236 FXString getItemPathname(const FXTreeItem* item) const;
00237
00238
00239 FXTreeItem* getPathnameItem(const FXString& path);
00240
00241
00242 void setPattern(const FXString& ptrn);
00243
00244
00245 FXString getPattern() const { return pattern; }
00246
00247
00248 FXuint getMatchMode() const { return matchmode; }
00249
00250
00251 void setMatchMode(FXuint mode);
00252
00253
00254 FXbool showFiles() const;
00255
00256
00257 void showFiles(FXbool showing);
00258
00259
00260 FXbool showHiddenFiles() const;
00261
00262
00263 void showHiddenFiles(FXbool showing);
00264
00265
00266 void setAssociations(FXFileDict* assoc);
00267
00268
00269 FXFileDict* getAssociations() const { return associations; }
00270
00271
00272 virtual void save(FXStream& store) const;
00273
00274
00275 virtual void load(FXStream& store);
00276
00277
00278 virtual ~FXDirList();
00279 };
00280
00281 }
00282
00283 #endif