From 661dfc66a1ede460ee81ea748cd76166d468860d Mon Sep 17 00:00:00 2001 From: cncfanatics Date: Sun, 31 Oct 2010 00:08:27 +0200 Subject: [PATCH] Add requiredSkills tooltip --- gui/characterSelection.py | 31 ++++++++++++++++++++++++++++++- service/character.py | 23 +++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/gui/characterSelection.py b/gui/characterSelection.py index fede934d3..a17d753e2 100644 --- a/gui/characterSelection.py +++ b/gui/characterSelection.py @@ -20,7 +20,7 @@ import wx import service from gui import characterEditor as ce -from gui import shipBrowser as sb +from gui import bitmapLoader from gui import fittingView as fv import gui.mainFrame @@ -39,6 +39,14 @@ class CharacterSelection(wx.Panel): self.refreshCharacterList() + self.skillReqsStaticBitmap = wx.StaticBitmap(self) + mainSizer.Add(self.skillReqsStaticBitmap, 0, wx.ALIGN_CENTER_VERTICAL) + + self.cleanSkills = bitmapLoader.getBitmap("skill_big", "icons") + self.redSkills = bitmapLoader.getBitmap("skillRed_big", "icons") + self.greenSkills = bitmapLoader.getBitmap("skillGreen_big", "icons") + + self.skillReqsStaticBitmap.SetBitmap(self.cleanSkills) self.Bind(wx.EVT_CHOICE, self.charChanged) self.mainFrame.Bind(ce.CHAR_LIST_UPDATED, self.refreshCharacterList) self.mainFrame.Bind(fv.FIT_CHANGED, self.fitChanged) @@ -101,6 +109,18 @@ class CharacterSelection(wx.Panel): currCharID = choice.GetClientData(choice.GetCurrentSelection()) fit = cFit.getFit(event.fitID) newCharID = fit.character.ID if fit is not None else None + if event.fitID is None: + self.skillReqsStaticBitmap.SetBitmap(self.cleanSkills) + else: + sCharacter = service.Character.getInstance() + reqs = sCharacter.checkRequirements(fit) + if len(reqs) == 0: + self.skillReqsStaticBitmap.SetBitmap(self.greenSkills) + self.skillReqsStaticBitmap.SetToolTip(None) + else: + tip = self._buildSkillsTooltip(reqs) + self.skillReqsStaticBitmap.SetBitmap(self.redSkills) + self.skillReqsStaticBitmap.SetToolTipString(tip.strip()) if newCharID == None: cChar = service.Character.getInstance() @@ -109,3 +129,12 @@ class CharacterSelection(wx.Panel): self.selectChar(newCharID) event.Skip() + + def _buildSkillsTooltip(self, reqs, tabulationLevel = 0): + tip = "" + for name, info in reqs.iteritems(): + level, more = info + tip += "%s%s: %d\n" % (" " * tabulationLevel, name, level) + tip += self._buildSkillsTooltip(more, tabulationLevel + 1) + + return tip diff --git a/service/character.py b/service/character.py index 8d8a2e6c3..182b27c05 100644 --- a/service/character.py +++ b/service/character.py @@ -21,6 +21,7 @@ import eos.db import eos.types import copy import service +import itertools class Character(): instance = None @@ -138,3 +139,25 @@ class Character(): def getImplants(self, charID): char = eos.db.getCharacter(charID) return char.implants + + def checkRequirements(self, fit): + toCheck = [] + reqs = {} + for thing in itertools.chain(fit.modules, fit.drones, (fit.ship,)): + for attr in ("item", "charge"): + subThing = getattr(thing, attr, None) + if subThing is not None: + self._checkRequirements(fit, fit.character, subThing, reqs) + + return reqs + + def _checkRequirements(self, fit, char, subThing, reqs): + for req, level in subThing.requiredSkills.iteritems(): + name = req.name + info = reqs.get(name) + currLevel, subs = info if info is not None else 0, {} + if level > currLevel and (char is None or char.getSkill(req).level < level): + reqs[name] = (level, subs) + self._checkRequirements(fit, char, req, subs) + + return reqs