Merge branch 'master' of evefit.org:pyfa
This commit is contained in:
@@ -39,7 +39,13 @@ class WhProjector(ContextMenu):
|
||||
|
||||
|
||||
def handleSelection(self, event):
|
||||
swObj, swName = self.idmap[event.Id]
|
||||
#Skip events ids that aren't mapped
|
||||
|
||||
swObj, swName = self.idmap.get(event.Id, (False, False))
|
||||
if not swObj and not swName:
|
||||
event.Skip()
|
||||
return
|
||||
|
||||
sFit = service.Fit.getInstance()
|
||||
fitID = self.mainFrame.getActiveFit()
|
||||
sFit.project(fitID, swObj)
|
||||
|
||||
@@ -3,7 +3,10 @@ import service
|
||||
|
||||
from gui.preferenceView import PreferenceView
|
||||
from gui import bitmapLoader
|
||||
|
||||
import gui.mainFrame
|
||||
import service
|
||||
import gui.globalEvents as GE
|
||||
|
||||
|
||||
class PFGlobalPref ( PreferenceView):
|
||||
@@ -11,6 +14,7 @@ class PFGlobalPref ( PreferenceView):
|
||||
|
||||
def populatePanel( self, panel ):
|
||||
|
||||
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
|
||||
mainSizer = wx.BoxSizer( wx.VERTICAL )
|
||||
|
||||
self.stTitle = wx.StaticText( panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||
@@ -28,6 +32,9 @@ class PFGlobalPref ( PreferenceView):
|
||||
self.cbGlobalDmgPattern = wx.CheckBox( panel, wx.ID_ANY, u"Use global damage pattern", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||
mainSizer.Add( self.cbGlobalDmgPattern, 0, wx.ALL|wx.EXPAND, 5 )
|
||||
|
||||
self.cbGlobalForceReload = wx.CheckBox( panel, wx.ID_ANY, u"Use force reload", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||
mainSizer.Add( self.cbGlobalForceReload, 0, wx.ALL|wx.EXPAND, 5 )
|
||||
|
||||
defCharSizer = wx.BoxSizer( wx.HORIZONTAL )
|
||||
|
||||
self.stDefChar = wx.StaticText( panel, wx.ID_ANY, u"Default character:", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||
@@ -52,18 +59,27 @@ class PFGlobalPref ( PreferenceView):
|
||||
self.sFit = service.Fit.getInstance()
|
||||
useGlobalChar = self.sFit.serviceFittingOptions["useGlobalCharacter"]
|
||||
useGlobalDmgPattern = self.sFit.serviceFittingOptions["useGlobalDamagePattern"]
|
||||
useGlobalForceReload = self.sFit.serviceFittingOptions["useGlobalForceReload"]
|
||||
|
||||
self.cbGlobalChar.SetValue(useGlobalChar)
|
||||
self.cbGlobalDmgPattern.SetValue(useGlobalDmgPattern)
|
||||
self.cbGlobalForceReload.SetValue(useGlobalForceReload)
|
||||
|
||||
self.cbGlobalChar.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalCharStateChange)
|
||||
self.cbGlobalDmgPattern.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalDmgPatternStateChange)
|
||||
self.cbGlobalForceReload.Bind(wx.EVT_CHECKBOX, self.OnCBGlobalForceReloadStateChange)
|
||||
|
||||
self.chDefaultChar.Disable()
|
||||
|
||||
panel.SetSizer( mainSizer )
|
||||
panel.Layout()
|
||||
|
||||
def OnCBGlobalForceReloadStateChange(self, event):
|
||||
self.sFit.serviceFittingOptions["useGlobalForceReload"] = self.cbGlobalForceReload.GetValue()
|
||||
fitID = self.mainFrame.getActiveFit()
|
||||
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID))
|
||||
event.Skip()
|
||||
|
||||
def OnCBGlobalCharStateChange(self, event):
|
||||
self.sFit.serviceFittingOptions["useGlobalCharacter"] = self.cbGlobalChar.GetValue()
|
||||
event.Skip()
|
||||
|
||||
@@ -106,11 +106,14 @@ class MainFrame(wx.Frame):
|
||||
|
||||
self.notebookBrowsers = gui.chromeTabs.PFNotebook(self.splitter, False)
|
||||
|
||||
marketImg = bitmapLoader.getImage("market_small", "icons")
|
||||
shipBrowserImg = bitmapLoader.getImage("ship_small", "icons")
|
||||
|
||||
self.marketBrowser = MarketBrowser(self.notebookBrowsers)
|
||||
self.notebookBrowsers.AddPage(self.marketBrowser, "Market", showClose = False)
|
||||
self.notebookBrowsers.AddPage(self.marketBrowser, "Market", tabImage = marketImg, showClose = False)
|
||||
|
||||
self.shipBrowser = ShipBrowser(self.notebookBrowsers)
|
||||
self.notebookBrowsers.AddPage(self.shipBrowser, "Ships", showClose = False)
|
||||
self.notebookBrowsers.AddPage(self.shipBrowser, "Ships", tabImage = shipBrowserImg, showClose = False)
|
||||
|
||||
#=======================================================================
|
||||
# DISABLED FOR RC2 RELEASE
|
||||
|
||||
@@ -28,6 +28,9 @@ from gui import bitmapLoader
|
||||
|
||||
ItemSelected, ITEM_SELECTED = wx.lib.newevent.NewEvent()
|
||||
|
||||
RECENTLY_USED_MODULES = -2
|
||||
MAX_RECENTLY_USED_MODULES = 20
|
||||
|
||||
class MarketBrowser(wx.Panel):
|
||||
def __init__(self, parent):
|
||||
wx.Panel.__init__(self, parent)
|
||||
@@ -128,15 +131,19 @@ class MarketTree(wx.TreeCtrl):
|
||||
# All market groups which were never expanded are dummies, here we assume
|
||||
# that all root market groups are expandable
|
||||
self.AppendItem(childId, "dummy")
|
||||
|
||||
self.SortChildren(self.root)
|
||||
|
||||
# Add recently used modules node
|
||||
rumIconId = self.addImage("market_small", "icons")
|
||||
self.AppendItem(self.root, "Recently Used Modules", rumIconId, data = wx.TreeItemData(RECENTLY_USED_MODULES))
|
||||
|
||||
# Bind our lookup method to when the tree gets expanded
|
||||
self.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.expandLookup)
|
||||
|
||||
def addImage(self, iconFile):
|
||||
def addImage(self, iconFile, location = "pack"):
|
||||
if iconFile is None:
|
||||
return -1
|
||||
return self.imageList.GetImageIndex(iconFile, "pack")
|
||||
return self.imageList.GetImageIndex(iconFile, location)
|
||||
|
||||
def expandLookup(self, event):
|
||||
"""Process market tree expands"""
|
||||
@@ -201,6 +208,7 @@ class ItemView(d.Display):
|
||||
|
||||
self.unfilteredStore = set()
|
||||
self.filteredStore = set()
|
||||
self.recentlyUsedModules = set()
|
||||
self.sMarket = marketBrowser.sMarket
|
||||
self.searchMode = marketBrowser.searchMode
|
||||
|
||||
@@ -220,13 +228,31 @@ class ItemView(d.Display):
|
||||
# Make reverse map, used by sorter
|
||||
self.metaMap = self.makeReverseMetaMap()
|
||||
|
||||
# Fill up recently used modules set
|
||||
for itemID in self.sMarket.serviceMarketRecentlyUsedModules["pyfaMarketRecentlyUsedModules"]:
|
||||
self.recentlyUsedModules.add(self.sMarket.getItem(itemID))
|
||||
|
||||
def itemActivated(self, event=None):
|
||||
# Check if something is selected, if so, spawn the menu for it
|
||||
sel = self.GetFirstSelected()
|
||||
if sel == -1:
|
||||
return
|
||||
|
||||
if self.mainFrame.getActiveFit():
|
||||
|
||||
self.storeRecentlyUsedMarketItem(self.active[sel].ID)
|
||||
self.recentlyUsedModules = set()
|
||||
for itemID in self.sMarket.serviceMarketRecentlyUsedModules["pyfaMarketRecentlyUsedModules"]:
|
||||
self.recentlyUsedModules.add(self.sMarket.getItem(itemID))
|
||||
|
||||
wx.PostEvent(self.mainFrame, ItemSelected(itemID=self.active[sel].ID))
|
||||
|
||||
def storeRecentlyUsedMarketItem(self, itemID):
|
||||
if len(self.sMarket.serviceMarketRecentlyUsedModules["pyfaMarketRecentlyUsedModules"]) > MAX_RECENTLY_USED_MODULES:
|
||||
self.sMarket.serviceMarketRecentlyUsedModules["pyfaMarketRecentlyUsedModules"].pop(0)
|
||||
|
||||
self.sMarket.serviceMarketRecentlyUsedModules["pyfaMarketRecentlyUsedModules"].append(itemID)
|
||||
|
||||
def selectionMade(self, event=None, forcedMetaSelect=None):
|
||||
self.marketBrowser.searchMode = False
|
||||
# Grab the threeview selection and check if it's fine
|
||||
@@ -234,7 +260,7 @@ class ItemView(d.Display):
|
||||
if sel.IsOk():
|
||||
# Get data field of the selected item (which is a marketGroup ID if anything was selected)
|
||||
seldata = self.marketView.GetPyData(sel)
|
||||
if seldata is not None:
|
||||
if seldata is not None and seldata != RECENTLY_USED_MODULES:
|
||||
# If market group treeview item doesn't have children (other market groups or dummies),
|
||||
# then it should have items in it and we want to request them
|
||||
if self.marketView.ItemHasChildren(sel) is False:
|
||||
@@ -246,12 +272,22 @@ class ItemView(d.Display):
|
||||
else:
|
||||
items = set()
|
||||
else:
|
||||
# If method was called but selection wasn't actually made
|
||||
items = set()
|
||||
# If method was called but selection wasn't actually made or we have a hit on recently used modules
|
||||
if seldata == RECENTLY_USED_MODULES:
|
||||
items = self.recentlyUsedModules
|
||||
else:
|
||||
items = set()
|
||||
|
||||
# Fill store
|
||||
self.updateItemStore(items)
|
||||
# Set toggle buttons
|
||||
self.setToggles(forcedMetaSelect=forcedMetaSelect)
|
||||
|
||||
# Set toggle buttons / use search mode flag if recently used modules category is selected (in order to have all modules listed and not filtered)
|
||||
if seldata is not RECENTLY_USED_MODULES:
|
||||
self.setToggles(forcedMetaSelect=forcedMetaSelect)
|
||||
else:
|
||||
self.marketBrowser.searchMode = True
|
||||
self.setToggles()
|
||||
|
||||
# Update filtered items
|
||||
self.filterItemStore()
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ class PyGauge(wx.PyWindow):
|
||||
|
||||
self._oldValue = 0
|
||||
|
||||
self._animDuration = 700
|
||||
self._animDuration = 250
|
||||
self._animStep = 0
|
||||
self._period = 20
|
||||
self._animValue = 0
|
||||
|
||||
@@ -81,7 +81,7 @@ class Fit(object):
|
||||
self.character = Character.getInstance().all0()
|
||||
self.dirtyFitIDs = set()
|
||||
|
||||
serviceFittingDefaultOptions = {"useGlobalCharacter": False, "useGlobalDamagePattern": False, "defaultCharacter": self.character.ID}
|
||||
serviceFittingDefaultOptions = {"useGlobalCharacter": False, "useGlobalDamagePattern": False, "defaultCharacter": self.character.ID, "useGlobalForceReload": False}
|
||||
|
||||
self.serviceFittingOptions = SettingsProvider.getInstance().getSettings("pyfaServiceFittingOptions", serviceFittingDefaultOptions)
|
||||
|
||||
@@ -663,4 +663,5 @@ class Fit(object):
|
||||
|
||||
def recalc(self, fit, withBoosters=False):
|
||||
fit.clear()
|
||||
fit.forceReload = self.serviceFittingOptions["useGlobalForceReload"]
|
||||
fit.calculateModifiedAttributes(withBoosters=withBoosters, dirtyStorage=self.dirtyFitIDs)
|
||||
|
||||
@@ -26,6 +26,8 @@ import Queue
|
||||
import eos.db
|
||||
import eos.types
|
||||
|
||||
from service.settings import SettingsProvider
|
||||
|
||||
try:
|
||||
from collections import OrderedDict
|
||||
except ImportError:
|
||||
@@ -127,6 +129,11 @@ class Market():
|
||||
def __init__(self):
|
||||
self.priceCache = {}
|
||||
|
||||
#Init recently used module storage
|
||||
serviceMarketRecentlyUsedModules = {"pyfaMarketRecentlyUsedModules": []}
|
||||
|
||||
self.serviceMarketRecentlyUsedModules = SettingsProvider.getInstance().getSettings("pyfaMarketRecentlyUsedModules", serviceMarketRecentlyUsedModules)
|
||||
|
||||
# Start price fetcher
|
||||
self.priceWorkerThread = PriceWorkerThread()
|
||||
self.priceWorkerThread.daemon = True
|
||||
|
||||
Reference in New Issue
Block a user