From b50b321d0e105e5be8466092ec5220bd0bad4e1e Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Tue, 25 Apr 2017 14:37:50 -0700 Subject: [PATCH] Fix some virtual method signatures --- demo/DVC_CustomRenderer.py | 10 +++++---- demo/DVC_IndexListModel.py | 3 ++- demo/run.py | 2 +- etg/dataview.py | 36 ++++++++++++++++++++++++------ etg/grid.py | 2 +- samples/dataview/CustomRenderer.py | 6 +++-- 6 files changed, 43 insertions(+), 16 deletions(-) diff --git a/demo/DVC_CustomRenderer.py b/demo/DVC_CustomRenderer.py index 3c6b0b4e..3a3ddebd 100644 --- a/demo/DVC_CustomRenderer.py +++ b/demo/DVC_CustomRenderer.py @@ -27,7 +27,8 @@ class MyCustomRenderer(dv.DataViewCustomRenderer): # has a helper function we can use for measuring text that is # aware of any custom attributes that may have been set for # this item. - return self.GetTextExtent(self.value) + value = self.value if self.value else "" + return self.GetTextExtent(value) def Render(self, rect, dc, state): @@ -45,15 +46,16 @@ class MyCustomRenderer(dv.DataViewCustomRenderer): # And then finish up with this helper function that draws the # text for us, dealing with alignment, font and color # attributes, etc - self.RenderText(self.value, + value = self.value if self.value else "" + self.RenderText(value, 4, # x-offset, to compensate for the rounded rectangles rect, dc, state # wxDataViewCellRenderState flags ) - return True + # The HasEditorCtrl, CreateEditorCtrl and GetValueFromEditorCtrl # methods need to be implemented if this renderer is going to # support in-place editing of the cell value, otherwise they can @@ -101,7 +103,7 @@ class MyCustomRenderer(dv.DataViewCustomRenderer): #---------------------------------------------------------------------- -# To help focus this sammple on the custom renderer, we'll reuse the +# To help focus this sample on the custom renderer, we'll reuse the # model class from another sample. from DVC_IndexListModel import TestModel diff --git a/demo/DVC_IndexListModel.py b/demo/DVC_IndexListModel.py index ca6a549b..74a3f4ac 100644 --- a/demo/DVC_IndexListModel.py +++ b/demo/DVC_IndexListModel.py @@ -7,7 +7,7 @@ import wx.dataview as dv #---------------------------------------------------------------------- # This model class provides the data to the view when it is asked for. -# Since it is a list-only model (no hierachical data) then it is able +# Since it is a list-only model (no hierarchical data) then it is able # to be referenced by row rather than by item object, so in this way # it is easier to comprehend and use than other model types. In this # example we also provide a Compare function to assist with sorting of @@ -39,6 +39,7 @@ class TestModel(dv.DataViewIndexListModel): def SetValueByRow(self, value, row, col): self.log.write("SetValue: (%d,%d) %s\n" % (row, col, value)) self.data[row][col] = value + return True # Report how many columns this model provides data for. def GetColumnCount(self): diff --git a/demo/run.py b/demo/run.py index 75174f9b..d4821972 100755 --- a/demo/run.py +++ b/demo/run.py @@ -25,7 +25,7 @@ import sys, os # stuff for debugging print("Python %s" % sys.version) print("wx.version: %s" % wx.version()) -##print("pid: %s" % os.getpid()); raw_input("Press Enter...") +##print("pid: %s" % os.getpid()); input("Press Enter...") assertMode = wx.APP_ASSERT_DIALOG ##assertMode = wx.APP_ASSERT_EXCEPTION diff --git a/etg/dataview.py b/etg/dataview.py index 0317e363..a4395a25 100644 --- a/etg/dataview.py +++ b/etg/dataview.py @@ -229,6 +229,7 @@ def run(): def _fixupBoolGetters(method, sig): method.type = 'void' method.find('value').out = True + method.find('value').type = 'wxDVCVariant&' method.cppSignature = sig @@ -240,17 +241,38 @@ def run(): # Change variant getters to return the value for name, sig in [ - ('GetValue', 'bool (wxDVCVariant& value)'), - ('GetValueFromEditorCtrl', 'bool (wxWindow * editor, wxDVCVariant& value)'), + ('GetValue', 'bool (wxVariant& value)'), + ('GetValueFromEditorCtrl', 'bool (wxWindow * editor, wxVariant& value)'), ]: _fixupBoolGetters(c.find(name), sig) + m = c.find('SetValue') + m.find('value').type = 'wxDVCVariant&' + m.cppSignature = 'bool (const wxVariant& value)' + c = module.find('wxDataViewCustomRenderer') - _fixupBoolGetters(c.find('GetValueFromEditorCtrl'), - 'bool (wxWindow * editor, wxDVCVariant& value)') + m = c.find('GetValueFromEditorCtrl') + _fixupBoolGetters(m, 'bool (wxWindow * editor, wxVariant& value)') + + # m.virtualCatcherCode = """\ + # bool sipRes = 0; + # PyObject *sipResObj = sipCallMethod(0, sipMethod, "D", editor, sipType_wxWindow, NULL); + # + # sipParseResultEx(sipGILState, sipErrorHandler, sipPySelf, sipMethod, sipResObj, "(bH5)", &sipRes, sipType_wxDVCVariant, &value); + # + # return sipRes; + # + # """ + c.find('GetTextExtent').ignore(False) + c.addItem(etgtools.WigCode("""\ + virtual bool SetValue( const wxDVCVariant &value ) [bool (const wxVariant& value)]; + virtual void GetValue( wxDVCVariant &value /Out/ ) const [bool (wxVariant& value)]; + %Property(name=Value, get=GetValue, set=SetValue) + """, protection='public')) + module.addPyCode("""\ PyDataViewCustomRenderer = wx.deprecated(DataViewCustomRenderer, "Use DataViewCustomRenderer instead")""") @@ -272,10 +294,10 @@ def run(): c.addAutoProperties() c.addItem(etgtools.WigCode("""\ - virtual bool SetValue( const wxDVCVariant &value ); - virtual void GetValue( wxDVCVariant &value /Out/ ) const [bool (wxDVCVariant& value)]; + virtual bool SetValue( const wxDVCVariant &value ) [bool (const wxVariant& value)]; + virtual void GetValue( wxDVCVariant &value /Out/ ) const [bool (wxVariant& value)]; %Property(name=Value, get=GetValue, set=SetValue) - """)) + """, protection='public')) # The SpinRenderer has a few additional pure virtuals that need to be declared diff --git a/etg/grid.py b/etg/grid.py index 1b9e2eb2..f698cfc0 100644 --- a/etg/grid.py +++ b/etg/grid.py @@ -224,7 +224,7 @@ def run(): # Code for C++ --> Python calls. This is used when a C++ method # call needs to be reflected to a call to the overridden Python - # method, so we need to translate between the real C++ siganture + # method, so we need to translate between the real C++ signature # and the Python signature. virtualCatcherCode="""\ // VirtualCatcherCode for wx.grid.GridCellEditor.EndEdit diff --git a/samples/dataview/CustomRenderer.py b/samples/dataview/CustomRenderer.py index d8c6987a..b6cab12c 100644 --- a/samples/dataview/CustomRenderer.py +++ b/samples/dataview/CustomRenderer.py @@ -26,7 +26,8 @@ class MyCustomRenderer(dv.DataViewCustomRenderer): # has a helper function we can use for measuring text that is # aware of any custom attributes that may have been set for # this item. - size = self.GetTextExtent(self.value) + value = self.value if self.value else "" + size = self.GetTextExtent(value) return size @@ -45,7 +46,8 @@ class MyCustomRenderer(dv.DataViewCustomRenderer): # And then finish up with this helper function that draws the # text for us, dealing with alignment, font and color # attributes, etc - self.RenderText(self.value, + value = self.value if self.value else "" + self.RenderText(value, 4, # x-offset, to compensate for the rounded rectangles rect, dc,