Files
wxWidgets/wxPython/src/_stockobjs.i
Robin Dunn 99a001dd43 Changed how the stock objects (wx.RED, wx.RED_PEN, wx.RED_BRUSH, etc.)
are initialized.  They are now created as a wrapper object that
initializes itself on first use (when an attribute of the object is
requested.)  This was needed because of similar delayed initialization
functionality that was implemented in wxWidgets, but the end result is
cleaner for wxPython as well, and allowed me to remove some ugly code
under the covers.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38802 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2006-04-18 21:49:48 +00:00

296 lines
9.1 KiB
OpenEdge ABL

/////////////////////////////////////////////////////////////////////////////
// Name: _stockobjs.i
// Purpose: SWIG interface defining "stock" GDI objects
//
// Author: Robin Dunn
//
// Created: 13-Sept-2003
// RCS-ID: $Id$
// Copyright: (c) 2003 by Total Control Software
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
// Not a %module
//---------------------------------------------------------------------------
%newgroup
class wxStockGDI
{
public:
enum Item {
BRUSH_BLACK,
BRUSH_BLUE,
BRUSH_CYAN,
BRUSH_GREEN,
BRUSH_GREY,
BRUSH_LIGHTGREY,
BRUSH_MEDIUMGREY,
BRUSH_RED,
BRUSH_TRANSPARENT,
BRUSH_WHITE,
COLOUR_BLACK,
COLOUR_BLUE,
COLOUR_CYAN,
COLOUR_GREEN,
COLOUR_LIGHTGREY,
COLOUR_RED,
COLOUR_WHITE,
CURSOR_CROSS,
CURSOR_HOURGLASS,
CURSOR_STANDARD,
FONT_ITALIC,
FONT_NORMAL,
FONT_SMALL,
FONT_SWISS,
PEN_BLACK,
PEN_BLACKDASHED,
PEN_CYAN,
PEN_GREEN,
PEN_GREY,
PEN_LIGHTGREY,
PEN_MEDIUMGREY,
PEN_RED,
PEN_TRANSPARENT,
PEN_WHITE,
ITEMCOUNT
};
wxStockGDI();
virtual ~wxStockGDI();
static void DeleteAll();
static wxStockGDI& instance();
static const wxBrush* GetBrush(Item item);
static const wxColour* GetColour(Item item);
static const wxCursor* GetCursor(Item item);
static const wxPen* GetPen(Item item);
virtual const wxFont* GetFont(Item item);
};
%pythoncode {
%# This function makes a class used to do delayed initialization of some
%# stock wx objects. When they are used the first time then an init function
%# is called to make the real instance, which is then used to replace the
%# original instance and class seen by the programmer.
def _wxPyMakeDelayedInitWrapper(initFunc):
class _wxPyStockObjectWrapper(object):
def __init__(self, *args):
self._args = args
def __getattr__(self, name):
obj = initFunc(*self._args)
self.__class__ = obj.__class__
self.__dict__ = obj.__dict__
return getattr(self, name)
def __str__(self):
return self.__getattr__("__str__")()
def __repr__(self):
return self.__getattr__("__repr__")()
return _wxPyStockObjectWrapper
def _wxPyFontInit(id):
return StockGDI.instance().GetFont(id)
_wxPyStockPen = _wxPyMakeDelayedInitWrapper(StockGDI.GetPen)
_wxPyStockBrush = _wxPyMakeDelayedInitWrapper(StockGDI.GetBrush)
_wxPyStockCursor = _wxPyMakeDelayedInitWrapper(StockGDI.GetCursor)
_wxPyStockColour = _wxPyMakeDelayedInitWrapper(StockGDI.GetColour)
_wxPyStockFont = _wxPyMakeDelayedInitWrapper(_wxPyFontInit)
ITALIC_FONT = _wxPyStockCursor(StockGDI.FONT_ITALIC)
NORMAL_FONT = _wxPyStockCursor(StockGDI.FONT_NORMAL)
SMALL_FONT = _wxPyStockCursor(StockGDI.FONT_SMALL)
SWISS_FONT = _wxPyStockCursor(StockGDI.FONT_SWISS)
BLACK_DASHED_PEN = _wxPyStockPen(StockGDI.PEN_BLACKDASHED)
BLACK_PEN = _wxPyStockPen(StockGDI.PEN_BLACK)
CYAN_PEN = _wxPyStockPen(StockGDI.PEN_CYAN)
GREEN_PEN = _wxPyStockPen(StockGDI.PEN_GREEN)
GREY_PEN = _wxPyStockPen(StockGDI.PEN_GREY)
LIGHT_GREY_PEN = _wxPyStockPen(StockGDI.PEN_LIGHTGREY)
MEDIUM_GREY_PEN = _wxPyStockPen(StockGDI.PEN_MEDIUMGREY)
RED_PEN = _wxPyStockPen(StockGDI.PEN_RED)
TRANSPARENT_PEN = _wxPyStockPen(StockGDI.PEN_TRANSPARENT)
WHITE_PEN = _wxPyStockPen(StockGDI.PEN_WHITE)
BLACK_BRUSH = _wxPyStockBrush(StockGDI.BRUSH_BLACK)
BLUE_BRUSH = _wxPyStockBrush(StockGDI.BRUSH_BLUE)
CYAN_BRUSH = _wxPyStockBrush(StockGDI.BRUSH_CYAN)
GREEN_BRUSH = _wxPyStockBrush(StockGDI.BRUSH_GREEN)
GREY_BRUSH = _wxPyStockBrush(StockGDI.BRUSH_GREY)
LIGHT_GREY_BRUSH = _wxPyStockBrush(StockGDI.BRUSH_LIGHTGREY)
MEDIUM_GREY_BRUSH = _wxPyStockBrush(StockGDI.BRUSH_MEDIUMGREY)
RED_BRUSH = _wxPyStockBrush(StockGDI.BRUSH_RED)
TRANSPARENT_BRUSH = _wxPyStockBrush(StockGDI.BRUSH_TRANSPARENT)
WHITE_BRUSH = _wxPyStockBrush(StockGDI.BRUSH_WHITE)
BLACK = _wxPyStockColour(StockGDI.COLOUR_BLACK)
BLUE = _wxPyStockColour(StockGDI.COLOUR_BLUE)
CYAN = _wxPyStockColour(StockGDI.COLOUR_CYAN)
GREEN = _wxPyStockColour(StockGDI.COLOUR_GREEN)
LIGHT_GREY = _wxPyStockColour(StockGDI.COLOUR_LIGHTGREY)
RED = _wxPyStockColour(StockGDI.COLOUR_RED)
WHITE = _wxPyStockColour(StockGDI.COLOUR_WHITE)
CROSS_CURSOR = _wxPyStockCursor(StockGDI.CURSOR_CROSS)
HOURGLASS_CURSOR = _wxPyStockCursor(StockGDI.CURSOR_HOURGLASS)
STANDARD_CURSOR = _wxPyStockCursor(StockGDI.CURSOR_STANDARD)
}
%immutable;
%threadWrapperOff;
const wxBitmap wxNullBitmap;
const wxIcon wxNullIcon;
const wxCursor wxNullCursor;
const wxPen wxNullPen;
const wxBrush wxNullBrush;
const wxPalette wxNullPalette;
const wxFont wxNullFont;
const wxColour wxNullColour;
%threadWrapperOn;
%mutable;
// %inline {
// const wxBitmap& _wxPyInitNullBitmap() { return wxNullBitmap; }
// const wxIcon& _wxPyInitNullIcon() { return wxNullIcon; }
// const wxCursor& _wxPyInitNullCursor() { return wxNullCursor; }
// const wxPen& _wxPyInitNullPen() { return wxNullPen; }
// const wxBrush& _wxPyInitNullBrush() { return wxNullBrush; }
// const wxPalette& _wxPyInitNullPalette() { return wxNullPalette; }
// const wxFont& _wxPyInitNullFont() { return wxNullFont; }
// const wxColour& _wxPyInitNullColour() { return wxNullColour; }
// }
// %pythoncode {
// NullBitmap = _wxPyMakeDelayedInitWrapper(_wxPyInitNullBitmap)()
// NullIcon = _wxPyMakeDelayedInitWrapper(_wxPyInitNullIcon)()
// NullCursor = _wxPyMakeDelayedInitWrapper(_wxPyInitNullCursor)()
// NullPen = _wxPyMakeDelayedInitWrapper(_wxPyInitNullPen)()
// NullBrush = _wxPyMakeDelayedInitWrapper(_wxPyInitNullBrush)()
// NullPalette = _wxPyMakeDelayedInitWrapper(_wxPyInitNullPalette)()
// NullFont = _wxPyMakeDelayedInitWrapper(_wxPyInitNullFont)()
// NullColour = _wxPyMakeDelayedInitWrapper(_wxPyInitNullColour)()
// }
//---------------------------------------------------------------------------
class wxGDIObjListBase {
public:
wxGDIObjListBase();
~wxGDIObjListBase();
};
class wxPenList : public wxGDIObjListBase {
public:
wxPen* FindOrCreatePen(const wxColour& colour, int width, int style);
void AddPen(wxPen* pen);
void RemovePen(wxPen* pen);
%pythoncode {
AddPen = wx._deprecated(AddPen)
RemovePen = wx._deprecated(RemovePen)
}
// int GetCount();
};
class wxBrushList : public wxGDIObjListBase {
public:
wxBrush * FindOrCreateBrush(const wxColour& colour, int style=wxSOLID);
void AddBrush(wxBrush *brush);
void RemoveBrush(wxBrush *brush);
%pythoncode {
AddBrush = wx._deprecated(AddBrush)
RemoveBrush = wx._deprecated(RemoveBrush)
}
// int GetCount();
};
class wxFontList : public wxGDIObjListBase {
public:
wxFont * FindOrCreateFont(int point_size, int family, int style, int weight,
bool underline = false,
const wxString& facename = wxPyEmptyString,
wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
void AddFont(wxFont* font);
void RemoveFont(wxFont *font);
%pythoncode {
AddFont = wx._deprecated(AddFont)
RemoveFont = wx._deprecated(RemoveFont)
}
// int GetCount();
};
//---------------------------------------------------------------------------
MustHaveApp(wxColourDatabase);
class wxColourDatabase {
public:
wxColourDatabase();
~wxColourDatabase();
// find colour by name or name for the given colour
wxColour Find(const wxString& name) const;
wxString FindName(const wxColour& colour) const;
%pythoncode { FindColour = Find }
// add a new colour to the database
void AddColour(const wxString& name, const wxColour& colour);
%extend {
void Append(const wxString& name, int red, int green, int blue) {
self->AddColour(name, wxColour(red, green, blue));
}
}
};
//---------------------------------------------------------------------------
%newgroup
%inline {
wxFontList* _wxPyInitTheFontList() { return wxTheFontList; }
wxPenList* _wxPyInitThePenList() { return wxThePenList; }
wxBrushList* _wxPyInitTheBrushList() { return wxTheBrushList; }
wxColourDatabase* _wxPyInitTheColourDatabase() { return wxTheColourDatabase; }
}
%pythoncode {
wxTheFontList = _wxPyMakeDelayedInitWrapper(_wxPyInitTheFontList)()
wxThePenList = _wxPyMakeDelayedInitWrapper(_wxPyInitThePenList)()
wxTheBrushList = _wxPyMakeDelayedInitWrapper(_wxPyInitTheBrushList)()
wxTheColourDatabase = _wxPyMakeDelayedInitWrapper(_wxPyInitTheColourDatabase)()
}
//---------------------------------------------------------------------------
%pythoncode { NullColor = NullColour }