]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/dir.h
Mention wxGCDC
[wxWidgets.git] / interface / dir.h
index dd7ba41d208ca0113d23015a79bccb0aa2e6f5b2..82b40531ca43c7194d7c3673fd4128993831d0ca 100644 (file)
@@ -1,47 +1,57 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        dir.h
-// Purpose:     documentation for wxDirTraverser class
+// Purpose:     interface of wxDir and wxDirTraverser
 // Author:      wxWidgets team
 // RCS-ID:      $Id$
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
+/**
+    Possible return values of wxDirTraverser callback functions.
+*/
+enum wxDirTraverseResult
+{
+    wxDIR_IGNORE = -1,  ///< Ignore this directory but continue with others.
+    wxDIR_STOP,         ///< Stop traversing.
+    wxDIR_CONTINUE      ///< Continue into this directory.
+};
+
 /**
     @class wxDirTraverser
     @wxheader{dir.h}
 
-    wxDirTraverser is an abstract interface which must be implemented by objects
-    passed to wxDir::Traverse function.
+    wxDirTraverser is an abstract interface which must be implemented by
+    objects passed to wxDir::Traverse() function.
 
-    Example of use (this works almost like wxDir::GetAllFiles):
+    Example of use (this works almost like wxDir::GetAllFiles()):
 
     @code
     class wxDirTraverserSimple : public wxDirTraverser
+    {
+    public:
+        wxDirTraverserSimple(wxArrayString& files) : m_files(files) { }
+
+        virtual wxDirTraverseResult OnFile(const wxString& filename)
         {
-        public:
-            wxDirTraverserSimple(wxArrayString& files) : m_files(files) { }
-
-            virtual wxDirTraverseResult OnFile(const wxString& filename)
-            {
-                m_files.Add(filename);
-                return wxDIR_CONTINUE;
-            }
-
-            virtual wxDirTraverseResult OnDir(const wxString& WXUNUSED(dirname))
-            {
-                return wxDIR_CONTINUE;
-            }
-
-        private:
-            wxArrayString& m_files;
-        };
-
-        // get the names of all files in the array
-        wxArrayString files;
-        wxDirTraverserSimple traverser(files);
-
-        wxDir dir(dirname);
-        dir.Traverse(traverser);
+            m_files.Add(filename);
+            return wxDIR_CONTINUE;
+        }
+
+        virtual wxDirTraverseResult OnDir(const wxString& WXUNUSED(dirname))
+        {
+            return wxDIR_CONTINUE;
+        }
+
+    private:
+        wxArrayString& m_files;
+    };
+
+    // get the names of all files in the array
+    wxArrayString files;
+    wxDirTraverserSimple traverser(files);
+
+    wxDir dir(dirname);
+    dir.Traverse(traverser);
     @endcode
 
     @library{wxbase}
@@ -51,68 +61,87 @@ class wxDirTraverser
 {
 public:
     /**
-        This function is called for each directory. It may return @c wxSIR_STOP
-        to abort traversing completely, @c wxDIR_IGNORE to skip this directory but
-        continue with others or @c wxDIR_CONTINUE to enumerate all files and
+        This function is called for each directory. It may return ::wxDIR_STOP
+        to abort traversing completely, ::wxDIR_IGNORE to skip this directory
+        but continue with others or ::wxDIR_CONTINUE to enumerate all files and
         subdirectories in this directory.
-        This is a pure virtual function and must be implemented in the derived class.
+
+        This is a pure virtual function and must be implemented in the derived
+        class.
     */
     virtual wxDirTraverseResult OnDir(const wxString& dirname);
 
     /**
-        This function is called for each file. It may return @c wxDIR_STOP to abort
-        traversing (for example, if the file being searched is found) or
-        @c wxDIR_CONTINUE to proceed.
-        This is a pure virtual function and must be implemented in the derived class.
+        This function is called for each file. It may return ::wxDIR_STOP to
+        abort traversing (for example, if the file being searched is found) or
+        ::wxDIR_CONTINUE to proceed.
+
+        This is a pure virtual function and must be implemented in the derived
+        class.
     */
     virtual wxDirTraverseResult OnFile(const wxString& filename);
 
     /**
         This function is called for each directory which we failed to open for
-        enumerating. It may return @c wxSIR_STOP to abort traversing completely,
-        @c wxDIR_IGNORE to skip this directory but continue with others or
-        @c wxDIR_CONTINUE to retry opening this directory once again.
-        The base class version always returns @c wxDIR_IGNORE.
+        enumerating. It may return ::wxDIR_STOP to abort traversing completely,
+        ::wxDIR_IGNORE to skip this directory but continue with others or
+        ::wxDIR_CONTINUE to retry opening this directory once again.
+
+        The base class version always returns ::wxDIR_IGNORE.
     */
     virtual wxDirTraverseResult OnOpenError(const wxString& openerrorname);
 };
 
 
