Fetching contributors…
Cannot retrieve contributors at this time
287 lines (238 sloc) 10.4 KB
* 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
* 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 "".
struct FXFileAssoc;
class FXFileDict;
class FXIcon;
/// Directory List options
enum {
DIRLIST_SHOWFILES = 0x08000000, /// Show files as well as directories
DIRLIST_SHOWHIDDEN = 0x10000000, /// Show hidden files or directories
DIRLIST_NO_OWN_ASSOC = 0x20000000 /// Do not create associations for files
/// Directory item
class FXDirItem : public FXTreeItem {
FXFileAssoc *assoc; // File association
FXDirItem *link; // Link to next item
FXDirItem *list; // List of child items
FXlong size; // File size (if a file)
FXTime date; // Time of item
enum {
FOLDER = 512, // Directory item
EXECUTABLE = 1024, // Executable item
SYMLINK = 2048, // Symbolic linked item
CHARDEV = 4096, // Character special item
BLOCKDEV = 8192, // Block special item
FIFO = 16384, // FIFO item
SOCK = 32768 // Socket item
%extend {
/// Constructor
FXDirItem(const FXString& text,FXIcon* oi=NULL,FXIcon* ci=NULL,void* ITEMDATA=NULL){
return new FXRbDirItem(text,oi,ci,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 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, in nanoseconds
FXTime getDate() const;
// Destructor
virtual ~FXDirItem();
// Rename these methods
%rename(getShowFiles) FXDirList::showFiles() const;
%rename(setShowFiles) FXDirList::showFiles(FXbool showing);
%rename(getShowHiddenFiles) FXDirList::showHiddenFiles() const;
%rename(setShowHiddenFiles) FXDirList::showHiddenFiles(FXbool showing);
%rename("draggableFiles=") FXDirList::setDraggableFiles(FXbool);
%rename("draggableFiles") FXDirList::getDraggableFiles() const;
* A Directory List widget provides a tree-structured view of the file system.
* It automatically updates itself periodically by re-scanning the file system
* for any changes. As it scans the displayed directories and files, it automatically
* determines the icons to be displayed by consulting the file-associations registry
* settings. A number of messages can be sent to the Directory List to control the
* filter pattern, sorting order, case sensitivity, and hidden file display mode.
* The Directory list widget supports drags and drops of files.
class FXDirList : public FXTreeList {
FXFileDict *associations; // Association table
FXDirItem *list; // Root item list
FXIcon *opendiricon; // Open folder icon
FXIcon *closeddiricon; // Closed folder icon
FXIcon *documenticon; // Document icon
FXIcon *applicationicon; // Application icon
FXIcon *cdromicon; // CDROM icon
FXIcon *harddiskicon; // Hard drive icon
FXIcon *networkicon; // Network icon
FXIcon *floppyicon; // Floppy icon
FXIcon *zipdiskicon; // Zip disk icon
FXString pattern; // Pattern of file names
FXString dropdirectory; // Drop directory
FXString dragfiles; // Dragged file names
FXString dropfiles; // Dropped file names
FXDragAction dropaction; // Drop action
FXuint matchmode; // File wildcard match mode
FXuint counter; // Refresh counter
FXbool draggable; // Dragable files
void listRootItems();
void listChildItems(FXDirItem *par);
virtual FXTreeItem* createItem(const FXString& text,FXIcon* oi,FXIcon* ci,void* ptr);
long onRefreshTimer(FXObject*,FXSelector,void* PTR_IGNORE);
long onBeginDrag(FXObject*,FXSelector,void* PTR_EVENT);
long onEndDrag(FXObject*,FXSelector,void* PTR_EVENT);
long onDragged(FXObject*,FXSelector,void* PTR_EVENT);
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 onCmdSetValue(FXObject*,FXSelector,void* PTR_CSTRING);
long onCmdSetStringValue(FXObject*,FXSelector,void* PTR_STRING);
long onCmdGetStringValue(FXObject*,FXSelector,void* PTR_IGNORE); // FIXME
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 onCmdToggleFiles(FXObject*,FXSelector,void* PTR_IGNORE);
long onUpdToggleFiles(FXObject*,FXSelector,void* PTR_IGNORE);
long onCmdShowFiles(FXObject*,FXSelector,void* PTR_IGNORE);
long onUpdShowFiles(FXObject*,FXSelector,void* PTR_IGNORE);
long onCmdHideFiles(FXObject*,FXSelector,void* PTR_IGNORE);
long onUpdHideFiles(FXObject*,FXSelector,void* PTR_IGNORE);
long onCmdSetPattern(FXObject*,FXSelector,void* PTR_CSTRING);
long onUpdSetPattern(FXObject*,FXSelector,void* PTR_IGNORE);
long onCmdSortReverse(FXObject*,FXSelector,void* PTR_IGNORE);
long onUpdSortReverse(FXObject*,FXSelector,void* PTR_NULL); // FIXME
long onCmdSortCase(FXObject*,FXSelector,void* PTR_IGNORE);
long onUpdSortCase(FXObject*,FXSelector,void* PTR_NULL); // FIXME
long onCmdRefresh(FXObject*,FXSelector,void* PTR_IGNORE);
static FXint ascending(const FXTreeItem* a,const FXTreeItem* b);
static FXint descending(const FXTreeItem* a,const FXTreeItem* b);
static FXint ascendingCase(const FXTreeItem* a,const FXTreeItem* b);
static FXint descendingCase(const FXTreeItem* a,const FXTreeItem* b);
enum {
%extend {
/// Construct a directory list
FXDirList(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 FXRbDirList(p,tgt,sel,opts,x,y,w,h);
/// Scan the directories and update the items if needed, or if force is TRUE
void scan(FXbool force=true);
/// Return TRUE if item is a directory
FXbool isItemDirectory(const FXTreeItem* item) const;
/// Return TRUE if item is a file
FXbool isItemFile(const FXTreeItem* item) const;
/// Return TRUE if item is executable
FXbool isItemExecutable(const FXTreeItem* item) const;
/// 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,FXbool notify=false);
/// Return current directory
FXString getDirectory() const;
/// Return absolute pathname of item
FXString getItemPathname(const FXTreeItem* item) const;
/// Return the item from the absolute pathname
FXTreeItem* getPathnameItem(const FXString& path);
/// Change wildcard matching pattern
void setPattern(const FXString& ptrn);
/// Return wildcard pattern
FXString getPattern() const;
/// Return wildcard matching mode
FXuint getMatchMode() const;
/// Change wildcard matching mode
void setMatchMode(FXuint mode);
/// Return TRUE if showing files as well as directories
FXbool showFiles() const;
/// Show or hide normal files
void showFiles(FXbool flag);
/// Return TRUE if showing hidden files and directories
FXbool showHiddenFiles() const;
/// Show or hide hidden files and directories
void showHiddenFiles(FXbool showing);
/// Change file associations; delete the old one unless it was shared
void setAssociations(FXFileDict* assoc,FXbool owned=false);
/// Return file associations
FXFileDict* getAssociations() const;
/// Set draggable files
void setDraggableFiles(FXbool flag);
/// Are files draggable
FXbool getDraggableFiles() const;
/// Destructor
virtual ~FXDirList();