Add context menu which pastes clipboard into additions pane (not functional yet)
This commit is contained in:
@@ -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
|
||||
|
||||
45
gui/builtinContextMenus/additionsImport.py
Normal file
45
gui/builtinContextMenus/additionsImport.py
Normal 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()
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user