wxWidgets/wxPython/include/wx/wxPython/pyclasses.h
Robin Dunn da32eb53cb Changed (again) how the GIL is aquired and the tstate restored. This
time it's simpler, better, and handles the case where there is a wx
calback/event while the GIL has been released by a non-wxPython
extension module.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26324 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2004-03-24 23:09:59 +00:00

212 lines
5.7 KiB
C++

////////////////////////////////////////////////////////////////////////////
// Name: pyclasses.h
// Purpose: wxPython python-aware classes for redirecting virtual method
// calls for classes located in the core but that need to be
// visible to multiple modules
//
// Author: Robin Dunn
//
// Created: 11-Oct-2003
// RCS-ID: $Id$
// Copyright: (c) 2003 by Total Control Software
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
#ifndef __pyclasses_h__
#define __pyclasses_h__
//---------------------------------------------------------------------------
class wxPySizer : public wxSizer {
DECLARE_DYNAMIC_CLASS(wxPySizer);
public:
wxPySizer() : wxSizer() {};
DEC_PYCALLBACK___pure(RecalcSizes);
DEC_PYCALLBACK_wxSize__pure(CalcMin);
PYPRIVATE;
};
//---------------------------------------------------------------------------
class wxPyValidator : public wxValidator {
DECLARE_DYNAMIC_CLASS(wxPyValidator);
public:
wxPyValidator() {
}
~wxPyValidator() {
}
wxObject* Clone() const {
wxPyValidator* ptr = NULL;
wxPyValidator* self = (wxPyValidator*)this;
bool blocked = wxPyBeginBlockThreads();
if (wxPyCBH_findCallback(self->m_myInst, "Clone")) {
PyObject* ro;
ro = wxPyCBH_callCallbackObj(self->m_myInst, Py_BuildValue("()"));
if (ro) {
wxPyConvertSwigPtr(ro, (void **)&ptr, wxT("wxPyValidator"));
Py_DECREF(ro);
}
}
wxPyEndBlockThreads(blocked);
// This is very dangerous!!! But is the only way I could find
// to squash a memory leak. Currently it is okay, but if the
// validator architecture in wxWindows ever changes, problems
// could arise.
delete self;
return ptr;
}
DEC_PYCALLBACK_BOOL_WXWIN(Validate);
DEC_PYCALLBACK_BOOL_(TransferToWindow);
DEC_PYCALLBACK_BOOL_(TransferFromWindow);
PYPRIVATE;
};
//---------------------------------------------------------------------------
class wxPyPen : public wxPen {
public:
wxPyPen(wxColour& colour, int width=1, int style=wxSOLID)
: wxPen(colour, width, style)
{ m_dash = NULL; }
~wxPyPen();
void SetDashes(int nb_dashes, const wxDash *dash);
private:
wxDash* m_dash;
};
//---------------------------------------------------------------------------
class wxPyTimer : public wxTimer
{
public:
wxPyTimer(wxEvtHandler *owner=NULL, int id = -1)
: wxTimer(owner, id)
{
if (owner == NULL) SetOwner(this);
}
DEC_PYCALLBACK__(Notify);
PYPRIVATE;
};
//---------------------------------------------------------------------------
class wxPyProcess : public wxProcess {
public:
wxPyProcess(wxEvtHandler *parent = NULL, int id = -1)
: wxProcess(parent, id)
{}
DEC_PYCALLBACK_VOID_INTINT(OnTerminate);
PYPRIVATE;
};
//---------------------------------------------------------------------------
#ifndef __WXX11__
class wxPyDropSource : public wxDropSource {
public:
#ifndef __WXGTK__
wxPyDropSource(wxWindow *win = NULL,
const wxCursor &copy = 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;
};
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;
};
#endif
//---------------------------------------------------------------------------
class wxPyVScrolledWindow;
class wxPyVListBox;
class wxPyHtmlListBox;
class wxPyPanel;
class wxPyPopupTransientWindow;
class wxPyPreviewFrame;
class wxPyWindow;
class wxPyPreviewControlBar;
class wxPyPrintPreview;
class wxPyListCtrl;
class wxPyControl;
class wxPyPrintout;
class wxGenericDragImage;
#ifdef __WXMAC__
class wxPopupWindow;
class wxTaskBarIconEvent;
class wxTaskBarIcon;
class wxToggleButton;
#endif
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#endif