mirror of
https://github.com/wxWidgets/Phoenix.git
synced 2025-12-16 09:40:07 +01:00
Add MappedType for wxMessageDialog::ButtonLabel,
so MessageDialog methods can take either string or stock IDs.
This commit is contained in:
@@ -61,6 +61,8 @@ Changes in this release include the following:
|
|||||||
|
|
||||||
* Fix event type name in wx/lib/sheet.py (#613)
|
* Fix event type name in wx/lib/sheet.py (#613)
|
||||||
|
|
||||||
|
* The wx.MessageDialog methods which take ButtonLabel parameters are now able
|
||||||
|
to accept either strings or stock IDs. (#605, #276)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ INCLUDES = [ # base and core stuff
|
|||||||
'clntdatactnr',
|
'clntdatactnr',
|
||||||
'userdata',
|
'userdata',
|
||||||
'wxpybuffer',
|
'wxpybuffer',
|
||||||
|
'msgdlg_btnlabel',
|
||||||
|
|
||||||
'stockgdi',
|
'stockgdi',
|
||||||
'longlong',
|
'longlong',
|
||||||
|
|||||||
@@ -11,6 +11,8 @@
|
|||||||
|
|
||||||
import etgtools
|
import etgtools
|
||||||
import etgtools.tweaker_tools as tools
|
import etgtools.tweaker_tools as tools
|
||||||
|
from etgtools.extractors import ParamDef
|
||||||
|
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
PACKAGE = "wx"
|
PACKAGE = "wx"
|
||||||
@@ -40,23 +42,16 @@ def run():
|
|||||||
|
|
||||||
module.addGlobalStr('wxMessageBoxCaptionStr', c)
|
module.addGlobalStr('wxMessageBoxCaptionStr', c)
|
||||||
|
|
||||||
# These argument types are actually ButtonLabel, but the class is a private
|
# Several of the wxMessageDIalog methods take a
|
||||||
# helper. We will always be passing in strings, and ButtonLabel will implicitly
|
# wxMessageDialog::ButtonLabel parameter, which enables either a string or
|
||||||
# convert.
|
# a Stock ID to be passed. To facilitate this same ability for Python the
|
||||||
#
|
# SIP types are changed to a custom type which is a MappedType which
|
||||||
# TODO: Add a mapped type for ButtonLabel that converts from a string or stock ID. See #276
|
# handles converting from the two types for us. See msgdlg_btnlabel.sip
|
||||||
c.find('SetHelpLabel.help').type = 'const wxString&'
|
c.find('ButtonLabel').ignore()
|
||||||
c.find('SetOKCancelLabels.ok').type = 'const wxString&'
|
for item in c.allItems():
|
||||||
c.find('SetOKCancelLabels.cancel').type = 'const wxString&'
|
if isinstance(item, ParamDef) and item.type == 'const ButtonLabel &':
|
||||||
|
item.type = 'const wxMessageDialogButtonLabel &'
|
||||||
|
|
||||||
c.find('SetOKLabel.ok').type = 'const wxString&'
|
|
||||||
|
|
||||||
c.find('SetYesNoCancelLabels.yes').type = 'const wxString&'
|
|
||||||
c.find('SetYesNoCancelLabels.no').type = 'const wxString&'
|
|
||||||
c.find('SetYesNoCancelLabels.cancel').type = 'const wxString&'
|
|
||||||
|
|
||||||
c.find('SetYesNoLabels.yes').type = 'const wxString&'
|
|
||||||
c.find('SetYesNoLabels.no').type = 'const wxString&'
|
|
||||||
|
|
||||||
tools.fixTopLevelWindowClass(c)
|
tools.fixTopLevelWindowClass(c)
|
||||||
|
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ class BaseDef(object):
|
|||||||
|
|
||||||
def findAll(self, name):
|
def findAll(self, name):
|
||||||
"""
|
"""
|
||||||
Search recursivly for items that have the given name.
|
Search recursively for items that have the given name.
|
||||||
"""
|
"""
|
||||||
matches = list()
|
matches = list()
|
||||||
for item in self.allItems():
|
for item in self.allItems():
|
||||||
|
|||||||
69
src/msgdlg_btnlabel.sip
Normal file
69
src/msgdlg_btnlabel.sip
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
//--------------------------------------------------------------------------
|
||||||
|
// Name: msgdlg_btnlabel.sip
|
||||||
|
// Purpose: A mapped type to allow auto-converting strings and ints
|
||||||
|
// to wxMessageDialog::ButtonLabel
|
||||||
|
//
|
||||||
|
// Author: Robin Dunn
|
||||||
|
//
|
||||||
|
// Created: 18-Nov-2017
|
||||||
|
// Copyright: (c) 2017 by Total Control Software
|
||||||
|
// Licence: wxWindows license
|
||||||
|
//--------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%ModuleHeaderCode
|
||||||
|
// Since the attributes of wxMessageDialogBase::ButtonLabel are declared
|
||||||
|
// const the implicitly generated copy ctor and assignment operator will
|
||||||
|
// cause compilation errors. Since the code generated for MappedTypes
|
||||||
|
// expects to be able to copy and assign objects (even though they are not
|
||||||
|
// really needed in this case) we need to use this little shim class so
|
||||||
|
// there is an explicit copy ctor and assignment operator.
|
||||||
|
|
||||||
|
class wxMessageDialogButtonLabel : public wxMessageDialogBase::ButtonLabel
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxMessageDialogButtonLabel()
|
||||||
|
: wxMessageDialogBase::ButtonLabel("") {}
|
||||||
|
|
||||||
|
wxMessageDialogButtonLabel(int stockId)
|
||||||
|
: wxMessageDialogBase::ButtonLabel(stockId) {}
|
||||||
|
|
||||||
|
wxMessageDialogButtonLabel(const wxString& label)
|
||||||
|
: wxMessageDialogBase::ButtonLabel(label) {}
|
||||||
|
|
||||||
|
wxMessageDialogButtonLabel(const char *label)
|
||||||
|
: wxMessageDialogBase::ButtonLabel(label) {}
|
||||||
|
|
||||||
|
wxMessageDialogButtonLabel(const wxMessageDialogButtonLabel& other)
|
||||||
|
: wxMessageDialogBase::ButtonLabel(other.GetAsString()) {}
|
||||||
|
|
||||||
|
wxMessageDialogButtonLabel& operator=(const wxMessageDialogButtonLabel& other)
|
||||||
|
{ return *this; }
|
||||||
|
};
|
||||||
|
%End
|
||||||
|
|
||||||
|
%MappedType wxMessageDialogButtonLabel
|
||||||
|
{
|
||||||
|
%ConvertToTypeCode
|
||||||
|
// Code to test a PyObject for compatibility
|
||||||
|
if (!sipIsErr) {
|
||||||
|
return (PyBytes_Check(sipPy) || PyUnicode_Check(sipPy) || wxPyInt_Check(sipPy));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Code to create a new wxMessageDialogButtonLabel from the PyObject
|
||||||
|
wxMessageDialogButtonLabel* label;
|
||||||
|
if (PyBytes_Check(sipPy))
|
||||||
|
label = new wxMessageDialogButtonLabel(PyBytes_AsString(sipPy));
|
||||||
|
else if (PyUnicode_Check(sipPy))
|
||||||
|
label = new wxMessageDialogButtonLabel(Py2wxString(sipPy));
|
||||||
|
else
|
||||||
|
label = new wxMessageDialogButtonLabel(wxPyInt_AsLong(sipPy));
|
||||||
|
|
||||||
|
*sipCppPtr = label;
|
||||||
|
return sipGetState(sipTransferObj);
|
||||||
|
%End
|
||||||
|
|
||||||
|
%ConvertFromTypeCode
|
||||||
|
Py_INCREF(Py_None); return Py_None;
|
||||||
|
%End
|
||||||
|
|
||||||
|
};
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
static wxString i_Py2wxString(PyObject* source)
|
static wxString i_Py2wxString(PyObject* source)
|
||||||
{
|
{
|
||||||
#if wxUSE_UNICODE_WCHAR == 0
|
#if wxUSE_UNICODE_WCHAR == 0
|
||||||
#error wxString converison can only handle WCHAR wxStrings currently
|
#error wxString conversion can only handle WCHAR wxStrings currently
|
||||||
#endif
|
#endif
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
PyObject* uni = source;
|
PyObject* uni = source;
|
||||||
|
|||||||
@@ -52,6 +52,23 @@ class msgdlg_Tests(wtc.WidgetTestCase):
|
|||||||
wx.STAY_ON_TOP
|
wx.STAY_ON_TOP
|
||||||
|
|
||||||
|
|
||||||
|
def test_msgdlgLabels1(self):
|
||||||
|
dlg = wx.MessageDialog(None, 'Message', 'Caption')
|
||||||
|
dlg.SetHelpLabel('help')
|
||||||
|
dlg.SetOKCancelLabels('ok', 'cancel')
|
||||||
|
dlg.SetOKLabel('ok')
|
||||||
|
dlg.SetYesNoCancelLabels('yes', 'no', 'cancel')
|
||||||
|
dlg.SetYesNoLabels('yes', 'no')
|
||||||
|
|
||||||
|
def test_msgdlgLabels2(self):
|
||||||
|
dlg = wx.MessageDialog(None, 'Message', 'Caption')
|
||||||
|
dlg.SetHelpLabel(wx.ID_HELP)
|
||||||
|
dlg.SetOKCancelLabels(wx.ID_OK, wx.ID_CANCEL)
|
||||||
|
dlg.SetOKLabel(wx.ID_OK)
|
||||||
|
dlg.SetYesNoCancelLabels(wx.ID_YES, wx.ID_NO, wx.ID_CANCEL)
|
||||||
|
dlg.SetYesNoLabels(wx.ID_YES, wx.ID_NO)
|
||||||
|
|
||||||
|
|
||||||
def test_gmsgdlg1(self):
|
def test_gmsgdlg1(self):
|
||||||
dlg = wx.GenericMessageDialog(None, 'Message', 'Caption')
|
dlg = wx.GenericMessageDialog(None, 'Message', 'Caption')
|
||||||
wx.CallLater(250, dlg.EndModal, wx.ID_OK)
|
wx.CallLater(250, dlg.EndModal, wx.ID_OK)
|
||||||
|
|||||||
Reference in New Issue
Block a user