wxArchive::wxArchive(wxOutputStream &stream, size_t version, const wxString &header, bool partialMode) : m_writeMode(true) , m_odstr(stream) , m_partialMode(partialMode) , m_itmp(m_tmpistr) , m_idstr(m_itmp) , m_otmp(&m_tmpostr) , m_version(version) , m_headerStr(header) { InitAll(); // all ok, use this stream if(stream.IsOk()) { m_opened = true; m_errorCode = wxARCHIVE_ERR_OK; // write information SaveString(header); SaveUint32(version); m_status = wxArchiveStatus(version, header); // when we are ok, start saving if(!IsOk()) LogError(wxARCHIVE_ERR_ILL, wxARCHIVE_ERR_STR_NOVERHDR); } else LogError(wxARCHIVE_ERR_ILL, wxARCHIVE_ERR_STR_BADOSTREAM); }
static inline bool WriteAsciiString(wxOutputStream& ostr, const wxString& s) { #if wxUSE_UNICODE wxCharBuffer name(s.mb_str()); ostr.Write(name, strlen(name)); #else ostr.Write(s.mb_str(), s.length()); #endif return ostr.IsOk(); }
bool wxPNMHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool WXUNUSED(verbose) ) { wxTextOutputStream text_stream(stream); //text_stream << "P6" << endl //<< image->GetWidth() << " " << image->GetHeight() << endl //<< "255" << endl; text_stream << wxT("P6\n") << image->GetWidth() << wxT(" ") << image->GetHeight() << wxT("\n255\n"); stream.Write(image->GetData(),3*image->GetWidth()*image->GetHeight()); return stream.IsOk(); }
bool wxCurlFTP::Get(wxOutputStream& buffer, const wxString& szRemoteFile /*= wxEmptyString*/) { if(m_pCURL && buffer.IsOk()) { SetCurlHandleToDefaults(szRemoteFile); SetStreamWriteFunction(buffer); if(Perform()) { return ((m_iResponseCode > 199) && (m_iResponseCode < 299)); } } return false; }
bool wxCurlHTTP::Get(wxOutputStream& buffer, const wxString& szRemoteFile /*=wxEmptyString*/) { if(m_pCURL && buffer.IsOk()) { SetCurlHandleToDefaults(szRemoteFile); SetOpt(CURLOPT_HTTPGET, TRUE); SetStreamWriteFunction(buffer); if(Perform()) { return IsResponseOk(); } } return false; }
bool wxSVGBitmapEmbedHandler::ProcessBitmap(const wxBitmap& bmp, wxCoord x, wxCoord y, wxOutputStream& stream) const { static int sub_images = 0; if ( wxImage::FindHandler(wxBITMAP_TYPE_PNG) == NULL ) wxImage::AddHandler(new wxPNGHandler); // write the bitmap as a PNG to a memory stream and Base64 encode wxMemoryOutputStream mem; bmp.ConvertToImage().SaveFile(mem, wxBITMAP_TYPE_PNG); wxString data = wxBase64Encode(mem.GetOutputStreamBuffer()->GetBufferStart(), mem.GetSize()); // write image meta information wxString s; s += wxString::Format(" <image x=\"%d\" y=\"%d\" " "width=\"%dpx\" height=\"%dpx\" " "title=\"Image from wxSVG\"\n", x, y, bmp.GetWidth(), bmp.GetHeight()); s += wxString::Format(" id=\"image%d\" " "xlink:href=\"data:image/png;base64,\n", sub_images++); // Wrap Base64 encoded data on 76 columns boundary (same as Inkscape). const unsigned WRAP = 76; for ( size_t i = 0; i < data.size(); i += WRAP ) { if (i < data.size() - WRAP) s += data.Mid(i, WRAP) + "\n"; else s += data.Mid(i, s.size() - i) + "\"\n/>"; // last line } // write to the SVG file const wxCharBuffer buf = s.utf8_str(); stream.Write(buf, strlen((const char *)buf)); return stream.IsOk(); }
bool wxSVGBitmapFileHandler::ProcessBitmap(const wxBitmap& bmp, wxCoord x, wxCoord y, wxOutputStream& stream) const { static int sub_images = 0; if ( wxImage::FindHandler(wxBITMAP_TYPE_PNG) == NULL ) wxImage::AddHandler(new wxPNGHandler); // find a suitable file name wxString sPNG; do { sPNG = wxString::Format("image%d.png", sub_images++); } while (wxFile::Exists(sPNG)); if ( !bmp.SaveFile(sPNG, wxBITMAP_TYPE_PNG) ) return false; // reference the bitmap from the SVG doc using only filename & ext sPNG = sPNG.AfterLast(wxFileName::GetPathSeparator()); // reference the bitmap from the SVG doc wxString s; s += wxString::Format(" <image x=\"%d\" y=\"%d\" " "width=\"%dpx\" height=\"%dpx\" " "title=\"Image from wxSVG\"\n", x, y, bmp.GetWidth(), bmp.GetHeight()); s += wxString::Format(" xlink:href=\"%s\">\n</image>\n", sPNG); // write to the SVG file const wxCharBuffer buf = s.utf8_str(); stream.Write(buf, strlen((const char *)buf)); return stream.IsOk(); }
// helper functions for writing ASCII strings (even in Unicode build) static inline bool WriteAsciiChar(wxOutputStream& ostr, char ch) { ostr.PutC(ch); return ostr.IsOk(); }