⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dirmac.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        mac/dirmac.cpp// Purpose:     wxDir implementation for Mac// Author:      Stefan Csomor// Modified by:// Created:     08.12.99// RCS-ID:      $Id: dirmac.cpp,v 1.29 2006/10/14 16:02:39 SC Exp $// Copyright:   (c) 1999 Stefan Csomor <csomor@advanced.ch>// Licence:     wxWindows licence/////////////////////////////////////////////////////////////////////////////// ============================================================================// declarations// ============================================================================// ----------------------------------------------------------------------------// headers// ----------------------------------------------------------------------------// For compilers that support precompilation, includes "wx.h".#include "wx/wxprec.h"#ifdef __BORLANDC__    #pragma hdrstop#endif#include "wx/dir.h"#ifndef WX_PRECOMP    #include "wx/intl.h"    #include "wx/log.h"#endif // PCH#include "wx/filefn.h"          // for wxDirExists()#include "wx/filename.h"#include "wx/mac/private.h"// ----------------------------------------------------------------------------// private classes// ----------------------------------------------------------------------------// this class stores everything we need to enumerate the filesclass wxDirData{public:    wxDirData(const wxString& dirname);    ~wxDirData();    void Close() ;    void SetFileSpec(const wxString& filespec) { m_filespec = filespec; }    void SetFlags(int flags) { m_flags = flags; }    bool Read(wxString *filename); // reads the next    void Rewind() ;    const wxString& GetName() const { return m_dirname; }private:    FSIterator              m_iterator ;    wxString m_dirname;    wxString m_filespec;    int      m_flags;};// ============================================================================// implementation// ============================================================================// ----------------------------------------------------------------------------// wxDirData// ----------------------------------------------------------------------------wxDirData::wxDirData(const wxString& dirname)         : m_dirname(dirname){    // throw away the trailing slashes    size_t n = m_dirname.length();    wxCHECK_RET( n, _T("empty dir name in wxDir") );    while ( n > 0 && wxIsPathSeparator(m_dirname[--n]) )        ;    m_dirname.Truncate(n + 1);    m_iterator = NULL ;}wxDirData::~wxDirData(){    Close() ;}void wxDirData::Close(){    if ( m_iterator )    {        FSCloseIterator( m_iterator ) ;        m_iterator = NULL ;    }}void wxDirData::Rewind(){    Close() ;}bool wxDirData::Read(wxString *filename){    wxString result;    OSStatus err = noErr ;    if ( NULL == m_iterator )    {        FSRef dirRef;        err = wxMacPathToFSRef( m_dirname , &dirRef ) ;        if ( err == noErr )        {            err = FSOpenIterator(&dirRef, kFSIterateFlat, &m_iterator);        }        if ( err )        {            Close() ;            return false ;        }    }    wxString name ;    while( noErr == err )    {        HFSUniStr255 uniname ;        FSRef fileRef;        FSCatalogInfo catalogInfo;        ItemCount fetched = 0;        err = FSGetCatalogInfoBulk( m_iterator, 1, &fetched, NULL, kFSCatInfoNodeFlags | kFSCatInfoFinderInfo , &catalogInfo , &fileRef, NULL, &uniname );                // expected error codes                 if ( errFSNoMoreItems == err )            return false ;        if ( afpAccessDenied == err )            return false ;        if ( noErr != err )            break ;        name = wxMacHFSUniStrToString( &uniname ) ;        if ( ( name == wxT(".") || name == wxT("..") ) && !(m_flags & wxDIR_DOTDOT) )            continue;        if ( ( name[0U] == '.' ) && !(m_flags & wxDIR_HIDDEN ) )            continue ;        if ( (((FileInfo*)&catalogInfo.finderInfo)->finderFlags & kIsInvisible ) && !(m_flags & wxDIR_HIDDEN ) )            continue ;        // its a dir and we don't want it        if ( (catalogInfo.nodeFlags & kFSNodeIsDirectoryMask)  && !(m_flags & wxDIR_DIRS) )            continue ;        // its a file but we don't want it        if ( (catalogInfo.nodeFlags & kFSNodeIsDirectoryMask) == 0  && !(m_flags & wxDIR_FILES ) )            continue ;        if ( m_filespec.empty() || m_filespec == wxT("*.*") || m_filespec == wxT("*") )        {        }        else if ( !wxMatchWild(m_filespec, name , false) )        {            continue ;        }        break ;    }    if ( err != noErr )    {        return false ;    }    *filename = name ;    return true;}// ----------------------------------------------------------------------------// wxDir helpers// ----------------------------------------------------------------------------/* static */bool wxDir::Exists(const wxString& dir){    return wxDirExists(dir);}// ----------------------------------------------------------------------------// wxDir construction/destruction// ----------------------------------------------------------------------------wxDir::wxDir(const wxString& dirname){    m_data = NULL;    (void)Open(dirname);}bool wxDir::Open(const wxString& dirname){    delete m_data;    m_data = new wxDirData(dirname);    return true;}bool wxDir::IsOpened() const{    return m_data != NULL;}wxString wxDir::GetName() const{    wxString name;    if ( m_data )    {        name = m_data->GetName();        if ( !name.empty() && (name.Last() == _T('/')) )        {            // chop off the last (back)slash            name.Truncate(name.length() - 1);        }    }    return name;}wxDir::~wxDir(){    delete m_data;    m_data = NULL;}// ----------------------------------------------------------------------------// wxDir enumerating// ----------------------------------------------------------------------------bool wxDir::GetFirst(wxString *filename,                     const wxString& filespec,                     int flags) const{    wxCHECK_MSG( IsOpened(), false, _T("must wxDir::Open() first") );    m_data->Rewind();    m_data->SetFileSpec(filespec);    m_data->SetFlags(flags);    return GetNext(filename);}bool wxDir::GetNext(wxString *filename) const{    wxCHECK_MSG( IsOpened(), false, _T("must wxDir::Open() first") );    wxCHECK_MSG( filename, false, _T("bad pointer in wxDir::GetNext()") );    return m_data->Read(filename);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -