From eb87ba1d89d337efff16e441d903049d2bdfed4f Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Tue, 6 Aug 2019 13:01:40 +0300 Subject: [PATCH] Automatically assign colors --- graphs/gui/lists.py | 26 +++++++++++++++++++------- graphs/wrapper.py | 4 ++-- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/graphs/gui/lists.py b/graphs/gui/lists.py index 3e4c9dd06..dc9a72110 100644 --- a/graphs/gui/lists.py +++ b/graphs/gui/lists.py @@ -23,6 +23,7 @@ import wx import gui.display from eos.saveddata.targetProfile import TargetProfile +from graphs.colors import BASE_COLORS from graphs.wrapper import SourceWrapper, TargetWrapper from gui.contextMenu import ContextMenu from service.const import GraphCacheCleanupReason @@ -129,10 +130,6 @@ class BaseWrapperList(gui.display.Display): event.Skip() # Wrapper-related methods - @property - def wrapperClass(self): - raise NotImplementedError - def getWrapper(self, row): if row == -1: return None @@ -165,7 +162,7 @@ class BaseWrapperList(gui.display.Display): return wrappers def appendItem(self, item): - self._wrappers.append(self.wrapperClass(item)) + raise NotImplemented def containsFitID(self, fitID): for wrapper in self._wrappers: @@ -239,7 +236,6 @@ class SourceWrapperList(BaseWrapperList): 'Color', 'Base Icon', 'Base Name') - wrapperClass = SourceWrapper def __init__(self, graphFrame, parent): super().__init__(graphFrame, parent) @@ -251,6 +247,20 @@ class SourceWrapperList(BaseWrapperList): self.appendItem(fit) self.updateView() + def appendItem(self, item): + # Find out least used color + colorUseMap = {c: 0 for c in BASE_COLORS} + for wrapper in self._wrappers: + if wrapper.color not in colorUseMap: + continue + colorUseMap[wrapper.color] += 1 + leastUses = min(colorUseMap.values(), default=0) + color = None + for color in BASE_COLORS: + if leastUses == colorUseMap.get(color, 0): + break + self._wrappers.append(SourceWrapper(item, color)) + def spawnMenu(self, event): selection = self.getSelectedWrappers() clickedPos = self.getRowByAbs(event.Position) @@ -271,7 +281,6 @@ class TargetWrapperList(BaseWrapperList): DEFAULT_COLS = ( 'Base Icon', 'Base Name') - wrapperClass = TargetWrapper def __init__(self, graphFrame, parent): super().__init__(graphFrame, parent) @@ -281,6 +290,9 @@ class TargetWrapperList(BaseWrapperList): self.appendItem(TargetProfile.getIdeal()) self.updateView() + def appendItem(self, item): + self._wrappers.append(TargetWrapper(item)) + def spawnMenu(self, event): selection = self.getSelectedWrappers() clickedPos = self.getRowByAbs(event.Position) diff --git a/graphs/wrapper.py b/graphs/wrapper.py index 50717d701..8ab2610f9 100644 --- a/graphs/wrapper.py +++ b/graphs/wrapper.py @@ -95,9 +95,9 @@ class BaseWrapper: class SourceWrapper(BaseWrapper): - def __init__(self, item): + def __init__(self, item, color): super().__init__(item) - self._color = None + self._color = color @property def color(self):