diff --git a/CHANGES.rst b/CHANGES.rst index b2e8f2a3a..a8f57235b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -63,7 +63,8 @@ Changes in this release include the following: * Add a step to wx.Config.ReadInt to attempt converting from long to int under python2. (#384) - +* Add virtual behavior for wx.RichTextCtrl and wx.TextCtrl's Copy/Cut/Paste methods + and their Can* counterparts. (#954) 4.0.3 "The show must go on. (Die show-stoppers! Die!)" diff --git a/etg/combobox.py b/etg/combobox.py index 67a122778..af27832f4 100644 --- a/etg/combobox.py +++ b/etg/combobox.py @@ -36,6 +36,8 @@ def run(): assert isinstance(c, etgtools.ClassDef) tools.fixWindowClass(c) + tools.fixTextClipboardMethods(c) + c.find('wxComboBox').findOverload('wxString choices').ignore() c.find('wxComboBox').findOverload('wxArrayString').find('choices').default = 'wxArrayString()' c.find('wxComboBox').findOverload('wxArrayString').find('value').default = 'wxEmptyString' diff --git a/etg/richtextctrl.py b/etg/richtextctrl.py index 5fbb382fc..4461cb2d7 100644 --- a/etg/richtextctrl.py +++ b/etg/richtextctrl.py @@ -76,6 +76,8 @@ def run(): c.find('SetListStyle.def').name = 'styleDef' c.find('ApplyStyle.def').name = 'styleDef' + tools.fixTextClipboardMethods(c) + c.addPyMethod('GetDefaultStyle', '(self)', 'return self.GetDefaultStyleEx()', deprecated='Use GetDefaultStyleEx instead') diff --git a/etg/textentry.py b/etg/textentry.py index 317f73268..4d4895d55 100644 --- a/etg/textentry.py +++ b/etg/textentry.py @@ -47,6 +47,9 @@ def parseAndTweakModule(): c.find('SetSelection.to').name = 'to_' c.find('AutoComplete').findOverload('wxTextCompleter').find('completer').transfer = True + # Re-enable virtualness for (Can)Cut/Copy/Paste/Undo/Redo + tools.fixTextClipboardMethods(c) + return module #----------------------------------------------------------------- diff --git a/etgtools/tweaker_tools.py b/etgtools/tweaker_tools.py index f31ffaea9..e103d9dee 100644 --- a/etgtools/tweaker_tools.py +++ b/etgtools/tweaker_tools.py @@ -381,7 +381,19 @@ def fixRefCountedClass(klass): if isinstance(item, extractors.MethodDef) and item.isCtor: item.transfer = True +def fixTextClipboardMethods(klass): + """ + Adds virtual behavior to Copy/Cut/Paste/Undo/Redo methods, and their Can* + counterparts, of the given class. + :param ClassDef klass: The class to modify. + """ + for name in ('Cut', 'Copy', 'Paste', 'Undo', 'Redo'): + for method in (name, "Can{}".format(name)): + try: + klass.find(method).isVirtual = True + except extractors.ExtractorError: + pass def removeVirtuals(klass): """