Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members

/home/jeroen/FOX/fox/fox-1.7.33/include/FXFileList.h
00001 /********************************************************************************
00002 *                                                                               *
00003 *                        F i l e    L i s t   W i d g e t                       *
00004 *                                                                               *
00005 *********************************************************************************
00006 * Copyright (C) 1997,2012 by Jeroen van der Zijp.   All Rights Reserved.        *
00007 *********************************************************************************
00008 * This library is free software; you can redistribute it and/or modify          *
00009 * it under the terms of the GNU Lesser General Public License as published by   *
00010 * the Free Software Foundation; either version 3 of the License, or             *
00011 * (at your option) any later version.                                           *
00012 *                                                                               *
00013 * This library is distributed in the hope that it will be useful,               *
00014 * but WITHOUT ANY WARRANTY; without even the implied warranty of                *
00015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                 *
00016 * GNU Lesser General Public License for more details.                           *
00017 *                                                                               *
00018 * You should have received a copy of the GNU Lesser General Public License      *
00019 * along with this program.  If not, see <http://www.gnu.org/licenses/>          *
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;           // File association record
00056   FXFileItem  *link;            // Link to next item
00057   FXlong       size;            // File size
00058   FXTime       date;            // File time
00059   FXuint       mode;            // Mode flags
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;   // Association table
00137   FXFileItem   *list;           // File item list
00138   FXIcon       *big_folder;     // Big folder icon
00139   FXIcon       *mini_folder;    // Mini folder icon
00140   FXIcon       *big_doc;        // Big document icon
00141   FXIcon       *mini_doc;       // Mini document icon
00142   FXIcon       *big_app;        // Big application icon
00143   FXIcon       *mini_app;       // Mini application icon
00144   FXString      directory;      // Current directory
00145   FXString      pattern;        // Pattern of file names
00146   FXString      startdirectory; // Start directory
00147   FXString      dropdirectory;  // Drop directory
00148   FXString     *clipfiles;      // Clipped files
00149   FXString     *dragfiles;      // Dragged files
00150   FXString     *dropfiles;      // Dropped files
00151   FXuint        matchmode;      // File wildcard match mode
00152   FXint         imagesize;      // Image size
00153   FXTime        timestamp;      // Time when last refreshed
00154   FXuint        counter;        // Refresh counter
00155   FXDragAction  dropaction;     // Drop action
00156   FXbool        clipcut;        // Cut or copy
00157   FXbool        draggable;      // Dragable files
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

Copyright © 1997-2011 Jeroen van der Zijp