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:
@@ -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;
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user