Merged the wxPy_newswig branch into the HEAD branch (main trunk)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24541 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
320
wxPython/src/_dnd.i
Normal file
320
wxPython/src/_dnd.i
Normal file
@@ -0,0 +1,320 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: _dnd.i
|
||||
// Purpose: SWIG definitions for the Drag-n-drop classes
|
||||
//
|
||||
// Author: Robin Dunn
|
||||
//
|
||||
// Created: 31-October-1999
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) 2003 by Total Control Software
|
||||
// Licence: wxWindows license
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Not a %module
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
%{
|
||||
#include <wx/dnd.h>
|
||||
%}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
%newgroup
|
||||
|
||||
// flags for wxDropSource::DoDragDrop()
|
||||
//
|
||||
// NB: wxDrag_CopyOnly must be 0 (== FALSE) and wxDrag_AllowMove must be 1
|
||||
// (== TRUE) for compatibility with the old DoDragDrop(bool) method!
|
||||
enum
|
||||
{
|
||||
wxDrag_CopyOnly = 0, // allow only copying
|
||||
wxDrag_AllowMove = 1, // allow moving (copying is always allowed)
|
||||
wxDrag_DefaultMove = 3 // the default operation is move, not copy
|
||||
};
|
||||
|
||||
// result of wxDropSource::DoDragDrop() call
|
||||
enum wxDragResult
|
||||
{
|
||||
wxDragError, // error prevented the d&d operation from completing
|
||||
wxDragNone, // drag target didn't accept the data
|
||||
wxDragCopy, // the data was successfully copied
|
||||
wxDragMove, // the data was successfully moved (MSW only)
|
||||
wxDragLink, // operation is a drag-link
|
||||
wxDragCancel // the operation was cancelled by user (not an error)
|
||||
};
|
||||
|
||||
bool wxIsDragResultOk(wxDragResult res);
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
// wxDropSource is the object you need to create (and call DoDragDrop on it)
|
||||
// to initiate a drag-and-drop operation
|
||||
|
||||
|
||||
|
||||
%{
|
||||
class wxPyDropSource : public wxDropSource {
|
||||
public:
|
||||
#ifndef __WXGTK__
|
||||
wxPyDropSource(wxWindow *win = NULL,
|
||||
const wxCursor © = wxNullCursor,
|
||||
const wxCursor &move = wxNullCursor,
|
||||
const wxCursor &none = wxNullCursor)
|
||||
: wxDropSource(win, copy, move, none) {}
|
||||
#else
|
||||
wxPyDropSource(wxWindow *win = NULL,
|
||||
const wxIcon& copy = wxNullIcon,
|
||||
const wxIcon& move = wxNullIcon,
|
||||
const wxIcon& none = wxNullIcon)
|
||||
: wxDropSource(win, copy, move, none) {}
|
||||
#endif
|
||||
~wxPyDropSource() { }
|
||||
|
||||
DEC_PYCALLBACK_BOOL_DR(GiveFeedback);
|
||||
PYPRIVATE;
|
||||
};
|
||||
|
||||
IMP_PYCALLBACK_BOOL_DR(wxPyDropSource, wxDropSource, GiveFeedback);
|
||||
|
||||
%}
|
||||
|
||||
|
||||
%name(DropSource) class wxPyDropSource {
|
||||
public:
|
||||
#ifndef __WXGTK__
|
||||
wxPyDropSource(wxWindow *win = NULL,
|
||||
const wxCursor © = wxNullCursor,
|
||||
const wxCursor &move = wxNullCursor,
|
||||
const wxCursor &none = wxNullCursor);
|
||||
#else
|
||||
wxPyDropSource(wxWindow *win = NULL,
|
||||
const wxIcon& copy = wxNullIcon,
|
||||
const wxIcon& move = wxNullIcon,
|
||||
const wxIcon& none = wxNullIcon);
|
||||
#endif
|
||||
|
||||
void _setCallbackInfo(PyObject* self, PyObject* _class, int incref);
|
||||
%pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxDropSource, 0)"
|
||||
~wxPyDropSource();
|
||||
|
||||
// set the data which is transfered by drag and drop
|
||||
void SetData(wxDataObject& data);
|
||||
|
||||
wxDataObject *GetDataObject();
|
||||
|
||||
// set the icon corresponding to given drag result
|
||||
void SetCursor(wxDragResult res, const wxCursor& cursor);
|
||||
|
||||
wxDragResult DoDragDrop(int flags = wxDrag_CopyOnly);
|
||||
|
||||
bool base_GiveFeedback(wxDragResult effect);
|
||||
};
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// wxDropTarget should be associated with a window if it wants to be able to
|
||||
// receive data via drag and drop.
|
||||
//
|
||||
// To use this class, you should derive from wxDropTarget and implement
|
||||
// OnData() pure virtual method. You may also wish to override OnDrop() if you
|
||||
// want to accept the data only inside some region of the window (this may
|
||||
// avoid having to copy the data to this application which happens only when
|
||||
// OnData() is called)
|
||||
|
||||
|
||||
// Just a place holder for the type system. The real base class for
|
||||
// wxPython is wxPyDropTarget
|
||||
// class wxDropTarget {
|
||||
// public:
|
||||
// };
|
||||
|
||||
|
||||
%{
|
||||
class wxPyDropTarget : public wxDropTarget {
|
||||
public:
|
||||
wxPyDropTarget(wxDataObject *dataObject = NULL)
|
||||
: wxDropTarget(dataObject) {}
|
||||
|
||||
// called when mouse leaves the window: might be used to remove the
|
||||
// feedback which was given in OnEnter()
|
||||
DEC_PYCALLBACK__(OnLeave);
|
||||
|
||||
// called when the mouse enters the window (only once until OnLeave())
|
||||
DEC_PYCALLBACK_DR_2WXCDR(OnEnter);
|
||||
|
||||
// called when the mouse moves in the window - shouldn't take long to
|
||||
// execute or otherwise mouse movement would be too slow
|
||||
DEC_PYCALLBACK_DR_2WXCDR(OnDragOver);
|
||||
|
||||
// called after OnDrop() returns TRUE: you will usually just call
|
||||
// GetData() from here and, probably, also refresh something to update the
|
||||
// new data and, finally, return the code indicating how did the operation
|
||||
// complete (returning default value in case of success and wxDragError on
|
||||
// failure is usually ok)
|
||||
DEC_PYCALLBACK_DR_2WXCDR_pure(OnData);
|
||||
|
||||
// this function is called when data is dropped at position (x, y) - if it
|
||||
// returns TRUE, OnData() will be called immediately afterwards which will
|
||||
// allow to retrieve the data dropped.
|
||||
DEC_PYCALLBACK_BOOL_INTINT(OnDrop);
|
||||
|
||||
PYPRIVATE;
|
||||
};
|
||||
|
||||
IMP_PYCALLBACK__(wxPyDropTarget, wxDropTarget, OnLeave);
|
||||
IMP_PYCALLBACK_DR_2WXCDR(wxPyDropTarget, wxDropTarget, OnEnter);
|
||||
IMP_PYCALLBACK_DR_2WXCDR(wxPyDropTarget, wxDropTarget, OnDragOver);
|
||||
IMP_PYCALLBACK_DR_2WXCDR_pure(wxPyDropTarget, wxDropTarget, OnData);
|
||||
IMP_PYCALLBACK_BOOL_INTINT(wxPyDropTarget, wxDropTarget, OnDrop);
|
||||
|
||||
%}
|
||||
|
||||
|
||||
%name(DropTarget) class wxPyDropTarget // : public wxDropTarget
|
||||
{
|
||||
public:
|
||||
%addtofunc wxPyDropTarget "if args: args[1].thisown = 0; self._setCallbackInfo(self, DropTarget)"
|
||||
|
||||
wxPyDropTarget(wxDataObject *dataObject = NULL);
|
||||
void _setCallbackInfo(PyObject* self, PyObject* _class);
|
||||
|
||||
~wxPyDropTarget();
|
||||
|
||||
// get/set the associated wxDataObject
|
||||
wxDataObject *GetDataObject();
|
||||
%addtofunc SetDataObject "args[1].thisown = 0"
|
||||
void SetDataObject(wxDataObject *dataObject);
|
||||
|
||||
wxDragResult base_OnEnter(wxCoord x, wxCoord y, wxDragResult def);
|
||||
wxDragResult base_OnDragOver(wxCoord x, wxCoord y, wxDragResult def);
|
||||
void base_OnLeave();
|
||||
bool base_OnDrop(wxCoord x, wxCoord y);
|
||||
|
||||
// may be called *only* from inside OnData() and will fill m_dataObject
|
||||
// with the data from the drop source if it returns TRUE
|
||||
bool GetData();
|
||||
|
||||
};
|
||||
|
||||
|
||||
%pythoncode { PyDropTarget = DropTarget }
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// A simple wxDropTarget derived class for text data: you only need to
|
||||
// override OnDropText() to get something working
|
||||
|
||||
|
||||
%{
|
||||
class wxPyTextDropTarget : public wxTextDropTarget {
|
||||
public:
|
||||
wxPyTextDropTarget() {}
|
||||
|
||||
DEC_PYCALLBACK_BOOL_INTINTSTR_pure(OnDropText);
|
||||
|
||||
DEC_PYCALLBACK__(OnLeave);
|
||||
DEC_PYCALLBACK_DR_2WXCDR(OnEnter);
|
||||
DEC_PYCALLBACK_DR_2WXCDR(OnDragOver);
|
||||
DEC_PYCALLBACK_DR_2WXCDR(OnData);
|
||||
DEC_PYCALLBACK_BOOL_INTINT(OnDrop);
|
||||
|
||||
PYPRIVATE;
|
||||
};
|
||||
|
||||
IMP_PYCALLBACK_BOOL_INTINTSTR_pure(wxPyTextDropTarget, wxTextDropTarget, OnDropText);
|
||||
IMP_PYCALLBACK__(wxPyTextDropTarget, wxTextDropTarget, OnLeave);
|
||||
IMP_PYCALLBACK_DR_2WXCDR(wxPyTextDropTarget, wxTextDropTarget, OnEnter);
|
||||
IMP_PYCALLBACK_DR_2WXCDR(wxPyTextDropTarget, wxTextDropTarget, OnDragOver);
|
||||
IMP_PYCALLBACK_DR_2WXCDR(wxPyTextDropTarget, wxTextDropTarget, OnData);
|
||||
IMP_PYCALLBACK_BOOL_INTINT(wxPyTextDropTarget, wxTextDropTarget, OnDrop);
|
||||
|
||||
%}
|
||||
|
||||
%name(TextDropTarget) class wxPyTextDropTarget : public wxPyDropTarget {
|
||||
public:
|
||||
%addtofunc wxPyTextDropTarget "self._setCallbackInfo(self, TextDropTarget)"
|
||||
|
||||
wxPyTextDropTarget();
|
||||
void _setCallbackInfo(PyObject* self, PyObject* _class);
|
||||
|
||||
//bool OnDropText(wxCoord x, wxCoord y, const wxString& text) = 0;
|
||||
wxDragResult base_OnEnter(wxCoord x, wxCoord y, wxDragResult def);
|
||||
wxDragResult base_OnDragOver(wxCoord x, wxCoord y, wxDragResult def);
|
||||
void base_OnLeave();
|
||||
bool base_OnDrop(wxCoord x, wxCoord y);
|
||||
wxDragResult base_OnData(wxCoord x, wxCoord y, wxDragResult def);
|
||||
};
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// A drop target which accepts files (dragged from File Manager or Explorer)
|
||||
|
||||
|
||||
%{
|
||||
class wxPyFileDropTarget : public wxFileDropTarget {
|
||||
public:
|
||||
wxPyFileDropTarget() {}
|
||||
|
||||
virtual bool OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filenames);
|
||||
|
||||
DEC_PYCALLBACK__(OnLeave);
|
||||
DEC_PYCALLBACK_DR_2WXCDR(OnEnter);
|
||||
DEC_PYCALLBACK_DR_2WXCDR(OnDragOver);
|
||||
DEC_PYCALLBACK_DR_2WXCDR(OnData);
|
||||
DEC_PYCALLBACK_BOOL_INTINT(OnDrop);
|
||||
|
||||
PYPRIVATE;
|
||||
};
|
||||
|
||||
bool wxPyFileDropTarget::OnDropFiles(wxCoord x, wxCoord y,
|
||||
const wxArrayString& filenames) {
|
||||
bool rval = FALSE;
|
||||
wxPyBeginBlockThreads();
|
||||
if (wxPyCBH_findCallback(m_myInst, "OnDropFiles")) {
|
||||
PyObject* list = wxArrayString2PyList_helper(filenames);
|
||||
rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iiO)",x,y,list));
|
||||
Py_DECREF(list);
|
||||
}
|
||||
wxPyEndBlockThreads();
|
||||
return rval;
|
||||
}
|
||||
|
||||
|
||||
|
||||
IMP_PYCALLBACK__(wxPyFileDropTarget, wxFileDropTarget, OnLeave);
|
||||
IMP_PYCALLBACK_DR_2WXCDR(wxPyFileDropTarget, wxFileDropTarget, OnEnter);
|
||||
IMP_PYCALLBACK_DR_2WXCDR(wxPyFileDropTarget, wxFileDropTarget, OnDragOver);
|
||||
IMP_PYCALLBACK_DR_2WXCDR(wxPyFileDropTarget, wxFileDropTarget, OnData);
|
||||
IMP_PYCALLBACK_BOOL_INTINT(wxPyFileDropTarget, wxFileDropTarget, OnDrop);
|
||||
|
||||
%}
|
||||
|
||||
|
||||
%name(FileDropTarget) class wxPyFileDropTarget : public wxPyDropTarget
|
||||
{
|
||||
public:
|
||||
%addtofunc wxPyFileDropTarget "self._setCallbackInfo(self, FileDropTarget)"
|
||||
|
||||
wxPyFileDropTarget();
|
||||
void _setCallbackInfo(PyObject* self, PyObject* _class);
|
||||
|
||||
// bool OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filenames) = 0;
|
||||
wxDragResult base_OnEnter(wxCoord x, wxCoord y, wxDragResult def);
|
||||
wxDragResult base_OnDragOver(wxCoord x, wxCoord y, wxDragResult def);
|
||||
void base_OnLeave();
|
||||
bool base_OnDrop(wxCoord x, wxCoord y);
|
||||
wxDragResult base_OnData(wxCoord x, wxCoord y, wxDragResult def);
|
||||
};
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
%init %{
|
||||
wxPyPtrTypeMap_Add("wxDropSource", "wxPyDropSource");
|
||||
wxPyPtrTypeMap_Add("wxDropTarget", "wxPyDropTarget");
|
||||
wxPyPtrTypeMap_Add("wxTextDropTarget", "wxPyTextDropTarget");
|
||||
wxPyPtrTypeMap_Add("wxFileDropTarget", "wxPyFileDropTarget");
|
||||
%}
|
||||
//---------------------------------------------------------------------------
|
Reference in New Issue
Block a user