From a8d2cf4e70be848aaa52b1bff27b52440da1b648 Mon Sep 17 00:00:00 2001 From: Michael Wetherell Date: Thu, 26 Oct 2006 22:43:15 +0000 Subject: [PATCH] Add wxFilterClassFactory::PopExtension(). git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42477 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/stream.h | 3 +++ src/common/stream.cpp | 38 ++++++++++++++++++++++++-------------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/include/wx/stream.h b/include/wx/stream.h index 6d3da3c914..cad5148ab9 100644 --- a/include/wx/stream.h +++ b/include/wx/stream.h @@ -346,6 +346,7 @@ public: virtual wxFilterOutputStream *NewStream(wxOutputStream *stream) const = 0; wxString GetProtocol() const { return wxString(*GetProtocols()); } + wxString PopExtension(const wxString& location) const; virtual const wxChar * const *GetProtocols(wxStreamProtocolType type = wxSTREAM_PROTOCOL) const = 0; @@ -370,6 +371,8 @@ protected: wxFilterClassFactory& operator=(const wxFilterClassFactory&) { return *this; } + wxString::size_type FindExtension(const wxChar *location) const; + private: static wxFilterClassFactory *sm_first; wxFilterClassFactory *m_next; diff --git a/src/common/stream.cpp b/src/common/stream.cpp index 618ae6ed32..8aa12b5e24 100644 --- a/src/common/stream.cpp +++ b/src/common/stream.cpp @@ -1113,27 +1113,37 @@ IMPLEMENT_ABSTRACT_CLASS(wxFilterClassFactory, wxObject) wxFilterClassFactory *wxFilterClassFactory::sm_first = NULL; +wxString wxFilterClassFactory::PopExtension(const wxString& location) const +{ + return location.substr(0, FindExtension(location)); +} + +wxString::size_type wxFilterClassFactory::FindExtension(const wxChar *location) const +{ + size_t len = wxStrlen(location); + + for (const wxChar *const *p = GetProtocols(wxSTREAM_FILEEXTENSION); + p && *p; + p++) + { + size_t l = wxStrlen(*p); + + if (l <= len && wxStrcmp(*p, location + len - l) == 0) + return len - l; + } + + return wxString::npos; +} + bool wxFilterClassFactory::CanHandle(const wxChar *protocol, wxStreamProtocolType type) const { if (type == wxSTREAM_FILEEXTENSION) - { - size_t len = wxStrlen(protocol); - - for (const wxChar * const *p = GetProtocols(type); p && *p; p++) - { - size_t l = wxStrlen(*p); - - if (l <= len && wxStrcmp(*p, protocol + len - l) == 0) - return true; - } - } + return FindExtension(protocol) != wxString::npos; else - { - for (const wxChar * const *p = GetProtocols(type); p && *p; p++) + for (const wxChar *const *p = GetProtocols(type); p && *p; p++) if (wxStrcmp(*p, protocol) == 0) return true; - } return false; }