diff --git a/aboutData.py b/aboutData.py index 63714c1d0..4f92be77c 100644 --- a/aboutData.py +++ b/aboutData.py @@ -17,7 +17,7 @@ # along with pyfa. If not, see . #=============================================================================== -versionString = "0.0.1" +versionString = "1.0 pre-alpha" license = "GNU GPL" licenseLocation = "gpl.txt" developers = ("cncfanatics" , "DarkPhoenix", "Darriele") diff --git a/config.py b/config.py index c02d78a94..c3dd90bfe 100644 --- a/config.py +++ b/config.py @@ -18,4 +18,4 @@ gamedata = os.path.join(homePath, "eve.db") # saveddata db location modifier, shouldn't ever need to touch this import eos.config eos.config.saveddata_connectionstring = "sqlite:///" + saveddata -eos.config.saveddata_connectionstring = "sqlite:///" + gamedata \ No newline at end of file +eos.config.gamedata_connectionstring = "sqlite:///" + gamedata \ No newline at end of file diff --git a/gui/characterEditor.py b/gui/characterEditor.py index a9eff4a5e..0f19b63c0 100644 --- a/gui/characterEditor.py +++ b/gui/characterEditor.py @@ -421,7 +421,6 @@ class ImplantsTreeView (wx.Panel): self.pluggedImplantsTree.update(self.implants) def charChanged(self, event): - print "charChanged" cChar = service.Character.getInstance() charID = self.Parent.Parent.getActiveCharacter() name = cChar.getCharName(charID) @@ -533,7 +532,12 @@ class APIView (wx.Panel): pmainSizer.Add(self.btnFetchSkills, 0, wx.ALL, 5) self.btnFetchSkills.Hide() self.btnFetchSkills.Bind(wx.EVT_BUTTON, self.fetchSkills) + self.stAPITip = wx.StaticText( self, wx.ID_ANY, u"Your API info is available at:", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stAPITip.Wrap( -1 ) + pmainSizer.Add( self.stAPITip, 0, wx.ALL, 5 ) + self.hlEveAPI = wx.HyperlinkCtrl( self, wx.ID_ANY, u"http://www.eveonline.com/api/default.asp", u"http://www.eveonline.com/api/default.asp", wx.DefaultPosition, wx.DefaultSize, wx.HL_DEFAULT_STYLE ) + pmainSizer.Add( self.hlEveAPI, 0, wx.ALL, 5 ) self.SetSizer(pmainSizer) self.Layout() self.charChanged(None) diff --git a/gui/fittingView.py b/gui/fittingView.py index 75419f050..3f5dce7ee 100644 --- a/gui/fittingView.py +++ b/gui/fittingView.py @@ -49,6 +49,24 @@ class FittingView(d.Display): self.activeFitID = None + self.Bind(wx.EVT_KEY_UP, self.kbEvent) + + def kbEvent(self,event): + keycode = event.GetKeyCode() + if keycode == wx.WXK_DELETE or keycode == wx.WXK_NUMPAD_DELETE: + row = self.GetFirstSelected() + firstSel = row + while row != -1: + cFit = service.Fit.getInstance() + populate = cFit.removeModule(self.activeFitID, self.mods[self.GetItemData(row)].position) + self.Select(row,0) + row = self.GetNextSelected(row) + if populate is not None: + self.Select(firstSel) + if populate: self.slotsChanged() + wx.PostEvent(self.mainFrame, FitChanged(fitID=self.activeFitID)) + + event.Skip() #Gets called from the fitMultiSwitch when it decides its time def changeFit(self, fitID): self.activeFitID = fitID diff --git a/gui/implantView.py b/gui/implantView.py index bec0da1af..42c1bd2cd 100644 --- a/gui/implantView.py +++ b/gui/implantView.py @@ -32,7 +32,18 @@ class ImplantView(d.Display): self.mainFrame.Bind(fv.FIT_CHANGED, self.fitChanged) self.mainFrame.Bind(mb.ITEM_SELECTED, self.addItem) self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem) + self.Bind(wx.EVT_KEY_UP, self.kbEvent) + def kbEvent(self,event): + keycode = event.GetKeyCode() + if keycode == wx.WXK_DELETE or keycode == wx.WXK_NUMPAD_DELETE: + fitID = self.mainFrame.getActiveFit() + cFit = service.Fit.getInstance() + row = self.GetFirstSelected() + if row != -1: + cFit.removeImplant(fitID, self.GetItemData(row)) + row = self.GetNextSelected(row) + wx.PostEvent(self.mainFrame, fv.FitChanged(fitID=fitID)) def fitChanged(self, event): cFit = service.Fit.getInstance() fit = cFit.getFit(event.fitID) diff --git a/gui/itemStats.py b/gui/itemStats.py index d4773e8cc..9f52463de 100644 --- a/gui/itemStats.py +++ b/gui/itemStats.py @@ -54,8 +54,9 @@ class ItemStatsDialog(wx.Dialog): if item.icon is not None: before,sep,after = item.icon.iconFile.rpartition("_") iconFile = "%s%s%s" % (before,sep,"0%s" % after if len(after) < 2 else after) - - self.SetIcon(wx.IconFromBitmap(bitmapLoader.getBitmap(iconFile, "pack"))) + itemImg = bitmapLoader.getBitmap(iconFile, "pack") + if itemImg is not None: + self.SetIcon(wx.IconFromBitmap(itemImg)) self.SetTitle("%s: %s" % ("%s stats" % context.capitalize() if context is not None else "Stats", item.name)) self.SetMinSize((300, 200)) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 5c2a23b69..0df0a5a2a 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -104,7 +104,8 @@ class ShipBrowser(wx.Panel): if data is not None: type, fitID = data if type == "fit": - wx.PostEvent(self.mainFrame, FitSelected(fitID=fitID)) + if self.mainFrame.getActiveFit() != fitID: + wx.PostEvent(self.mainFrame, FitSelected(fitID=fitID)) event.Skip() @@ -154,7 +155,7 @@ class ShipBrowser(wx.Panel): iconId = self.raceImageIds[race] if race in self.raceImageIds else -1 self.idRaceMap[id] = race childId = tree.AppendItem(root, name, iconId, data=wx.TreeItemData(("ship", id))) - for fitID, fitName in cFit.getFitsWithShip(id): + for fitID, fitName in cFit.getFitsWithShip(id): tree.AppendItem(childId, fitName, self.fitIconId, data=wx.TreeItemData(("fit", fitID))) tree.SortChildren(root) @@ -191,6 +192,7 @@ class ShipBrowser(wx.Panel): event.Skip() def changeFitName(self, event): + self.triggerFitSelect(event) if event.IsEditCancelled(): return @@ -286,7 +288,7 @@ class ShipBrowser(wx.Panel): event.Skip() def startSearch(self, event): - + search = self.shipMenu.search.GetLineText(0) if len(search) < 3: self.clearSearch(event, False) @@ -311,7 +313,7 @@ class ShipBrowser(wx.Panel): iconId = self.raceImageIds[race] if race in self.raceImageIds else -1 self.idRaceMap[id] = race childId = self.searchView.AppendItem(self.searchRoot, name, iconId, data=wx.TreeItemData(("ship", id))) - for fitID, fitName in cFit.getFitsWithShip(id): + for fitID, fitName in cFit.getFitsWithShip(id): self.searchView.AppendItem(childId, fitName, self.fitIconId, data=wx.TreeItemData(("fit", fitID))) foundFits = cMarket.searchFits(search)