Files
wxWidgets/wxPython/src/sizers.i
Robin Dunn 9416aa89ca Implemented the first phase of OOR (Original Object Return). See the
text in the demo for more details of what this means, but in a
nutshell methods such as wxWindow.GetParent or FindWindowById will now
return a shadow object of the proper type if it can.  By "proper type"
I mean that if the wxWindow pointer returned from FindWindowById
really points to a wxButton then the Python object constructed will be
of a wxButtonPtr class instead of wxWindowPtr as before.  This should
reduce or eliminiate the need for wxPyTypeCast.  (Woo Hoo!)  The
objects returned are still not the original Python object, but that is
the next step.  (Although it will probably only work on Python 2.1 and
beyond because it will use weak references.)

A few other minor tweaks and fixes and additions for things found
while doing the OOR stuff.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10197 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2001-05-17 22:47:09 +00:00

343 lines
10 KiB
OpenEdge ABL

/////////////////////////////////////////////////////////////////////////////
// Name: sizers.i
// Purpose: SWIG definitions of the wxSizer family of classes
//
// Author: Robin Dunn
//
// Created: 18-Sept-1999
// RCS-ID: $Id$
// Copyright: (c) 1999 by Total Control Software
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
%module sizers
%{
#include "helpers.h"
#include <wx/notebook.h>
%}
//----------------------------------------------------------------------
%include typemaps.i
%include my_typemaps.i
// Import some definitions of other classes, etc.
%import _defs.i
%import misc.i
%import windows.i
%import controls.i
%pragma(python) code = "import wx"
%pragma(python) code = "import string"
//---------------------------------------------------------------------------
class wxSizerItem : public wxObject {
public:
// No need to ever create one directly in Python...
//wxSizerItem( int width, int height, int option, int flag, int border, wxObject* userData);
//wxSizerItem( wxWindow *window, int option, int flag, int border, wxObject* userData );
//wxSizerItem( wxSizer *sizer, int option, int flag, int border, wxObject* userData );
wxSize GetSize();
wxSize CalcMin();
void SetDimension( wxPoint pos, wxSize size );
%name(SetRatioWH) void SetRatio( int width, int height );
%name(SetRatioSize) void SetRatio( wxSize size );
void SetRatio( float ratio );
float GetRatio();
bool IsWindow();
bool IsSizer();
bool IsSpacer();
wxWindow *GetWindow();
void SetWindow( wxWindow *window );
wxSizer *GetSizer();
void SetSizer( wxSizer *sizer );
int GetOption();
int GetFlag();
int GetBorder();
void SetInitSize( int x, int y );
void SetOption( int option );
void SetFlag( int flag );
void SetBorder( int border );
// wxObject* GetUserData();
%addmethods {
// Assume that the user data is a wxPyUserData object and return the contents
PyObject* GetUserData() {
wxPyUserData* data = (wxPyUserData*)self->GetUserData();
if (data) {
Py_INCREF(data->m_obj);
return data->m_obj;
} else {
Py_INCREF(Py_None);
return Py_None;
}
}
}
};
//---------------------------------------------------------------------------
class wxSizer : public wxObject {
public:
// wxSizer(); **** abstract, can't instantiate
// ~wxSizer();
%addmethods {
void Destroy() { delete self; }
void AddWindow(wxWindow *window, int option=0, int flag=0, int border=0,
PyObject* userData=NULL) {
wxPyUserData* data = NULL;
if (userData) data = new wxPyUserData(userData);
self->Add(window, option, flag, border, data);
}
void AddSizer(wxSizer *sizer, int option=0, int flag=0, int border=0,
PyObject* userData=NULL) {
wxPyUserData* data = NULL;
if (userData) data = new wxPyUserData(userData);
self->Add(sizer, option, flag, border, data);
}
void AddSpacer(int width, int height, int option=0, int flag=0,
int border=0, PyObject* userData=NULL) {
wxPyUserData* data = NULL;
if (userData) data = new wxPyUserData(userData);
self->Add(width, height, option, flag, border, data);
}
void InsertWindow(int before, wxWindow *window, int option=0, int flag=0,
int border=0, PyObject* userData=NULL) {
wxPyUserData* data = NULL;
if (userData) data = new wxPyUserData(userData);
self->Insert(before, window, option, flag, border, data);
}
void InsertSizer(int before, wxSizer *sizer, int option=0, int flag=0,
int border=0, PyObject* userData=NULL) {
wxPyUserData* data = NULL;
if (userData) data = new wxPyUserData(userData);
self->Insert(before, sizer, option, flag, border, data);
}
void InsertSpacer(int before, int width, int height, int option=0, int flag=0,
int border=0, PyObject* userData=NULL) {
wxPyUserData* data = NULL;
if (userData) data = new wxPyUserData(userData);
self->Insert(before, width, height, option, flag, border, data);
}
void PrependWindow(wxWindow *window, int option=0, int flag=0, int border=0,
PyObject* userData=NULL) {
wxPyUserData* data = NULL;
if (userData) data = new wxPyUserData(userData);
self->Prepend(window, option, flag, border, data);
}
void PrependSizer(wxSizer *sizer, int option=0, int flag=0, int border=0,
PyObject* userData=NULL) {
wxPyUserData* data = NULL;
if (userData) data = new wxPyUserData(userData);
self->Prepend(sizer, option, flag, border, data);
}
void PrependSpacer(int width, int height, int option=0, int flag=0,
int border=0, PyObject* userData=NULL) {
wxPyUserData* data = NULL;
if (userData) data = new wxPyUserData(userData);
self->Prepend(width, height, option, flag, border, data);
}
}
%name(RemoveWindow)bool Remove( wxWindow *window );
%name(RemoveSizer)bool Remove( wxSizer *sizer );
%name(RemovePos)bool Remove( int pos );
%pragma(python) addtoclass = "
def Add(self, *args, **kw):
if type(args[0]) == type(1):
apply(self.AddSpacer, args, kw)
elif string.find(args[0].this, 'Sizer') != -1:
apply(self.AddSizer, args, kw)
else:
apply(self.AddWindow, args, kw)
def Insert(self, *args, **kw):
if type(args[1]) == type(1):
apply(self.InsertSpacer, args, kw)
elif string.find(args[1].this, 'Sizer') != -1:
apply(self.InsertSizer, args, kw)
else:
apply(self.InsertWindow, args, kw)
def Prepend(self, *args, **kw):
if type(args[0]) == type(1):
apply(self.PrependSpacer, args, kw)
elif string.find(args[0].this, 'Sizer') != -1:
apply(self.PrependSizer, args, kw)
else:
apply(self.PrependWindow, args, kw)
def Remove(self, *args, **kw):
if type(args[0]) == type(1):
apply(self.RemovePos, args, kw)
elif string.find(args[0].this, 'Sizer') != -1:
apply(self.RemoveSizer, args, kw)
else:
apply(self.RemoveWindow, args, kw)
def AddMany(self, widgets):
for childinfo in widgets:
if type(childinfo) != type(()):
childinfo = (childinfo, )
apply(self.Add, childinfo)
"
void SetDimension( int x, int y, int width, int height );
void SetMinSize(wxSize size);
%name(SetItemMinSizeWindow) void SetItemMinSize(wxWindow* window, int width, int height);
%name(SetItemMinSizeSizer) void SetItemMinSize(wxSizer* sizer, int width, int height);
%name(SetItemMinSizePos) void SetItemMinSize(int pos, int width, int height);
%pragma(python) addtoclass = "
def SetItemMinSize(self, *args):
if type(args[0]) == type(1):
apply(self.SetItemMinSizePos, args)
elif string.find(args[0].this, 'Sizer') != -1:
apply(self.SetItemMinSizeSizer, args)
else:
apply(self.SetItemMinSizeWindow, args)
"
wxSize GetSize();
wxPoint GetPosition();
wxSize GetMinSize();
// void RecalcSizes() = 0;
// wxSize CalcMin() = 0;
void Layout();
void Fit( wxWindow *window );
void SetSizeHints( wxWindow *window );
// wxList& GetChildren();
%addmethods {
PyObject* GetChildren() {
wxList& list = self->GetChildren();
return wxPy_ConvertList(&list, "wxSizerItem");
}
}
};
//---------------------------------------------------------------------------
// Use this one for deriving Python classes from
%{
class wxPySizer : public wxSizer {
DECLARE_DYNAMIC_CLASS(wxPySizer);
public:
wxPySizer() : wxSizer() {};
DEC_PYCALLBACK___pure(RecalcSizes);
DEC_PYCALLBACK_wxSize__pure(CalcMin);
PYPRIVATE;
};
IMP_PYCALLBACK___pure(wxPySizer, wxSizer, RecalcSizes);
IMP_PYCALLBACK_wxSize__pure(wxPySizer, wxSizer, CalcMin);
IMPLEMENT_DYNAMIC_CLASS(wxPySizer, wxSizer);
%}
class wxPySizer : public wxSizer {
public:
wxPySizer();
void _setSelf(PyObject* self, PyObject* _class);
%pragma(python) addtomethod = "__init__:self._setSelf(self, wxPySizer)"
};
//---------------------------------------------------------------------------
class wxBoxSizer : public wxSizer {
public:
wxBoxSizer(int orient = wxHORIZONTAL);
int GetOrientation();
void RecalcSizes();
wxSize CalcMin();
};
//---------------------------------------------------------------------------
class wxStaticBoxSizer : public wxBoxSizer {
public:
wxStaticBoxSizer(wxStaticBox *box, int orient = wxHORIZONTAL);
wxStaticBox *GetStaticBox();
void RecalcSizes();
wxSize CalcMin();
};
//---------------------------------------------------------------------------
class wxNotebookSizer: public wxSizer {
public:
wxNotebookSizer( wxNotebook *nb );
void RecalcSizes();
wxSize CalcMin();
wxNotebook *GetNotebook();
};
//---------------------------------------------------------------------------
class wxGridSizer: public wxSizer
{
public:
wxGridSizer( int rows=1, int cols=0, int vgap=0, int hgap=0 );
void RecalcSizes();
wxSize CalcMin();
void SetCols( int cols );
void SetRows( int rows );
void SetVGap( int gap );
void SetHGap( int gap );
int GetCols();
int GetRows();
int GetVGap();
int GetHGap();
};
//---------------------------------------------------------------------------
class wxFlexGridSizer: public wxGridSizer
{
public:
wxFlexGridSizer( int rows=1, int cols=0, int vgap=0, int hgap=0 );
void RecalcSizes();
wxSize CalcMin();
void AddGrowableRow( size_t idx );
void RemoveGrowableRow( size_t idx );
void AddGrowableCol( size_t idx );
void RemoveGrowableCol( size_t idx );
};
//---------------------------------------------------------------------------