Add wxFSInputStream providing stream interface to wxFileSystem.

This class allows using virtual wxFSFiles with any wx functions taking
streams. E.g. it makes it possible to load images and animations from
wxFileSystem.

Closes #14185.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71206 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2012-04-16 13:53:49 +00:00
parent f5ef4d69b7
commit b7775a521f
4 changed files with 76 additions and 0 deletions

View File

@ -469,6 +469,7 @@ Major new features in this release
All:
- Added wxLogFormatter to allow customizing wxLog output (Sébastien Gallou).
- Added wxFSInputStream for reading data from wxFileSystem (Armel Asselin).
- Added "%z" support to wxDateTime::Format() and Parse() (Armel Asselin).
- Add wxHTTP::SetPostBuffer(wxMemoryBuffer) and SetPostText() (Eran Ifrah).
- Fix wrong time zone used in wxDateTime::UNow().

View File

@ -293,7 +293,20 @@ protected:
static wxString ms_root;
};
// Stream reading data from wxFSFile: this allows to use virtual files with any
// wx functions accepting streams.
class WXDLLIMPEXP_BASE wxFSInputStream : public wxWrapperInputStream
{
public:
// Notice that wxFS_READ is implied in flags.
wxFSInputStream(const wxString& filename, int flags = 0);
virtual ~wxFSInputStream();
private:
wxFSFile* m_file;
wxDECLARE_NO_COPY_CLASS(wxFSInputStream);
};
#endif
// wxUSE_FILESYSTEM

View File

@ -463,3 +463,41 @@ protected:
static wxString GetRightLocation(const wxString& location);
};
/**
Input stream for virtual file stream files.
The stream reads data from wxFSFile obtained from wxFileSystem. It is
especially useful to allow using virtual files with other wxWidgets
functions and classes working with streams, e.g. for loading images or
animations from virtual files and not only physical ones.
@library{wxbase}
@category{streams}
@see wxWrapperInputStream, wxFSFile
@since 2.9.4
*/
class wxFSInputStream : public wxWrapperInputStream
{
public:
/**
Create a stream associated with the data of the given virtual file
system file.
@param filename
The name of the input file passed to wxFileSystem::OpenFile().
@param flags
Combination of flags from wxFileSystemOpenFlags. ::wxFS_READ is
implied, i.e. it is always added to the flags value.
Use wxStreamBase::IsOk() to verify if the constructor succeeded.
*/
wxFileInputStream(const wxString& filename, int flags = 0);
/**
Returns @true if the stream is initialized and ready.
*/
bool IsOk() const;
};

View File

@ -756,5 +756,29 @@ class wxFileSystemModule : public wxModule
IMPLEMENT_DYNAMIC_CLASS(wxFileSystemModule, wxModule)
//// wxFSInputStream
wxFSInputStream::wxFSInputStream(const wxString& filename, int flags)
{
wxFileSystem fs;
m_file = fs.OpenFile(filename, flags | wxFS_READ);
if ( m_file )
{
wxInputStream* const stream = m_file->GetStream();
if ( stream )
{
// Notice that we pass the stream by reference: it shouldn't be
// deleted by us as it's owned by m_file already.
InitParentStream(*stream);
}
}
}
wxFSInputStream::~wxFSInputStream()
{
delete m_file;
}
#endif
// wxUSE_FILESYSTEM