diff --git a/config.py b/config.py index 5460857b91..7e5cf76947 100644 --- a/config.py +++ b/config.py @@ -21,7 +21,7 @@ # Database version (int ONLY) # Increment every time we need to flag for user database upgrade/modification -dbversion = 4 +dbversion = 5 pyfaPath = None savePath = None diff --git a/eos/db/migrations/upgrade5.py b/eos/db/migrations/upgrade5.py new file mode 100644 index 0000000000..cf6a3385df --- /dev/null +++ b/eos/db/migrations/upgrade5.py @@ -0,0 +1,8 @@ +""" +Migration 5 + +Simply deletes damage profiles with a blank name. See GH issue #256 +""" + +def upgrade(saveddata_engine): + saveddata_engine.execute('DELETE FROM damagePatterns WHERE name LIKE ?', ("",)) diff --git a/gui/patternEditor.py b/gui/patternEditor.py index 7a5bceb012..07181ea9f1 100644 --- a/gui/patternEditor.py +++ b/gui/patternEditor.py @@ -28,11 +28,11 @@ ## Class DmgPatternEditorDlg ########################################################################### -class DmgPatternEditorDlg (wx.Dialog): +class DmgPatternEditorDlg(wx.Dialog): DAMAGE_TYPES = ("em", "thermal", "kinetic", "explosive") def __init__(self, parent): - wx.Dialog.__init__ (self, parent, id = wx.ID_ANY, title = u"Damage Pattern Editor", size = wx.Size( 400,240 )) + wx.Dialog.__init__(self, parent, id = wx.ID_ANY, title = u"Damage Pattern Editor", size = wx.Size( 400,240 )) self.block = False self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize) @@ -244,13 +244,7 @@ def patternChanged(self, event=None): self.block = False self.ValuesUpdated() - def newPattern(self,event): - sDP = service.DamagePattern.getInstance() - p = sDP.newPattern() - self.choices.append(p) - id = self.ccDmgPattern.Append(p.name) - self.ccDmgPattern.SetSelection(id) - + def newPattern(self, event): self.restrict() # reset values for type in self.DAMAGE_TYPES: @@ -258,9 +252,10 @@ def newPattern(self,event): editObj.SetValue(0) self.btnSave.SetLabel("Create") + self.Refresh() self.renamePattern() - def renamePattern(self,event=None): + def renamePattern(self, event=None): if event is not None: self.btnSave.SetLabel("Rename") @@ -268,7 +263,12 @@ def renamePattern(self,event=None): self.namePicker.Show() self.headerSizer.Replace(self.ccDmgPattern, self.namePicker) self.namePicker.SetFocus() - self.namePicker.SetValue(self.getActivePattern().name) + + if event is not None: # Rename mode + self.btnSave.SetLabel("Rename") + self.namePicker.SetValue(self.getActivePattern().name) + else: # Create mode + self.namePicker.SetValue("") for btn in (self.new, self.rename, self.delete, self.copy): btn.Hide() @@ -284,19 +284,25 @@ def processRename(self, event): newName = self.namePicker.GetLineText(0) self.stNotice.SetLabel("") - p = self.getActivePattern() - for pattern in self.choices: - if pattern.name == newName and p != pattern: - self.stNotice.SetLabel("Name already used, please choose another") - return - if newName == "": self.stNotice.SetLabel("Invalid name.") return sDP = service.DamagePattern.getInstance() + if event.EventObject.Label == "Create": + p = sDP.newPattern() + else: + # we are renaming, so get the current selection + p = self.getActivePattern() + + for pattern in self.choices: + if pattern.name == newName and p != pattern: + self.stNotice.SetLabel("Name already used, please choose another") + return + sDP.renamePattern(p, newName) + self.updateChoices(newName) self.headerSizer.Replace(self.namePicker, self.ccDmgPattern) self.ccDmgPattern.Show() self.namePicker.Hide() @@ -335,7 +341,7 @@ def deletePattern(self,event): def __del__( self ): pass - def updateChoices(self): + def updateChoices(self, select=None): "Gathers list of patterns and updates choice selections" sDP = service.DamagePattern.getInstance() self.choices = sDP.getDamagePatternList() @@ -348,10 +354,14 @@ def updateChoices(self): self.choices.sort(key=lambda p: p.name) self.ccDmgPattern.Clear() - for choice in map(lambda p: p.name, self.choices): + for i, choice in enumerate(map(lambda p: p.name, self.choices)): self.ccDmgPattern.Append(choice) - self.ccDmgPattern.SetSelection(0) + if select is not None and choice == select: + self.ccDmgPattern.SetSelection(i) + + if select is None: + self.ccDmgPattern.SetSelection(0) self.patternChanged() def importPatterns(self, event): diff --git a/gui/resistsEditor.py b/gui/resistsEditor.py index a5764a74ab..259f34213d 100644 --- a/gui/resistsEditor.py +++ b/gui/resistsEditor.py @@ -23,12 +23,12 @@ from gui.utils.clipboard import toClipboard, fromClipboard from service.targetResists import ImportError -class ResistsEditorDlg (wx.Dialog): +class ResistsEditorDlg(wx.Dialog): DAMAGE_TYPES = ("em", "thermal", "kinetic", "explosive") def __init__(self, parent): - wx.Dialog.__init__ (self, parent, id = wx.ID_ANY, title = u"Target Resists Editor", size = wx.Size( 350,240 )) + wx.Dialog.__init__(self, parent, id = wx.ID_ANY, title = u"Target Resists Editor", size = wx.Size( 350,240 )) self.block = False self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize)