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 FXFILELIST_H
00025 #define FXFILELIST_H
00026
00027 #ifndef FXICONLIST_H
00028 #include "FXIconList.h"
00029 #endif
00030
00031 namespace FX {
00032
00033 struct FXFileAssoc;
00034 class FXFileDict;
00035 class FXFileList;
00036 class FXIcon;
00037
00038
00039
00040 enum {
00041 FILELIST_SHOWHIDDEN = 0x04000000,
00042 FILELIST_SHOWDIRS = 0x08000000,
00043 FILELIST_SHOWFILES = 0x10000000,
00044 FILELIST_NO_OWN_ASSOC = 0x20000000
00045 };
00046
00047
00048
00049
00050 class FXAPI FXFileItem : public FXIconItem {
00051 FXDECLARE(FXFileItem)
00052 friend class FXFileList;
00053 protected:
00054 FXFileAssoc *assoc;
00055 FXFileItem *link;
00056 unsigned long size;
00057 FXTime date;
00058 protected:
00059 FXFileItem():assoc(NULL),link(NULL),size(0),date(0){}
00060 protected:
00061 enum{
00062 FOLDER = 64,
00063 EXECUTABLE = 128,
00064 SYMLINK = 256,
00065 CHARDEV = 512,
00066 BLOCKDEV = 1024,
00067 FIFO = 2048,
00068 SOCK = 4096,
00069 SHARE = 8192
00070 };
00071 public:
00072
00073 FXFileItem(const FXString& text,FXIcon* bi=NULL,FXIcon* mi=NULL,void* ptr=NULL):FXIconItem(text,bi,mi,ptr),assoc(NULL),link(NULL),size(0),date(0){}
00074
00075
00076 FXbool isFile() const { return (state&(FOLDER|BLOCKDEV|CHARDEV|FIFO|SOCK|SHARE))==0; }
00077
00078
00079 FXbool isDirectory() const { return (state&FOLDER)!=0; }
00080
00081
00082 FXbool isShare() const { return (state&SHARE)!=0; }
00083
00084
00085 FXbool isExecutable() const { return (state&EXECUTABLE)!=0; }
00086
00087
00088 FXbool isSymlink() const { return (state&SYMLINK)!=0; }
00089
00090
00091 FXbool isChardev() const { return (state&CHARDEV)!=0; }
00092
00093
00094 FXbool isBlockdev() const { return (state&BLOCKDEV)!=0; }
00095
00096
00097 FXbool isFifo() const { return (state&FIFO)!=0; }
00098
00099
00100 FXbool isSocket() const { return (state&SOCK)!=0; }
00101
00102
00103 FXFileAssoc* getAssoc() const { return assoc; }
00104
00105
00106 unsigned long getSize() const { return size; }
00107
00108
00109 FXTime getDate() const { return date; }
00110 };
00111
00112
00113
00114 class FXAPI FXFileList : public FXIconList {
00115 FXDECLARE(FXFileList)
00116 protected:
00117 FXString directory;
00118 FXString orgdirectory;
00119 FXString dropdirectory;
00120 FXDragAction dropaction;
00121 FXString dragfiles;
00122 FXFileDict *associations;
00123 FXFileItem *list;
00124 FXString pattern;
00125 FXuint matchmode;
00126 FXuint counter;
00127 FXTime timestamp;
00128 FXIcon *big_folder;
00129 FXIcon *mini_folder;
00130 FXIcon *big_doc;
00131 FXIcon *mini_doc;
00132 FXIcon *big_app;
00133 FXIcon *mini_app;
00134 protected:
00135 FXFileList();
00136 virtual FXIconItem *createItem(const FXString& text,FXIcon *big,FXIcon* mini,void* ptr);
00137 void listItems();
00138 private:
00139 FXFileList(const FXFileList&);
00140 FXFileList &operator=(const FXFileList&);
00141 public:
00142 long onRefreshTimer(FXObject*,FXSelector,void*);
00143 long onOpenTimer(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 onBeginDrag(FXObject*,FXSelector,void*);
00150 long onEndDrag(FXObject*,FXSelector,void*);
00151 long onDragged(FXObject*,FXSelector,void*);
00152 long onCmdSetValue(FXObject*,FXSelector,void*);
00153 long onCmdGetStringValue(FXObject*,FXSelector,void*);
00154 long onCmdSetStringValue(FXObject*,FXSelector,void*);
00155 long onCmdDirectoryUp(FXObject*,FXSelector,void*);
00156 long onUpdDirectoryUp(FXObject*,FXSelector,void*);
00157 long onCmdSortByName(FXObject*,FXSelector,void*);
00158 long onUpdSortByName(FXObject*,FXSelector,void*);
00159 long onCmdSortByType(FXObject*,FXSelector,void*);
00160 long onUpdSortByType(FXObject*,FXSelector,void*);
00161 long onCmdSortBySize(FXObject*,FXSelector,void*);
00162 long onUpdSortBySize(FXObject*,FXSelector,void*);
00163 long onCmdSortByTime(FXObject*,FXSelector,void*);
00164 long onUpdSortByTime(FXObject*,FXSelector,void*);
00165 long onCmdSortByUser(FXObject*,FXSelector,void*);
00166 long onUpdSortByUser(FXObject*,FXSelector,void*);
00167 long onCmdSortByGroup(FXObject*,FXSelector,void*);
00168 long onUpdSortByGroup(FXObject*,FXSelector,void*);
00169 long onCmdSortReverse(FXObject*,FXSelector,void*);
00170 long onUpdSortReverse(FXObject*,FXSelector,void*);
00171 long onCmdSortCase(FXObject*,FXSelector,void*);
00172 long onUpdSortCase(FXObject*,FXSelector,void*);
00173 long onCmdSetPattern(FXObject*,FXSelector,void*);
00174 long onUpdSetPattern(FXObject*,FXSelector,void*);
00175 long onCmdSetDirectory(FXObject*,FXSelector,void*);
00176 long onUpdSetDirectory(FXObject*,FXSelector,void*);
00177 long onCmdToggleHidden(FXObject*,FXSelector,void*);
00178 long onUpdToggleHidden(FXObject*,FXSelector,void*);
00179 long onCmdShowHidden(FXObject*,FXSelector,void*);
00180 long onUpdShowHidden(FXObject*,FXSelector,void*);
00181 long onCmdHideHidden(FXObject*,FXSelector,void*);
00182 long onUpdHideHidden(FXObject*,FXSelector,void*);
00183 long onCmdHeader(FXObject*,FXSelector,void*);
00184 long onUpdHeader(FXObject*,FXSelector,void*);
00185 long onCmdRefresh(FXObject*,FXSelector,void*);
00186 public:
00187 static FXint ascending(const FXIconItem* pa,const FXIconItem* pb);
00188 static FXint descending(const FXIconItem* pa,const FXIconItem* pb);
00189 static FXint ascendingCase(const FXIconItem* pa,const FXIconItem* pb);
00190 static FXint descendingCase(const FXIconItem* pa,const FXIconItem* pb);
00191 static FXint ascendingType(const FXIconItem* pa,const FXIconItem* pb);
00192 static FXint descendingType(const FXIconItem* pa,const FXIconItem* pb);
00193 static FXint ascendingSize(const FXIconItem* pa,const FXIconItem* pb);
00194 static FXint descendingSize(const FXIconItem* pa,const FXIconItem* pb);
00195 static FXint ascendingTime(const FXIconItem* pa,const FXIconItem* pb);
00196 static FXint descendingTime(const FXIconItem* pa,const FXIconItem* pb);
00197 static FXint ascendingUser(const FXIconItem* pa,const FXIconItem* pb);
00198 static FXint descendingUser(const FXIconItem* pa,const FXIconItem* pb);
00199 static FXint ascendingGroup(const FXIconItem* pa,const FXIconItem* pb);
00200 static FXint descendingGroup(const FXIconItem* pa,const FXIconItem* pb);
00201 public:
00202 enum {
00203 ID_REFRESHTIMER=FXIconList::ID_LAST,
00204 ID_OPENTIMER,
00205 ID_SORT_BY_NAME,
00206 ID_SORT_BY_TYPE,
00207 ID_SORT_BY_SIZE,
00208 ID_SORT_BY_TIME,
00209 ID_SORT_BY_USER,
00210 ID_SORT_BY_GROUP,
00211 ID_SORT_REVERSE,
00212 ID_SORT_CASE,
00213 ID_DIRECTORY_UP,
00214 ID_SET_PATTERN,
00215 ID_SET_DIRECTORY,
00216 ID_SHOW_HIDDEN,
00217 ID_HIDE_HIDDEN,
00218 ID_TOGGLE_HIDDEN,
00219 ID_REFRESH,
00220 ID_LAST
00221 };
00222 public:
00223
00224
00225 FXFileList(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0);
00226
00227
00228 virtual void create();
00229
00230
00231 virtual void detach();
00232
00233
00234 virtual void destroy();
00235
00236
00237 void scan(FXbool force=TRUE);
00238
00239
00240 void setCurrentFile(const FXString& file);
00241
00242
00243 FXString getCurrentFile() const;
00244
00245
00246 void setDirectory(const FXString& path);
00247
00248
00249 FXString getDirectory() const { return directory; }
00250
00251
00252 void setPattern(const FXString& ptrn);
00253
00254
00255 FXString getPattern() const { return pattern; }
00256
00257
00258 FXbool isItemDirectory(FXint index) const;
00259
00260
00261 FXbool isItemShare(FXint index) const;
00262
00263
00264 FXbool isItemFile(FXint index) const;
00265
00266
00267 FXbool isItemExecutable(FXint index) const;
00268
00269
00270 FXString getItemFilename(FXint index) const;
00271
00272
00273 FXString getItemPathname(FXint index) const;
00274
00275
00276 FXFileAssoc* getItemAssoc(FXint index) const;
00277
00278
00279 FXuint getMatchMode() const { return matchmode; }
00280
00281
00282 void setMatchMode(FXuint mode);
00283
00284
00285 FXbool showHiddenFiles() const;
00286
00287
00288 void showHiddenFiles(FXbool showing);
00289
00290
00291 FXbool showOnlyDirectories() const;
00292
00293
00294 void showOnlyDirectories(FXbool shown);
00295
00296
00297 FXbool showOnlyFiles() const;
00298
00299
00300 void showOnlyFiles(FXbool shown);
00301
00302
00303 void setAssociations(FXFileDict* assoc);
00304
00305
00306 FXFileDict* getAssociations() const { return associations; }
00307
00308
00309 virtual void save(FXStream& store) const;
00310
00311
00312 virtual void load(FXStream& store);
00313
00314
00315 virtual ~FXFileList();
00316 };
00317
00318 }
00319
00320 #endif