diff --git a/gui/builtinContextMenus/__init__.py b/gui/builtinContextMenus/__init__.py index 49bf6a88d..8b2a93e3b 100644 --- a/gui/builtinContextMenus/__init__.py +++ b/gui/builtinContextMenus/__init__.py @@ -50,3 +50,4 @@ from gui.builtinContextMenus import graphDmgDroneMode # Additions panel menus from gui.builtinContextMenus import additionsExportSelection from gui.builtinContextMenus import additionsExportAll +from gui.builtinContextMenus import additionsImport diff --git a/gui/builtinContextMenus/additionsImport.py b/gui/builtinContextMenus/additionsImport.py new file mode 100644 index 000000000..e904728f7 --- /dev/null +++ b/gui/builtinContextMenus/additionsImport.py @@ -0,0 +1,45 @@ +import gui.mainFrame +from gui.contextMenu import ContextMenuUnconditional +from gui.utils.clipboard import fromClipboard +from service.fit import Fit +from service.port.eft import parseAdditions +from service.settings import ContextMenuSettings + + +viewSpecMap = { + 'droneItemMisc': ('Drones', None), + 'fighterItemMisc': ('Fighters', None), + 'cargoItemMisc': ('Cargo Items', None), + 'implantItemMisc': ('Implants', None), + 'implantItemMiscChar': ('Implants', None), + 'boosterItemMisc': ('Boosters', None)} + + +class AdditionsImport(ContextMenuUnconditional): + + def __init__(self): + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + + def display(self, callingWindow, srcContext): + if not ContextMenuSettings.getInstance().get('additionsCopyPaste'): + return False + if srcContext not in viewSpecMap: + return False + fit = Fit.getInstance().getFit(self.mainFrame.getActiveFit()) + if fit is None: + return False + if not fromClipboard(): + return False + + self.srcContext = srcContext + return True + + def getText(self, callingWindow, itmContext): + return 'Paste {}'.format(viewSpecMap[self.srcContext][0]) + + def activate(self, callingWindow, fullContext, i): + text = fromClipboard() + items = parseAdditions(text) + + +AdditionsImport.register() diff --git a/service/port/eft.py b/service/port/eft.py index df06da5dd..492abba9c 100644 --- a/service/port/eft.py +++ b/service/port/eft.py @@ -862,3 +862,21 @@ class AbstractFit: if itemSpec.item not in self.cargo: self.cargo[itemSpec.item] = Cargo(itemSpec.item) self.cargo[itemSpec.item].amount += itemSpec.amount + + +def parseAdditions(text): + items = [] + sMkt = Market.getInstance() + pattern = '^(?P[^,/\[\]]+?)( x(?P\d+?))?$' + for line in text.splitlines(): + line = line.strip() + m = re.match(pattern, line) + if not m: + continue + item = sMkt.getItem(m.group('typeName')) + if item is None: + continue + amount = m.group('amount') + amount = 1 if amount is None else int(amount) + items.append((item, amount)) + return items