From c483df27b31f6a136ab796e6ac4d7eaab9cf25b1 Mon Sep 17 00:00:00 2001 From: Long Yang Date: Thu, 18 May 2023 19:13:17 +0800 Subject: [PATCH 1/4] ENH: fix wxpython insert list error. --- .../pdfgui/gui/design/dopingseriespanel.wxg | 2 +- .../gui/design/temperatureseriespanel.wxg | 2 +- src/diffpy/pdfgui/gui/dopingseriespanel.py | 107 ++++++++++-------- .../pdfgui/gui/temperatureseriespanel.py | 90 ++++++++------- 4 files changed, 113 insertions(+), 88 deletions(-) diff --git a/src/diffpy/pdfgui/gui/design/dopingseriespanel.wxg b/src/diffpy/pdfgui/gui/design/dopingseriespanel.wxg index 6c4b58a6..d43421f6 100644 --- a/src/diffpy/pdfgui/gui/design/dopingseriespanel.wxg +++ b/src/diffpy/pdfgui/gui/design/dopingseriespanel.wxg @@ -1,5 +1,5 @@ - + diff --git a/src/diffpy/pdfgui/gui/design/temperatureseriespanel.wxg b/src/diffpy/pdfgui/gui/design/temperatureseriespanel.wxg index 3654a7dc..623abcd8 100644 --- a/src/diffpy/pdfgui/gui/design/temperatureseriespanel.wxg +++ b/src/diffpy/pdfgui/gui/design/temperatureseriespanel.wxg @@ -1,5 +1,5 @@ - + diff --git a/src/diffpy/pdfgui/gui/dopingseriespanel.py b/src/diffpy/pdfgui/gui/dopingseriespanel.py index d926deef..577ad23e 100644 --- a/src/diffpy/pdfgui/gui/dopingseriespanel.py +++ b/src/diffpy/pdfgui/gui/dopingseriespanel.py @@ -33,22 +33,79 @@ def __init__(self, *args, **kwds): # begin wxGlade: DopingSeriesPanel.__init__ kwds["style"] = kwds.get("style", 0) | wx.TAB_TRAVERSAL wx.Panel.__init__(self, *args, **kwds) + + sizer_1 = wx.BoxSizer(wx.VERTICAL) + self.instructionsLabel = wx.StaticText(self, wx.ID_ANY, "Select a fit from the tree on the left then add datasets and assign\ndoping elements and values below. If you have not set up a fit to be\nthe template for the series, hit cancel and rerun this macro once a\nfit has been created.") + self.instructionsLabel.SetFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, 0, "Sans")) + sizer_1.Add(self.instructionsLabel, 0, wx.ALL | wx.EXPAND, 5) + + sizer_6 = wx.BoxSizer(wx.HORIZONTAL) + sizer_1.Add(sizer_6, 0, wx.EXPAND, 0) + self.labelBaseElement = wx.StaticText(self, wx.ID_ANY, "Base element") + sizer_6.Add(self.labelBaseElement, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5) + self.textCtrlBaseElement = wx.TextCtrl(self, wx.ID_ANY, "") + sizer_6.Add(self.textCtrlBaseElement, 0, wx.ALL, 5) + self.labelDopant = wx.StaticText(self, wx.ID_ANY, "Dopant") + sizer_6.Add(self.labelDopant, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5) + self.textCtrlDopant = wx.TextCtrl(self, wx.ID_ANY, "") + sizer_6.Add(self.textCtrlDopant, 0, wx.ALL, 5) + + sizer_2 = wx.BoxSizer(wx.VERTICAL) + sizer_1.Add(sizer_2, 1, wx.EXPAND, 0) + + sizer_4 = wx.BoxSizer(wx.HORIZONTAL) + sizer_2.Add(sizer_4, 1, wx.EXPAND, 0) + self.listCtrlFiles = AutoWidthListCtrl(self, wx.ID_ANY, style=wx.BORDER_SUNKEN | wx.LC_EDIT_LABELS | wx.LC_REPORT) + sizer_4.Add(self.listCtrlFiles, 1, wx.ALL | wx.EXPAND, 5) + + sizer_5 = wx.BoxSizer(wx.VERTICAL) + sizer_4.Add(sizer_5, 0, wx.EXPAND, 0) + + sizer_5.Add((0, 0), 1, 0, 0) + self.buttonUp = wx.BitmapButton(self, wx.ID_ANY, wx.NullBitmap) + self.buttonUp.SetSize(self.buttonUp.GetBestSize()) + sizer_5.Add(self.buttonUp, 0, wx.ALL, 5) + self.buttonDown = wx.BitmapButton(self, wx.ID_ANY, wx.NullBitmap) + self.buttonDown.SetSize(self.buttonDown.GetBestSize()) + sizer_5.Add(self.buttonDown, 0, wx.ALL, 5) + + sizer_5.Add((0, 0), 1, 0, 0) + + grid_sizer_1 = wx.GridSizer(1, 2, 10, 10) + sizer_1.Add(grid_sizer_1, 0, wx.ALL, 5) + self.buttonAdd = wx.Button(self, wx.ID_ADD, "Add") + grid_sizer_1.Add(self.buttonAdd, 0, 0, 0) + self.buttonDelete = wx.Button(self, wx.ID_DELETE, "Delete") + grid_sizer_1.Add(self.buttonDelete, 0, 0, 0) + self.static_line_1 = wx.StaticLine(self, wx.ID_ANY) + sizer_1.Add(self.static_line_1, 0, wx.EXPAND, 0) + + sizer_3 = wx.BoxSizer(wx.HORIZONTAL) + sizer_1.Add(sizer_3, 0, wx.EXPAND, 0) + + sizer_3.Add((20, 20), 1, wx.EXPAND, 0) + self.goButton = wx.Button(self, wx.ID_OK, "OK") + sizer_3.Add(self.goButton, 0, wx.ALL, 5) + self.cancelButton = wx.Button(self, wx.ID_CANCEL, "Cancel") + sizer_3.Add(self.cancelButton, 0, wx.ALL, 5) - self.__set_properties() - self.__do_layout() + self.SetSizer(sizer_1) + sizer_1.Fit(self) + + self.Layout() self.Bind(wx.EVT_LIST_COL_CLICK, self.onColClick, self.listCtrlFiles) self.Bind(wx.EVT_LIST_END_LABEL_EDIT, self.onEndLabelEdit, self.listCtrlFiles) @@ -61,49 +118,6 @@ def __init__(self, *args, **kwds): # end wxGlade self.__customProperties() - def __set_properties(self): - # begin wxGlade: DopingSeriesPanel.__set_properties - self.instructionsLabel.SetFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, 0, "Sans")) - self.buttonUp.SetSize(self.buttonUp.GetBestSize()) - self.buttonDown.SetSize(self.buttonDown.GetBestSize()) - # end wxGlade - - def __do_layout(self): - # begin wxGlade: DopingSeriesPanel.__do_layout - sizer_1 = wx.BoxSizer(wx.VERTICAL) - sizer_3 = wx.BoxSizer(wx.HORIZONTAL) - grid_sizer_1 = wx.GridSizer(1, 2, 10, 10) - sizer_2 = wx.BoxSizer(wx.VERTICAL) - sizer_4 = wx.BoxSizer(wx.HORIZONTAL) - sizer_5 = wx.BoxSizer(wx.VERTICAL) - sizer_6 = wx.BoxSizer(wx.HORIZONTAL) - sizer_1.Add(self.instructionsLabel, 0, wx.ALL | wx.EXPAND, 5) - sizer_6.Add(self.labelBaseElement, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5) - sizer_6.Add(self.textCtrlBaseElement, 0, wx.ALL, 5) - sizer_6.Add(self.labelDopant, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5) - sizer_6.Add(self.textCtrlDopant, 0, wx.ALL, 5) - sizer_1.Add(sizer_6, 0, wx.EXPAND, 0) - sizer_4.Add(self.listCtrlFiles, 1, wx.ALL | wx.EXPAND, 5) - sizer_5.Add((0, 0), 1, 0, 0) - sizer_5.Add(self.buttonUp, 0, wx.ALL, 5) - sizer_5.Add(self.buttonDown, 0, wx.ALL, 5) - sizer_5.Add((0, 0), 1, 0, 0) - sizer_4.Add(sizer_5, 0, wx.EXPAND, 0) - sizer_2.Add(sizer_4, 1, wx.EXPAND, 0) - sizer_1.Add(sizer_2, 1, wx.EXPAND, 0) - grid_sizer_1.Add(self.buttonAdd, 0, 0, 0) - grid_sizer_1.Add(self.buttonDelete, 0, 0, 0) - sizer_1.Add(grid_sizer_1, 0, wx.ALL, 5) - sizer_1.Add(self.static_line_1, 0, wx.EXPAND, 0) - sizer_3.Add((20, 20), 1, wx.EXPAND, 0) - sizer_3.Add(self.goButton, 0, wx.ALL, 5) - sizer_3.Add(self.cancelButton, 0, wx.ALL, 5) - sizer_1.Add(sizer_3, 0, wx.EXPAND, 0) - self.SetSizer(sizer_1) - sizer_1.Fit(self) - self.Layout() - # end wxGlade - def __customProperties(self): """Set the custom properties.""" self.fit = None @@ -296,7 +310,8 @@ def fillList(self): if idx == -1: idx = len(cp) for doping, filename in self.datasets: shortname = "..." + filename[idx:] - index = self.listCtrlFiles.InsertItem(sys.maxsize, str(doping)) + # index = self.listCtrlFiles.InsertItem(sys.maxsize, str(doping)) #doesn't work for windows + index = self.listCtrlFiles.InsertItem(100000, str(doping)) #doesn't work for windows self.listCtrlFiles.SetItem(index, 1, shortname) return diff --git a/src/diffpy/pdfgui/gui/temperatureseriespanel.py b/src/diffpy/pdfgui/gui/temperatureseriespanel.py index 3aa52539..3d48fe1a 100644 --- a/src/diffpy/pdfgui/gui/temperatureseriespanel.py +++ b/src/diffpy/pdfgui/gui/temperatureseriespanel.py @@ -32,18 +32,64 @@ def __init__(self, *args, **kwds): # begin wxGlade: TemperatureSeriesPanel.__init__ kwds["style"] = kwds.get("style", 0) | wx.TAB_TRAVERSAL wx.Panel.__init__(self, *args, **kwds) + + sizer_1 = wx.BoxSizer(wx.VERTICAL) + self.instructionsLabel = wx.StaticText(self, wx.ID_ANY, "Select a fit from the tree on the left then add datasets and assign\ntemperatues below. If you have not set up a fit to be the template\nfor the series, hit cancel and rerun this macro once a fit has been\ncreated.") + self.instructionsLabel.SetFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, 0, "Sans")) + sizer_1.Add(self.instructionsLabel, 0, wx.ALL | wx.EXPAND, 5) + + sizer_2 = wx.BoxSizer(wx.VERTICAL) + sizer_1.Add(sizer_2, 1, wx.EXPAND, 0) + + sizer_4 = wx.BoxSizer(wx.HORIZONTAL) + sizer_2.Add(sizer_4, 1, wx.EXPAND, 0) + self.listCtrlFiles = AutoWidthListCtrl(self, wx.ID_ANY, style=wx.BORDER_SUNKEN | wx.LC_EDIT_LABELS | wx.LC_REPORT) + sizer_4.Add(self.listCtrlFiles, 1, wx.ALL | wx.EXPAND, 5) + + sizer_5 = wx.BoxSizer(wx.VERTICAL) + sizer_4.Add(sizer_5, 0, wx.EXPAND, 0) + + sizer_5.Add((0, 0), 1, 0, 0) + self.buttonUp = wx.BitmapButton(self, wx.ID_ANY, wx.NullBitmap) + self.buttonUp.SetSize(self.buttonUp.GetBestSize()) + sizer_5.Add(self.buttonUp, 0, wx.ALL, 5) + self.buttonDown = wx.BitmapButton(self, wx.ID_ANY, wx.NullBitmap) + self.buttonDown.SetSize(self.buttonDown.GetBestSize()) + sizer_5.Add(self.buttonDown, 0, wx.ALL, 5) + + sizer_5.Add((0, 0), 1, 0, 0) + + grid_sizer_1 = wx.GridSizer(1, 2, 10, 10) + sizer_1.Add(grid_sizer_1, 0, wx.ALL, 5) + self.buttonAdd = wx.Button(self, wx.ID_ADD, "Add") + grid_sizer_1.Add(self.buttonAdd, 0, 0, 0) + self.buttonDelete = wx.Button(self, wx.ID_DELETE, "Delete") + grid_sizer_1.Add(self.buttonDelete, 0, 0, 0) + self.static_line_1 = wx.StaticLine(self, wx.ID_ANY) + sizer_1.Add(self.static_line_1, 0, wx.EXPAND, 0) + + sizer_3 = wx.BoxSizer(wx.HORIZONTAL) + sizer_1.Add(sizer_3, 0, wx.EXPAND, 0) + + sizer_3.Add((20, 20), 1, wx.EXPAND, 0) + self.goButton = wx.Button(self, wx.ID_OK, "OK") + sizer_3.Add(self.goButton, 0, wx.ALL, 5) + self.cancelButton = wx.Button(self, wx.ID_CANCEL, "Cancel") + sizer_3.Add(self.cancelButton, 0, wx.ALL, 5) + + self.SetSizer(sizer_1) + sizer_1.Fit(self) - self.__set_properties() - self.__do_layout() + self.Layout() self.Bind(wx.EVT_LIST_COL_CLICK, self.onColClick, self.listCtrlFiles) self.Bind(wx.EVT_LIST_END_LABEL_EDIT, self.onEndLabelEdit, self.listCtrlFiles) @@ -58,43 +104,6 @@ def __init__(self, *args, **kwds): self.buttonDown.SetBitmapLabel(wx.ArtProvider.GetBitmap(wx.ART_GO_DOWN)) self.__customProperties() - def __set_properties(self): - # begin wxGlade: TemperatureSeriesPanel.__set_properties - self.instructionsLabel.SetFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, 0, "Sans")) - self.buttonUp.SetSize(self.buttonUp.GetBestSize()) - self.buttonDown.SetSize(self.buttonDown.GetBestSize()) - # end wxGlade - - def __do_layout(self): - # begin wxGlade: TemperatureSeriesPanel.__do_layout - sizer_1 = wx.BoxSizer(wx.VERTICAL) - sizer_3 = wx.BoxSizer(wx.HORIZONTAL) - grid_sizer_1 = wx.GridSizer(1, 2, 10, 10) - sizer_2 = wx.BoxSizer(wx.VERTICAL) - sizer_4 = wx.BoxSizer(wx.HORIZONTAL) - sizer_5 = wx.BoxSizer(wx.VERTICAL) - sizer_1.Add(self.instructionsLabel, 0, wx.ALL | wx.EXPAND, 5) - sizer_4.Add(self.listCtrlFiles, 1, wx.ALL | wx.EXPAND, 5) - sizer_5.Add((0, 0), 1, 0, 0) - sizer_5.Add(self.buttonUp, 0, wx.ALL, 5) - sizer_5.Add(self.buttonDown, 0, wx.ALL, 5) - sizer_5.Add((0, 0), 1, 0, 0) - sizer_4.Add(sizer_5, 0, wx.EXPAND, 0) - sizer_2.Add(sizer_4, 1, wx.EXPAND, 0) - sizer_1.Add(sizer_2, 1, wx.EXPAND, 0) - grid_sizer_1.Add(self.buttonAdd, 0, 0, 0) - grid_sizer_1.Add(self.buttonDelete, 0, 0, 0) - sizer_1.Add(grid_sizer_1, 0, wx.ALL, 5) - sizer_1.Add(self.static_line_1, 0, wx.EXPAND, 0) - sizer_3.Add((20, 20), 1, wx.EXPAND, 0) - sizer_3.Add(self.goButton, 0, wx.ALL, 5) - sizer_3.Add(self.cancelButton, 0, wx.ALL, 5) - sizer_1.Add(sizer_3, 0, wx.EXPAND, 0) - self.SetSizer(sizer_1) - sizer_1.Fit(self) - self.Layout() - # end wxGlade - def __customProperties(self): """Set the custom properties.""" self.fit = None @@ -283,7 +292,8 @@ def fillList(self): if idx == -1: idx = len(cp) for temperature, filename in self.datasets: shortname = "..." + filename[idx:] - index = self.listCtrlFiles.InsertItem(sys.maxsize, str(temperature)) + # index = self.listCtrlFiles.InsertItem(sys.maxsize, str(temperature)) #doesn't work for windows + index = self.listCtrlFiles.InsertItem(100000, str(temperature)) self.listCtrlFiles.SetItem(index, 1, shortname) return From 8d4e99b8210ef351fd706880615130351e5f75ec Mon Sep 17 00:00:00 2001 From: Long Yang Date: Thu, 18 May 2023 19:13:36 +0800 Subject: [PATCH 2/4] ENH: fix doping series letter error. --- src/diffpy/pdfgui/gui/wxextensions/validators.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/diffpy/pdfgui/gui/wxextensions/validators.py b/src/diffpy/pdfgui/gui/wxextensions/validators.py index f60b3f48..e2ac04dc 100644 --- a/src/diffpy/pdfgui/gui/wxextensions/validators.py +++ b/src/diffpy/pdfgui/gui/wxextensions/validators.py @@ -82,7 +82,7 @@ def OnChar(self, event): event.Skip() return - if self.flag == ALPHA_ONLY and chr(key) in string.letters: + if self.flag == ALPHA_ONLY and chr(key) in string.ascii_letters: event.Skip() return From 450014c9f38ba9b7c45a9346873e202d7de131f7 Mon Sep 17 00:00:00 2001 From: Long Yang Date: Thu, 18 May 2023 23:29:39 +0800 Subject: [PATCH 3/4] MNT: fix config ParsingError --- src/diffpy/pdfgui/gui/mainframe.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/diffpy/pdfgui/gui/mainframe.py b/src/diffpy/pdfgui/gui/mainframe.py index 200980bb..dc33a9fc 100644 --- a/src/diffpy/pdfgui/gui/mainframe.py +++ b/src/diffpy/pdfgui/gui/mainframe.py @@ -299,7 +299,8 @@ def __customProperties(self): # The configuration parser for getting configuration data. # self.cP = QuotedConfigParser() - self.cP = QuotedConfigParser(strict=False) #Long try this to avoid DuplicateSectionError + # Long try this to avoid DuplicateSectionError and ParsingError + self.cP = QuotedConfigParser(strict=False, allow_no_value=True) # Set the program mode self.mode = "fitting" From bd518ac9424bf6f79968e4bdc72076ae58be8aff Mon Sep 17 00:00:00 2001 From: Long Yang Date: Thu, 18 May 2023 23:34:52 +0800 Subject: [PATCH 4/4] REL: bump version into v2.0.3 --- CHANGELOG.md | 4 +++- setup.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aac95dc7..2fa2fcf2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ Notable differences from version 1.1.2. -## Version 2.0.2 – 2023-05-14 +## Version 2.0.3 – 2023-05-18 ### Added @@ -22,3 +22,5 @@ Notable differences from version 1.1.2. ### Fixed - Incompatible conversion between bytes and str from py2 to py3. +- The `listCtrlFiles.InsertItem` error in windows. +- Make the string parser in doping series working. diff --git a/setup.py b/setup.py index 6f2e934b..a23580d2 100755 --- a/setup.py +++ b/setup.py @@ -15,7 +15,7 @@ # Use this version when git data are not available, like in git zip archive. # Update when tagging a new release. -FALLBACK_VERSION = '2.0.2' +FALLBACK_VERSION = '2.0.3' # determine if we run with Python 3. PY3 = (sys.version_info[0] == 3)