From 323129f44917b3c972800cd82603e8b2c596bb61 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Tue, 17 May 2022 17:20:59 -0700 Subject: [PATCH] Adjust all the custom wx.MenuItem methods. Return new instances, mark them as factories, etc. --- etg/menuitem.py | 38 ++++++++++++++++++++++---------------- unittests/test_menuitem.py | 2 +- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/etg/menuitem.py b/etg/menuitem.py index ba7940390..242ed4f6b 100644 --- a/etg/menuitem.py +++ b/etg/menuitem.py @@ -47,13 +47,16 @@ def run(): c.find('GetLabelFromText').ignore() - # These are MSW only. Make them be empty stubs for the other ports - c.find('GetBackgroundColour').type = 'const wxColour*' + # These are MSW only. Make them be empty stubs for the other ports. Several + # have incorrect details in the interface docs, so we need to tweak their + # return types too. + c.find('GetBackgroundColour').type = 'wxColour*' + c.find('GetBackgroundColour').factory = True c.find('GetBackgroundColour').setCppCode("""\ #ifdef __WXMSW__ - return &self->GetBackgroundColour(); + return new wxColor(self->GetBackgroundColour()); #else - return &wxNullColour; + return new wxColour; #endif """) @@ -63,12 +66,13 @@ def run(): #endif """) - c.find('GetFont').type = 'const wxFont*' + c.find('GetFont').type = 'wxFont*' + c.find('GetFont').factory = True c.find('GetFont').setCppCode("""\ #ifdef __WXMSW__ - return &self->GetFont(); + return new wxFont(self->GetFont()); #else - return &wxNullFont; + return new wxFont; #endif """) @@ -92,12 +96,13 @@ def run(): #endif """) - c.find('GetTextColour').type = 'const wxColour*' + c.find('GetTextColour').type = 'wxColour*' + c.find('GetTextColour').factory = True c.find('GetTextColour').setCppCode("""\ #ifdef __WXMSW__ - return &self->GetTextColour(); + return new wxColour(self->GetTextColour()); #else - return &wxNullColour; + return new wxColour; #endif """) @@ -108,13 +113,13 @@ def run(): """) - c.find('GetBitmap').type = 'const wxBitmap*' - c.find('GetBitmap').transferBack = True + c.find('GetBitmap').type = 'wxBitmap*' + c.find('GetBitmap').factory = True c.find('GetBitmap').setCppCode("""\ #ifdef __WXMSW__ return new wxBitmap(self->GetBitmap(checked)); #else - return new wxBitmap(self->GetBitmap()); + return new wxBitmap(self->GetBitmap()); // no checked arg in this case #endif """) @@ -135,13 +140,13 @@ def run(): """) - c.find('GetDisabledBitmap').type = 'const wxBitmap*' - c.find('GetDisabledBitmap').transferBack = True # Python takes ownership of the return value + c.find('GetDisabledBitmap').type = 'wxBitmap*' + c.find('GetDisabledBitmap').factory = True c.find('GetDisabledBitmap').setCppCode("""\ #ifdef __WXMSW__ return new wxBitmap(self->GetDisabledBitmap()); #else - return new wxBitmap(wxNullBitmap); + return new wxBitmap; #endif """) @@ -151,6 +156,7 @@ def run(): #endif """) + c.addAutoProperties() c.addItem(etgtools.PropertyDef('Enabled', 'IsEnabled', 'Enable')) diff --git a/unittests/test_menuitem.py b/unittests/test_menuitem.py index 0d028a7e0..b58cb52b5 100644 --- a/unittests/test_menuitem.py +++ b/unittests/test_menuitem.py @@ -12,7 +12,7 @@ class menuitem_Tests(wtc.WidgetTestCase): def test_menuitemCtor(self): m1 = wx.MenuItem() m2 = wx.MenuItem(None, -1, "Menu Item", "Help text", wx.ITEM_NORMAL) - m2.SetBitmap(wx.Bitmap(pngFile)) + m2.SetBitmap(wx.BitmapBundle(wx.Bitmap(pngFile))) def test_menuitemProperties(self): diff --git a/etg/bmpbndl.py b/etg/bmpbndl.py index 71fded894..b7e9caed0 100644 --- a/etg/bmpbndl.py +++ b/etg/bmpbndl.py @@ -37,7 +37,7 @@ def run(): c = module.find('wxBitmapBundle') assert isinstance(c, etgtools.ClassDef) - + c.find('wxBitmapBundle').findOverload('xpm').ignore() c.find('FromSVG').findOverload('char *data, const wxSize &sizeDef').ignore() c.find('FromImpl.impl').transfer = True diff --git a/etg/menuitem.py b/etg/menuitem.py index 242ed4f6b..fa61c926a 100644 --- a/etg/menuitem.py +++ b/etg/menuitem.py @@ -113,9 +113,10 @@ def run(): """) - c.find('GetBitmap').type = 'wxBitmap*' - c.find('GetBitmap').factory = True - c.find('GetBitmap').setCppCode("""\ + m = c.find('GetBitmap').findOverload('checked') + m.type = 'wxBitmap*' + m.factory = True + m.setCppCode("""\ #ifdef __WXMSW__ return new wxBitmap(self->GetBitmap(checked)); #else @@ -123,7 +124,8 @@ def run(): #endif """) - c.find('SetBitmap').setCppCode("""\ + m = c.find('SetBitmap').findOverload('checked') + m.setCppCode("""\ #ifdef __WXMSW__ self->SetBitmap(*bmp, checked); #else diff --git a/etg/bitmap.py b/etg/bitmap.py index 7b9019219..e5c767129 100644 --- a/etg/bitmap.py +++ b/etg/bitmap.py @@ -92,6 +92,10 @@ def run(): c.find('SetMask.mask').transfer = True + # TODO: This is different than the docs, but only on MSW... Remove this + # if/when that gets fixed. + c.find('UseAlpha').type = 'void' + c.addCppMethod('void', 'SetMaskColour', '(const wxColour& colour)', doc="Create a mask for this bitmap based on the pixels with the given colour.", body="""\