wxFileDataObject supports GNOME file dnd now

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4408 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
1999-11-06 17:58:56 +00:00
parent 9695185a70
commit 810b5e1f3b
5 changed files with 90 additions and 24 deletions

View File

@@ -693,7 +693,7 @@ DnDFrame::DnDFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
file_menu->Append(Menu_Quit, "E&xit"); file_menu->Append(Menu_Quit, "E&xit");
wxMenu *log_menu = new wxMenu; wxMenu *log_menu = new wxMenu;
log_menu->Append(Menu_Clear, "Clear\tDel"); log_menu->Append(Menu_Clear, "Clear\tCtrl-L");
wxMenu *help_menu = new wxMenu; wxMenu *help_menu = new wxMenu;
help_menu->Append(Menu_Help, "&Help..."); help_menu->Append(Menu_Help, "&Help...");
@@ -869,6 +869,8 @@ void DnDFrame::OnHelp(wxCommandEvent& /* event */)
void DnDFrame::OnLogClear(wxCommandEvent& /* event */ ) void DnDFrame::OnLogClear(wxCommandEvent& /* event */ )
{ {
m_ctrlLog->Clear(); m_ctrlLog->Clear();
m_ctrlText->Clear();
m_ctrlFile->Clear();
} }
void DnDFrame::OnLeftDown(wxMouseEvent &WXUNUSED(event) ) void DnDFrame::OnLeftDown(wxMouseEvent &WXUNUSED(event) )
@@ -879,16 +881,16 @@ void DnDFrame::OnLeftDown(wxMouseEvent &WXUNUSED(event) )
wxTextDataObject textData(m_strText); wxTextDataObject textData(m_strText);
/* /*
wxFileDataObject textData; wxFileDataObject textData;
textData.AddFile( "/file1.txt" ); textData.AddFile( "/file1.txt" );
textData.AddFile( "/file2.txt" ); textData.AddFile( "/file2.txt" );
*/ */
wxDropSource source(textData, this wxDropSource source(textData, this
#ifdef __WXMSW__ #ifdef __WXMSW__
,wxCURSOR_PENCIL, // for copy ,wxCURSOR_PENCIL, // for copy
wxCURSOR_SPRAYCAN, // for move wxCURSOR_SPRAYCAN, // for move
wxCURSOR_QUESTION_ARROW // for nothing wxCURSOR_QUESTION_ARROW // for nothing
#endif #endif
); );
const char *pc; const char *pc;

View File

