Make sure graphs properly react to target profile updates

This commit is contained in:
DarkPhoenix
2019-08-01 00:21:42 +03:00
parent 592adb36f1
commit 7ec9d3f122
10 changed files with 104 additions and 44 deletions

View File

@@ -1,8 +1,7 @@
# noinspection PyPackageRequirements
import wx.lib.newevent
FitRenamed, EVT_FIT_RENAMED = wx.lib.newevent.NewEvent()
FitSelected, EVT_FIT_SELECTED = wx.lib.newevent.NewEvent()\
FitSelected, EVT_FIT_SELECTED = wx.lib.newevent.NewEvent()
BoosterListUpdated, BOOSTER_LIST_UPDATED = wx.lib.newevent.NewEvent()

View File

@@ -15,7 +15,6 @@ import gui.utils.color as colorUtils
import gui.utils.draw as drawUtils
import gui.utils.fonts as fonts
from gui.bitmap_loader import BitmapLoader
from gui.builtinShipBrowser.events import EVT_FIT_RENAMED
from gui.builtinShipBrowser.pfBitmapFrame import PFBitmapFrame
from service.fit import Fit
from .events import BoosterListUpdated, FitSelected, ImportSelected, SearchSelected, Stage3Selected
@@ -123,7 +122,7 @@ class FitItem(SFItem.SFBrowserItem):
self.tcFitName.Bind(wx.EVT_KILL_FOCUS, self.editLostFocus)
self.tcFitName.Bind(wx.EVT_KEY_DOWN, self.editCheckEsc)
self.Bind(wx.EVT_MOUSE_CAPTURE_LOST, self.OnMouseCaptureLost)
self.mainFrame.Bind(EVT_FIT_RENAMED, self.OnFitRename)
self.mainFrame.Bind(GE.FIT_RENAMED, self.OnFitRename)
self.animTimerId = wx.NewId()
self.animTimer = wx.Timer(self, self.animTimerId)

View File

@@ -34,7 +34,7 @@ from eos.saveddata.module import Module, Rack
from eos.const import FittingSlot
from gui.bitmap_loader import BitmapLoader
from gui.builtinMarketBrowser.events import ITEM_SELECTED
from gui.builtinShipBrowser.events import EVT_FIT_RENAMED, EVT_FIT_SELECTED, FitSelected
from gui.builtinShipBrowser.events import EVT_FIT_SELECTED, FitSelected
from gui.builtinViewColumns.state import State
from gui.chrome_tabs import EVT_NOTEBOOK_PAGE_CHANGED
from gui.contextMenu import ContextMenu
@@ -147,7 +147,7 @@ class FittingView(d.Display):
self.Show(False)
self.parent = parent
self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged)
self.mainFrame.Bind(EVT_FIT_RENAMED, self.fitRenamed)
self.mainFrame.Bind(GE.FIT_RENAMED, self.fitRenamed)
self.mainFrame.Bind(GE.FIT_REMOVED, self.fitRemoved)
self.mainFrame.Bind(ITEM_SELECTED, self.appendItem)
self.font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)

View File

@@ -1,8 +1,8 @@
import wx
import eos.db
import gui.globalEvents as GE
import gui.mainFrame
from gui.builtinShipBrowser.events import FitRenamed
from gui.fitCommands.calc.fitRename import CalcFitRenameCommand
from gui.fitCommands.helpers import InternalCommandHistory
@@ -19,11 +19,11 @@ class GuiRenameFitCommand(wx.Command):
cmd = CalcFitRenameCommand(fitID=self.fitID, name=self.name)
success = self.internalHistory.submit(cmd)
eos.db.commit()
wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), FitRenamed(fitID=self.fitID))
wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitRenamed(fitID=self.fitID))
return success
def Undo(self):
success = self.internalHistory.undoAll()
eos.db.commit()
wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), FitRenamed(fitID=self.fitID))
wx.PostEvent(gui.mainFrame.MainFrame.getInstance(), GE.FitRenamed(fitID=self.fitID))
return success

View File

@@ -1,11 +1,13 @@
# noinspection PyPackageRequirements
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()
CharListUpdated, CHAR_LIST_UPDATED = wx.lib.newevent.NewEvent()
CharChanged, CHAR_CHANGED = wx.lib.newevent.NewEvent()
GraphOptionChanged, GRAPH_OPTION_CHANGED = wx.lib.newevent.NewEvent()
TargetProfileRenamed, TARGET_PROFILE_RENAMED = wx.lib.newevent.NewEvent()
TargetProfileChanged, TARGET_PROFILE_CHANGED = wx.lib.newevent.NewEvent()
TargetProfileRemoved, TARGET_PROFILE_REMOVED = wx.lib.newevent.NewEvent()

View File

