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:
parent
f5ef4d69b7
commit
b7775a521f
@ -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().
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user