diff --git a/gui/additionsPane.py b/gui/additionsPane.py index c9a82f3de..c4d7d3fe9 100644 --- a/gui/additionsPane.py +++ b/gui/additionsPane.py @@ -86,6 +86,7 @@ class AdditionsPane(TogglePanel): self.notebook.AddPage(self.notes, "Notes", image=notesImg, closeable=False) self.mainFrame.Bind(GE.FIT_CHANGED, self.OnFitChanged) + self.mainFrame.Bind(GE.FIT_NOTES_CHANGED, self.OnNotesChanged) self.notebook.SetSelection(0) @@ -118,6 +119,10 @@ class AdditionsPane(TogglePanel): return self.updateExtraText() + def OnNotesChanged(self, event): + event.Skip() + self.updateExtraText() + def updateExtraText(self): refresh = False for i in range(self.notebook.GetPageCount()): diff --git a/gui/builtinAdditionPanes/notesView.py b/gui/builtinAdditionPanes/notesView.py index bbde2b688..7228cfacd 100644 --- a/gui/builtinAdditionPanes/notesView.py +++ b/gui/builtinAdditionPanes/notesView.py @@ -1,10 +1,11 @@ # noinspection PyPackageRequirements import wx -from service.fit import Fit import gui.globalEvents as GE import gui.mainFrame from gui.utils.helpers_wxPython import HandleCtrlBackspace +from gui.utils.numberFormatter import formatAmount +from service.fit import Fit class NotesView(wx.Panel): @@ -14,14 +15,14 @@ class NotesView(wx.Panel): self.lastFitId = None self.mainFrame = gui.mainFrame.MainFrame.getInstance() mainSizer = wx.BoxSizer(wx.VERTICAL) - self.editNotes = wx.TextCtrl(self, style=wx.TE_MULTILINE | wx.BORDER_NONE, ) - mainSizer.Add(self.editNotes, 1, wx.EXPAND) + self.editNotes = wx.TextCtrl(self, style=wx.TE_MULTILINE | wx.BORDER_NONE) + mainSizer.Add(self.editNotes, 1, wx.EXPAND | wx.ALL, 10) self.SetSizer(mainSizer) self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged) self.Bind(wx.EVT_TEXT, self.onText) self.editNotes.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) - self.saveTimer = wx.Timer(self) - self.Bind(wx.EVT_TIMER, self.delayedSave, self.saveTimer) + self.changeTimer = wx.Timer(self) + self.Bind(wx.EVT_TIMER, self.delayedSave, self.changeTimer) def OnKeyDown(self, event): if event.RawControlDown() and event.GetKeyCode() == wx.WXK_BACK: @@ -38,7 +39,7 @@ class NotesView(wx.Panel): sFit = Fit.getInstance() fit = sFit.getFit(activeFitID) - self.saveTimer.Stop() # cancel any pending timers + self.changeTimer.Stop() # cancel any pending timers self.Parent.Parent.DisablePage(self, not fit or fit.isStructure) @@ -51,13 +52,32 @@ class NotesView(wx.Panel): return elif activeFitID != self.lastFitId: self.lastFitId = activeFitID - self.editNotes.SetValue(fit.notes or "") + self.editNotes.ChangeValue(fit.notes or "") + wx.PostEvent(self.mainFrame, GE.FitNotesChanged()) def onText(self, event): # delay the save so we're not writing to sqlite on every keystroke - self.saveTimer.Stop() # cancel the existing timer - self.saveTimer.Start(1000, True) + self.changeTimer.Stop() # cancel the existing timer + self.changeTimer.Start(1000, True) def delayedSave(self, event): + event.Skip() sFit = Fit.getInstance() sFit.editNotes(self.lastFitId, self.editNotes.GetValue()) + wx.PostEvent(self.mainFrame, GE.FitNotesChanged()) + + def getTabExtraText(self): + fitID = self.mainFrame.getActiveFit() + if fitID is None: + return None + sFit = Fit.getInstance() + fit = sFit.getFit(fitID) + if fit is None: + return None + opt = sFit.serviceFittingOptions["additionsLabels"] + # Amount of active implants + if opt in (1, 2): + amount = len(self.editNotes.GetValue()) + return ' ({})'.format(formatAmount(amount, 2, 0, 3)) if amount else None + else: + return None diff --git a/gui/globalEvents.py b/gui/globalEvents.py index b84026efe..ef3e059df 100644 --- a/gui/globalEvents.py +++ b/gui/globalEvents.py @@ -4,6 +4,7 @@ import wx.lib.newevent FitRenamed, FIT_RENAMED = wx.lib.newevent.NewEvent() FitChanged, FIT_CHANGED = wx.lib.newevent.NewEvent() FitRemoved, FIT_REMOVED = wx.lib.newevent.NewEvent() +FitNotesChanged, FIT_NOTES_CHANGED = wx.lib.newevent.NewEvent() CharListUpdated, CHAR_LIST_UPDATED = wx.lib.newevent.NewEvent() CharChanged, CHAR_CHANGED = wx.lib.newevent.NewEvent() GraphOptionChanged, GRAPH_OPTION_CHANGED = wx.lib.newevent.NewEvent()