+
+/**
+    These flags define what kind of filenames are included in the list of files
+    enumerated by wxDir::GetFirst() and wxDir::GetNext().
+*/
+enum
+{
+    wxDIR_FILES     = 0x0001,   ///< Includes files.
+    wxDIR_DIRS      = 0x0002,   ///< Includes directories.
+    wxDIR_HIDDEN    = 0x0004,   ///< Includes hidden files.
+    wxDIR_DOTDOT    = 0x0008,   ///< Includes "." and "..".
+
+    wxDIR_DEFAULT   = wxDIR_FILES | wxDIR_DIRS | wxDIR_HIDDEN
+};
+
 /**
     @class wxDir
     @wxheader{dir.h}
 
     wxDir is a portable equivalent of Unix open/read/closedir functions which
-    allow enumerating of the files in a directory. wxDir allows to enumerate files
-    as well as directories.
+    allow enumerating of the files in a directory. wxDir allows to enumerate
+    files as well as directories.
 
     wxDir also provides a flexible way to enumerate files recursively using
-    wxDir::Traverse or a simpler
-    wxDir::GetAllFiles function.
+    Traverse() or a simpler GetAllFiles() function.
 
     Example of use:
 
     @code
     wxDir dir(wxGetCwd());
 
-        if ( !dir.IsOpened() )
-        {
-            // deal with the error here - wxDir would already log an error message
-            // explaining the exact reason of the failure
-            return;
-        }
+    if ( !dir.IsOpened() )
+    {
+        // deal with the error here - wxDir would already log an error message
+        // explaining the exact reason of the failure
+        return;
+    }
 
-        puts("Enumerating object files in current directory:");
+    puts("Enumerating object files in current directory:");
 
-        wxString filename;
+    wxString filename;
 
-        bool cont = dir.GetFirst(, filespec, flags);
-        while ( cont )
-        {
-            printf("%s\n", filename.c_str());
+    bool cont = dir.GetFirst(&filename, filespec, flags);
+    while ( cont )
+    {
+        printf("%s\n", filename.c_str());
 
-            cont = dir.GetNext();
-        }
+        cont = dir.GetNext(&filename);
+    }
     @endcode
 
     @library{wxbase}
@@ -121,51 +150,55 @@ public:
 class wxDir
 {
 public:
-    //@{
     /**
-        Opens the directory for enumeration, use IsOpened()
-        to test for errors.
+        Default constructor, use Open() afterwards.
     */
     wxDir();
+    /**
+        Opens the directory for enumeration, use IsOpened() to test for errors.
+    */
     wxDir(const wxString& dir);
-    //@}
 
     /**
-        Destructor cleans up the associated resources. It is not virtual and so this
-        class is not meant to be used polymorphically.
+        Destructor cleans up the associated resources. It is not virtual and so
+        this class is not meant to be used polymorphically.
     */
     ~wxDir();
 
     /**
-        Test for existence of a directory with the given name
+        Test for existence of a directory with the given name.
     */
     static bool Exists(const wxString& dir);
 
     /**
-        The function returns the path of the first file matching the given @e filespec
-        or an empty string if there are no files matching it.
-        The @a flags parameter may or may not include @c wxDIR_FILES, the
+        The function returns the path of the first file matching the given
+        @a filespec or an empty string if there are no files matching it.
+
+        The @a flags parameter may or may not include ::wxDIR_FILES, the
         function always behaves as if it were specified. By default, @a flags
-        includes @c wxDIR_DIRS and so the function recurses into the subdirectories
-        but if this flag is not specified, the function restricts the search only to
-        the directory @a dirname itself.
-        See also: Traverse()
+        includes ::wxDIR_DIRS and so the function recurses into the
+        subdirectories but if this flag is not specified, the function
+        restricts the search only to the directory @a dirname itself.
+
+        @see Traverse()
     */
     static wxString FindFirst(const wxString& dirname,
                               const wxString& filespec,
                               int flags = wxDIR_DEFAULT);
 
     /**
-        The function appends the names of all the files under directory @a dirname
-        to the array @a files (note that its old content is preserved). Only files
-        matching the @a filespec are taken, with empty spec matching all the files.
-        The @a flags parameter should always include @c wxDIR_FILES or the array
-        would be unchanged and should include @c wxDIR_DIRS flag to recurse into
+        The function appends the names of all the files under directory
+        @a dirname to the array @a files (note that its old content is
+        preserved). Only files matching the @a filespec are taken, with empty
+        spec matching all the files.
+
+        The @a flags parameter should always include ::wxDIR_FILES or the array
+        would be unchanged and should include ::wxDIR_DIRS flag to recurse into
         subdirectories (both flags are included in the value by default).
-        See also: Traverse()
+
+        @see Traverse()
     */