@@ -33,7 +33,6 @@ from eos.saveddata.fit import Fit
from eos.saveddata.targetProfile import TargetProfile
from gui.bitmap_loader import BitmapLoader
from gui.builtinGraphs.base import FitGraph
from gui.builtinShipBrowser.events import EVT_FIT_RENAMED
from service.const import GraphCacheCleanupReason
from service.settings import GraphSettings
from .panel import GraphControlPanel
@@ -124,9 +123,14 @@ class GraphFrame(wx.Frame):
# Event bindings - local events
self.Bind(wx.EVT_CLOSE, self.closeEvent)
self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent)
# Event bindings - external events
self.mainFrame.Bind(GE.FIT_RENAMED, self.OnFitRenamed)
self.mainFrame.Bind(GE.FIT_CHANGED, self.OnFitChanged)
self.mainFrame.Bind(EVT_FIT_RENAMED, self.OnFitRenamed)
self.mainFrame.Bind(GE.FIT_REMOVED, self.OnFitRemoved)
self.mainFrame.Bind(GE.TARGET_PROFILE_RENAMED, self.OnProfileRenamed)
self.mainFrame.Bind(GE.TARGET_PROFILE_CHANGED, self.OnProfileChanged)
self.mainFrame.Bind(GE.TARGET_PROFILE_REMOVED, self.OnProfileRemoved)
self.mainFrame.Bind(GE.GRAPH_OPTION_CHANGED, self.OnGraphOptionChanged)
self.Layout()
@@ -155,14 +159,41 @@ class GraphFrame(wx.Frame):
return
event.Skip()
# Fit events
def OnFitRenamed(self, event):
event.Skip()
self.ctrlPanel.OnFitRenamed(event)
self.draw()
def OnFitChanged(self, event):
event.Skip()
for fitID in event.fitIDs:
self.clearCache(reason=GraphCacheCleanupReason.fitChanged, extraData=fitID)
self.ctrlPanel.OnFitChanged(event)
self.draw()
def OnFitRenamed(self, event):
def OnFitRemoved(self, event):
event.Skip()
self.clearCache(reason=GraphCacheCleanupReason.fitRemoved, extraData=event.fitID)
self.ctrlPanel.OnFitRemoved(event)
self.draw()
# Target profile events
def OnProfileRenamed(self, event):
event.Skip()
self.ctrlPanel.OnProfileRenamed(event)
self.draw()
def OnProfileChanged(self, event):
event.Skip()
self.clearCache(reason=GraphCacheCleanupReason.profileChanged, extraData=event.profileID)
self.ctrlPanel.OnProfileChanged(event)
self.draw()
def OnProfileRemoved(self, event):
event.Skip()
self.clearCache(reason=GraphCacheCleanupReason.profileRemoved, extraData=event.profileID)
self.ctrlPanel.OnProfileRemoved(event)
self.draw()
def OnGraphOptionChanged(self, event):
@@ -179,10 +210,13 @@ class GraphFrame(wx.Frame):
event.Skip()
def closeWindow(self):
self.mainFrame.Unbind(GE.FIT_RENAMED, handler=self.OnFitRenamed)
self.mainFrame.Unbind(GE.FIT_CHANGED, handler=self.OnFitChanged)
self.mainFrame.Unbind(EVT_FIT_RENAMED, handler=self.OnFitRenamed)
self.mainFrame.Unbind(GE.FIT_REMOVED, handler=self.OnFitRemoved)
self.mainFrame.Unbind(GE.TARGET_PROFILE_RENAMED, handler=self.OnProfileRenamed)
self.mainFrame.Unbind(GE.TARGET_PROFILE_CHANGED, handler=self.OnProfileChanged)
self.mainFrame.Unbind(GE.TARGET_PROFILE_REMOVED, handler=self.OnProfileRemoved)
self.mainFrame.Unbind(GE.GRAPH_OPTION_CHANGED, handler=self.OnGraphOptionChanged)
self.ctrlPanel.unbindExternalEvents()
self.Destroy()
def getView(self):

View File

