///////////////////////////////////////////////////////////////////////////////
-// Name: dataobj.cpp
+// Name: src/gtk/dataobj.cpp
// Purpose: wxDataObject class
// Author: Robert Roebling
// Id: $Id$
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma implementation "dataobj.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
+#if wxUSE_DATAOBJ
+
#include "wx/dataobj.h"
-#include "wx/app.h"
-#include "wx/debug.h"
+
+#ifndef WX_PRECOMP
+ #include "wx/log.h"
+ #include "wx/app.h"
+ #include "wx/image.h"
+#endif
+
#include "wx/mstream.h"
-#include "wx/image.h"
-#include "wx/log.h"
+#include "wx/uri.h"
-#include <gdk/gdk.h>
+#include "wx/gtk/private.h"
//-------------------------------------------------------------------------
// global data
void wxDataFormat::SetType( wxDataFormatId type )
{
PrepareFormats();
-
+
m_type = type;
-
+
#if wxUSE_UNICODE
if (m_type == wxDF_UNICODETEXT)
m_format = g_textAtom;
wxString wxDataFormat::GetId() const
{
- wxString ret = wxString::FromAscii( gdk_atom_name( m_format ) );
- return ret;
+ wxGtkString atom_name(gdk_atom_name(m_format));
+ return wxString::FromAscii(atom_name);
}
void wxDataFormat::SetId( NativeFormat format )
PrepareFormats();
m_type = wxDF_PRIVATE;
wxString tmp( id );
- m_format = gdk_atom_intern( (const char*) tmp.ToAscii(), FALSE );
+ m_format = gdk_atom_intern( (const char*) tmp.ToAscii(), FALSE );
}
void wxDataFormat::PrepareFormats()
bool wxDataObject::IsSupportedFormat(const wxDataFormat& format, Direction dir) const
{
size_t nFormatCount = GetFormatCount(dir);
- if ( nFormatCount == 1 )
+ if ( nFormatCount == 1 )
{
return format == GetPreferredFormat();
}
- else
+ else
{
wxDataFormat *formats = new wxDataFormat[nFormatCount];
GetAllFormats(formats,dir);
size_t n;
- for ( n = 0; n < nFormatCount; n++ )
+ for ( n = 0; n < nFormatCount; n++ )
{
if ( formats[n] == format )
break;
filenames += wxT("\r\n");
}
- memcpy( buf, filenames.mbc_str(), filenames.Len() + 1 );
+ memcpy( buf, filenames.mbc_str(), filenames.length() + 1 );
- return TRUE;
+ return true;
}
size_t wxFileDataObject::GetDataSize() const
for (size_t i = 0; i < m_filenames.GetCount(); i++)
{
// This is junk in UTF-8
- res += m_filenames[i].Len();
+ res += m_filenames[i].length();
res += 5 + 2; // "file:" (5) + "\r\n" (2)
}
lenPrefix += 2;
}
- AddFile(wxURL::ConvertFromURI(filename.c_str() + lenPrefix));
+ // It would probably be nicer to use a GTK or Glib
+ // function to unescape the 8-bit strings pointed to
+ // by buf, but this does the same in wx code.
+ wxString filename_unicode = wxURI::Unescape(filename.c_str() + lenPrefix);
+ wxCharBuffer filename_8bit = wxConvISO8859_1.cWX2MB( filename_unicode );
+ filename_unicode = wxConvFileName->cMB2WX( filename_8bit );
+ AddFile( filename_unicode );
filename.Empty();
}
- else
+ else if ( !filename.empty() )
{
- wxLogDebug(_T("Unsupported URI '%s' in wxFileDataObject"),
+ wxLogDebug(_T("Unsupported URI \"%s\" in wxFileDataObject"),
filename.c_str());
}
}
else
{
+ // The string is in ISO-8859-1 according to XDND spec
filename += *p;
}
}
- return TRUE;
+ return true;
}
void wxFileDataObject::AddFile( const wxString &filename )
{
wxFAIL_MSG( wxT("attempt to copy empty bitmap failed") );
- return FALSE;
+ return false;
}
memcpy(buf, m_pngData, m_pngSize);
- return TRUE;
+ return true;
}
bool wxBitmapDataObject::SetData(size_t size, const void *buf)
Clear();
wxCHECK_MSG( wxImage::FindHandler(wxBITMAP_TYPE_PNG) != NULL,
- FALSE, wxT("You must call wxImage::AddHandler(new wxPNGHandler); to be able to use clipboard with bitmaps!") );
+ false, wxT("You must call wxImage::AddHandler(new wxPNGHandler); to be able to use clipboard with bitmaps!") );
m_pngSize = size;
m_pngData = malloc(m_pngSize);
wxImage image;
if ( !image.LoadFile( mstream, wxBITMAP_TYPE_PNG ) )
{
- return FALSE;
+ return false;
}
m_bitmap = wxBitmap(image);
image.SaveFile(mstream, wxBITMAP_TYPE_PNG);
}
-
+#endif // wxUSE_DATAOBJ