From 0c169cf2d83a843dd9ac4b3c54a373e29269fc0b Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Tue, 5 Jul 2016 16:19:12 -0700 Subject: [PATCH] Finish remaining transfer flags for ribbon client data objects, and finish basic tests. --- etg/ribbon_buttonbar.py | 3 ++ etg/ribbon_gallery.py | 3 ++ etg/ribbon_toolbar.py | 10 ++++++ ext/wxWidgets | 2 +- unittests/test_ribbon_buttonbar.py | 17 ++++++++++ unittests/test_ribbon_gallery.py | 25 +++++++++++--- unittests/test_ribbon_toolbar.py | 53 ++++++++++++++++++++++++++++-- 7 files changed, 104 insertions(+), 9 deletions(-) diff --git a/etg/ribbon_buttonbar.py b/etg/ribbon_buttonbar.py index e7efcdec..8f80c14a 100644 --- a/etg/ribbon_buttonbar.py +++ b/etg/ribbon_buttonbar.py @@ -48,6 +48,9 @@ def run(): c.find('SetItemClientData').ignore() c.find('GetItemClientData').ignore() + # Methods assigning wxClientData objects need to transfer ownership + c.find('SetItemClientObject.data').transfer = True + c = module.find('wxRibbonButtonBarEvent') tools.fixEventClass(c) diff --git a/etg/ribbon_gallery.py b/etg/ribbon_gallery.py index 4bc731f5..092ca291 100644 --- a/etg/ribbon_gallery.py +++ b/etg/ribbon_gallery.py @@ -49,6 +49,9 @@ def run(): c.find('SetItemClientData').ignore() c.find('GetItemClientData').ignore() + # Methods assigning wxClientData objects need to transfer ownership + c.find('SetItemClientObject.data').transfer = True + c.find('Append').findOverload('wxClientData').find('clientData').transfer = True c = module.find('wxRibbonGalleryEvent') tools.fixEventClass(c) diff --git a/etg/ribbon_toolbar.py b/etg/ribbon_toolbar.py index c515cb75..f4f3c965 100644 --- a/etg/ribbon_toolbar.py +++ b/etg/ribbon_toolbar.py @@ -44,6 +44,16 @@ def run(): assert isinstance(c, etgtools.ClassDef) tools.fixWindowClass(c) + # Use wxPyUserData for the clientData values instead of a plain wxObject + for item in c.allItems(): + if isinstance(item, etgtools.ParamDef) and item.name == 'clientData': + item.type = 'wxPyUserData*' + item.transfer = True + meth = c.find('GetToolClientData') + meth.type = 'wxPyUserData*' + meth.setCppCode('return dynamic_cast(self->GetToolClientData(tool_id));') + + c = module.find('wxRibbonToolBarEvent') tools.fixEventClass(c) diff --git a/ext/wxWidgets b/ext/wxWidgets index 6f4dd7ff..f4f34a7e 160000 --- a/ext/wxWidgets +++ b/ext/wxWidgets @@ -1 +1 @@ -Subproject commit 6f4dd7ff301177062b649ec1880d06d5cdf10cab +Subproject commit f4f34a7ef1b8a795a4c6566b13baa711d19ae960 diff --git a/unittests/test_ribbon_buttonbar.py b/unittests/test_ribbon_buttonbar.py index d4d0bdc6..3f81156f 100644 --- a/unittests/test_ribbon_buttonbar.py +++ b/unittests/test_ribbon_buttonbar.py @@ -36,6 +36,23 @@ class ribbon_buttonbar_Tests(wtc.WidgetTestCase): def test_ribbon_buttonbar4(self): evt = wx.ribbon.RibbonButtonBarEvent() + + def test_ribbon_buttonbar5(self): + ribbon = wx.ribbon.RibbonBar(self.frame) + bb = wx.ribbon.RibbonButtonBar(ribbon) + bmp = wx.Bitmap(16,16) + btn = bb.AddButton(100, "label", bmp, "help string") + + class _Data(object): + def __init__(self, **kw): + self.__dict__.update(kw) + + data = _Data(a=1, b=2, c=3) + bb.SetItemClientObject(btn, data) + data_out = bb.GetItemClientObject(btn) + self.assertEqual(data.a, data_out.a) + self.assertTrue(data_out is data) + #--------------------------------------------------------------------------- if __name__ == '__main__': diff --git a/unittests/test_ribbon_gallery.py b/unittests/test_ribbon_gallery.py index 46985899..f1728d19 100644 --- a/unittests/test_ribbon_gallery.py +++ b/unittests/test_ribbon_gallery.py @@ -48,7 +48,6 @@ class ribbon_gallery_Tests(wtc.WidgetTestCase): g.GetItemClientData - @unittest.skip('because') def test_ribbon_gallery6(self): ribbon = wx.ribbon.RibbonBar(self.frame) g = wx.ribbon.RibbonGallery(ribbon) @@ -57,12 +56,28 @@ class ribbon_gallery_Tests(wtc.WidgetTestCase): def __init__(self, **kw): self.__dict__.update(kw) - data_in = _Data(a=1, b=2, c=3) - item = g.Append(wx.Bitmap(16,16), 102, data_in) - #data_out = g.GetItemClientObject(item) - #self.assertTrue(data_out is data_in) + data = _Data(a=1, b=2, c=3) + item = g.Append(wx.Bitmap(16,16), 102) + g.SetItemClientObject(item, data) + data_out = g.GetItemClientObject(item) + self.assertEqual(data.a, data_out.a) + self.assertTrue(data_out is data) + def test_ribbon_gallery7(self): + ribbon = wx.ribbon.RibbonBar(self.frame) + g = wx.ribbon.RibbonGallery(ribbon) + + class _Data(object): + def __init__(self, **kw): + self.__dict__.update(kw) + + data = _Data(a=1, b=2, c=3) + item = g.Append(wx.Bitmap(16,16), 102, data) + data_out = g.GetItemClientObject(item) + self.assertEqual(data.a, data_out.a) + self.assertTrue(data_out is data) + diff --git a/unittests/test_ribbon_toolbar.py b/unittests/test_ribbon_toolbar.py index 0ab3f750..503ceac8 100644 --- a/unittests/test_ribbon_toolbar.py +++ b/unittests/test_ribbon_toolbar.py @@ -6,10 +6,57 @@ import wx.ribbon class ribbon_toolbar_Tests(wtc.WidgetTestCase): - # TODO: Remove this test and add real ones. def test_ribbon_toolbar1(self): - self.fail("Unit tests for ribbon_toolbar not implemented yet.") - + wx.ribbon.wxEVT_RIBBONTOOLBAR_CLICKED + wx.ribbon.wxEVT_RIBBONTOOLBAR_DROPDOWN_CLICKED + wx.ribbon.EVT_RIBBONTOOLBAR_CLICKED + wx.ribbon.EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED + + + def test_ribbon_toolbar2(self): + ribbon = wx.ribbon.RibbonBar(self.frame) + tbar = wx.ribbon.RibbonToolBar() + tbar.Create(ribbon) + + + def test_ribbon_toolbar3(self): + ribbon = wx.ribbon.RibbonBar(self.frame) + tbar = wx.ribbon.RibbonToolBar(ribbon) + + + def test_ribbon_toolbar4(self): + evt = wx.ribbon.RibbonToolBarEvent() + evt.Bar + + + def test_ribbon_toolbar5(self): + ribbon = wx.ribbon.RibbonBar(self.frame) + tbar = wx.ribbon.RibbonToolBar(ribbon) + + + class _Data(object): + def __init__(self, **kw): + self.__dict__.update(kw) + + data1 = _Data(a=1, b=2, c=3) + data2 = _Data(d=4) + + bmp = wx.Bitmap(16,16) + tool1 = tbar.AddTool(101, bmp, "help string") + tbar.SetToolClientData(101, data1) + + bmp = wx.Bitmap(16,16) + tool2 = tbar.AddTool(102, bmp, help_string="help string", clientData=data2) + + data_out1 = tbar.GetToolClientData(101) + self.assertEqual(data1.a, data_out1.a) + self.assertTrue(data_out1 is data1) + + data_out2 = tbar.GetToolClientData(102) + self.assertEqual(data2.d, data_out2.d) + self.assertTrue(data_out2 is data2) + + #--------------------------------------------------------------------------- if __name__ == '__main__':