From b7c5c65ae98ab47043134450aa09890529ab2aaf Mon Sep 17 00:00:00 2001 From: Tieqiong <123656525+Tieqiong@users.noreply.github.com> Date: Sat, 18 Jan 2025 08:29:19 -0500 Subject: [PATCH] refactor: ending support for WX3 (#259) * refactor: ending support for WX3 * refine news * pcmt --- .../api/diffpy.pdfgui.gui.wxextensions.rst | 8 -- news/wx3.rst | 23 +++++ src/diffpy/pdfgui/gui/extendedplotframe.py | 4 +- src/diffpy/pdfgui/gui/fittree.py | 3 +- src/diffpy/pdfgui/gui/mainframe.py | 90 +++++++++--------- src/diffpy/pdfgui/gui/parameterspanel.py | 7 +- src/diffpy/pdfgui/gui/phaseconfigurepanel.py | 15 ++- .../pdfgui/gui/phaseconstraintspanel.py | 9 +- .../pdfgui/gui/wxextensions/listctrls.py | 12 +-- src/diffpy/pdfgui/gui/wxextensions/wx12.py | 95 ------------------- 10 files changed, 88 insertions(+), 178 deletions(-) create mode 100644 news/wx3.rst delete mode 100644 src/diffpy/pdfgui/gui/wxextensions/wx12.py diff --git a/doc/source/api/diffpy.pdfgui.gui.wxextensions.rst b/doc/source/api/diffpy.pdfgui.gui.wxextensions.rst index eee1258e..75979fa7 100644 --- a/doc/source/api/diffpy.pdfgui.gui.wxextensions.rst +++ b/doc/source/api/diffpy.pdfgui.gui.wxextensions.rst @@ -11,14 +11,6 @@ diffpy.pdfgui.gui.wxextensions package Submodules ---------- -diffpy.pdfgui.gui.wxextensions.wx12 module -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. automodule:: diffpy.pdfgui.gui.wxextensions.wx12 - :members: - :undoc-members: - :show-inheritance: - diffpy.pdfgui.gui.wxextensions.listctrls module ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/news/wx3.rst b/news/wx3.rst new file mode 100644 index 00000000..84557478 --- /dev/null +++ b/news/wx3.rst @@ -0,0 +1,23 @@ +**Added:** + +* + +**Changed:** + +* + +**Deprecated:** + +* + +**Removed:** + +* Removed wx3 support that was previously deprecated. + +**Fixed:** + +* + +**Security:** + +* diff --git a/src/diffpy/pdfgui/gui/extendedplotframe.py b/src/diffpy/pdfgui/gui/extendedplotframe.py index a5f1b2cf..cb61e5e6 100644 --- a/src/diffpy/pdfgui/gui/extendedplotframe.py +++ b/src/diffpy/pdfgui/gui/extendedplotframe.py @@ -25,11 +25,10 @@ from matplotlib.font_manager import FontProperties from diffpy.pdfgui.gui.pdfguiglobals import iconpath -from diffpy.pdfgui.gui.wxextensions import wx12 matplotlib.use("WXAgg") -DATA_SAVE_ID = wx12.NewIdRef() +DATA_SAVE_ID = wx.NewIdRef() class ExtendedToolbar(NavToolbar): @@ -40,7 +39,6 @@ class ExtendedToolbar(NavToolbar): def __init__(self, canvas): NavToolbar.__init__(self, canvas) - wx12.patchToolBarMethods(self) # Load customized icon image save_icon_fp = iconpath("exportplotdata.png") save_icon = wx.Bitmap(save_icon_fp) diff --git a/src/diffpy/pdfgui/gui/fittree.py b/src/diffpy/pdfgui/gui/fittree.py index eddfbbb0..1416db92 100644 --- a/src/diffpy/pdfgui/gui/fittree.py +++ b/src/diffpy/pdfgui/gui/fittree.py @@ -30,11 +30,10 @@ from diffpy.pdfgui.control.controlerrors import ControlError from diffpy.pdfgui.control.fitting import Fitting from diffpy.pdfgui.gui.pdfguiglobals import iconpath -from diffpy.pdfgui.gui.wxextensions import wx12 from diffpy.pdfgui.utils import safeCPickleDumps -class FitTree(wx12.TreeCtrl): +class FitTree(wx.TreeCtrl): """TreeCtrl designed to organize pdffit fits. The root of the tree is hidden. Below that there are several levels diff --git a/src/diffpy/pdfgui/gui/mainframe.py b/src/diffpy/pdfgui/gui/mainframe.py index 6bbd2676..79804b06 100644 --- a/src/diffpy/pdfgui/gui/mainframe.py +++ b/src/diffpy/pdfgui/gui/mainframe.py @@ -48,7 +48,6 @@ from diffpy.pdfgui.gui.rseriespanel import RSeriesPanel from diffpy.pdfgui.gui.temperatureseriespanel import TemperatureSeriesPanel from diffpy.pdfgui.gui.welcomepanel import WelcomePanel -from diffpy.pdfgui.gui.wxextensions import wx12 (PDFCustomEvent, EVT_PDFCUSTOM) = wx.lib.newevent.NewEvent() @@ -234,14 +233,14 @@ def __defineLocalIds(self): """ # Functions that modify the tree. # These are used in the fitting right-click menu and the main menu. - self.newFitId = wx12.NewIdRef() # New Fit - self.newCalcId = wx12.NewIdRef() # New Calculation - self.newPhaseId = wx12.NewIdRef() # New Phase - self.newDataId = wx12.NewIdRef() # New Data Set + self.newFitId = wx.NewIdRef() # New Fit + self.newCalcId = wx.NewIdRef() # New Calculation + self.newPhaseId = wx.NewIdRef() # New Phase + self.newDataId = wx.NewIdRef() # New Data Set self.deleteId = wx.ID_DELETE # Delete tree item self.copyId = wx.ID_COPY # Copy a tree item self.pasteId = wx.ID_PASTE # Paste a tree item into tree - self.pasteLinkId = wx12.NewIdRef() # Paste and link a fit node + self.pasteLinkId = wx.NewIdRef() # Paste and link a fit node # Misc. functions, these are exclusive to the main menu. self.newId = wx.ID_NEW # Start a new Project @@ -250,19 +249,19 @@ def __defineLocalIds(self): self.saveId = wx.ID_SAVE # Save the project self.saveAsId = wx.ID_SAVEAS # Save the project as... self.quitId = wx.ID_CLOSE # Quit the program - self.runFitId = wx12.NewIdRef() # Run a fit - self.stopFitId = wx12.NewIdRef() # Stop a fit - self.quickPlotId = wx12.NewIdRef() # Quick plot a fit - self.exportFitPDFId = wx12.NewIdRef() # Save a fit PDF - self.exportFitStruId = wx12.NewIdRef() # Save a fit structure - self.exportNewStruId = wx12.NewIdRef() # Export a 'new' structure - self.plotIStructId = wx12.NewIdRef() # Plot initial structure - self.plotFStructId = wx12.NewIdRef() # Plot final structure - self.printBLId = wx12.NewIdRef() # Print the bond lengths of a structure - self.printBAId = wx12.NewIdRef() # Print the bond angles of a structure - self.exportResId = wx12.NewIdRef() # Save the results file - self.runCalcId = wx12.NewIdRef() # Run a calculation - self.exportCalcPDFId = wx12.NewIdRef() # Save a calculated PDF + self.runFitId = wx.NewIdRef() # Run a fit + self.stopFitId = wx.NewIdRef() # Stop a fit + self.quickPlotId = wx.NewIdRef() # Quick plot a fit + self.exportFitPDFId = wx.NewIdRef() # Save a fit PDF + self.exportFitStruId = wx.NewIdRef() # Save a fit structure + self.exportNewStruId = wx.NewIdRef() # Export a 'new' structure + self.plotIStructId = wx.NewIdRef() # Plot initial structure + self.plotFStructId = wx.NewIdRef() # Plot final structure + self.printBLId = wx.NewIdRef() # Print the bond lengths of a structure + self.printBAId = wx.NewIdRef() # Print the bond angles of a structure + self.exportResId = wx.NewIdRef() # Save the results file + self.runCalcId = wx.NewIdRef() # Run a calculation + self.exportCalcPDFId = wx.NewIdRef() # Save a calculated PDF return def __customProperties(self): @@ -438,12 +437,12 @@ def __setupMainMenu(self): self.SetMenuBar(self.menuBar) # File Menu - self.fileMenu = wx12.Menu() + self.fileMenu = wx.Menu() self.newItem = wx.MenuItem(self.fileMenu, self.newId, "&New Project\tCtrl+n", "", wx.ITEM_NORMAL) self.fileMenu.Append(self.newItem) self.openItem = wx.MenuItem(self.fileMenu, self.openId, "&Open Project\tCtrl+o", "", wx.ITEM_NORMAL) self.fileMenu.Append(self.openItem) - self.recentMenu = wx12.Menu() + self.recentMenu = wx.Menu() msub = self.fileMenu.AppendSubMenu(self.recentMenu, "&Recent Files") self.recentId = msub.Id self.fileMenu.AppendSeparator() @@ -464,7 +463,7 @@ def __setupMainMenu(self): # End File Menu # Edit Menu - self.editMenu = wx12.Menu() + self.editMenu = wx.Menu() self.delItem = wx.MenuItem(self.editMenu, self.deleteId, "&Delete Item(s)\tCtrl+X", "", wx.ITEM_NORMAL) self.editMenu.Append(self.delItem) self.copyItem = wx.MenuItem(self.editMenu, self.copyId, "&Copy Item\tCtrl+C", "", wx.ITEM_NORMAL) @@ -474,33 +473,33 @@ def __setupMainMenu(self): self.pasteLinkItem = wx.MenuItem(self.editMenu, self.pasteLinkId, "Paste &Linked Fit", "", wx.ITEM_NORMAL) self.editMenu.Append(self.pasteLinkItem) self.editMenu.AppendSeparator() - self.prefItem = wx.MenuItem(self.editMenu, wx12.NewIdRef(), "&Preferences", "", wx.ITEM_NORMAL) + self.prefItem = wx.MenuItem(self.editMenu, wx.NewIdRef(), "&Preferences", "", wx.ITEM_NORMAL) self.editMenu.Append(self.prefItem) self.menuBar.Append(self.editMenu, "&Edit") # End Edit Menu # View Menu - self.viewMenu = wx12.Menu() + self.viewMenu = wx.Menu() self.defaultLayoutItem = wx.MenuItem( - self.editMenu, wx12.NewIdRef(), "Default Window Layout", "", wx.ITEM_NORMAL + self.editMenu, wx.NewIdRef(), "Default Window Layout", "", wx.ITEM_NORMAL ) self.viewMenu.Append(self.defaultLayoutItem) self.viewMenu.AppendSeparator() # These items are context sensitive. - self.showFitItem = wx.MenuItem(self.viewMenu, wx12.NewIdRef(), "Show Fit Tree", "", wx.ITEM_NORMAL) + self.showFitItem = wx.MenuItem(self.viewMenu, wx.NewIdRef(), "Show Fit Tree", "", wx.ITEM_NORMAL) self.viewMenu.Append(self.showFitItem) - self.showPlotItem = wx.MenuItem(self.viewMenu, wx12.NewIdRef(), "Show Plot Control", "", wx.ITEM_NORMAL) + self.showPlotItem = wx.MenuItem(self.viewMenu, wx.NewIdRef(), "Show Plot Control", "", wx.ITEM_NORMAL) self.viewMenu.Append(self.showPlotItem) - self.showOutputItem = wx.MenuItem(self.viewMenu, wx12.NewIdRef(), "Show Output", "", wx.ITEM_NORMAL) + self.showOutputItem = wx.MenuItem(self.viewMenu, wx.NewIdRef(), "Show Output", "", wx.ITEM_NORMAL) self.viewMenu.Append(self.showOutputItem) self.showJournalItem = wx.MenuItem( - self.viewMenu, wx12.NewIdRef(), "Show Journal\tCtrl+j", "", wx.ITEM_NORMAL + self.viewMenu, wx.NewIdRef(), "Show Journal\tCtrl+j", "", wx.ITEM_NORMAL ) self.viewMenu.Append(self.showJournalItem) self.menuBar.Append(self.viewMenu, "&View") # Fits Menu - self.fitsMenu = wx12.Menu() + self.fitsMenu = wx.Menu() self.newFitItem = wx.MenuItem(self.fitsMenu, self.newFitId, "&New Fit\tCtrl+t", "", wx.ITEM_NORMAL) self.fitsMenu.Append(self.newFitItem) self.fitsMenu.AppendSeparator() @@ -513,19 +512,19 @@ def __setupMainMenu(self): self.fitsMenu.Append(self.expResItem) self.fitsMenu.AppendSeparator() # Macros sub-menu - self.macrosMenu = wx12.Menu() - self.rseriesItem = wx.MenuItem(self.macrosMenu, wx12.NewIdRef(), "r-Series", "", wx.ITEM_NORMAL) + self.macrosMenu = wx.Menu() + self.rseriesItem = wx.MenuItem(self.macrosMenu, wx.NewIdRef(), "r-Series", "", wx.ITEM_NORMAL) self.macrosMenu.Append(self.rseriesItem) - self.tseriesItem = wx.MenuItem(self.macrosMenu, wx12.NewIdRef(), "Temperature Series", "", wx.ITEM_NORMAL) + self.tseriesItem = wx.MenuItem(self.macrosMenu, wx.NewIdRef(), "Temperature Series", "", wx.ITEM_NORMAL) self.macrosMenu.Append(self.tseriesItem) - self.dseriesItem = wx.MenuItem(self.macrosMenu, wx12.NewIdRef(), "Doping Series", "", wx.ITEM_NORMAL) + self.dseriesItem = wx.MenuItem(self.macrosMenu, wx.NewIdRef(), "Doping Series", "", wx.ITEM_NORMAL) self.macrosMenu.Append(self.dseriesItem) self.fitsMenu.AppendSubMenu(self.macrosMenu, "Macros") self.menuBar.Append(self.fitsMenu, "Fi&ts") # End Fits Menu # Phases Menu - self.phasesMenu = wx12.Menu() + self.phasesMenu = wx.Menu() self.newPhaseItem = wx.MenuItem(self.phasesMenu, self.newPhaseId, "&New Phase\tCtrl+p", "", wx.ITEM_NORMAL) self.phasesMenu.Append(self.newPhaseItem) self.phasesMenu.AppendSeparator() @@ -580,7 +579,7 @@ def __setupMainMenu(self): # End Phases Menu # Data Menu - self.dataMenu = wx12.Menu() + self.dataMenu = wx.Menu() self.newDataItem = wx.MenuItem(self.dataMenu, self.newDataId, "&New Data Set\tCtrl+d", "", wx.ITEM_NORMAL) self.dataMenu.Append(self.newDataItem) self.dataMenu.AppendSeparator() @@ -590,7 +589,7 @@ def __setupMainMenu(self): # End Data Menu # Calculations Menu - self.calcMenu = wx12.Menu() + self.calcMenu = wx.Menu() self.newCalcItem = wx.MenuItem( self.calcMenu, self.newCalcId, @@ -621,20 +620,20 @@ def __setupMainMenu(self): # End Calculations Menu # Help Menu - self.helpMenu = wx12.Menu() - self.docItem = wx.MenuItem(self.helpMenu, wx12.NewIdRef(), "&Documentation\tF1", "", wx.ITEM_NORMAL) + self.helpMenu = wx.Menu() + self.docItem = wx.MenuItem(self.helpMenu, wx.NewIdRef(), "&Documentation\tF1", "", wx.ITEM_NORMAL) self.helpMenu.Append(self.docItem) self.requestItem = wx.MenuItem( self.helpMenu, - wx12.NewIdRef(), + wx.NewIdRef(), "Request a Feature / Report a Bug", "", wx.ITEM_NORMAL, ) self.helpMenu.Append(self.requestItem) - self.communityItem = wx.MenuItem(self.helpMenu, wx12.NewIdRef(), "PDFgui Community", "", wx.ITEM_NORMAL) + self.communityItem = wx.MenuItem(self.helpMenu, wx.NewIdRef(), "PDFgui Community", "", wx.ITEM_NORMAL) self.helpMenu.Append(self.communityItem) - self.aboutItem = wx.MenuItem(self.helpMenu, wx12.NewIdRef(), "&About", "", wx.ITEM_NORMAL) + self.aboutItem = wx.MenuItem(self.helpMenu, wx.NewIdRef(), "&About", "", wx.ITEM_NORMAL) self.helpMenu.Append(self.aboutItem) self.menuBar.Append(self.helpMenu, "&Help") # End Help Menu @@ -648,7 +647,6 @@ def __setupMainMenu(self): def __setupToolBar(self): """This sets up the tool bar in the parent window.""" self.toolBar = self.CreateToolBar() - wx12.patchToolBarMethods(self.toolBar) size = (16, 16) bitmap = wx.ArtProvider.GetBitmap(wx.ART_NEW, wx.ART_TOOLBAR, size) self.toolBar.AddTool( @@ -1312,7 +1310,7 @@ def onRightClick(self, event): # wxGlade: MainPanel. if self.mode == "fitting": # The menu Ids are defined in __defineLocalIds. - menu = wx12.Menu() + menu = wx.Menu() menu.Append(self.newFitId, "New Fit") menu.AppendSeparator() menu.Append(self.copyId, "Copy") @@ -2546,11 +2544,11 @@ def showMessage(self, info, title="PDF Control Error"): # control items def lock(self): - if not wx12.IsMainThread(): + if not wx.IsMainThread(): wx.MutexGuiEnter() def unlock(self): - if not wx12.IsMainThread(): + if not wx.IsMainThread(): wx.MutexGuiLeave() def postEvent(self, type, info): diff --git a/src/diffpy/pdfgui/gui/parameterspanel.py b/src/diffpy/pdfgui/gui/parameterspanel.py index 616744a2..6a300f7a 100644 --- a/src/diffpy/pdfgui/gui/parameterspanel.py +++ b/src/diffpy/pdfgui/gui/parameterspanel.py @@ -24,7 +24,6 @@ import wx.grid from diffpy.pdfgui.gui.pdfpanel import PDFPanel -from diffpy.pdfgui.gui.wxextensions import wx12 from diffpy.pdfgui.gui.wxextensions.autowidthlabelsgrid import AutoWidthLabelsGrid from diffpy.utils.wx import gridutils @@ -274,9 +273,9 @@ def popupMenu(self, window, x, y): # only do this part the first time so the events are only bound once if not hasattr(self, "did_popupIDs"): self.did_popupIDs = True - self.popupID1 = wx12.NewIdRef() - self.popupID2 = wx12.NewIdRef() - self.popupID3 = wx12.NewIdRef() + self.popupID1 = wx.NewIdRef() + self.popupID2 = wx.NewIdRef() + self.popupID3 = wx.NewIdRef() self.Bind(wx.EVT_MENU, self.onPopupFixFree, id=self.popupID1) self.Bind(wx.EVT_MENU, self.onPopupCopyRefinedToInitial, id=self.popupID2) diff --git a/src/diffpy/pdfgui/gui/phaseconfigurepanel.py b/src/diffpy/pdfgui/gui/phaseconfigurepanel.py index 88e6e3fd..96281d5f 100644 --- a/src/diffpy/pdfgui/gui/phaseconfigurepanel.py +++ b/src/diffpy/pdfgui/gui/phaseconfigurepanel.py @@ -24,7 +24,6 @@ from diffpy.pdfgui.gui import phasepanelutils, tooltips from diffpy.pdfgui.gui.insertrowsdialog import InsertRowsDialog from diffpy.pdfgui.gui.pdfpanel import PDFPanel -from diffpy.pdfgui.gui.wxextensions import wx12 from diffpy.pdfgui.gui.wxextensions.autowidthlabelsgrid import AutoWidthLabelsGrid from diffpy.pdfgui.gui.wxextensions.textctrlutils import textCtrlAsGridCell from diffpy.pdfgui.gui.wxextensions.validators import FLOAT_ONLY, TextValidator @@ -642,13 +641,13 @@ def popupMenu(self, window, x, y): """ # only do this part the first time so the events are only bound once if not hasattr(self, "insertID"): - self.insertID = wx12.NewIdRef() - self.deleteID = wx12.NewIdRef() - self.selectID = wx12.NewIdRef() - self.copyID = wx12.NewIdRef() - self.pasteID = wx12.NewIdRef() - self.supercellID = wx12.NewIdRef() - self.spaceGroupID = wx12.NewIdRef() + self.insertID = wx.NewIdRef() + self.deleteID = wx.NewIdRef() + self.selectID = wx.NewIdRef() + self.copyID = wx.NewIdRef() + self.pasteID = wx.NewIdRef() + self.supercellID = wx.NewIdRef() + self.spaceGroupID = wx.NewIdRef() self.Bind(wx.EVT_MENU, self.onPopupInsert, id=self.insertID) self.Bind(wx.EVT_MENU, self.onPopupDelete, id=self.deleteID) diff --git a/src/diffpy/pdfgui/gui/phaseconstraintspanel.py b/src/diffpy/pdfgui/gui/phaseconstraintspanel.py index 564a2d36..45f37b36 100644 --- a/src/diffpy/pdfgui/gui/phaseconstraintspanel.py +++ b/src/diffpy/pdfgui/gui/phaseconstraintspanel.py @@ -26,7 +26,6 @@ from diffpy.pdfgui.gui import phasepanelutils, tooltips from diffpy.pdfgui.gui.pdfpanel import PDFPanel from diffpy.pdfgui.gui.sgconstraindialog import SGConstrainDialog -from diffpy.pdfgui.gui.wxextensions import wx12 from diffpy.pdfgui.gui.wxextensions.autowidthlabelsgrid import AutoWidthLabelsGrid from diffpy.pdfgui.gui.wxextensions.textctrlutils import textCtrlAsGridCell from diffpy.utils.wx import gridutils @@ -582,10 +581,10 @@ def popupMenu(self, window, x, y): """ # only do this part the first time so the events are only bound once if not hasattr(self, "spaceGroupID"): - self.spaceGroupID = wx12.NewIdRef() - self.selectID = wx12.NewIdRef() - self.copyID = wx12.NewIdRef() - self.pasteID = wx12.NewIdRef() + self.spaceGroupID = wx.NewIdRef() + self.selectID = wx.NewIdRef() + self.copyID = wx.NewIdRef() + self.pasteID = wx.NewIdRef() self.Bind(wx.EVT_MENU, self.onPopupSpaceGroup, id=self.spaceGroupID) self.Bind(wx.EVT_MENU, self.onPopupSelect, id=self.selectID) diff --git a/src/diffpy/pdfgui/gui/wxextensions/listctrls.py b/src/diffpy/pdfgui/gui/wxextensions/listctrls.py index d08a8cde..b018ae2e 100644 --- a/src/diffpy/pdfgui/gui/wxextensions/listctrls.py +++ b/src/diffpy/pdfgui/gui/wxextensions/listctrls.py @@ -25,14 +25,12 @@ import wx import wx.lib.mixins.listctrl as listmix -from diffpy.pdfgui.gui.wxextensions import wx12 - -class AutoWidthListCtrl(wx12.ListCtrl, listmix.ListCtrlAutoWidthMixin): +class AutoWidthListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin): """WxListCtrl subclass that automatically adjusts its column width.""" def __init__(self, parent, ID, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, *args, **kwargs): - wx12.ListCtrl.__init__(self, parent, ID, pos, size, style, *args, **kwargs) + wx.ListCtrl.__init__(self, parent, ID, pos, size, style, *args, **kwargs) listmix.ListCtrlAutoWidthMixin.__init__(self) def clearSelections(self): @@ -185,6 +183,6 @@ def OnKeyDown(self, evt): # End of class KeyEventsListCtrl # verify inheritance of all ListCtrl classes -assert issubclass(AutoWidthListCtrl, wx12.ListCtrl) -assert issubclass(ColumnSortListCtrl, wx12.ListCtrl) -assert issubclass(KeyEventsListCtrl, wx12.ListCtrl) +assert issubclass(AutoWidthListCtrl, wx.ListCtrl) +assert issubclass(ColumnSortListCtrl, wx.ListCtrl) +assert issubclass(KeyEventsListCtrl, wx.ListCtrl) diff --git a/src/diffpy/pdfgui/gui/wxextensions/wx12.py b/src/diffpy/pdfgui/gui/wxextensions/wx12.py deleted file mode 100644 index 9560d2d0..00000000 --- a/src/diffpy/pdfgui/gui/wxextensions/wx12.py +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/env python -############################################################################## -# -# diffpy.pdfgui Complex Modeling Initiative -# (c) 2019 Brookhaven Science Associates, -# Brookhaven National Laboratory. -# All rights reserved. -# -# File coded by: Pavol Juhas -# -# See AUTHORS.txt for a list of people who contributed. -# See LICENSE.txt for license information. -# -############################################################################## -"""Support for WX4-like methods and functions for WX3. - -Notes ------ -This module should be removed after ending support for WX3. -Replace instances of its use with plain ``wx``. -""" - -import types - -import wx - -WX3 = wx.VERSION[0] == 3 -WX4 = wx.VERSION[0] == 4 - -# ---------------------------------------------------------------------------- - - -class Menu(wx.Menu): - def Append(self, *args, **kwargs): - na = len(args) - if isinstance(args[0], wx.MenuItem): - return super(Menu, self).AppendItem(*args, **kwargs) - if na > 2 and isinstance(args[2], wx.Menu): - return super(Menu, self).AppendMenu(*args, **kwargs) - plain_append = isinstance(args[0], int) and (na > 1 and isinstance(args[1], str) or "item" in kwargs) - if plain_append: - return super(Menu, self).Append(*args, **kwargs) - assert False, "unexpected argument types" - - -if WX4: - Menu = wx.Menu # noqa: F811 - -# ---------------------------------------------------------------------------- - - -class ListCtrl(wx.ListCtrl): - - InsertItem = wx.ListCtrl.InsertStringItem - SetItem = wx.ListCtrl.SetStringItem - - -if WX4: - ListCtrl = wx.ListCtrl # noqa: F811 - -# ---------------------------------------------------------------------------- - - -class TreeCtrl(wx.TreeCtrl): - - GetItemData = wx.TreeCtrl.GetPyData - SetItemData = wx.TreeCtrl.SetPyData - - -if WX4: - TreeCtrl = wx.TreeCtrl # noqa: F811 - -# wx.ToolBar ----------------------------------------------------------------- - - -def AddTool(self, *args, **kwargs): - return super(wx.ToolBar, self).AddLabelTool(*args, **kwargs) - - -def patchToolBarMethods(toolbar): - if WX3: - toolbar.AddTool = types.MethodType(AddTool, toolbar) - return - - -# Functions ------------------------------------------------------------------ - -IsMainThread = wx.Thread_IsMain if WX3 else wx.IsMainThread -NewIdRef = wx.NewIdRef if WX4 else wx.NewId - -# Final checks --------------------------------------------------------------- - -assert WX3 ^ (Menu is wx.Menu) -assert WX3 ^ (TreeCtrl is wx.TreeCtrl) -assert WX3 ^ (ListCtrl is wx.ListCtrl)