@@ -24,7 +24,6 @@ import wx
import gui.display
import gui.globalEvents as GE
from eos.saveddata.targetProfile import TargetProfile
from gui.builtinShipBrowser.events import EVT_FIT_RENAMED
from gui.contextMenu import ContextMenu
from service.const import GraphCacheCleanupReason
from service.fit import Fit
@@ -49,10 +48,6 @@ class BaseList(gui.display.Display):
self.Bind(wx.EVT_MOTION, self.OnMouseMove)
self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveWindow)
self.graphFrame.mainFrame.Bind(GE.FIT_CHANGED, self.OnFitChanged)
self.graphFrame.mainFrame.Bind(EVT_FIT_RENAMED, self.OnFitRenamed)
self.graphFrame.mainFrame.Bind(GE.FIT_REMOVED, self.OnFitRemoved)
def refreshExtraColumns(self, extraColSpecs):
baseColNames = set()
for baseColName in self.DEFAULT_COLS:
@@ -94,21 +89,6 @@ class BaseList(gui.display.Display):
return
self.removeListItems([item])
def OnFitRenamed(self, event):
event.Skip()
self.updateView()
def OnFitChanged(self, event):
event.Skip()
if set(event.fitIDs).union(f.ID for f in self.fits):
self.updateView()
def OnFitRemoved(self, event):
event.Skip()
fit = next((f for f in self.fits if f.ID == event.fitID), None)
if fit is not None:
self.removeListItems([fit])
def OnMouseMove(self, event):
row, _, col = self.HitTestSubItem(event.Position)
if row != self.hoveredRow or col != self.hoveredColumn:
@@ -136,6 +116,21 @@ class BaseList(gui.display.Display):
self.hoveredColumn = None
event.Skip()
# Fit events
def OnFitRenamed(self, event):
if event.fitID in [f.ID for f in self.fits]:
self.updateView()
def OnFitChanged(self, event):
if set(event.fitIDs).union(f.ID for f in self.fits):
self.updateView()
def OnFitRemoved(self, event):
fit = next((f for f in self.fits if f.ID == event.fitID), None)
if fit is not None:
self.fits.remove(fit)
self.updateView()
@property
def defaultTTText(self):
raise NotImplementedError
@@ -161,11 +156,6 @@ class BaseList(gui.display.Display):
items.append(item)
return items
def unbindExternalEvents(self):
self.graphFrame.mainFrame.Unbind(GE.FIT_CHANGED, handler=self.OnFitChanged)
self.graphFrame.mainFrame.Unbind(EVT_FIT_RENAMED, handler=self.OnFitRenamed)
self.graphFrame.mainFrame.Unbind(GE.FIT_REMOVED, handler=self.OnFitRemoved)
# Context menu handlers
def addFit(self, fit):
if fit is None:
@@ -288,6 +278,21 @@ class TargetList(BaseList):
self.graphFrame.clearCache(reason=GraphCacheCleanupReason.profileRemoved, extraData=profile.ID)
self.graphFrame.draw()
# Target profile events
def OnProfileRenamed(self, event):
if event.profileID in [tp.ID for tp in self.profiles]:
self.updateView()
def OnProfileChanged(self, event):
if event.profileID in [tp.ID for tp in self.profiles]:
self.updateView()
def OnProfileRemoved(self, event):
profile = next((tp for tp in self.profiles if tp.ID == event.profileID), None)
if profile is not None:
self.profiles.remove(profile)
self.updateView()
@property
def targets(self):
return self.fits + self.profiles

View File

@@ -320,9 +320,28 @@ class GraphControlPanel(wx.Panel):
def targets(self):
return self.targetList.targets
def unbindExternalEvents(self):
self.fitList.unbindExternalEvents()
self.targetList.unbindExternalEvents()
# Fit events
def OnFitRenamed(self, event):
self.fitList.OnFitRenamed(event)
self.targetList.OnFitRenamed(event)
def OnFitChanged(self, event):
self.fitList.OnFitChanged(event)
self.targetList.OnFitChanged(event)
def OnFitRemoved(self, event):
self.fitList.OnFitRemoved(event)
self.targetList.OnFitRemoved(event)
# Target profile events
def OnProfileRenamed(self, event):
self.targetList.OnProfileRenamed(event)
def OnProfileChanged(self, event):
self.targetList.OnProfileChanged(event)
def OnProfileRemoved(self, event):
self.targetList.OnProfileRemoved(event)
def formatLabel(self, axisDef):
if axisDef.unit is None:

View File

@@ -26,7 +26,6 @@ from service.fit import Fit
import gui.graphFrame
import gui.globalEvents as GE
from gui.bitmap_loader import BitmapLoader
from gui.builtinShipBrowser.events import EVT_FIT_RENAMED
from logbook import Logger
@@ -173,7 +172,7 @@ class MainMenuBar(wx.MenuBar):
helpMenu.Append(self.devToolsId, "Open &Dev Tools", "Dev Tools")
self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged)
self.mainFrame.Bind(EVT_FIT_RENAMED, self.fitRenamed)
self.mainFrame.Bind(GE.FIT_RENAMED, self.fitRenamed)
def fitChanged(self, event):
event.Skip()

View File

@@ -83,6 +83,7 @@ class TargetProfileEntityEditor(EntityEditor):
def __init__(self, parent):
EntityEditor.__init__(self, parent, "Target Profile")
self.SetEditorValidator(TargetProfileNameValidator)
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
def getEntitiesFromContext(self):
sTR = TargetProfile.getInstance()
@@ -96,6 +97,7 @@ class TargetProfileEntityEditor(EntityEditor):
def DoRename(self, entity, name):
sTR = TargetProfile.getInstance()
sTR.renamePattern(entity, name)
wx.PostEvent(self.mainFrame, GE.TargetProfileChanged(profileID=entity.ID))
def DoCopy(self, entity, name):
sTR = TargetProfile.getInstance()
@@ -106,6 +108,7 @@ class TargetProfileEntityEditor(EntityEditor):
def DoDelete(self, entity):
sTR = TargetProfile.getInstance()
sTR.deletePattern(entity)
wx.PostEvent(self.mainFrame, GE.TargetProfileRemoved(profileID=entity.ID))
class TargetProfileEditorDlg(wx.Dialog):