00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef FXFILELIST_H
00022 #define FXFILELIST_H
00023
00024 #ifndef FXICONLIST_H
00025 #include "FXIconList.h"
00026 #endif
00027
00028 namespace FX {
00029
00030 struct FXFileAssoc;
00031 class FXFileDict;
00032 class FXFileList;
00033 class FXIcon;
00034 class FXIconSource;
00035 class FXIconDict;
00036
00037
00039 enum {
00040 FILELIST_SHOWHIDDEN = 0x04000000,
00041 FILELIST_SHOWDIRS = 0x08000000,
00042 FILELIST_SHOWFILES = 0x10000000,
00043 FILELIST_SHOWIMAGES = 0x20000000,
00044 FILELIST_NO_OWN_ASSOC = 0x40000000,
00045 FILELIST_NO_PARENT = 0x80000000
00046 };
00047
00048
00049
00051 class FXAPI FXFileItem : public FXIconItem {
00052 FXDECLARE(FXFileItem)
00053 friend class FXFileList;
00054 protected:
00055 FXFileAssoc *assoc;
00056 FXFileItem *link;
00057 FXlong size;
00058 FXTime date;
00059 FXuint mode;
00060 private:
00061 FXFileItem(const FXFileItem&);
00062 FXFileItem& operator=(const FXFileItem&);
00063 protected:
00064 FXFileItem():assoc(NULL),link(NULL),size(0),date(0){}
00065 public:
00066
00068 FXFileItem(const FXString& text,FXIcon* bi=NULL,FXIcon* mi=NULL,void* ptr=NULL):FXIconItem(text,bi,mi,ptr),assoc(NULL),link(NULL),size(0L),date(0L),mode(0){}
00069
00071 FXbool isFile() const { return (mode&(FXIO::File))!=0; }
00072
00074 FXbool isDirectory() const { return (mode&FXIO::Directory)!=0; }
00075
00077 FXbool isExecutable() const { return (mode&FXIO::File)!=0 && (mode&FXIO::AllExec)!=0; }
00078
00080 FXbool isSymlink() const { return (mode&FXIO::SymLink)!=0; }
00081
00083 FXbool isChardev() const { return (mode&FXIO::Character)!=0; }
00084
00086 FXbool isBlockdev() const { return (mode&FXIO::Block)!=0; }
00087
00089 FXbool isFifo() const { return (mode&FXIO::Fifo)!=0; }
00090
00092 FXbool isSocket() const { return (mode&FXIO::Socket)!=0; }
00093
00095 FXbool isNavigational() const { return (label[0]=='.' && (label[1]=='\t' || (label[1]=='.' && label[2]=='\t'))); }
00096
00098 void setAssoc(FXFileAssoc* a){ assoc=a; }
00099
00101 FXFileAssoc* getAssoc() const { return assoc; }
00102
00104 void setSize(FXlong s){ size=s; }
00105
00107 FXlong getSize() const { return size; }
00108
00110 void setDate(FXTime d){ date=d; }
00111
00113 FXTime getDate() const { return date; }
00114
00116 void setMode(FXuint m){ mode=m; }
00117
00119 FXuint getMode() const { return mode; }
00120 };
00121
00122
00133 class FXAPI FXFileList : public FXIconList {
00134 FXDECLARE(FXFileList)
00135 protected:
00136 FXFileDict *associations;
00137 FXFileItem *list;
00138 FXIcon *big_folder;
00139 FXIcon *mini_folder;
00140 FXIcon *big_doc;
00141 FXIcon *mini_doc;
00142 FXIcon *big_app;
00143 FXIcon *mini_app;
00144 FXString directory;
00145 FXString pattern;
00146 FXString startdirectory;
00147 FXString dropdirectory;
00148 FXString *clipfiles;
00149 FXString *dragfiles;
00150 FXString *dropfiles;
00151 FXuint matchmode;
00152 FXint imagesize;
00153 FXTime timestamp;
00154 FXuint counter;
00155 FXDragAction dropaction;
00156 FXbool clipcut;
00157 FXbool draggable;
00158 protected:
00159 FXFileList();
00160 void listItems(FXbool force);
00161 FXIcon* getItemPreviewIcon(FXint index) const;
00162 virtual FXIconItem *createItem(const FXString& text,FXIcon *big,FXIcon* mini,void* ptr);
00163 private:
00164 FXFileList(const FXFileList&);
00165 FXFileList &operator=(const FXFileList&);
00166 public:
00167 long onOpenTimer(FXObject*,FXSelector,void*);
00168 long onRefreshTimer(FXObject*,FXSelector,void*);
00169 long onPreviewChore(FXObject*,FXSelector,void*);
00170 long onDNDEnter(FXObject*,FXSelector,void*);
00171 long onDNDLeave(FXObject*,FXSelector,void*);
00172 long onDNDMotion(FXObject*,FXSelector,void*);
00173 long onDNDDrop(FXObject*,FXSelector,void*);
00174 long onDNDRequest(FXObject*,FXSelector,void*);
00175 long onBeginDrag(FXObject*,FXSelector,void*);
00176 long onEndDrag(FXObject*,FXSelector,void*);
00177 long onDragged(FXObject*,FXSelector,void*);
00178 long onClipboardLost(FXObject*,FXSelector,void*);
00179 long onClipboardRequest(FXObject*,FXSelector,void*);
00180 long onCmdSetValue(FXObject*,FXSelector,void*);
00181 long onCmdGetStringValue(FXObject*,FXSelector,void*);
00182 long onCmdSetStringValue(FXObject*,FXSelector,void*);
00183 long onCmdDirectoryUp(FXObject*,FXSelector,void*);
00184 long onUpdDirectoryUp(FXObject*,FXSelector,void*);
00185 long onCmdSortByName(FXObject*,FXSelector,void*);
00186 long onUpdSortByName(FXObject*,FXSelector,void*);
00187 long onCmdSortByType(FXObject*,FXSelector,void*);
00188 long onUpdSortByType(FXObject*,FXSelector,void*);
00189 long onCmdSortBySize(FXObject*,FXSelector,void*);
00190 long onUpdSortBySize(FXObject*,FXSelector,void*);
00191 long onCmdSortByTime(FXObject*,FXSelector,void*);
00192 long onUpdSortByTime(FXObject*,FXSelector,void*);
00193 long onCmdSortByUser(FXObject*,FXSelector,void*);
00194 long onUpdSortByUser(FXObject*,FXSelector,void*);
00195 long onCmdSortByGroup(FXObject*,FXSelector,void*);
00196 long onUpdSortByGroup(FXObject*,FXSelector,void*);
00197 long onCmdSortReverse(FXObject*,FXSelector,void*);
00198 long onUpdSortReverse(FXObject*,FXSelector,void*);
00199 long onCmdSortCase(FXObject*,FXSelector,void*);
00200 long onUpdSortCase(FXObject*,FXSelector,void*);
00201 long onCmdSetPattern(FXObject*,FXSelector,void*);
00202 long onUpdSetPattern(FXObject*,FXSelector,void*);
00203 long onCmdSetDirectory(FXObject*,FXSelector,void*);
00204 long onUpdSetDirectory(FXObject*,FXSelector,void*);
00205 long onCmdToggleHidden(FXObject*,FXSelector,void*);
00206 long onUpdToggleHidden(FXObject*,FXSelector,void*);
00207 long onCmdShowHidden(FXObject*,FXSelector,void*);
00208 long onUpdShowHidden(FXObject*,FXSelector,void*);
00209 long onCmdHideHidden(FXObject*,FXSelector,void*);
00210 long onUpdHideHidden(FXObject*,FXSelector,void*);
00211 long onCmdToggleImages(FXObject*,FXSelector,void*);
00212 long onUpdToggleImages(FXObject*,FXSelector,void*);
00213 long onCmdHeader(FXObject*,FXSelector,void*);
00214 long onUpdHeader(FXObject*,FXSelector,void*);
00215 long onCmdRefresh(FXObject*,FXSelector,void*);
00216 long onCmdCutSel(FXObject*,FXSelector,void*);
00217 long onCmdCopySel(FXObject*,FXSelector,void*);
00218 long onCmdPasteSel(FXObject*,FXSelector,void*);
00219 long onCmdDeleteSel(FXObject*,FXSelector,void*);
00220 long onCmdDropAsk(FXObject*,FXSelector,void*);
00221 long onCmdDropCopy(FXObject*,FXSelector,void*);
00222 long onCmdDropMove(FXObject*,FXSelector,void*);
00223 long onCmdDropLink(FXObject*,FXSelector,void*);
00224 public:
00225 static FXint ascending(const FXIconItem* a,const FXIconItem* b);
00226 static FXint descending(const FXIconItem* a,const FXIconItem* b);
00227 static FXint ascendingCase(const FXIconItem* a,const FXIconItem* b);
00228 static FXint descendingCase(const FXIconItem* a,const FXIconItem* b);
00229 static FXint ascendingType(const FXIconItem* a,const FXIconItem* b);
00230 static FXint descendingType(const FXIconItem* a,const FXIconItem* b);
00231 static FXint ascendingSize(const FXIconItem* a,const FXIconItem* b);
00232 static FXint descendingSize(const FXIconItem* a,const FXIconItem* b);
00233 static FXint ascendingTime(const FXIconItem* a,const FXIconItem* b);
00234 static FXint descendingTime(const FXIconItem* a,const FXIconItem* b);
00235 static FXint ascendingUser(const FXIconItem* a,const FXIconItem* b);
00236 static FXint descendingUser(const FXIconItem* a,const FXIconItem* b);
00237 static FXint ascendingGroup(const FXIconItem* a,const FXIconItem* b);
00238 static FXint descendingGroup(const FXIconItem* a,const FXIconItem* b);
00239 public:
00240 enum {
00241 ID_OPENTIMER=FXIconList::ID_LAST,
00242 ID_REFRESHTIMER,
00243 ID_DROPASK,
00244 ID_DROPCOPY,
00245 ID_DROPMOVE,
00246 ID_DROPLINK,
00247 ID_PREVIEWCHORE,
00248 ID_SORT_BY_NAME,
00249 ID_SORT_BY_TYPE,
00250 ID_SORT_BY_SIZE,
00251 ID_SORT_BY_TIME,
00252 ID_SORT_BY_USER,
00253 ID_SORT_BY_GROUP,
00254 ID_SORT_REVERSE,
00255 ID_SORT_CASE,
00256 ID_DIRECTORY_UP,
00257 ID_SET_PATTERN,
00258 ID_SET_DIRECTORY,
00259 ID_SHOW_HIDDEN,
00260 ID_HIDE_HIDDEN,
00261 ID_TOGGLE_HIDDEN,
00262 ID_TOGGLE_IMAGES,
00263 ID_REFRESH,
00264 ID_CUT_SEL,
00265 ID_COPY_SEL,
00266 ID_DELETE_SEL,
00267 ID_PASTE_SEL,
00268 ID_LAST
00269 };
00270 public:
00271
00273 FXFileList(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0);
00274
00276 virtual void create();
00277
00279 virtual void detach();
00280
00282 virtual void destroy();
00283
00285 void scan(FXbool force=true);
00286
00288 void setCurrentFile(const FXString& file,FXbool notify=false);
00289
00291 FXString getCurrentFile() const;
00292
00294 FXString *getSelectedFiles() const;
00295
00297 void setDirectory(const FXString& path,FXbool notify=false);
00298
00300 FXString getDirectory() const { return directory; }
00301
00303 void setPattern(const FXString& ptrn);
00304
00306 FXString getPattern() const { return pattern; }
00307
00309 FXString getItemFilename(FXint index) const;
00310
00312 FXString getItemPathname(FXint index) const;
00313
00315 FXbool isItemFile(FXint index) const;
00316
00318 FXbool isItemDirectory(FXint index) const;
00319
00321 FXbool isItemExecutable(FXint index) const;
00322
00324 FXbool isItemSymlink(FXint index) const;
00325
00327 FXbool isItemNavigational(FXint index) const;
00328
00330 FXFileAssoc* getItemAssoc(FXint index) const;
00331
00333 FXlong getItemSize(FXint index) const;
00334
00336 FXTime getItemDate(FXint index) const;
00337
00339 FXuint getItemMode(FXint index) const;
00340
00342 void setMatchMode(FXuint mode);
00343
00345 FXuint getMatchMode() const { return matchmode; }
00346
00348 void showHiddenFiles(FXbool flag);
00349
00351 FXbool showHiddenFiles() const;
00352
00354 void showOnlyDirectories(FXbool flag);
00355
00357 FXbool showOnlyDirectories() const;
00358
00360 void showOnlyFiles(FXbool flag);
00361
00363 FXbool showOnlyFiles() const;
00364
00366 void showParents(FXbool flag);
00367
00369 FXbool showParents() const;
00370
00372 void showImages(FXbool flag);
00373
00375 FXbool showImages() const;
00376
00378 void setImageSize(FXint size);
00379
00381 FXint getImageSize() const { return imagesize; }
00382
00384 void setAssociations(FXFileDict* assoc,FXbool owned=false);
00385
00387 FXFileDict* getAssociations() const { return associations; }
00388
00390 void setDraggableFiles(FXbool flag);
00391
00393 FXbool getDraggableFiles() const { return draggable; }
00394
00396 virtual void save(FXStream& store) const;
00397
00399 virtual void load(FXStream& store);
00400
00402 virtual ~FXFileList();
00403 };
00404
00405 }
00406
00407 #endif