From 06e4a7e80f6195122c6f7a9dd95cd66047d85a44 Mon Sep 17 00:00:00 2001 From: blitzmann Date: Tue, 7 Jul 2015 01:57:59 -0400 Subject: [PATCH] Support changing amount of projected fits --- gui/builtinContextMenus/__init__.py | 3 +- gui/builtinContextMenus/amount.py | 76 +++++++++++++++++++++++++++++ gui/builtinContextMenus/cargo.py | 64 ------------------------ service/fit.py | 13 ++++- 4 files changed, 90 insertions(+), 66 deletions(-) create mode 100644 gui/builtinContextMenus/amount.py diff --git a/gui/builtinContextMenus/__init__.py b/gui/builtinContextMenus/__init__.py index 7ce9ed894..b9fb3386d 100644 --- a/gui/builtinContextMenus/__init__.py +++ b/gui/builtinContextMenus/__init__.py @@ -17,5 +17,6 @@ __all__ = [ #"changeAffectingSkills", "tacticalMode", "targetResists", - "priceClear" + "priceClear", + "amount", ] diff --git a/gui/builtinContextMenus/amount.py b/gui/builtinContextMenus/amount.py new file mode 100644 index 000000000..a8e00a28f --- /dev/null +++ b/gui/builtinContextMenus/amount.py @@ -0,0 +1,76 @@ +from gui.contextMenu import ContextMenu +from gui.itemStats import ItemStatsDialog +import eos.types +import gui.mainFrame +import service +import gui.globalEvents as GE +import wx + +class ChangeAmount(ContextMenu): + def __init__(self): + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + + def display(self, srcContext, selection): + return srcContext in ("cargoItem","projectedFit") + + def getText(self, itmContext, selection): + print selection + return "Change {0} Quantity".format(itmContext) + + def activate(self, fullContext, selection, i): + srcContext = fullContext[0] + dlg = AmountChanger(self.mainFrame, selection[0], srcContext) + dlg.ShowModal() + dlg.Destroy() + +ChangeAmount.register() + +class AmountChanger(wx.Dialog): + + def __init__(self, parent, thing, context): + wx.Dialog.__init__(self, parent, title="Select Amount", size=wx.Size(220, 60)) + self.thing = thing + self.context = context + + bSizer1 = wx.BoxSizer(wx.HORIZONTAL) + + self.input = wx.TextCtrl(self, wx.ID_ANY, style=wx.TE_PROCESS_ENTER) + + bSizer1.Add(self.input, 1, wx.ALL, 5) + self.input.Bind(wx.EVT_CHAR, self.onChar) + self.input.Bind(wx.EVT_TEXT_ENTER, self.change) + self.button = wx.Button(self, wx.ID_OK, u"Done") + bSizer1.Add(self.button, 0, wx.ALL, 5) + + self.SetSizer(bSizer1) + self.Layout() + self.Centre(wx.BOTH) + self.button.Bind(wx.EVT_BUTTON, self.change) + + def change(self, event): + sFit = service.Fit.getInstance() + mainFrame = gui.mainFrame.MainFrame.getInstance() + fitID = mainFrame.getActiveFit() + + if isinstance(self.thing, eos.types.Cargo): + sFit.addCargo(fitID, self.thing.item.ID, int(self.input.GetLineText(0)), replace=True) + elif isinstance(self.thing, eos.types.Fit): + sFit.changeAmount(fitID, self.thing, int(self.input.GetLineText(0))) + + wx.PostEvent(mainFrame, GE.FitChanged(fitID=fitID)) + + event.Skip() + self.Destroy() + + ## checks to make sure it's valid number + def onChar(self, event): + key = event.GetKeyCode() + + acceptable_characters = "1234567890" + acceptable_keycode = [3, 22, 13, 8, 127] # modifiers like delete, copy, paste + if key in acceptable_keycode or key >= 255 or (key < 255 and chr(key) in acceptable_characters): + event.Skip() + return + else: + return False + diff --git a/gui/builtinContextMenus/cargo.py b/gui/builtinContextMenus/cargo.py index 6eda67458..3cc86902b 100644 --- a/gui/builtinContextMenus/cargo.py +++ b/gui/builtinContextMenus/cargo.py @@ -29,67 +29,3 @@ class Cargo(ContextMenu): wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) Cargo.register() - -class CargoAmount(ContextMenu): - def __init__(self): - self.mainFrame = gui.mainFrame.MainFrame.getInstance() - - def display(self, srcContext, selection): - return srcContext in ("cargoItem",) and selection[0].amount >= 0 - - def getText(self, itmContext, selection): - return "Change {0} Quantity".format(itmContext) - - def activate(self, fullContext, selection, i): - srcContext = fullContext[0] - dlg = CargoChanger(self.mainFrame, selection[0], srcContext) - dlg.ShowModal() - dlg.Destroy() - -CargoAmount.register() - -class CargoChanger(wx.Dialog): - - def __init__(self, parent, cargo, context): - wx.Dialog.__init__(self, parent, title="Select Amount", size=wx.Size(220, 60)) - self.cargo = cargo - self.context = context - - bSizer1 = wx.BoxSizer(wx.HORIZONTAL) - - self.input = wx.TextCtrl(self, wx.ID_ANY, style=wx.TE_PROCESS_ENTER) - - bSizer1.Add(self.input, 1, wx.ALL, 5) - self.input.Bind(wx.EVT_CHAR, self.onChar) - self.input.Bind(wx.EVT_TEXT_ENTER, self.change) - self.button = wx.Button(self, wx.ID_OK, u"Done") - bSizer1.Add(self.button, 0, wx.ALL, 5) - - self.SetSizer(bSizer1) - self.Layout() - self.Centre(wx.BOTH) - self.button.Bind(wx.EVT_BUTTON, self.change) - - def change(self, event): - sFit = service.Fit.getInstance() - mainFrame = gui.mainFrame.MainFrame.getInstance() - fitID = mainFrame.getActiveFit() - - sFit.addCargo(fitID, self.cargo.item.ID, int(self.input.GetLineText(0)), replace=True) - - wx.PostEvent(mainFrame, GE.FitChanged(fitID=fitID)) - - event.Skip() - self.Destroy() - ## checks to make sure it's valid number - def onChar(self, event): - key = event.GetKeyCode() - - acceptable_characters = "1234567890" - acceptable_keycode = [3, 22, 13, 8, 127] # modifiers like delete, copy, paste - if key in acceptable_keycode or key >= 255 or (key < 255 and chr(key) in acceptable_characters): - event.Skip() - return - else: - return False - diff --git a/service/fit.py b/service/fit.py index d328be6ed..5102a8bc5 100644 --- a/service/fit.py +++ b/service/fit.py @@ -363,13 +363,24 @@ class Fit(object): thing.state = self.__getProposedState(thing, click) if not thing.canHaveState(thing.state, fit): thing.state = State.OFFLINE - elif isinstance(thing, eos.types.Fit): + elif isinstance(thing, eos.types.Fit) and thing.projectionInfo is not None: print "toggle fit" thing.projectionInfo.active = not thing.projectionInfo.active eos.db.commit() self.recalc(fit) + def changeAmount(self, fitID, projected_fit, amount): + """Change amount of projected fits""" + fit = eos.db.getFit(fitID) + amount = min(5, max(1, amount)) # 1 <= a <= 5 + + if projected_fit.projectionInfo is not None: + projected_fit.projectionInfo.amount = amount + + eos.db.commit() + self.recalc(fit) + def removeProjected(self, fitID, thing): fit = eos.db.getFit(fitID) if isinstance(thing, eos.types.Drone):