Files
wxWidgets/wxPython/src/_menu.i
Robin Dunn 214c4fbea5 Changes needed to be able to build with SWIG 1.3.24, 1.3.27 as well as
the upcoming 1.3.28, using #if statements on SWIG_VERSION.

Adjustments to ownership of SWIG objects, add some destructors and
explicitly disown non-window objects when their ownership is
transfered to a C++ object.

Since all window objects are owned by their parent, or by themselves,
always set their thisown attribute to False.

Explicitly set thisown to False after any Destroy() methods are
called, so SWIG doesn't try to destroy them again.

Etc.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37203 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2006-01-29 02:09:45 +00:00

432 lines
14 KiB
OpenEdge ABL

/////////////////////////////////////////////////////////////////////////////
// Name: _menu.i
// Purpose: SWIG interface defs for wxMenuBar, wxMenu and wxMenuItem
//
// Author: Robin Dunn
//
// Created: 24-June-1997
// RCS-ID: $Id$
// Copyright: (c) 2003 by Total Control Software
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
// Not a %module
//---------------------------------------------------------------------------
%newgroup
MustHaveApp(wxMenu);
class wxMenu : public wxEvtHandler
{
public:
%pythonAppend wxMenu "self._setOORInfo(self)"
%typemap(out) wxMenu*; // turn off this typemap
wxMenu(const wxString& title = wxPyEmptyString, long style = 0);
// Turn it back on again
%typemap(out) wxMenu* { $result = wxPyMake_wxObject($1, $owner); }
// append any kind of item (normal/check/radio/separator)
wxMenuItem* Append(int id,
const wxString& text,
const wxString& help = wxPyEmptyString,
wxItemKind kind = wxITEM_NORMAL);
// append a separator to the menu
wxMenuItem* AppendSeparator();
// append a check item
wxMenuItem* AppendCheckItem(int id,
const wxString& text,
const wxString& help = wxPyEmptyString);
// append a radio item
wxMenuItem* AppendRadioItem(int id,
const wxString& text,
const wxString& help = wxPyEmptyString);
// append a submenu
%Rename(AppendMenu, wxMenuItem*, Append(int id,
const wxString& text,
wxMenu *submenu,
const wxString& help = wxPyEmptyString));
// the most generic form of Append() - append anything
%Rename(AppendItem, wxMenuItem*, Append(wxMenuItem *item));
// insert a break in the menu (only works when appending the items, not
// inserting them)
virtual void Break();
// insert an item before given position
%Rename(InsertItem, wxMenuItem*, Insert(size_t pos, wxMenuItem *item));
// insert an item before given position
wxMenuItem* Insert(size_t pos,
int id,
const wxString& text,
const wxString& help = wxPyEmptyString,
wxItemKind kind = wxITEM_NORMAL);
// insert a separator
wxMenuItem* InsertSeparator(size_t pos);
// insert a check item
wxMenuItem* InsertCheckItem(size_t pos,
int id,
const wxString& text,
const wxString& help = wxPyEmptyString);
// insert a radio item
wxMenuItem* InsertRadioItem(size_t pos,
int id,
const wxString& text,
const wxString& help = wxPyEmptyString);
// insert a submenu
%Rename(InsertMenu, wxMenuItem*, Insert(size_t pos,
int id,
const wxString& text,
wxMenu *submenu,
const wxString& help = wxPyEmptyString));
// prepend an item to the menu
%Rename(PrependItem, wxMenuItem*, Prepend(wxMenuItem *item));
// prepend any item to the menu
wxMenuItem* Prepend(int id,
const wxString& text,
const wxString& help = wxPyEmptyString,
wxItemKind kind = wxITEM_NORMAL);
// prepend a separator
wxMenuItem* PrependSeparator();
// prepend a check item
wxMenuItem* PrependCheckItem(int id,
const wxString& text,
const wxString& help = wxPyEmptyString);
// prepend a radio item
wxMenuItem* PrependRadioItem(int id,
const wxString& text,
const wxString& help = wxPyEmptyString);
// prepend a submenu
%Rename(PrependMenu, wxMenuItem*, Prepend(int id,
const wxString& text,
wxMenu *submenu,
const wxString& help = wxPyEmptyString));
// detach an item from the menu, but don't delete it so that it can be
// added back later (but if it's not, the caller is responsible for
// deleting it!)
wxMenuItem *Remove(int id);
%Rename(RemoveItem, wxMenuItem*, Remove(wxMenuItem *item));
// delete an item from the menu (submenus are not destroyed by this
// function, see Destroy)
bool Delete(int id);
%Rename(DeleteItem, bool, Delete(wxMenuItem *item));
%pythonAppend Destroy "args[0].thisown = 0"
%extend { void Destroy() { delete self; } }
// delete the item from menu and destroy it (if it's a submenu)
%Rename(DestroyId, bool, Destroy(int id));
%Rename(DestroyItem, bool, Destroy(wxMenuItem *item));
// get the items
size_t GetMenuItemCount() const;
%extend {
PyObject* GetMenuItems() {
wxMenuItemList& list = self->GetMenuItems();
return wxPy_ConvertList(&list);
}
}
// search
int FindItem(const wxString& item) const;
%Rename(FindItemById, wxMenuItem*, FindItem(int id /*, wxMenu **menu = NULL*/) const);
// find by position
wxMenuItem* FindItemByPosition(size_t position) const;
// get/set items attributes
void Enable(int id, bool enable);
bool IsEnabled(int id) const;
void Check(int id, bool check);
bool IsChecked(int id) const;
void SetLabel(int id, const wxString& label);
wxString GetLabel(int id) const;
virtual void SetHelpString(int id, const wxString& helpString);
virtual wxString GetHelpString(int id) const;
// the title
virtual void SetTitle(const wxString& title);
const wxString GetTitle() const;
// event handler
void SetEventHandler(wxEvtHandler *handler);
wxEvtHandler *GetEventHandler() const;
// invoking window
void SetInvokingWindow(wxWindow *win);
wxWindow *GetInvokingWindow() const;
// style
long GetStyle() const { return m_style; }
// Updates the UI for a menu and all submenus recursively. source is the
// object that has the update event handlers defined for it. If NULL, the
// menu or associated window will be used.
void UpdateUI(wxEvtHandler* source = NULL);
// get the menu bar this menu is attached to (may be NULL, always NULL for
// popup menus)
wxMenuBar *GetMenuBar() const;
// TODO: Should these be exposed?
// called when the menu is attached/detached to/from a menu bar
virtual void Attach(wxMenuBarBase *menubar);
virtual void Detach();
// is the menu attached to a menu bar (or is it a popup one)?
bool IsAttached() const;
// set/get the parent of this menu
void SetParent(wxMenu *parent);
wxMenu *GetParent() const;
};
//---------------------------------------------------------------------------
%newgroup
MustHaveApp(wxMenuBar);
class wxMenuBar : public wxWindow
{
public:
%pythonAppend wxMenuBar "self._setOORInfo(self)"
%typemap(out) wxMenuBar*; // turn off this typemap
wxMenuBar(long style = 0);
// Turn it back on again
%typemap(out) wxMenuBar* { $result = wxPyMake_wxObject($1, $owner); }
// append a menu to the end of menubar, return True if ok
virtual bool Append(wxMenu *menu, const wxString& title);
// insert a menu before the given position into the menubar, return True
// if inserted ok
virtual bool Insert(size_t pos, wxMenu *menu, const wxString& title);
// get the number of menus in the menu bar
size_t GetMenuCount() const;
// get the menu at given position
wxMenu *GetMenu(size_t pos) const;
// replace the menu at given position with another one, returns the
// previous menu (which should be deleted by the caller)
virtual wxMenu *Replace(size_t pos, wxMenu *menu, const wxString& title);
// delete the menu at given position from the menu bar, return the pointer
// to the menu (which should be deleted by the caller)
virtual wxMenu *Remove(size_t pos);
// enable or disable a submenu
virtual void EnableTop(size_t pos, bool enable);
// is the menu enabled?
virtual bool IsEnabledTop(size_t pos) const;
// get or change the label of the menu at given position
virtual void SetLabelTop(size_t pos, const wxString& label);
virtual wxString GetLabelTop(size_t pos) const;
// by menu and item names, returns wxNOT_FOUND if not found or id of the
// found item
virtual int FindMenuItem(const wxString& menu, const wxString& item) const;
// find item by id (in any menu), returns NULL if not found
//
// if menu is !NULL, it will be filled with wxMenu this item belongs to
%Rename(FindItemById, virtual wxMenuItem*, FindItem(int id /*, wxMenu **menu = NULL*/) const);
// find menu by its caption, return wxNOT_FOUND on failure
int FindMenu(const wxString& title);
// all these functions just use FindItem() and then call an appropriate
// method on it
//
// NB: under MSW, these methods can only be used after the menubar had
// been attached to the frame
void Enable(int id, bool enable);
void Check(int id, bool check);
bool IsChecked(int id) const;
bool IsEnabled(int id) const;
// TODO: bool IsEnabled() const;
void SetLabel(int id, const wxString &label);
wxString GetLabel(int id) const;
void SetHelpString(int id, const wxString& helpString);
wxString GetHelpString(int id) const;
// get the frame we are attached to (may return NULL)
wxFrame *GetFrame() const;
// returns True if we're attached to a frame
bool IsAttached() const;
// associate the menubar with the frame
virtual void Attach(wxFrame *frame);
// called before deleting the menubar normally
virtual void Detach();
#ifdef __WXMAC__
static void SetAutoWindowMenu( bool enable );
static bool GetAutoWindowMenu();
#else
%extend {
static void SetAutoWindowMenu( bool enable ) {}
static bool GetAutoWindowMenu() { return false; }
}
#endif
};
//---------------------------------------------------------------------------
%newgroup
class wxMenuItem : public wxObject {
public:
wxMenuItem(wxMenu* parentMenu=NULL, int id=wxID_ANY,
const wxString& text = wxPyEmptyString,
const wxString& help = wxPyEmptyString,
wxItemKind kind = wxITEM_NORMAL,
wxMenu* subMenu = NULL);
// the menu we're in
wxMenu *GetMenu() const;
void SetMenu(wxMenu* menu);
// get/set id
void SetId(int id);
int GetId() const;
bool IsSeparator() const;
// the item's text (or name)
//
// NB: the item's text includes the accelerators and mnemonics info (if
// any), i.e. it may contain '&' or '_' or "\t..." and thus is
// different from the item's label which only contains the text shown
// in the menu
virtual void SetText(const wxString& str);
wxString GetLabel() const;
const wxString& GetText() const;
// get the label from text
static wxString GetLabelFromText(const wxString& text);
// what kind of menu item we are
wxItemKind GetKind() const;
void SetKind(wxItemKind kind);
virtual void SetCheckable(bool checkable);
bool IsCheckable() const;
bool IsSubMenu() const;
void SetSubMenu(wxMenu *menu);
wxMenu *GetSubMenu() const;
// state
virtual void Enable(bool enable = true);
virtual bool IsEnabled() const;
virtual void Check(bool check = true);
virtual bool IsChecked() const;
void Toggle();
// help string (displayed in the status bar by default)
void SetHelp(const wxString& str);
const wxString& GetHelp() const;
// get our accelerator or NULL (caller must delete the pointer)
virtual wxAcceleratorEntry *GetAccel() const;
// set the accel for this item - this may also be done indirectly with
// SetText()
virtual void SetAccel(wxAcceleratorEntry *accel);
void SetBitmap(const wxBitmap& bitmap);
const wxBitmap& GetBitmap();
// wxOwnerDrawn methods
#ifdef __WXMSW__
void SetFont(const wxFont& font);
wxFont GetFont();
void SetTextColour(const wxColour& colText);
wxColour GetTextColour();
void SetBackgroundColour(const wxColour& colBack);
wxColour GetBackgroundColour();
void SetBitmaps(const wxBitmap& bmpChecked,
const wxBitmap& bmpUnchecked = wxNullBitmap);
void SetDisabledBitmap( const wxBitmap& bmpDisabled );
const wxBitmap& GetDisabledBitmap() const;
void SetMarginWidth(int nWidth);
int GetMarginWidth();
static int GetDefaultMarginWidth();
bool IsOwnerDrawn();
// switch on/off owner-drawing the item
void SetOwnerDrawn(bool ownerDrawn = true);
void ResetOwnerDrawn();
#else
%extend {
void SetFont(const wxFont& font) {}
wxFont GetFont() { return wxNullFont; }
void SetTextColour(const wxColour& colText) {}
wxColour GetTextColour() { return wxNullColour; }
void SetBackgroundColour(const wxColour& colBack) {}
wxColour GetBackgroundColour() { return wxNullColour; }
void SetBitmaps(const wxBitmap& bmpChecked,
const wxBitmap& bmpUnchecked = wxNullBitmap)
{ self->SetBitmap( bmpChecked ); }
void SetDisabledBitmap( const wxBitmap& bmpDisabled ) {}
const wxBitmap& GetDisabledBitmap() const { return wxNullBitmap; }
void SetMarginWidth(int nWidth) {}
int GetMarginWidth() { return 0; }
static int GetDefaultMarginWidth() { return 0; }
bool IsOwnerDrawn() { return false; }
void SetOwnerDrawn(bool ownerDrawn = true) {}
void ResetOwnerDrawn() {}
}
#endif
};
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------