From 1b79dad4dc211c70f52f2ec864904855386f2aec Mon Sep 17 00:00:00 2001 From: Michael Wetherell Date: Fri, 27 Oct 2006 09:53:38 +0000 Subject: [PATCH] Base class factory on the wxFilter base class and implement the new Find feature. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42508 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/archive.h | 26 ++++++++++++++++++++++-- src/common/arcall.cpp | 41 ++++++++++++++++++++++++++++++++++++++ src/common/arcfind.cpp | 43 ++++++++++++++++++++++++++++++++++++++++ src/common/archive.cpp | 45 +++++++++++++++++++++++++++++++++--------- 4 files changed, 144 insertions(+), 11 deletions(-) create mode 100644 src/common/arcall.cpp create mode 100644 src/common/arcfind.cpp diff --git a/include/wx/archive.h b/include/wx/archive.h index 31f6b921b1..0858d299f3 100644 --- a/include/wx/archive.h +++ b/include/wx/archive.h @@ -104,6 +104,7 @@ public: protected: wxArchiveInputStream(wxInputStream& stream, wxMBConv& conv); + wxArchiveInputStream(wxInputStream *stream, wxMBConv& conv); virtual wxArchiveEntry *DoGetNextEntry() = 0; @@ -149,6 +150,7 @@ public: protected: wxArchiveOutputStream(wxOutputStream& stream, wxMBConv& conv); + wxArchiveOutputStream(wxOutputStream *stream, wxMBConv& conv); wxMBConv& GetConv() const { return m_conv; } @@ -308,7 +310,9 @@ typedef wxArchiveIteratorGetNext()) + if (f->CanHandle(protocol, type)) + return f; + + return NULL; +} + +// static +const wxArchiveClassFactory *wxArchiveClassFactory::GetFirst() +{ + if (!sm_first) + wxUseArchiveClasses(); + return sm_first; +} + +#endif // wxUSE_ARCHIVE_STREAMS diff --git a/src/common/archive.cpp b/src/common/archive.cpp index 044498de11..e6962a7784 100644 --- a/src/common/archive.cpp +++ b/src/common/archive.cpp @@ -16,18 +16,10 @@ #if wxUSE_STREAMS && wxUSE_ARCHIVE_STREAMS -#ifndef WX_PRECOMP -#endif - #include "wx/archive.h" -#include "wx/link.h" IMPLEMENT_ABSTRACT_CLASS(wxArchiveEntry, wxObject) -IMPLEMENT_ABSTRACT_CLASS(wxArchiveClassFactory, wxObject) - -#if wxUSE_ZIPSTREAM -wxFORCE_LINK_MODULE(zipstrm) -#endif +IMPLEMENT_ABSTRACT_CLASS(wxArchiveClassFactory, wxFilterClassFactoryBase) ///////////////////////////////////////////////////////////////////////////// @@ -40,6 +32,13 @@ wxArchiveInputStream::wxArchiveInputStream(wxInputStream& stream, { } +wxArchiveInputStream::wxArchiveInputStream(wxInputStream *stream, + wxMBConv& conv) + : wxFilterInputStream(stream), + m_conv(conv) +{ +} + ///////////////////////////////////////////////////////////////////////////// // wxArchiveOutputStream @@ -51,6 +50,13 @@ wxArchiveOutputStream::wxArchiveOutputStream(wxOutputStream& stream, { } +wxArchiveOutputStream::wxArchiveOutputStream(wxOutputStream *stream, + wxMBConv& conv) + : wxFilterOutputStream(stream), + m_conv(conv) +{ +} + ///////////////////////////////////////////////////////////////////////////// // wxArchiveEntry @@ -68,4 +74,25 @@ wxArchiveEntry& wxArchiveEntry::operator=(const wxArchiveEntry& WXUNUSED(e)) return *this; } + +///////////////////////////////////////////////////////////////////////////// +// wxArchiveClassFactory + +wxArchiveClassFactory *wxArchiveClassFactory::sm_first = NULL; + +void wxArchiveClassFactory::Remove() +{ + if (m_next != this) + { + wxArchiveClassFactory **pp = &sm_first; + + while (*pp != this) + pp = &(*pp)->m_next; + + *pp = m_next; + + m_next = this; + } +} + #endif // wxUSE_STREAMS && wxUSE_ARCHIVE_STREAMS -- 2.45.2