// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#include "wx/wxprec.h"
+#include <wx/wxprec.h>
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
-#include "wx/wx.h"
+#include <wx/wx.h>
#endif
-#include "wx/intl.h"
-#include "wx/log.h"
+#include <wx/intl.h>
+#include <wx/log.h>
-#include "wx/dnd.h"
+#include <wx/dnd.h>
-#ifdef __WXGTK__
+#ifdef __WXMOTIF__
+#error Sorry, drag and drop is not yet implemented on wxMotif.
+#endif
+
+#if defined(__WXGTK__) || defined(__WXMOTIF__)
#include "mondrian.xpm"
#endif
// Derive two simple classes which just put in the listbox the strings (text or
// file names) we drop on them
// ----------------------------------------------------------------------------
+
+// FIXME this is ugly and should be fixed in the library itself
+#ifdef __WXMSW__
+ typedef long wxDropPointCoord;
+#else // wxGTK
+ typedef int wxDropPointCoord;
+#endif // MSW/GTK
+
class DnDText : public wxTextDropTarget
{
public:
DnDText(wxListBox *pOwner) { m_pOwner = pOwner; }
- virtual bool OnDropText(long x, long y, const char *psz);
+ virtual bool OnDropText(wxDropPointCoord x, wxDropPointCoord y, const wxChar* psz );
private:
wxListBox *m_pOwner;
public:
DnDFile(wxListBox *pOwner) { m_pOwner = pOwner; }
- virtual bool OnDropFiles(long x, long y,
- size_t nFiles, const char * const aszFiles[]);
+ virtual bool OnDropFiles(wxDropPointCoord x, wxDropPointCoord y,
+ size_t nFiles, const wxChar* const aszFiles[] );
private:
wxListBox *m_pOwner;
// ----------------------------------------------------------------------------
// Define a new application type
// ----------------------------------------------------------------------------
+
class DnDApp : public wxApp
{
public:
void OnLeftDown(wxMouseEvent& event);
void OnRightDown(wxMouseEvent& event);
- bool OnClose();
-
DECLARE_EVENT_TABLE()
private:
// ----------------------------------------------------------------------------
// IDs for the menu commands
// ----------------------------------------------------------------------------
+
enum
{
Menu_Quit = 1,
m_strText("wxWindows drag & drop works :-)")
{
- SetBackgroundColour(* wxWHITE);
+// SetBackgroundColour(* wxWHITE);
// frame icon and status bar
SetIcon(wxICON(mondrian));
m_ctrlLog = new wxTextCtrl(this, -1, "", pos, size,
wxTE_MULTILINE | wxTE_READONLY |
- wxSUNKEN_BORDER| wxHSCROLL);
+ wxSUNKEN_BORDER );
// redirect log messages to the text window (don't forget to delete it!)
m_pLog = new wxLogTextCtrl(m_ctrlLog);
GetClientSize( &w, &h );
wxPaintDC dc(this);
- dc.SetFont( wxFont( 24, wxDECORATIVE, wxNORMAL, wxNORMAL ) );
- dc.DrawText( "Drag text from here!", 20, h-30 );
+ dc.SetFont( wxFont( 24, wxDECORATIVE, wxNORMAL, wxNORMAL, FALSE, "charter" ) );
+ dc.DrawText( "Drag text from here!", 20, h-35 );
}
void DnDFrame::OnDrag(wxCommandEvent& /* event */)
m_ctrlLog->Clear();
}
-bool DnDFrame::OnClose()
-{
- return TRUE;
-}
-
void DnDFrame::OnLeftDown(wxMouseEvent &WXUNUSED(event) )
{
- if ( !m_strText.IsEmpty() ) {
+ if ( !m_strText.IsEmpty() )
+ {
// start drag operation
-
- wxTextDataObject data(m_strText);
- wxDropSource dragSource(data, this);
+#ifdef __WXMSW__
+ wxTextDataObject textData(m_strText);
+ wxDropSource dragSource( textData, this );
+#else
+ wxDropSource dragSource( new wxTextDataObject (m_strText), this, wxIcon(mondrian_xpm) );
+#endif
const char *pc;
- switch ( dragSource.DoDragDrop(TRUE) ) {
+ switch ( dragSource.DoDragDrop(TRUE) )
+ {
case wxDragError: pc = "Error!"; break;
case wxDragNone: pc = "Nothing"; break;
case wxDragCopy: pc = "Copied"; break;
// ----------------------------------------------------------------------------
// Notifications called by the base class
// ----------------------------------------------------------------------------
-bool DnDText::OnDropText(long, long, const char *psz)
+bool DnDText::OnDropText( wxDropPointCoord, wxDropPointCoord, const wxChar *psz )
{
m_pOwner->Append(psz);
return TRUE;
}
-bool DnDFile::OnDropFiles(long, long, size_t nFiles,
- const char * const aszFiles[])
+bool DnDFile::OnDropFiles( wxDropPointCoord, wxDropPointCoord, size_t nFiles,
+ const wxChar* const aszFiles[])
{
wxString str;
- str.Printf("%d files dropped", nFiles);
+ str.Printf( _T("%d files dropped"), nFiles);
m_pOwner->Append(str);
for ( size_t n = 0; n < nFiles; n++ ) {
m_pOwner->Append(aszFiles[n]);