Add context menu which pastes clipboard into additions pane (not functional yet)

This commit is contained in:
DarkPhoenix
2019-08-21 15:46:20 +03:00
parent 7dc17543df
commit 56e09b8528
3 changed files with 64 additions and 0 deletions

View File

@@ -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

View File

@@ -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()

View File

@@ -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<typeName>[^,/\[\]]+?)( x(?P<amount>\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