@@ -126,12 +126,14 @@ void wxDataFormat::SetId( const wxChar *id )
void wxDataFormat::PrepareFormats() void wxDataFormat::PrepareFormats()
{ {
// VZ: GNOME included in RedHat 6.1 uses the MIME types below and not the
// atoms STRING and file:ALL as the old code was
if (!g_textAtom) if (!g_textAtom)
g_textAtom = gdk_atom_intern( "STRING", FALSE ); g_textAtom = gdk_atom_intern( "text/plain", FALSE );
if (!g_pngAtom) if (!g_pngAtom)
g_pngAtom = gdk_atom_intern( "image/png", FALSE ); g_pngAtom = gdk_atom_intern( "image/png", FALSE );
if (!g_fileAtom) if (!g_fileAtom)
g_fileAtom = gdk_atom_intern( "file:ALL", FALSE ); g_fileAtom = gdk_atom_intern( "text/uri-list", FALSE );
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
@@ -199,21 +201,51 @@ size_t wxFileDataObject::GetDataSize() const
bool wxFileDataObject::SetData(size_t size, const void *buf) bool wxFileDataObject::SetData(size_t size, const void *buf)
{ {
// VZ: old format
#if 0
// filenames are stores as a string with #0 as deliminators // filenames are stores as a string with #0 as deliminators
const char *filenames = (const char*) buf; const char *filenames = (const char*) buf;
size_t pos = 0; size_t pos = 0;
for(;;) for(;;)
{ {
if (filenames[0] == 0) if (filenames[0] == 0)
break; break;
if (pos >= size) if (pos >= size)
break; break;
wxString file( filenames ); // this returns the first file wxString file( filenames ); // this returns the first file
AddFile( file ); AddFile( file );
pos += file.Len()+1; pos += file.Len()+1;
filenames += file.Len()+1; filenames += file.Len()+1;
} }
#else // 1
m_filenames.Empty();
// the text/uri-list format is a sequence of URIs (filenames prefixed by
// "file:" as far as I see) delimited by "\r\n" of total length size
// (I wonder what happens if the file has '\n' in its filename??)
wxString filename;
for ( const char *p = (const char *)buf; *p; p++ )
{
if ( *p == '\r' && *(p+1) == '\n' )
{
static const int lenPrefix = 5; // strlen("file:")
if ( filename.Left(lenPrefix).MakeLower() == _T("file:") )
{
filename.erase(0, lenPrefix);
}
AddFile(filename);
filename.Empty();
// skip '\r'
p++;
}
else
{
filename += *p;
}
}
#endif // 0/1
return TRUE; return TRUE;
} }

View File

@@ -359,7 +359,7 @@ wxDragResult wxDropTarget::OnDragOver( wxCoord WXUNUSED(x),
// disable the debug message from GetMatchingPair() - there are too many // disable the debug message from GetMatchingPair() - there are too many
// of them otherwise // of them otherwise
#ifdef __WXDEBUG__ #if 0 //def __WXDEBUG__
wxLogNull noLog; wxLogNull noLog;
#endif // Debug #endif // Debug

View File

@@ -126,12 +126,14 @@ void wxDataFormat::SetId( const wxChar *id )
void wxDataFormat::PrepareFormats() void wxDataFormat::PrepareFormats()
{ {
// VZ: GNOME included in RedHat 6.1 uses the MIME types below and not the
// atoms STRING and file:ALL as the old code was
if (!g_textAtom) if (!g_textAtom)
g_textAtom = gdk_atom_intern( "STRING", FALSE ); g_textAtom = gdk_atom_intern( "text/plain", FALSE );
if (!g_pngAtom) if (!g_pngAtom)
g_pngAtom = gdk_atom_intern( "image/png", FALSE ); g_pngAtom = gdk_atom_intern( "image/png", FALSE );
if (!g_fileAtom) if (!g_fileAtom)
g_fileAtom = gdk_atom_intern( "file:ALL", FALSE ); g_fileAtom = gdk_atom_intern( "text/uri-list", FALSE );
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
@@ -199,21 +201,51 @@ size_t wxFileDataObject::GetDataSize() const
bool wxFileDataObject::SetData(size_t size, const void *buf) bool wxFileDataObject::SetData(size_t size, const void *buf)
{ {
// VZ: old format
#if 0
// filenames are stores as a string with #0 as deliminators // filenames are stores as a string with #0 as deliminators
const char *filenames = (const char*) buf; const char *filenames = (const char*) buf;
size_t pos = 0; size_t pos = 0;
for(;;) for(;;)
{ {
if (filenames[0] == 0) if (filenames[0] == 0)
break; break;
if (pos >= size) if (pos >= size)
break; break;
wxString file( filenames ); // this returns the first file wxString file( filenames ); // this returns the first file
AddFile( file ); AddFile( file );
pos += file.Len()+1; pos += file.Len()+1;
filenames += file.Len()+1; filenames += file.Len()+1;
} }
#else // 1
m_filenames.Empty();
// the text/uri-list format is a sequence of URIs (filenames prefixed by
// "file:" as far as I see) delimited by "\r\n" of total length size
// (I wonder what happens if the file has '\n' in its filename??)
wxString filename;
for ( const char *p = (const char *)buf; *p; p++ )
{
if ( *p == '\r' && *(p+1) == '\n' )
{
static const int lenPrefix = 5; // strlen("file:")
if ( filename.Left(lenPrefix).MakeLower() == _T("file:") )
{
filename.erase(0, lenPrefix);
}
AddFile(filename);
filename.Empty();
// skip '\r'
p++;
}
else
{
filename += *p;
}
}
#endif // 0/1
return TRUE; return TRUE;
} }

View File

@@ -359,7 +359,7 @@ wxDragResult wxDropTarget::OnDragOver( wxCoord WXUNUSED(x),
// disable the debug message from GetMatchingPair() - there are too many // disable the debug message from GetMatchingPair() - there are too many
// of them otherwise // of them otherwise
#ifdef __WXDEBUG__ #if 0 //def __WXDEBUG__
wxLogNull noLog; wxLogNull noLog;
#endif // Debug #endif // Debug