Merge pull request #260 from blitzmann/importStage
Import stage, resolves #93
This commit is contained in:
@@ -42,7 +42,7 @@ from gui.additionsPane import AdditionsPane
|
||||
from gui.marketBrowser import MarketBrowser
|
||||
from gui.multiSwitch import MultiSwitch
|
||||
from gui.statsPane import StatsPane
|
||||
from gui.shipBrowser import ShipBrowser, FitSelected
|
||||
from gui.shipBrowser import ShipBrowser, FitSelected, ImportSelected, Stage3Selected
|
||||
from gui.characterEditor import CharacterEditor
|
||||
from gui.characterSelection import CharacterSelection
|
||||
from gui.patternEditor import DmgPatternEditorDlg
|
||||
@@ -540,8 +540,7 @@ class MainFrame(wx.Frame):
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
ids = tuple(fit.ID for fit in fits)
|
||||
self._openAfterImport(len(fits), ids)
|
||||
self._openAfterImport(fits)
|
||||
|
||||
def exportToClipboard(self, event):
|
||||
CopySelectDict = {CopySelectDialog.copyFormatEft: self.clipboardEft,
|
||||
@@ -571,33 +570,40 @@ class MainFrame(wx.Frame):
|
||||
" "*100, # set some arbitrary spacing to create wifth in window
|
||||
parent=self, style = wx.PD_APP_MODAL | wx.PD_ELAPSED_TIME)
|
||||
self.progressDialog.message = None
|
||||
sFit.importFitsThreaded(dlg.GetPaths(), self.importCallback)
|
||||
sFit.importFitsThreaded(dlg.GetPaths(), self.fileImportCallback)
|
||||
self.progressDialog.ShowModal()
|
||||
dlg.Destroy()
|
||||
|
||||
def importCallback(self, info):
|
||||
def fileImportCallback(self, info, fits=None):
|
||||
"""
|
||||
While importing fits from file, the logic calls back to this function to
|
||||
update progress bar to show activity. If -1, closes dialog. If None,
|
||||
simply Pulse()s progress. If there is a message to show new activity,
|
||||
overwrites cached message and updates dialog
|
||||
update progress bar to show activity. XML files can contain multiple
|
||||
ships with multiple fits, whereas EFT cfg files contain many fits of
|
||||
a single ship. When iterating through the files, we update the message
|
||||
when we start a new file, and then Pulse the progress bar with every fit
|
||||
that is processed.
|
||||
"""
|
||||
|
||||
if info == -1:
|
||||
# Done processing
|
||||
self.progressDialog.Hide()
|
||||
self._openAfterImport(fits)
|
||||
elif info != self.progressDialog.message and info is not None:
|
||||
# New message, overwrite cached message and update
|
||||
self.progressDialog.message = info
|
||||
self.progressDialog.Pulse(info)
|
||||
else:
|
||||
# Simply Pulse() if we don't have anything else to do
|
||||
self.progressDialog.Pulse()
|
||||
|
||||
# @todo: modify _openAfterImport
|
||||
#self._openAfterImport(len(fits), IDs)
|
||||
|
||||
def _openAfterImport(self, importCount, fitIDs):
|
||||
if importCount == 1:
|
||||
wx.PostEvent(self, FitSelected(fitID=fitIDs[0]))
|
||||
|
||||
self.shipBrowser.RefreshContent()
|
||||
def _openAfterImport(self, fits):
|
||||
if len(fits) > 0:
|
||||
if len(fits) == 1:
|
||||
fit = fits[0]
|
||||
wx.PostEvent(self, FitSelected(fitID=fit.ID))
|
||||
wx.PostEvent(self.shipBrowser, Stage3Selected(shipID=fit.shipID, back=True))
|
||||
else:
|
||||
wx.PostEvent(self.shipBrowser, ImportSelected(fits=fits, back=True))
|
||||
|
||||
def backupToXml(self, event):
|
||||
""" Back up all fits to EVE XML file """
|
||||
|
||||
@@ -413,4 +413,4 @@ class SFBrowserItem(wx.Window):
|
||||
self.bkBitmap.state = state
|
||||
self.bkBitmap.sFactor = sFactor
|
||||
self.bkBitmap.eFactor = eFactor
|
||||
self.bkBitmap.mFactor = mFactor
|
||||
self.bkBitmap.mFactor = mFactor
|
||||
|
||||
@@ -29,6 +29,7 @@ Stage1Selected, EVT_SB_STAGE1_SEL = wx.lib.newevent.NewEvent()
|
||||
Stage2Selected, EVT_SB_STAGE2_SEL = wx.lib.newevent.NewEvent()
|
||||
Stage3Selected, EVT_SB_STAGE3_SEL = wx.lib.newevent.NewEvent()
|
||||
SearchSelected, EVT_SB_SEARCH_SEL = wx.lib.newevent.NewEvent()
|
||||
ImportSelected, EVT_SB_IMPORT_SEL = wx.lib.newevent.NewEvent()
|
||||
|
||||
class PFWidgetsContainer(PFListPane):
|
||||
def __init__(self,parent):
|
||||
@@ -323,7 +324,7 @@ class RaceSelector(wx.Window):
|
||||
event.Skip()
|
||||
|
||||
class NavigationPanel(SFItem.SFBrowserItem):
|
||||
def __init__(self,parent, size = (-1,24)):
|
||||
def __init__(self,parent, size = (-1, 24)):
|
||||
SFItem.SFBrowserItem.__init__(self,parent,size = size)
|
||||
|
||||
self.rewBmpH = bitmapLoader.getBitmap("frewind_small","icons")
|
||||
@@ -351,7 +352,7 @@ class NavigationPanel(SFItem.SFBrowserItem):
|
||||
|
||||
self.padding = 4
|
||||
self.lastSearch = ""
|
||||
self.recentSearches = []
|
||||
self.recentSearches = [] # not used?
|
||||
self.inSearch = False
|
||||
|
||||
self.fontSmall = wx.Font(fonts.SMALL, wx.SWISS, wx.NORMAL, wx.NORMAL)
|
||||
@@ -370,23 +371,14 @@ class NavigationPanel(SFItem.SFBrowserItem):
|
||||
|
||||
self.Bind(wx.EVT_SIZE, self.OnResize)
|
||||
|
||||
|
||||
def OnScheduleSearch(self, event):
|
||||
search = self.BrowserSearchBox.GetValue()
|
||||
# Make sure we do not count wildcard as search symbol
|
||||
realsearch = search.replace("*", "")
|
||||
if len(realsearch) < 3 and len(realsearch) >= 0:
|
||||
if self.inSearch == True:
|
||||
self.inSearch = False
|
||||
if len(self.shipBrowser.browseHist) > 0:
|
||||
stage,data = self.shipBrowser.browseHist.pop()
|
||||
self.gotoStage(stage,data)
|
||||
else:
|
||||
if search:
|
||||
wx.PostEvent(self.shipBrowser,SearchSelected(text=search, back = False))
|
||||
self.inSearch = True
|
||||
else:
|
||||
self.inSearch = False
|
||||
if len(realsearch) >= 3:
|
||||
self.lastSearch = search
|
||||
wx.PostEvent(self.shipBrowser,SearchSelected(text=search, back = False))
|
||||
|
||||
|
||||
def ToggleSearchBox(self):
|
||||
if self.BrowserSearchBox.IsShown():
|
||||
@@ -400,8 +392,6 @@ class NavigationPanel(SFItem.SFBrowserItem):
|
||||
self.OnBrowserSearchBoxLostFocus(None)
|
||||
|
||||
def OnBrowserSearchBoxLostFocus(self, event):
|
||||
self.lastSearch = self.BrowserSearchBox.GetValue()
|
||||
self.BrowserSearchBox.ChangeValue("")
|
||||
self.BrowserSearchBox.Show(False)
|
||||
|
||||
def OnBrowserSearchBoxEsc(self, event):
|
||||
@@ -410,7 +400,6 @@ class NavigationPanel(SFItem.SFBrowserItem):
|
||||
else:
|
||||
event.Skip()
|
||||
|
||||
|
||||
def OnResize(self, event):
|
||||
self.Refresh()
|
||||
|
||||
@@ -448,7 +437,7 @@ class NavigationPanel(SFItem.SFBrowserItem):
|
||||
sFit = service.Fit.getInstance()
|
||||
fitID = sFit.newFit(shipID, "%s fit" %shipName)
|
||||
self.shipBrowser.fitIDMustEditName = fitID
|
||||
wx.PostEvent(self.Parent,Stage3Selected(shipID=shipID, back = True))
|
||||
wx.PostEvent(self.Parent,Stage3Selected(shipID=shipID))
|
||||
wx.PostEvent(self.mainFrame, FitSelected(fitID=fitID))
|
||||
|
||||
def OnHistoryReset(self):
|
||||
@@ -459,11 +448,11 @@ class NavigationPanel(SFItem.SFBrowserItem):
|
||||
def OnHistoryBack(self):
|
||||
if len(self.shipBrowser.browseHist) > 0:
|
||||
stage,data = self.shipBrowser.browseHist.pop()
|
||||
self.gotoStage(stage,data)
|
||||
self.gotoStage(stage, data)
|
||||
|
||||
def AdjustChannels(self, bitmap):
|
||||
img = wx.ImageFromBitmap(bitmap)
|
||||
img = img.AdjustChannels(1.05,1.05,1.05,1)
|
||||
img = img.AdjustChannels(1.05, 1.05, 1.05, 1)
|
||||
return wx.BitmapFromImage(img)
|
||||
|
||||
def UpdateElementsPos(self, mdc):
|
||||
@@ -541,10 +530,12 @@ class NavigationPanel(SFItem.SFBrowserItem):
|
||||
elif stage == 2:
|
||||
wx.PostEvent(self.Parent, Stage2Selected(categoryID=data, back=True))
|
||||
elif stage == 3:
|
||||
wx.PostEvent(self.Parent, Stage3Selected(shipID=data, back=1))
|
||||
wx.PostEvent(self.Parent, Stage3Selected(shipID=data))
|
||||
elif stage == 4:
|
||||
self.shipBrowser._activeStage = 4
|
||||
wx.PostEvent(self.Parent, SearchSelected(text=data, back=True))
|
||||
elif stage == 5:
|
||||
wx.PostEvent(self.Parent, ImportSelected(fits=data))
|
||||
else:
|
||||
wx.PostEvent(self.Parent, Stage1Selected())
|
||||
|
||||
@@ -607,6 +598,7 @@ class ShipBrowser(wx.Panel):
|
||||
self.Bind(EVT_SB_STAGE1_SEL, self.stage1)
|
||||
self.Bind(EVT_SB_STAGE3_SEL, self.stage3)
|
||||
self.Bind(EVT_SB_SEARCH_SEL, self.searchStage)
|
||||
self.Bind(EVT_SB_IMPORT_SEL, self.importStage)
|
||||
|
||||
self.mainFrame.Bind(GE.FIT_CHANGED, self.RefreshList)
|
||||
|
||||
@@ -808,13 +800,15 @@ class ShipBrowser(wx.Panel):
|
||||
|
||||
self.lpane.ShowLoading(False)
|
||||
|
||||
if event.back == 0:
|
||||
self.browseHist.append( (2,self._stage2Data) )
|
||||
elif event.back == -1:
|
||||
if len(self.navpanel.recentSearches)>0:
|
||||
# If back is False, do not append to history. This could be us calling
|
||||
# the stage from previous history, creating / copying fit, etc.
|
||||
# We also have to use conditional for search stage since it's last data
|
||||
# is kept elsewhere
|
||||
if getattr(event, "back", False):
|
||||
if self._activeStage == 4 and self.navpanel.lastSearch != "":
|
||||
self.browseHist.append((4, self.navpanel.lastSearch))
|
||||
elif event.back > 0:
|
||||
self.browseHist.append( (2,event.back) )
|
||||
else:
|
||||
self.browseHist.append((self._activeStage, self.lastdata))
|
||||
|
||||
shipID = event.shipID
|
||||
self.lastdata = shipID
|
||||
@@ -867,11 +861,11 @@ class ShipBrowser(wx.Panel):
|
||||
self.navpanel.ShowSwitchEmptyGroupsButton(False)
|
||||
|
||||
if not event.back:
|
||||
if self._activeStage !=4:
|
||||
if len(self.browseHist) >0:
|
||||
self.browseHist.append( (self._activeStage, self.lastdata) )
|
||||
if self._activeStage != 4:
|
||||
if len(self.browseHist) > 0:
|
||||
self.browseHist.append((self._activeStage, self.lastdata))
|
||||
else:
|
||||
self.browseHist.append((1,0))
|
||||
self.browseHist.append((1, 0))
|
||||
self._lastStage = self._activeStage
|
||||
self._activeStage = 4
|
||||
|
||||
@@ -902,6 +896,42 @@ class ShipBrowser(wx.Panel):
|
||||
self.raceselect.Show(False)
|
||||
self.Layout()
|
||||
|
||||
def importStage(self, event):
|
||||
self.lpane.ShowLoading(False)
|
||||
|
||||
self.navpanel.ShowNewFitButton(False)
|
||||
self.navpanel.ShowSwitchEmptyGroupsButton(False)
|
||||
|
||||
if getattr(event, "back", False):
|
||||
self.browseHist.append((self._activeStage, self.lastdata))
|
||||
|
||||
self._lastStage = self._activeStage
|
||||
self._activeStage = 5
|
||||
|
||||
fits = event.fits
|
||||
self.lastdata = fits
|
||||
self.lpane.Freeze()
|
||||
self.lpane.RemoveAllChildren()
|
||||
|
||||
if fits:
|
||||
for fit in fits:
|
||||
self.lpane.AddWidget(FitItem(
|
||||
self.lpane,
|
||||
fit.ID, (
|
||||
fit.ship.item.name,
|
||||
fit.name,
|
||||
fit.booster,
|
||||
fit.timestamp),
|
||||
fit.ship.item.ID))
|
||||
self.lpane.RefreshList(doFocus=False)
|
||||
self.lpane.Thaw()
|
||||
|
||||
self.raceselect.RebuildRaces(self.RACE_ORDER)
|
||||
|
||||
if self.showRacesFilterInStage2Only:
|
||||
self.raceselect.Show(False)
|
||||
self.Layout()
|
||||
|
||||
class PFStaticText(wx.Panel):
|
||||
def __init__(self, parent, label=wx.EmptyString):
|
||||
wx.Panel.__init__ (self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size = parent.GetSize())
|
||||
@@ -1164,7 +1194,7 @@ class ShipItem(SFItem.SFBrowserItem):
|
||||
else:
|
||||
shipName, fittings = self.shipFittingInfo
|
||||
if fittings > 0:
|
||||
wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID, back = -1 if self.shipBrowser.GetActiveStage() == 4 else 0))
|
||||
wx.PostEvent(self.shipBrowser, Stage3Selected(shipID=self.shipID, back=True))
|
||||
else:
|
||||
self.newBtnCB()
|
||||
|
||||
@@ -1576,7 +1606,7 @@ class FitItem(SFItem.SFBrowserItem):
|
||||
sFit = service.Fit.getInstance()
|
||||
fitID = sFit.copyFit(self.fitID)
|
||||
self.shipBrowser.fitIDMustEditName = fitID
|
||||
wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID, back=True))
|
||||
wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID))
|
||||
wx.PostEvent(self.mainFrame, FitSelected(fitID=fitID))
|
||||
|
||||
def renameBtnCB(self):
|
||||
@@ -1619,18 +1649,22 @@ class FitItem(SFItem.SFBrowserItem):
|
||||
self.deleted = True
|
||||
|
||||
sFit = service.Fit.getInstance()
|
||||
fit = sFit.getFit(self.fitID)
|
||||
|
||||
sFit.deleteFit(self.fitID)
|
||||
|
||||
if self.shipBrowser.GetActiveStage() == 4:
|
||||
wx.PostEvent(self.shipBrowser,SearchSelected(text=self.shipBrowser.navpanel.lastSearch,back=True))
|
||||
if self.shipBrowser.GetActiveStage() == 5:
|
||||
if fit in self.shipBrowser.lastdata: # remove fit from import cache
|
||||
self.shipBrowser.lastdata.remove(fit)
|
||||
wx.PostEvent(self.shipBrowser, ImportSelected(fits=self.shipBrowser.lastdata))
|
||||
elif self.shipBrowser.GetActiveStage() == 4:
|
||||
wx.PostEvent(self.shipBrowser, SearchSelected(text=self.shipBrowser.navpanel.lastSearch, back=True))
|
||||
else:
|
||||
wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID, back=True))
|
||||
wx.PostEvent(self.shipBrowser, Stage3Selected(shipID=self.shipID))
|
||||
|
||||
wx.PostEvent(self.mainFrame, FitRemoved(fitID=self.fitID))
|
||||
|
||||
def MouseLeftUp(self, event):
|
||||
|
||||
if self.dragging and self.dragged:
|
||||
self.dragging = False
|
||||
self.dragged = False
|
||||
|
||||
@@ -63,10 +63,10 @@ class FitImportThread(threading.Thread):
|
||||
|
||||
def run(self):
|
||||
sFit = Fit.getInstance()
|
||||
sFit.importFitFromFiles(self.paths, self.callback)
|
||||
fits = sFit.importFitFromFiles(self.paths, self.callback)
|
||||
|
||||
# Send done signal to GUI
|
||||
wx.CallAfter(self.callback, -1)
|
||||
wx.CallAfter(self.callback, -1, fits)
|
||||
|
||||
|
||||
class Fit(object):
|
||||
@@ -810,7 +810,11 @@ class Fit(object):
|
||||
eos.db.save(fit)
|
||||
IDs.append(fit.ID)
|
||||
if callback: # Pulse
|
||||
wx.CallAfter(callback, "Saving fit\n%d/%d"%(i+1, numFits))
|
||||
wx.CallAfter(
|
||||
callback,
|
||||
"Processing complete, saving fits to database\n(%d/%d)" %
|
||||
(i+1, numFits)
|
||||
)
|
||||
|
||||
return fits
|
||||
|
||||
|
||||
Reference in New Issue
Block a user