-    static size_t GetAllFiles(const wxString& dirname,
-                              wxArrayString* files,
+    static size_t GetAllFiles(const wxString& dirname, wxArrayString* files,
                               const wxString& filespec = wxEmptyString,
                               int flags = wxDIR_DEFAULT);
 
@@ -178,78 +211,82 @@ public:
                   int flags = wxDIR_DEFAULT) const;
 
     /**
-        Returns the name of the directory itself. The returned string does not have the
-        trailing path separator (slash or backslash).
+        Returns the name of the directory itself. The returned string does not
+        have the trailing path separator (slash or backslash).
     */
     wxString GetName() const;
 
     /**
-        Continue enumerating files which satisfy the criteria specified by the last
-        call to GetFirst().
+        Continue enumerating files which satisfy the criteria specified by the
+        last call to GetFirst().
     */
     bool GetNext(wxString* filename) const;
 
     /**
         Returns the size (in bytes) of all files recursively found in @c dir or
         @c wxInvalidSize in case of error.
-        In case it happens that while traversing folders a file's size can not be read,
-        that file is added to the @c filesSkipped array, if not @NULL, and then
-        skipped.
-        This usually happens with some special folders which are locked by the
-        operating system
-        or by another process. Remember that when @c filesSkipped-GetCount() is not
-        zero,
-        then the returned value is not 100% accurate and, if the skipped files were
-        big, it could be
+
+        In case it happens that while traversing folders a file's size can not
+        be read, that file is added to the @a filesSkipped array, if not @NULL,
+        and then skipped. This usually happens with some special folders which
+        are locked by the operating system or by another process. Remember that
+        when the size of @a filesSkipped is not zero, then the returned value
+        is not 100% accurate and, if the skipped files were big, it could be
         far from real size of the directory.
-        See also: wxFileName::GetHumanReadableSize,
-        wxGetDiskSpace
+
+        @see wxFileName::GetHumanReadableSize(), wxGetDiskSpace()
     */
     static wxULongLong GetTotalSize(const wxString& dir,
                                     wxArrayString* filesSkipped = NULL);
 
     /**
         Returns @true if the directory contains any files matching the given
-        @e filespec. If @a filespec is empty, look for any files at all. In any
+        @a filespec. If @a filespec is empty, look for any files at all. In any
         case, even hidden files are taken into account.
     */
-    bool HasFiles(const wxString& filespec = wxEmptyString);
+    bool HasFiles(const wxString& filespec = wxEmptyString) const;
 
     /**
         Returns @true if the directory contains any subdirectories (if a non
-        empty @e filespec is given, only check for directories matching it).
+        empty @a filespec is given, only check for directories matching it).
         The hidden subdirectories are taken into account as well.
     */
-    bool HasSubDirs(const wxString& dirspec = wxEmptyString);
+    bool HasSubDirs(const wxString& dirspec = wxEmptyString) const;
 
     /**
-        Returns @true if the directory was successfully opened by a previous call to
-        Open().
+        Returns @true if the directory was successfully opened by a previous
+        call to Open().
     */
     bool IsOpened() const;
 
     /**
-        Open the directory for enumerating, returns @true on success
-        or @false if an error occurred.
+        Open the directory for enumerating, returns @true on success or @false
+        if an error occurred.
     */
     bool Open(const wxString& dir);
 
     /**
-        Enumerate all files and directories under the given directory recursively
-        calling the element of the provided wxDirTraverser
-        object for each of them.
+        Enumerate all files and directories under the given directory
+        recursively calling the element of the provided wxDirTraverser object
+        for each of them.
+
         More precisely, the function will really recurse into subdirectories if
-        @a flags contains @c wxDIR_DIRS flag. It will ignore the files (but
-        still possibly recurse into subdirectories) if @c wxDIR_FILES flag is
+        @a flags contains ::wxDIR_DIRS flag. It will ignore the files (but
+        still possibly recurse into subdirectories) if ::wxDIR_FILES flag is
         given.
-        For each found directory, @ref wxDirTraverser::ondir sink.OnDir is called
-        and @ref wxDirTraverser::onfile sink.OnFile is called for every file.
-        Depending on the return value, the enumeration may continue or stop.
-        The function returns the total number of files found or @c (size_t)-1 on
-        error.
-        See also: GetAllFiles()
+
+        For each found directory, @ref wxDirTraverser::OnDir() "sink.OnDir()"
+        is called and @ref wxDirTraverser::OnFile() "sink.OnFile()" is called
+        for every file. Depending on the return value, the enumeration may
+        continue or stop.
+
+        The function returns the total number of files found or @c "(size_t)-1"
+        on error.
+
+        @see GetAllFiles()
     */
     size_t Traverse(wxDirTraverser& sink,
                     const wxString& filespec = wxEmptyString,
                     int flags = wxDIR_DEFAULT);
 };
+