Skip to content
Snippets Groups Projects
FXFileList.i 12.9 KiB
Newer Older
  • Learn to ignore specific revisions
  • /***********************************************************************
     * FXRuby -- the Ruby language bindings for the FOX GUI toolkit.
    
     * Copyright (c) 2001-2009 by Lyle Johnson. All Rights Reserved.
    
     *
     * This library is free software; you can redistribute it and/or
     * modify it under the terms of the GNU Lesser General Public
     * License as published by the Free Software Foundation; either
     * version 2.1 of the License, or (at your option) any later version.
     *
     * This library is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     * Lesser General Public License for more details.
     *
     * You should have received a copy of the GNU Lesser General Public
     * License along with this library; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     *
     * For further information please contact the author by e-mail
    
     * at "lyle@lylejohnson.name".
    
     ***********************************************************************/
    
    struct FXFileAssoc;
    
    class  FXFileDict;
    
    class  FXIcon;
    
    
    // File List options
    enum {
      FILELIST_SHOWHIDDEN   = 0x04000000, /// Show hidden files or directories
      FILELIST_SHOWDIRS     = 0x08000000, /// Show only directories
      FILELIST_SHOWFILES    = 0x10000000, /// Show only files
      FILELIST_SHOWIMAGES   = 0x20000000, /// Show preview of images
      FILELIST_NO_OWN_ASSOC = 0x40000000, /// Do not create associations for files
      FILELIST_NO_PARENT    = 0x80000000  /// Suppress display of '.' and '..'
      };
    
    
    /// File item
    class FXFileItem : public FXIconItem {
    public:
      %extend {
        /// Constructor
        FXFileItem(const FXString& text,FXIcon* bi=NULL,FXIcon* mi=NULL,void* ITEMDATA=NULL){
          return new FXRbFileItem(text,bi,mi,ITEMDATA);
          }
        }
    
      /// Return true if this is a file item
      FXbool isFile() const;
    
      /// Return true if this is a directory item
      FXbool isDirectory() const;
    
      /// Return true if this is a share item
      FXbool isShare() const;
    
      /// Return true if this is an executable item
      FXbool isExecutable() const;
    
      /// Return true if this is a symbolic link item
      FXbool isSymlink() const;
    
      /// Return true if this is a character device item
      FXbool isChardev() const;
    
      /// Return true if this is a block device item
      FXbool isBlockdev() const;
    
      /// Return true if this is an FIFO item
      FXbool isFifo() const;
    
      /// Return true if this is a socket
      FXbool isSocket() const;
    
      /// Return the file-association object for this item
      FXFileAssoc* getAssoc() const;
    
      /// Return the file size for this item
      FXlong getSize() const;
    
      /// Return the date for this item
      FXTime getDate() const;
    
      /// Destructor
      virtual ~FXFileItem();
      };
    
    
    DECLARE_FXOBJECT_VIRTUALS(FXFileItem)
    DECLARE_FXICONITEM_VIRTUALS(FXFileItem)
    
    
    // Rename these methods
    %rename(getHiddenFilesShown) FXFileList::showHiddenFiles() const;
    %rename(setHiddenFilesShown) FXFileList::showHiddenFiles(FXbool showing);
    
    %rename(getOnlyDirectoriesShown) FXFileList::showOnlyDirectories() const;
    %rename(setOnlyDirectoriesShown) FXFileList::showOnlyDirectories(FXbool shown);
    
    %rename(getShowImages) FXFileList::showImages() const;
    %rename(setShowImages) FXFileList::showImages(FXbool showing);
    
      /// Return TRUE if showing parent directories
    %rename("parentDirsShown?") FXFileList::showParents() const;
    
    /// Show parent directories
    %rename("parentDirsShown=") FXFileList::showParents(FXbool shown);
    
    %typemap(check) FXint FILELIST_ITEM_INDEX {
      if ($1 < 0 || $1 >= arg1->getNumItems()) {
        rb_raise(rb_eIndexError, "file list item index out of bounds");
      }
    }
    
    %apply FXint FILELIST_ITEM_INDEX { FXint index };
    
    /**
    * A File List widget provides an icon rich view of the file system.
    * It automatically updates itself periodically by re-scanning the file system
    * for any changes.  As it scans the displayed directory, it automatically
    * determines the icons to be displayed by consulting the file associations registry
    * settings.  A number of messages can be sent to the File List to control the
    * filter pattern, sort category, sorting order, case sensitivity, and hidden file
    * display mode.
    * The File list widget supports drags and drops of files.
    */
    class FXFileList : public FXIconList {
    protected:
      FXString     directory;             // Current directory
      FXString     orgdirectory;          // Original directory
      FXString     dropdirectory;         // Drop directory
      FXDragAction dropaction;            // Drop action
      FXString     dragfiles;             // Dragged files
      FXFileDict  *associations;          // Association table
      FXFileItem  *list;                  // File item list
      FXString     pattern;               // Pattern of file names
      FXuint       matchmode;             // File wildcard match mode
      FXuint       counter;               // Refresh counter
      FXint         imagesize;      // Image size
      FXTime       timestamp;             // Time when last refreshed
      FXIcon      *big_folder;            // Big folder icon
      FXIcon      *mini_folder;           // Mini folder icon
      FXIcon      *big_doc;               // Big document icon
      FXIcon      *mini_doc;              // Mini document icon
      FXIcon      *big_app;               // Big application icon
      FXIcon      *mini_app;              // Mini application icon
    protected:
      FXFileList();
      virtual FXIconItem *createItem(const FXString& text,FXIcon *big,FXIcon* mini,void* ptr);
      void listItems(FXbool force);
    public:
      long onOpenTimer(FXObject*,FXSelector,void* PTR_IGNORE);
      long onRefreshTimer(FXObject*,FXSelector,void* PTR_IGNORE);
      long onDNDEnter(FXObject*,FXSelector,void* PTR_EVENT);
      long onDNDLeave(FXObject*,FXSelector,void* PTR_EVENT);
      long onDNDMotion(FXObject*,FXSelector,void* PTR_EVENT);
      long onDNDDrop(FXObject*,FXSelector,void* PTR_EVENT);
      long onDNDRequest(FXObject*,FXSelector,void* PTR_EVENT);
      long onBeginDrag(FXObject*,FXSelector,void* PTR_EVENT);
      long onEndDrag(FXObject*,FXSelector,void* PTR_EVENT);
      long onDragged(FXObject*,FXSelector,void* PTR_EVENT);
      long onCmdSetValue(FXObject*,FXSelector,void* PTR_CSTRING);
      long onCmdGetStringValue(FXObject*,FXSelector,void* PTR_STRING);
      long onCmdSetStringValue(FXObject*,FXSelector,void* PTR_IGNORE); // FIXME
      long onCmdDirectoryUp(FXObject*,FXSelector,void* PTR_IGNORE);
      long onUpdDirectoryUp(FXObject*,FXSelector,void* PTR_IGNORE); // FIXME
      long onCmdSortByName(FXObject*,FXSelector,void* PTR_IGNORE);
      long onUpdSortByName(FXObject*,FXSelector,void* PTR_IGNORE); // FIXME
      long onCmdSortByType(FXObject*,FXSelector,void* PTR_IGNORE);
      long onUpdSortByType(FXObject*,FXSelector,void* PTR_IGNORE); // FIXME
      long onCmdSortBySize(FXObject*,FXSelector,void* PTR_IGNORE);
      long onUpdSortBySize(FXObject*,FXSelector,void* PTR_IGNORE); // FIXME
      long onCmdSortByTime(FXObject*,FXSelector,void* PTR_IGNORE);
      long onUpdSortByTime(FXObject*,FXSelector,void* PTR_IGNORE); // FIXME
      long onCmdSortByUser(FXObject*,FXSelector,void* PTR_IGNORE);
      long onUpdSortByUser(FXObject*,FXSelector,void* PTR_IGNORE); // FIXME
      long onCmdSortByGroup(FXObject*,FXSelector,void* PTR_IGNORE);
      long onUpdSortByGroup(FXObject*,FXSelector,void* PTR_IGNORE); // FIXME
      long onCmdSortReverse(FXObject*,FXSelector,void* PTR_IGNORE);
      long onUpdSortReverse(FXObject*,FXSelector,void* PTR_IGNORE); // FIXME
      long onCmdSortCase(FXObject*,FXSelector,void* PTR_IGNORE);
      long onUpdSortCase(FXObject*,FXSelector,void* PTR_NULL); // FIXME
      long onCmdSetPattern(FXObject*,FXSelector,void* PTR_CSTRING);
      long onUpdSetPattern(FXObject*,FXSelector,void* PTR_IGNORE);
      long onCmdSetDirectory(FXObject*,FXSelector,void* PTR_CSTRING);
      long onUpdSetDirectory(FXObject*,FXSelector,void* PTR_IGNORE);
      long onCmdToggleHidden(FXObject*,FXSelector,void* PTR_IGNORE);
      long onUpdToggleHidden(FXObject*,FXSelector,void* PTR_IGNORE);
      long onCmdShowHidden(FXObject*,FXSelector,void* PTR_IGNORE);
      long onUpdShowHidden(FXObject*,FXSelector,void* PTR_IGNORE);
      long onCmdHideHidden(FXObject*,FXSelector,void* PTR_IGNORE);
      long onUpdHideHidden(FXObject*,FXSelector,void* PTR_IGNORE);
      long onCmdToggleImages(FXObject*,FXSelector,void* PTR_IGNORE);
      long onUpdToggleImages(FXObject*,FXSelector,void* PTR_IGNORE);
      long onCmdHeader(FXObject*,FXSelector,void* PTR_UINT);
      long onUpdHeader(FXObject*,FXSelector,void* PTR_IGNORE);
      long onCmdRefresh(FXObject*,FXSelector,void* PTR_IGNORE);
    public:
      static FXint ascending(const FXIconItem* a,const FXIconItem* b);
      static FXint descending(const FXIconItem* a,const FXIconItem* b);
      static FXint ascendingCase(const FXIconItem* a,const FXIconItem* b);
      static FXint descendingCase(const FXIconItem* a,const FXIconItem* b);
      static FXint ascendingType(const FXIconItem* a,const FXIconItem* b);
      static FXint descendingType(const FXIconItem* a,const FXIconItem* b);
      static FXint ascendingSize(const FXIconItem* a,const FXIconItem* b);
      static FXint descendingSize(const FXIconItem* a,const FXIconItem* b);
      static FXint ascendingTime(const FXIconItem* a,const FXIconItem* b);
      static FXint descendingTime(const FXIconItem* a,const FXIconItem* b);
      static FXint ascendingUser(const FXIconItem* a,const FXIconItem* b);
      static FXint descendingUser(const FXIconItem* a,const FXIconItem* b);
      static FXint ascendingGroup(const FXIconItem* a,const FXIconItem* b);
      static FXint descendingGroup(const FXIconItem* a,const FXIconItem* b);
    public:
      enum {
        ID_REFRESHTIMER=FXIconList::ID_LAST,
        ID_OPENTIMER,
        ID_SORT_BY_NAME,    /// Sort by name
        ID_SORT_BY_TYPE,    /// Sort by type
        ID_SORT_BY_SIZE,    /// Sort by size
        ID_SORT_BY_TIME,    /// Sort by access time
        ID_SORT_BY_USER,    /// Sort by owner name
        ID_SORT_BY_GROUP,   /// Sort by group name
        ID_SORT_REVERSE,    /// Reverse sort order
        ID_SORT_CASE,       /// Toggle sort case sensitivity
        ID_DIRECTORY_UP,    /// Move up one directory
        ID_SET_PATTERN,     /// Set match pattern
        ID_SET_DIRECTORY,   /// Set directory
        ID_SHOW_HIDDEN,     /// Show hidden files
        ID_HIDE_HIDDEN,     /// Hide hidden files
        ID_TOGGLE_HIDDEN,   /// Toggle display of hidden files
        ID_TOGGLE_IMAGES,   /// Toggle display of images
        ID_REFRESH,         /// Refresh immediately
        ID_LAST
        };
    public:
      %extend {
        /// Construct a file list
        FXFileList(FXComposite *p,FXObject* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0){
          return new FXRbFileList(p,tgt,sel,opts,x,y,w,h);
          }
        }
    
      /// Scan the current directory and update the items if needed, or if force is TRUE
      void scan(FXbool force=TRUE);
    
      /// Set current file
      void setCurrentFile(const FXString& file,FXbool notify=FALSE);
    
      /// Return current file
      FXString getCurrentFile() const;
    
      /// Set current directory
      void setDirectory(const FXString& path);
    
      /// Return current directory
      FXString getDirectory() const;
    
      /// Change wildcard matching pattern
      void setPattern(const FXString& ptrn);
    
      /// Return wildcard pattern
      FXString getPattern() const;
    
      /// Return TRUE if item is a directory
      FXbool isItemDirectory(FXint index) const;
    
      /// Return TRUE if item is a directory
      FXbool isItemShare(FXint index) const;
    
      /// Return TRUE if item is a file
      FXbool isItemFile(FXint index) const;
    
      /// Return TRUE if item is executable
      FXbool isItemExecutable(FXint index) const;
    
      /// Return name of item at index
      FXString getItemFilename(FXint index) const;
    
      /// Return full pathname of item at index
      FXString getItemPathname(FXint index) const;
    
      /// Return file association of item
      FXFileAssoc* getItemAssoc(FXint index) const;
    
      /// Return wildcard matching mode
      FXuint getMatchMode() const;
    
      /// Change wildcard matching mode
      void setMatchMode(FXuint mode);
    
    
      /// Return TRUE if showing hidden files
    
      FXbool showHiddenFiles() const;
    
      /// Show or hide hidden files
      void showHiddenFiles(FXbool showing);
    
      /// Return TRUE if showing directories only
      FXbool showOnlyDirectories() const;
    
      /// Show directories only
      void showOnlyDirectories(FXbool shown);
    
      /// Return TRUE if showing files only
      FXbool showOnlyFiles() const;
    
      /// Show files only
      void showOnlyFiles(FXbool shown);
    
      /// Return TRUE if image preview on
      FXbool showImages() const;
    
      /// Show or hide preview images
      void showImages(FXbool showing);
    
      /// Return images preview size
      FXint getImageSize() const;
    
      /// Change images preview size
      void setImageSize(FXint size);
    
      /// Return TRUE if showing parent directories
      FXbool showParents() const;
    
      /// Show parent directories
      void showParents(FXbool shown);
    
      /// Change file associations
      void setAssociations(FXFileDict* assoc);
    
      /// Return file associations
      FXFileDict* getAssociations() const;
    
      /// Destructor
      virtual ~FXFileList();
      };
    
    %clear FXint index;
    
    DECLARE_FXOBJECT_VIRTUALS(FXFileList)
    DECLARE_FXID_VIRTUALS(FXFileList)
    DECLARE_FXDRAWABLE_VIRTUALS(FXFileList)
    DECLARE_FXWINDOW_VIRTUALS(FXFileList)
    DECLARE_FXSCROLLAREA_VIRTUALS(FXFileList)
    DECLARE_FXICONLIST_VIRTUALS(FXFileList)