Merge branch 'master' of evefit.org:pyfa

This commit is contained in:
DarkPhoenix
2011-12-14 22:53:01 +04:00
7 changed files with 82 additions and 13 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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