From ea55456ea6a10806f99e73eeede3adde97a8b33c Mon Sep 17 00:00:00 2001 From: cncfanatics Date: Mon, 25 Oct 2010 16:01:36 +0200 Subject: [PATCH 01/62] Experimental shipBrowser changes --- gui/shipBrowser.py | 793 ++++++++++++++++++++++----------------------- 1 file changed, 390 insertions(+), 403 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index a18bf942d..cb29e9da0 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -1,430 +1,417 @@ import wx +import copy +from gui import bitmapLoader import service -import bitmapLoader -import gui.mainFrame -import wx.lib.newevent -FitCreated, EVT_FIT_CREATED = wx.lib.newevent.NewEvent() FitRenamed, EVT_FIT_RENAMED = wx.lib.newevent.NewEvent() -FitRemoved, EVT_FIT_REMOVED = wx.lib.newevent.NewEvent() FitSelected, EVT_FIT_SELECTED = wx.lib.newevent.NewEvent() +FitRemoved, EVT_FIT_REMOVED = wx.lib.newevent.NewEvent() class ShipBrowser(wx.Panel): def __init__(self, parent): - wx.Panel.__init__(self, parent) + wx.Panel.__init__ (self, parent) - self.built = False - self.viewSizer = wx.BoxSizer(wx.VERTICAL) - self.SetSizer(self.viewSizer) + self._lastWidth = 0 + self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize) - self.shipMenu = ShipMenu(self) - self.viewSizer.Add(self.shipMenu, 0, wx.EXPAND) + mainSizer = wx.BoxSizer(wx.VERTICAL) + hpane = HeaderPane(self) + mainSizer.Add(hpane, 0, wx.EXPAND) - self.searchView = ShipView(self) - #self.viewSizer.Add(self.searchView, 1, wx.EXPAND) - self.searchView.Hide() + self.lpane = ListPane(self) + mainSizer.Add(self.lpane, 1, wx.EXPAND) + self.SetSizer(mainSizer) + self.Layout() + self.Show() - self.shipView = ShipView(self) - self.viewSizer.Add(self.shipView, 1, wx.EXPAND) - - self.shipImageList = wx.ImageList(16, 16) - self.shipView.SetImageList(self.shipImageList) - self.searchView.SetImageList(self.shipImageList) - - self.shipRoot = self.shipView.AddRoot("Ships") - self.searchRoot = self.searchView.AddRoot("Ships") - - self.raceImageIds = {} - self.races = ["amarr", "caldari", "gallente", "minmatar", "ore", "serpentis", "angel", "blood", "sansha", "guristas"] - for race in self.races: - imageId = self.shipImageList.Add(bitmapLoader.getBitmap("race_%s_small" % race, "icons")) - self.raceImageIds[race] = imageId - self.fitIconId = self.shipImageList.Add(bitmapLoader.getBitmap("fit_small", "icons")) - self.races.append("None") - self.idRaceMap = {} - - self.shipView.races = self.races - self.shipView.idRaceMap = self.idRaceMap - - self.searchView.races = self.races - self.searchView.idRaceMap = self.idRaceMap - - self.build() - - #Bind our lookup methods for our trees - for tree in (self.shipView, self.searchView): - tree.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.expandLookup) - tree.Bind(wx.EVT_TREE_SEL_CHANGED, self.toggleButtons) - tree.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.changeFitName) - tree.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.triggerFitSelect) - - #Bind buttons - self.shipMenu.new.Bind(wx.EVT_BUTTON, self.newFit) - self.shipMenu.rename.Bind(wx.EVT_BUTTON, self.renameFit) - self.shipMenu.delete.Bind(wx.EVT_BUTTON, self.deleteFit) - self.shipMenu.copy.Bind(wx.EVT_BUTTON, self.copyFit) - - #Bind search - self.shipMenu.search.Bind(wx.EVT_TEXT_ENTER, self.scheduleSearch) - self.shipMenu.search.Bind(wx.EVT_SEARCHCTRL_SEARCH_BTN, self.scheduleSearch) - self.shipMenu.search.Bind(wx.EVT_SEARCHCTRL_CANCEL_BTN, self.clearSearch) - self.shipMenu.search.Bind(wx.EVT_TEXT, self.scheduleSearch) - self.Bind(wx.EVT_TIMER, self.startSearch) - - self.searchTimer = wx.Timer(self) - - self.timer = None - - self.mainFrame = gui.mainFrame.MainFrame.getInstance() - - def build(self): - if not self.built: - self.built = True - cMarket = service.Market.getInstance() - shipRoot = cMarket.getShipRoot() - iconId = self.shipImageList.Add(bitmapLoader.getBitmap("ship_small", "icons")) - for id, name in shipRoot: - childId = self.shipView.AppendItem(self.shipRoot, name, iconId, data=wx.TreeItemData(("group", id))) - self.shipView.AppendItem(childId, "dummy") - - self.shipView.SortChildren(self.shipRoot) - - def getActiveTree(self): - if self.searchView: - if self.searchView.IsShown(): - return self.searchView - else: - return self.shipView - - def triggerFitSelect(self, event): - selection = event.Item - if selection.IsOk(): - tree = self.getActiveTree() - data = tree.GetPyData(selection) - if data is not None: - type, fitID = data - if type == "fit": - if self.mainFrame.getActiveFit() != fitID: - wx.PostEvent(self.mainFrame, FitSelected(fitID=fitID)) + self.lpane.Refresh() + self.Centre(wx.BOTH) + self.Bind(wx.EVT_SIZE, self.SizeRefreshList) + self.stage1() + def SizeRefreshList(self, event): + ewidth, eheight = event.GetSize() +## if ewidth != self._lastWidth: +## self._lastWidth = ewidth + self.lpane.Refresh() event.Skip() - def toggleButtons(self, event): - tree = self.getActiveTree() - if tree is None: - return - root = tree.GetSelection() - btns = (self.shipMenu.new, self.shipMenu.rename, self.shipMenu.delete, self.shipMenu.copy) - if not root.IsOk(): - for btn in btns: - btn.Enable(False) - else: - data = tree.GetPyData(root) - if data is None: - return - - type, fitID = data - if type == "fit": - for btn in btns: - btn.Enable() - - elif type == "ship": - for btn in btns: - btn.Enable(btn == self.shipMenu.new) - - else: - for btn in btns: - btn.Enable(False) - - event.Skip() - - def expandLookup(self, event): - tree = self.getActiveTree() - root = event.Item - child, cookie = tree.GetFirstChild(root) - self.idRaceMap.clear() - if tree.GetItemText(child) == "dummy": - tree.Delete(child) - - cMarket = service.Market.getInstance() - cFit = service.Fit.getInstance() - - type, groupID = tree.GetPyData(root) - if type == "group": - for id, name, race in cMarket.getShipList(groupID): - 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): - tree.AppendItem(childId, fitName, self.fitIconId, data=wx.TreeItemData(("fit", fitID))) - - tree.SortChildren(root) - - event.Skip() - - def newFit(self, event): - tree = self.getActiveTree() - root = tree.GetSelection() - if not root.IsOk(): - return - - type, shipID = tree.GetPyData(root) - cFit = service.Fit.getInstance() - noChildren = False - if type == "fit": - fit = cFit.getFit(shipID) - type, shipID = "ship", fit.ship.item.ID - name = "%s fit" % fit.ship.item.name - if tree == self.searchView: - root = self.searchRoot - noChildren = True - else: - name = "%s fit" % tree.GetItemText(root) - - fitID = cFit.newFit(shipID, name) - childId = tree.AppendItem(root, name, self.fitIconId, data=wx.TreeItemData(("fit", fitID))) - tree.SetItemText(childId, name) - if not noChildren: - tree.SortChildren(root) - tree.Expand(root) - - tree.SelectItem(childId) - tree.EditLabel(childId) - - wx.PostEvent(self.mainFrame, FitCreated(fitID=fitID)) - - def renameFit(self, event): - tree = self.getActiveTree() - root = tree.GetSelection() - type, _ = tree.GetPyData(root) - if type == "fit": - tree.EditLabel(root) - - event.Skip() - - def changeFitName(self, event): - self.triggerFitSelect(event) - if event.IsEditCancelled(): - return - - tree = self.getActiveTree() - item = event.Item - newName = event.Label - type, fitID = tree.GetPyData(item) - cFit = service.Fit.getInstance() - cFit.renameFit(fitID, newName) - - if tree == self.searchView: - def checkRename(item): - type, id = tree.GetPyData(item) - if type == "fit" and id == fitID: - if tree.GetItemParent(item) == self.searchRoot: - tree.SetItemText(item, "%s (%s)" % (newName, cFit.getFit(fitID).ship.item.name)) - else: - tree.SetItemText(item, newName) - - self.checkSearchView(checkRename) - - wx.CallAfter(tree.SortChildren, tree.GetItemParent(item)) - - wx.PostEvent(self.mainFrame, FitRenamed(fitID=fitID)) - - def deleteFit(self, event): - tree = self.getActiveTree() - root = tree.GetSelection() - type, fitID = tree.GetPyData(root) - if type == "fit": - cFit = service.Fit.getInstance() - cFit.deleteFit(fitID) - tree.Delete(root) - - if tree == self.searchView: - def checkRemoval(item): - type, id = tree.GetPyData(item) - if type == "fit" and id == fitID: - tree.Delete(item) - - self.checkSearchView(checkRemoval) - wx.PostEvent(self.mainFrame, FitRemoved(fitID=fitID)) - - def checkSearchView(self, callback): - tree = self.searchView - item, cookie = tree.GetFirstChild(self.searchRoot) - while item.IsOk(): - type, id = tree.GetPyData(item) - if type == "ship": - child, childCookie = tree.GetFirstChild(item) - while child.IsOk(): - callback(child) - child, childCookie = tree.GetNextChild(child, childCookie) - - callback(item) - item, cookie = tree.GetNextChild(item, cookie) - - def copyFit(self, event): - tree = self.getActiveTree() - root = tree.GetSelection() - type, fitID = tree.GetPyData(root) - if type == "fit": - cFit = service.Fit.getInstance() - newID = cFit.copyFit(fitID) - parent = tree.GetItemParent(root) - newFit= cFit.getFit(newID) - name = newFit.name - iconID = tree.GetItemImage(root) - childId = tree.AppendItem(parent, name, iconID, data=wx.TreeItemData(("fit", newID))) - tree.SetItemText(childId, name) - tree.SelectItem(childId) - tree.EditLabel(childId) - - wx.PostEvent(self.mainFrame, FitCreated(fitID=newID)) - - def scheduleSearch(self, event): - self.searchTimer.Stop() - self.searchTimer.Start(50, wx.TIMER_ONE_SHOT) - event.Skip() - - def clearSearch(self, event, clearText=True): - if self.getActiveTree() == self.searchView: - if clearText: - self.shipMenu.search.Clear() - - self.viewSizer.Replace(self.searchView, self.shipView) - - self.shipView.Show() - self.searchView.Hide() - - self.viewSizer.Layout() - - event.Skip() - - def startSearch(self, event): - - search = self.shipMenu.search.GetLineText(0) - if len(search) < 3: - self.clearSearch(event, False) - return - - self.viewSizer.Replace(self.shipView, self.searchView) - - self.shipView.Hide() - self.searchView.Show() - - self.viewSizer.Layout() - - #GTFO OLD STOOF - self.searchView.DeleteAllItems() - self.searchRoot = self.searchView.AddRoot("Search") - - #Get NEW STOOF - cMarket = service.Market.getInstance() - cFit = service.Fit.getInstance() - - for id, name, race in cMarket.searchShips(search): - 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): - self.searchView.AppendItem(childId, fitName, self.fitIconId, data=wx.TreeItemData(("fit", fitID))) - - foundFits = cMarket.searchFits(search) - if foundFits: - for id, name, shipName in foundFits: - rowText = "{0} ({1})".format(name, shipName) - self.searchView.AppendItem(self.searchRoot, rowText, self.fitIconId, data=wx.TreeItemData(("fit", id))) - - self.searchView.SortChildren(self.searchRoot) - - #To make sure that the shipView stays in sync, we'll clear its fits data - root = self.shipRoot - child, cookie = self.shipView.GetFirstChild(root) - while child.IsOk(): - self.shipView.DeleteChildren(child) - self.shipView.AppendItem(child, "dummy") - self.shipView.Collapse(child) - child, cookie = self.shipView.GetNextChild(root, cookie) - - if event is not None: - event.Skip() - - def getSelectedFitID(self): - tree = self.getActiveTree() - selection = tree.GetSelection() - if selection.IsOk(): - data = tree.GetPyData(selection) - if data is not None: - type, fitID = data - if type == "fit": - return fitID - - -class ShipView(wx.TreeCtrl): - def __init__(self, parent): - wx.TreeCtrl.__init__(self, parent, style=wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT | wx.TR_EDIT_LABELS) - self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.vetoEdit) - self.rename = False - - def OnCompareItems(self, treeId1, treeId2): - child, cookie = self.GetFirstChild(treeId1) - type1, id1 = self.GetPyData(treeId1) - type2, id2 = self.GetPyData(treeId2) - if type1 != type2: - order = ["group", "ship", "fit"] - return cmp(order.index(type1), order.index(type2)) - - if type1 in ("fit", "group"): - return cmp(self.GetItemText(treeId1), self.GetItemText(treeId2)) - else: - c = cmp(self.races.index(self.idRaceMap.get(id1) or "None"), self.races.index(self.idRaceMap.get(id2) or "None")) - if c != 0: - return c - else: - return cmp(self.GetItemText(treeId1), self.GetItemText(treeId2)) - - def OnEraseBackGround(self, event): - #Prevent flicker by not letting the parent's method get called. + def __del__(self): pass - def EditLabel(self, childId): - self.rename = True - wx.TreeCtrl.EditLabel(self, childId) + def stage1(self): + sMarket = service.Market.getInstance() + self.lpane.RemoveAllChildren() + for ID, name in sMarket.getShipRoot(): + self.lpane.AddWidget(CategoryItem(self.lpane, ID, (name, 0))) - def vetoEdit(self, event): - if not self.rename: - event.Veto() + self.Layout() + self.Show() - self.rename = False + def stage2(self, categoryID): + sMarket = service.Market.getInstance() + self.lpane.RemoveAllChildren() + for ID, name, race in sMarket.getShipList(categoryID): + self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, 0), race)) -class ShipMenu(wx.Panel): + self.Layout() + self.Show() + +class HeaderPane (wx.Panel): def __init__(self, parent): - wx.Panel.__init__(self, parent) - self.parent = parent - sizer = wx.BoxSizer(wx.HORIZONTAL) - self.SetSizer(sizer) + wx.Panel.__init__ (self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size(500, 32), style=wx.TAB_TRAVERSAL) - size = None - for name, art in (("new", wx.ART_NEW), ("rename", bitmapLoader.getBitmap("rename", "icons")), ("copy", wx.ART_COPY), ("delete", wx.ART_DELETE)): - bitmap = wx.ArtProvider.GetBitmap(art, wx.ART_BUTTON) if name != "rename" else art - btn = wx.BitmapButton(self, wx.ID_ANY, bitmap) - if size is None: - size = btn.GetSize() + bSizer3 = wx.BoxSizer(wx.VERTICAL) + self.stHeader = wx.StaticText(self, wx.ID_ANY, u"Header --->", wx.DefaultPosition, wx.DefaultSize, 0) + self.stHeader.Wrap(-1) + bSizer3.Add(self.stHeader, 0, wx.ALL | wx.EXPAND, 5) - btn.SetMinSize(size) - btn.SetMaxSize(size) +class ListPane (wx.ScrolledWindow): + def __init__(self, parent): + wx.ScrolledWindow.__init__ (self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size(500, 300), style=wx.TAB_TRAVERSAL) + self._wList = [] + self._wCount = 0 + self.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW)) - btn.Layout() - setattr(self, name, btn) - btn.Enable(False) - btn.SetToolTipString("%s fit" % name.capitalize()) - sizer.Add(btn, 0, wx.EXPAND) - p = wx.Panel(self) - psizer = wx.BoxSizer(wx.HORIZONTAL) - p.SetSizer(psizer) + self.SetVirtualSize((1, 1)) + self.SetScrollRate(0, 1) + self.Bind(wx.EVT_SCROLLWIN_LINEUP, self.MScrollUp) + self.Bind(wx.EVT_SCROLLWIN_LINEDOWN, self.MScrollDown) - self.search = wx.SearchCtrl(p, wx.ID_ANY, style=wx.TE_PROCESS_ENTER) - self.search.ShowCancelButton(True) - psizer.Add(self.search, 1, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL) -# p.SetMinSize((wx.SIZE_AUTO_WIDTH, 27)) - sizer.Add(p, 1, wx.EXPAND) + def MScrollUp(self, event): + + posy = self.GetScrollPos(wx.VERTICAL) + posy -= 2 + self.Scroll(0, posy) + self.Refresh() + event.Skip() + + def MScrollDown(self, event): + + posy = self.GetScrollPos(wx.VERTICAL) + posy += 2 + self.Scroll(0, posy) + self.Refresh() + event.Skip() + + + def AddWidget(self, widget): + widget.Reparent(self) + self._wList.append(widget) + self._wCount += 1 + + def Refresh(self): + ypos = 0 + cwidth, cheight = self.GetClientSize() + for i in xrange(self._wCount): + xa, ya = self.CalcScrolledPosition((0, ypos)) + iwidth, iheight = self._wList[i].GetSize() + self._wList[i].SetPosition((xa, ya)) + self._wList[i].SetSize((cwidth, iheight)) + + ypos += iheight + + self._wList[i].Show() + self._wList[i].Refresh() + self.SetVirtualSize((1, ypos)) + + def RemoveAllChildren(self): + for widget in self._wList: + self.RemoveChild(widget) + widget.Hide() + widget.Destroy() + +class CategoryItem(wx.Window): + def __init__(self, parent, categoryID, shipFittingInfo, + id=wx.ID_ANY, range=100, pos=wx.DefaultPosition, + size=(-1,16), style=0): + wx.Window.__init__(self, parent, id, pos, size, style) + + if categoryID: + self.shipBmp = bitmapLoader.getBitmap("ship_small","icons") + else: + self.shipBmp = wx.EmptyBitmap(16,16) + + self.categoryID = categoryID + self.shipFittingInfo = shipFittingInfo + self.shipName, dummy = shipFittingInfo + self.width,self.height = size + + self.highlighted = 0 + self.editWasShown = 0 + + + self.Bind(wx.EVT_PAINT, self.OnPaint) + self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) + self.Bind(wx.EVT_LEFT_UP, self.checkPosition) + self.Bind(wx.EVT_ENTER_WINDOW, self.enterW) + self.Bind(wx.EVT_LEAVE_WINDOW, self.leaveW) + + self.shipBrowser = self.Parent.Parent + + def checkPosition(self, event): + + pos = event.GetPosition() + x,y = pos + self.shipBrowser.stage2(self.categoryID) + event.Skip() + + def enterW(self,event): + self.highlighted = 1 + self.Refresh() + event.Skip() + + def leaveW(self,event): + self.highlighted = 0 + self.Refresh() + event.Skip() + + + def OnEraseBackground(self, event): + pass + + def OnPaint(self,event): + rect = self.GetRect() + + canvas = wx.EmptyBitmap(rect.width, rect.height) + mdc = wx.BufferedPaintDC(self) + mdc.SelectObject(canvas) + r = copy.copy(rect) + r.top = 0 + r.left = 0 + r.height = r.height / 2 + if self.highlighted: + mdc.SetBackground(wx.Brush(wx.SystemSettings_GetColour(wx.SYS_COLOUR_HIGHLIGHT))) + mdc.Clear() + mdc.SetTextForeground(wx.SystemSettings_GetColour(wx.SYS_COLOUR_HIGHLIGHTTEXT)) + else: + mdc.SetBackground(wx.Brush(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW))) + mdc.SetTextForeground(wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOWTEXT )) + mdc.Clear() + + mdc.DrawBitmap(self.shipBmp,5+(rect.height-self.shipBmp.GetHeight())/2,(rect.height-self.shipBmp.GetWidth())/2,0) + mdc.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD, False)) + + + + shipName, fittings = self.shipFittingInfo + + + + xpos = self.shipBmp.GetWidth() + 10 + + xtext, ytext = mdc.GetTextExtent(shipName) + ypos = (rect.height - ytext) / 2 + mdc.DrawText(shipName, xpos, ypos) + xpos+=xtext+5 + + mdc.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) + + if fittings <1: + fformat = "No fittings" + else: + if fittings == 1: + fformat = "%d fitting" + else: + fformat = "%d fittings" + + if fittings>0: + xtext, ytext = mdc.GetTextExtent(fformat % fittings) + ypos = (rect.height - ytext)/2 + else: + xtext, ytext = mdc.GetTextExtent(fformat) + ypos = (rect.height - ytext)/2 + + #seems that a scrolled window without scrollbars shown always HasScrollbar >< + + if self.Parent.HasScrollbar(wx.VERTICAL): + addX = 20 + else: + addX = 20 + + fPosX = rect.width - addX - xtext + fPosY = (rect.height -ytext)/2 + if fittings > 0: + mdc.DrawText(fformat % fittings, fPosX, fPosY) + else: + mdc.DrawText(fformat, fPosX, fPosY) + + event.Skip() + + def Destroy(self): + self.Unbind(wx.EVT_PAINT) + self.Unbind(wx.EVT_ERASE_BACKGROUND) + self.Unbind(wx.EVT_LEFT_UP) + self.Unbind(wx.EVT_ENTER_WINDOW) + self.Unbind(wx.EVT_LEAVE_WINDOW) + self.Close() + + +class ShipItem(wx.Window): + def __init__(self, parent, shipID=None, shipFittingInfo=("Test", 2), itemData=None, + id=wx.ID_ANY, range=100, pos=wx.DefaultPosition, + size=(-1, 38), style=0): + wx.Window.__init__(self, parent, id, pos, size, style) + + self._itemData = itemData + + self.shipBmp = wx.EmptyBitmap(32, 32) + self.shipFittingInfo = shipFittingInfo + self.shipName, dummy = shipFittingInfo + self.newBmp = bitmapLoader.getBitmap("add_small", "icons") + + self.Bind(wx.EVT_PAINT, self.OnPaint) + self.editPosX = 0 + self.editPosY = 0 + self.highlighted = 0 + self.editWasShown = 0 + + self.tcFitName = wx.TextCtrl(self, wx.ID_ANY, "%s fit" % self.shipName, wx.DefaultPosition, wx.DefaultSize, wx.TE_PROCESS_ENTER) + self.tcFitName.Show(False) + + self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) + + self.Bind(wx.EVT_LEFT_UP, self.checkPosition) + self.Bind(wx.EVT_MOTION, self.cursorCheck) + + self.Bind(wx.EVT_ENTER_WINDOW, self.enterW) + self.Bind(wx.EVT_LEAVE_WINDOW, self.leaveW) + + self.tcFitName.Bind(wx.EVT_TEXT_ENTER, self.createNewFit) + self.tcFitName.Bind(wx.EVT_KILL_FOCUS, self.editLostFocus) + self.tcFitName.Bind(wx.EVT_KEY_DOWN, self.editCheckEsc) + + def SetData(self, data): + self._itemData = data + + def GetData(self): + return self._itemData + + def editLostFocus(self, event): + self.tcFitName.Show(False) + if self.highlighted == 1: + self.editWasShown = 1 + + def editCheckEsc(self, event): + if event.GetKeyCode() == wx.WXK_ESCAPE: + self.tcFitName.Show(False) + self.editWasShown = 0 + else: + event.Skip() + + def cursorCheck(self, event): + pos = event.GetPosition() + if self.NHitTest((self.editPosX, self.editPosY), pos, (16, 16)): + self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) + else: + self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) + def checkPosition(self, event): + + pos = event.GetPosition() + x, y = pos + if self.NHitTest((self.editPosX, self.editPosY), pos, (16, 16)): + if self.editWasShown == 1: + self.createNewFit() + return + else: + self.Refresh() + fnEditSize = self.tcFitName.GetSize() + wSize = self.GetSize() + fnEditPosX = self.editPosX - fnEditSize.width - 5 + fnEditPosY = (wSize.height - fnEditSize.height) / 2 + self.tcFitName.SetPosition((fnEditPosX, fnEditPosY)) + self.tcFitName.Show(True) + self.tcFitName.SetFocus() + self.tcFitName.SelectAll() + return + + if (not self.NHitTest((self.editPosX, self.editPosY), pos, (16, 16))): + self.editWasShown = 0 + self.Refresh() + + + event.Skip() + + def createNewFit(self, event=None): + print "New :", self.tcFitName.GetValue(), "GTFO from stage2 to stage 3 (refresh stage 3)" + self.tcFitName.Show(False) + self.editWasShown = 0 + + def NHitTest(self, target, position, area): + x, y = target + px, py = position + aX, aY = area + if (px > x and px < x + aX) and (py > y and py < y + aY): + return True + return False + def enterW(self, event): + self.highlighted = 1 + self.Refresh() + event.Skip() + + def leaveW(self, event): + self.highlighted = 0 + self.Refresh() + event.Skip() + + def OnEraseBackground(self, event): + pass + + def OnPaint(self, event): + rect = self.GetRect() + + canvas = wx.EmptyBitmap(rect.width, rect.height) + mdc = wx.BufferedPaintDC(self) + mdc.SelectObject(canvas) + r = copy.copy(rect) + r.top = 0 + r.left = 0 + r.height = r.height / 2 + if self.highlighted: + mdc.SetBackground(wx.Brush(wx.SystemSettings_GetColour(wx.SYS_COLOUR_HIGHLIGHT))) + mdc.Clear() + mdc.SetTextForeground(wx.SystemSettings_GetColour(wx.SYS_COLOUR_HIGHLIGHTTEXT)) +## +## sr = 221 +## sg = 221 +## sb = 221 +## +## startColor = (sr,sg,sb) +## +## mdc.GradientFillLinear(r,startColor,wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW),wx.SOUTH) +## r.top = r.height +## mdc.GradientFillLinear(r,startColor,wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW),wx.NORTH) +## mdc.SetTextForeground(wx.BLACK) + mdc.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD, False)) + else: + mdc.SetBackground(wx.Brush(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW))) + mdc.SetTextForeground(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)) + mdc.Clear() + mdc.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD, False)) +# mdc.DrawBitmap(self.effBmp,5+(rect.height-40)/2,(rect.height-40)/2,0) + mdc.DrawBitmap(self.shipBmp, 5 + (rect.height - 32) / 2, (rect.height - 32) / 2, 0) + + + + + shipName, fittings = self.shipFittingInfo + + + ypos = (rect.height - 32) / 2 + textStart = 48 + xtext, ytext = mdc.GetTextExtent(shipName) + mdc.DrawText(shipName, textStart, ypos) + ypos += ytext + + mdc.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) + + xtext, ytext = mdc.GetTextExtent("%d fitting(s)") + mdc.DrawText("%d fitting(s)" % fittings, textStart, ypos) + mdc.SetFont(wx.Font(7, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) + + self.editPosX = rect.width - 20 + self.editPosY = (rect.height - 16) / 2 + mdc.DrawBitmap(self.newBmp, self.editPosX, self.editPosY, 0) + event.Skip() From 4c30a1a7a09bacc216fb796a1c801819bf6055a7 Mon Sep 17 00:00:00 2001 From: cncfanatics Date: Mon, 25 Oct 2010 16:04:26 +0200 Subject: [PATCH 02/62] More experimental changes --- gui/shipBrowser.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index cb29e9da0..8897dbc58 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -45,7 +45,7 @@ class ShipBrowser(wx.Panel): for ID, name in sMarket.getShipRoot(): self.lpane.AddWidget(CategoryItem(self.lpane, ID, (name, 0))) - self.Layout() + self.lpane.Layout() self.Show() def stage2(self, categoryID): @@ -54,7 +54,7 @@ class ShipBrowser(wx.Panel): for ID, name, race in sMarket.getShipList(categoryID): self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, 0), race)) - self.Layout() + self.lpane.Layout() self.Show() class HeaderPane (wx.Panel): @@ -101,6 +101,10 @@ class ListPane (wx.ScrolledWindow): self._wList.append(widget) self._wCount += 1 + def Layout(self): + wx.ScrolledWindow.Layout(self) + self.Refresh() + def Refresh(self): ypos = 0 cwidth, cheight = self.GetClientSize() From 5a73ddede8353a7d9ad7bdef4e047d21688b21ac Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Mon, 25 Oct 2010 17:19:26 +0300 Subject: [PATCH 03/62] Fix some frackups . --- gui/shipBrowser.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 8897dbc58..2e0e0500c 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -124,7 +124,9 @@ class ListPane (wx.ScrolledWindow): for widget in self._wList: self.RemoveChild(widget) widget.Hide() - widget.Destroy() + widget.Close() + self._wCount = 0 + self._wList = [] class CategoryItem(wx.Window): def __init__(self, parent, categoryID, shipFittingInfo, From f4980016e78633034c7041603ee921da3a9e90bf Mon Sep 17 00:00:00 2001 From: cncfanatics Date: Mon, 25 Oct 2010 16:22:22 +0200 Subject: [PATCH 04/62] Minor fixups --- gui/shipBrowser.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 2e0e0500c..e8a98faf2 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -120,12 +120,16 @@ class ListPane (wx.ScrolledWindow): self._wList[i].Refresh() self.SetVirtualSize((1, ypos)) + def RemoveChild(self, child): + wx.Panel.RemoveChild(self, child) + child.Hide() + child.Destroy() + self._wCount -= 1 + def RemoveAllChildren(self): for widget in self._wList: self.RemoveChild(widget) - widget.Hide() - widget.Close() - self._wCount = 0 + self._wList = [] class CategoryItem(wx.Window): From d4bcabed3a0d09b85ddee00f47440a2cbf281988 Mon Sep 17 00:00:00 2001 From: cncfanatics Date: Mon, 25 Oct 2010 18:01:54 +0200 Subject: [PATCH 05/62] Make sure calling stag2 is the last thing that happens, else there's crashing chances --- gui/shipBrowser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index e8a98faf2..e6756b945 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -164,8 +164,8 @@ class CategoryItem(wx.Window): pos = event.GetPosition() x,y = pos - self.shipBrowser.stage2(self.categoryID) event.Skip() + self.shipBrowser.stage2(self.categoryID) def enterW(self,event): self.highlighted = 1 From 09f07076bed44839806308ae7f2b140b82c81483 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Mon, 25 Oct 2010 20:07:04 +0300 Subject: [PATCH 06/62] Fixed crash when destroying an item --- gui/shipBrowser.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index e6756b945..14117afc5 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -6,6 +6,7 @@ import service FitRenamed, EVT_FIT_RENAMED = wx.lib.newevent.NewEvent() FitSelected, EVT_FIT_SELECTED = wx.lib.newevent.NewEvent() FitRemoved, EVT_FIT_REMOVED = wx.lib.newevent.NewEvent() +Stage2Selected, EVT_SB_STAGE2_SEL = wx.lib.newevent.NewEvent() class ShipBrowser(wx.Panel): def __init__(self, parent): @@ -24,16 +25,17 @@ class ShipBrowser(wx.Panel): self.Layout() self.Show() - self.lpane.Refresh() self.Centre(wx.BOTH) self.Bind(wx.EVT_SIZE, self.SizeRefreshList) + self.Bind(EVT_SB_STAGE2_SEL, self.stage2) self.stage1() def SizeRefreshList(self, event): ewidth, eheight = event.GetSize() ## if ewidth != self._lastWidth: ## self._lastWidth = ewidth - self.lpane.Refresh() + self.Layout() + self.lpane.RefreshList() event.Skip() def __del__(self): @@ -48,12 +50,14 @@ class ShipBrowser(wx.Panel): self.lpane.Layout() self.Show() - def stage2(self, categoryID): + def stage2(self, event): + categoryID = event.categoryID sMarket = service.Market.getInstance() self.lpane.RemoveAllChildren() for ID, name, race in sMarket.getShipList(categoryID): self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, 0), race)) + self.lpane.Layout() self.lpane.Layout() self.Show() @@ -84,7 +88,7 @@ class ListPane (wx.ScrolledWindow): posy = self.GetScrollPos(wx.VERTICAL) posy -= 2 self.Scroll(0, posy) - self.Refresh() + self.RefreshList() event.Skip() def MScrollDown(self, event): @@ -92,7 +96,7 @@ class ListPane (wx.ScrolledWindow): posy = self.GetScrollPos(wx.VERTICAL) posy += 2 self.Scroll(0, posy) - self.Refresh() + self.RefreshList() event.Skip() @@ -103,9 +107,9 @@ class ListPane (wx.ScrolledWindow): def Layout(self): wx.ScrolledWindow.Layout(self) - self.Refresh() + self.RefreshList() - def Refresh(self): + def RefreshList(self): ypos = 0 cwidth, cheight = self.GetClientSize() for i in xrange(self._wCount): @@ -164,8 +168,8 @@ class CategoryItem(wx.Window): pos = event.GetPosition() x,y = pos - event.Skip() - self.shipBrowser.stage2(self.categoryID) + categoryID = self.categoryID + wx.PostEvent(self.shipBrowser,Stage2Selected(categoryID=categoryID)) def enterW(self,event): self.highlighted = 1 From 37759d155cb1fcdcc349ccd27ef1dd534216a437 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Mon, 25 Oct 2010 20:38:01 +0300 Subject: [PATCH 07/62] Added back to the future button func --- gui/shipBrowser.py | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 14117afc5..cbd534812 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -7,6 +7,7 @@ FitRenamed, EVT_FIT_RENAMED = wx.lib.newevent.NewEvent() FitSelected, EVT_FIT_SELECTED = wx.lib.newevent.NewEvent() FitRemoved, EVT_FIT_REMOVED = wx.lib.newevent.NewEvent() Stage2Selected, EVT_SB_STAGE2_SEL = wx.lib.newevent.NewEvent() +Stage1Selected, EVT_SB_STAGE1_SEL = wx.lib.newevent.NewEvent() class ShipBrowser(wx.Panel): def __init__(self, parent): @@ -28,7 +29,9 @@ class ShipBrowser(wx.Panel): self.Centre(wx.BOTH) self.Bind(wx.EVT_SIZE, self.SizeRefreshList) self.Bind(EVT_SB_STAGE2_SEL, self.stage2) - self.stage1() + self.Bind(EVT_SB_STAGE1_SEL, self.stage1) + + self.stage1(None) def SizeRefreshList(self, event): ewidth, eheight = event.GetSize() @@ -41,7 +44,7 @@ class ShipBrowser(wx.Panel): def __del__(self): pass - def stage1(self): + def stage1(self, event): sMarket = service.Market.getInstance() self.lpane.RemoveAllChildren() for ID, name in sMarket.getShipRoot(): @@ -66,9 +69,15 @@ class HeaderPane (wx.Panel): wx.Panel.__init__ (self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size(500, 32), style=wx.TAB_TRAVERSAL) bSizer3 = wx.BoxSizer(wx.VERTICAL) - self.stHeader = wx.StaticText(self, wx.ID_ANY, u"Header --->", wx.DefaultPosition, wx.DefaultSize, 0) + self.stHeader = wx.StaticText(self, wx.ID_ANY, u"Back", wx.DefaultPosition, wx.DefaultSize, 0) self.stHeader.Wrap(-1) bSizer3.Add(self.stHeader, 0, wx.ALL | wx.EXPAND, 5) + self.stHeader.Bind(wx.EVT_LEFT_UP,self.OnBack) + + + def OnBack(self,event): + wx.PostEvent(self.Parent,Stage1Selected()) + event.Skip() class ListPane (wx.ScrolledWindow): def __init__(self, parent): @@ -139,7 +148,7 @@ class ListPane (wx.ScrolledWindow): class CategoryItem(wx.Window): def __init__(self, parent, categoryID, shipFittingInfo, id=wx.ID_ANY, range=100, pos=wx.DefaultPosition, - size=(-1,16), style=0): + size=(0,16), style=0): wx.Window.__init__(self, parent, id, pos, size, style) if categoryID: @@ -253,19 +262,19 @@ class CategoryItem(wx.Window): event.Skip() - def Destroy(self): - self.Unbind(wx.EVT_PAINT) - self.Unbind(wx.EVT_ERASE_BACKGROUND) - self.Unbind(wx.EVT_LEFT_UP) - self.Unbind(wx.EVT_ENTER_WINDOW) - self.Unbind(wx.EVT_LEAVE_WINDOW) - self.Close() +# def Destroy(self): +# self.Unbind(wx.EVT_PAINT) +# self.Unbind(wx.EVT_ERASE_BACKGROUND) +# self.Unbind(wx.EVT_LEFT_UP) +# self.Unbind(wx.EVT_ENTER_WINDOW) +# self.Unbind(wx.EVT_LEAVE_WINDOW) +# self.Close() class ShipItem(wx.Window): def __init__(self, parent, shipID=None, shipFittingInfo=("Test", 2), itemData=None, id=wx.ID_ANY, range=100, pos=wx.DefaultPosition, - size=(-1, 38), style=0): + size=(0, 36), style=0): wx.Window.__init__(self, parent, id, pos, size, style) self._itemData = itemData From 896a69c1110ee640d6718988054ac81ce896708d Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Mon, 25 Oct 2010 21:04:23 +0300 Subject: [PATCH 08/62] Increased mousewheel scroll speed --- gui/shipBrowser.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index cbd534812..7a45af880 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -95,7 +95,7 @@ class ListPane (wx.ScrolledWindow): def MScrollUp(self, event): posy = self.GetScrollPos(wx.VERTICAL) - posy -= 2 + posy -= 8 self.Scroll(0, posy) self.RefreshList() event.Skip() @@ -103,7 +103,7 @@ class ListPane (wx.ScrolledWindow): def MScrollDown(self, event): posy = self.GetScrollPos(wx.VERTICAL) - posy += 2 + posy += 8 self.Scroll(0, posy) self.RefreshList() event.Skip() From 0dc2a8f6109b8815b7c673875dec59c4ac830659 Mon Sep 17 00:00:00 2001 From: cncfanatics Date: Mon, 25 Oct 2010 20:21:01 +0200 Subject: [PATCH 09/62] Add sort by race and then name --- gui/shipBrowser.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 7a45af880..0a5b52ac6 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -53,11 +53,18 @@ class ShipBrowser(wx.Panel): self.lpane.Layout() self.Show() + RACE_ORDER = ["amarr", "caldari", "gallente", "minmatar", "ore", "serpentis", "angel", "blood", "sansha", "guristas"] + def raceNameKey(self, shipInfo): + return self.RACE_ORDER.index(shipInfo[2]), shipInfo[1] + + def stage2(self, event): categoryID = event.categoryID sMarket = service.Market.getInstance() self.lpane.RemoveAllChildren() - for ID, name, race in sMarket.getShipList(categoryID): + shipList = sMarket.getShipList(categoryID) + shipList.sort(key=self.raceNameKey) + for ID, name, race in shipList: self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, 0), race)) self.lpane.Layout() From c6583acc3369ef8b2021d7337069fc5f85aa6897 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Mon, 25 Oct 2010 21:37:25 +0300 Subject: [PATCH 10/62] Fixed a stupid wxgtk scrollbar stuff --- gui/shipBrowser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 0a5b52ac6..6404f700d 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -88,7 +88,7 @@ class HeaderPane (wx.Panel): class ListPane (wx.ScrolledWindow): def __init__(self, parent): - wx.ScrolledWindow.__init__ (self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size(500, 300), style=wx.TAB_TRAVERSAL) + wx.ScrolledWindow.__init__ (self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size(1, 1), style=wx.TAB_TRAVERSAL) self._wList = [] self._wCount = 0 self.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW)) From c31ac1e49171fbc7b4c545686bd97134145f870e Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Mon, 25 Oct 2010 21:52:17 +0300 Subject: [PATCH 11/62] Added FitItem class --- gui/shipBrowser.py | 168 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 167 insertions(+), 1 deletion(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 6404f700d..95e5eb89e 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -297,7 +297,7 @@ class ShipItem(wx.Window): self.highlighted = 0 self.editWasShown = 0 - self.tcFitName = wx.TextCtrl(self, wx.ID_ANY, "%s fit" % self.shipName, wx.DefaultPosition, wx.DefaultSize, wx.TE_PROCESS_ENTER) + self.tcFitName = wx.TextCtrl(self, wx.ID_ANY, "%s fit" % self.shipName, wx.DefaultPosition, (120,-1), wx.TE_PROCESS_ENTER) self.tcFitName.Show(False) self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) @@ -445,3 +445,169 @@ class ShipItem(wx.Window): mdc.DrawBitmap(self.newBmp, self.editPosX, self.editPosY, 0) event.Skip() +class FitItem(wx.Window): + def __init__(self, parent, shipID=None, shipFittingInfo=("Test", "cnc's avatar"), itemData=None, + id=wx.ID_ANY, range=100, pos=wx.DefaultPosition, + size=(0, 36), style=0): + wx.Window.__init__(self, parent, id, pos, size, style) + + self._itemData = itemData + + self.shipBmp = wx.EmptyBitmap(32, 32) + self.shipFittingInfo = shipFittingInfo + self.shipName, self.fitName= shipFittingInfo + self.newBmp = bitmapLoader.getBitmap("add_small", "icons") + + self.Bind(wx.EVT_PAINT, self.OnPaint) + self.editPosX = 0 + self.editPosY = 0 + self.highlighted = 0 + self.editWasShown = 0 + + self.tcFitName = wx.TextCtrl(self, wx.ID_ANY, "%s fit" % self.fitName, wx.DefaultPosition, (150,-1), wx.TE_PROCESS_ENTER) + self.tcFitName.Show(False) + + self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) + + self.Bind(wx.EVT_LEFT_UP, self.checkPosition) + self.Bind(wx.EVT_MOTION, self.cursorCheck) + + self.Bind(wx.EVT_ENTER_WINDOW, self.enterW) + self.Bind(wx.EVT_LEAVE_WINDOW, self.leaveW) + + self.tcFitName.Bind(wx.EVT_TEXT_ENTER, self.renameFit) + self.tcFitName.Bind(wx.EVT_KILL_FOCUS, self.editLostFocus) + self.tcFitName.Bind(wx.EVT_KEY_DOWN, self.editCheckEsc) + + def SetData(self, data): + self._itemData = data + + def GetData(self): + return self._itemData + + def editLostFocus(self, event): + self.tcFitName.Show(False) + if self.highlighted == 1: + self.editWasShown = 1 + + def editCheckEsc(self, event): + if event.GetKeyCode() == wx.WXK_ESCAPE: + self.tcFitName.Show(False) + self.editWasShown = 0 + else: + event.Skip() + + def cursorCheck(self, event): + pos = event.GetPosition() + if self.NHitTest((self.editPosX, self.editPosY), pos, (16, 16)): + self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) + else: + self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) + def checkPosition(self, event): + + pos = event.GetPosition() + x, y = pos + if self.NHitTest((self.editPosX, self.editPosY), pos, (16, 16)): + if self.editWasShown == 1: + self.renameFit() + return + else: + self.Refresh() + fnEditSize = self.tcFitName.GetSize() + wSize = self.GetSize() + fnEditPosX = self.editPosX - fnEditSize.width - 5 + fnEditPosY = (wSize.height - fnEditSize.height) / 2 + self.tcFitName.SetPosition((fnEditPosX, fnEditPosY)) + self.tcFitName.Show(True) + self.tcFitName.SetFocus() + self.tcFitName.SelectAll() + return + + if (not self.NHitTest((self.editPosX, self.editPosY), pos, (16, 16))): + self.editWasShown = 0 + self.Refresh() + + + event.Skip() + + def renameFit(self, event=None): + print "Rename :", self.tcFitName.GetValue(), "add renamed fit " + self.tcFitName.Show(False) + self.editWasShown = 0 + + def NHitTest(self, target, position, area): + x, y = target + px, py = position + aX, aY = area + if (px > x and px < x + aX) and (py > y and py < y + aY): + return True + return False + def enterW(self, event): + self.highlighted = 1 + self.Refresh() + event.Skip() + + def leaveW(self, event): + self.highlighted = 0 + self.Refresh() + event.Skip() + + def OnEraseBackground(self, event): + pass + + def OnPaint(self, event): + rect = self.GetRect() + + canvas = wx.EmptyBitmap(rect.width, rect.height) + mdc = wx.BufferedPaintDC(self) + mdc.SelectObject(canvas) + r = copy.copy(rect) + r.top = 0 + r.left = 0 + r.height = r.height / 2 + if self.highlighted: + mdc.SetBackground(wx.Brush(wx.SystemSettings_GetColour(wx.SYS_COLOUR_HIGHLIGHT))) + mdc.Clear() + mdc.SetTextForeground(wx.SystemSettings_GetColour(wx.SYS_COLOUR_HIGHLIGHTTEXT)) +## +## sr = 221 +## sg = 221 +## sb = 221 +## +## startColor = (sr,sg,sb) +## +## mdc.GradientFillLinear(r,startColor,wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW),wx.SOUTH) +## r.top = r.height +## mdc.GradientFillLinear(r,startColor,wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW),wx.NORTH) +## mdc.SetTextForeground(wx.BLACK) + mdc.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD, False)) + else: + mdc.SetBackground(wx.Brush(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW))) + mdc.SetTextForeground(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)) + mdc.Clear() + mdc.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD, False)) +# mdc.DrawBitmap(self.effBmp,5+(rect.height-40)/2,(rect.height-40)/2,0) + mdc.DrawBitmap(self.shipBmp, 5 + (rect.height - 32) / 2, (rect.height - 32) / 2, 0) + + + + + shipName, fitName = self.shipFittingInfo + + + ypos = (rect.height - 32) / 2 + textStart = 48 + xtext, ytext = mdc.GetTextExtent(shipName) + mdc.DrawText(shipName, textStart, ypos) + ypos += ytext + + mdc.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) + + xtext, ytext = mdc.GetTextExtent("%d fitting(s)") + mdc.DrawText("%s" % fitName, textStart, ypos) +# mdc.SetFont(wx.Font(7, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) + + self.editPosX = rect.width - 20 + self.editPosY = (rect.height - 16) / 2 + mdc.DrawBitmap(self.newBmp, self.editPosX, self.editPosY, 0) + event.Skip() From bf868f15009e3e830e832d41a1ec55e7a4bf98c1 Mon Sep 17 00:00:00 2001 From: cncfanatics Date: Mon, 25 Oct 2010 21:36:13 +0200 Subject: [PATCH 12/62] Add stage3 handling code --- gui/shipBrowser.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 95e5eb89e..f95948767 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -53,10 +53,12 @@ class ShipBrowser(wx.Panel): self.lpane.Layout() self.Show() - RACE_ORDER = ["amarr", "caldari", "gallente", "minmatar", "ore", "serpentis", "angel", "blood", "sansha", "guristas"] + RACE_ORDER = ["amarr", "caldari", "gallente", "minmatar", "ore", "serpentis", "angel", "blood", "sansha", "guristas", None] def raceNameKey(self, shipInfo): return self.RACE_ORDER.index(shipInfo[2]), shipInfo[1] + def nameKey(self, fitInfo): + return fitInfo[1] def stage2(self, event): categoryID = event.categoryID @@ -71,6 +73,20 @@ class ShipBrowser(wx.Panel): self.lpane.Layout() self.Show() + def stage3(self, event): + shipID = event.shipID + sFit = service.Fit.getInstance() + sMarket = service.Market.getInstance() + self.lpane.RemoveAllChildren() + fitList = sFit.getFitsWithShip(shipID) + fitList.sort(key=self.nameKey) + shipName = sMarket.getItem(shipID).name + for ID, name in fitList: + self.lpane.AddWidget(FitItem(ID, (shipName, name))) + + self.lpane.Layout() + self.Show() + class HeaderPane (wx.Panel): def __init__(self, parent): wx.Panel.__init__ (self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size(500, 32), style=wx.TAB_TRAVERSAL) From 1201c73cdd021356df1dab19571f85c76d6d5ebd Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Mon, 25 Oct 2010 22:56:17 +0300 Subject: [PATCH 13/62] Linked stage3 --- gui/shipBrowser.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index f95948767..12d61583b 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -6,8 +6,10 @@ import service FitRenamed, EVT_FIT_RENAMED = wx.lib.newevent.NewEvent() FitSelected, EVT_FIT_SELECTED = wx.lib.newevent.NewEvent() FitRemoved, EVT_FIT_REMOVED = wx.lib.newevent.NewEvent() -Stage2Selected, EVT_SB_STAGE2_SEL = wx.lib.newevent.NewEvent() + 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() class ShipBrowser(wx.Panel): def __init__(self, parent): @@ -30,6 +32,7 @@ class ShipBrowser(wx.Panel): self.Bind(wx.EVT_SIZE, self.SizeRefreshList) self.Bind(EVT_SB_STAGE2_SEL, self.stage2) self.Bind(EVT_SB_STAGE1_SEL, self.stage1) + self.Bind(EVT_SB_STAGE3_SEL, self.stage3) self.stage1(None) @@ -82,7 +85,7 @@ class ShipBrowser(wx.Panel): fitList.sort(key=self.nameKey) shipName = sMarket.getItem(shipID).name for ID, name in fitList: - self.lpane.AddWidget(FitItem(ID, (shipName, name))) + self.lpane.AddWidget(FitItem(self.lpane, ID, (shipName, name))) self.lpane.Layout() self.Show() @@ -301,12 +304,14 @@ class ShipItem(wx.Window): wx.Window.__init__(self, parent, id, pos, size, style) self._itemData = itemData - + self.shipID = shipID self.shipBmp = wx.EmptyBitmap(32, 32) self.shipFittingInfo = shipFittingInfo self.shipName, dummy = shipFittingInfo self.newBmp = bitmapLoader.getBitmap("add_small", "icons") + self.shipBrowser = self.Parent.Parent + self.Bind(wx.EVT_PAINT, self.OnPaint) self.editPosX = 0 self.editPosY = 0 @@ -375,6 +380,7 @@ class ShipItem(wx.Window): if (not self.NHitTest((self.editPosX, self.editPosY), pos, (16, 16))): self.editWasShown = 0 self.Refresh() + wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) event.Skip() @@ -383,6 +389,7 @@ class ShipItem(wx.Window): print "New :", self.tcFitName.GetValue(), "GTFO from stage2 to stage 3 (refresh stage 3)" self.tcFitName.Show(False) self.editWasShown = 0 + wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) def NHitTest(self, target, position, area): x, y = target @@ -450,11 +457,11 @@ class ShipItem(wx.Window): mdc.DrawText(shipName, textStart, ypos) ypos += ytext - mdc.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) + mdc.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) xtext, ytext = mdc.GetTextExtent("%d fitting(s)") mdc.DrawText("%d fitting(s)" % fittings, textStart, ypos) - mdc.SetFont(wx.Font(7, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) +# mdc.SetFont(wx.Font(7, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) self.editPosX = rect.width - 20 self.editPosY = (rect.height - 16) / 2 @@ -468,7 +475,7 @@ class FitItem(wx.Window): wx.Window.__init__(self, parent, id, pos, size, style) self._itemData = itemData - + self.shipID = shipID self.shipBmp = wx.EmptyBitmap(32, 32) self.shipFittingInfo = shipFittingInfo self.shipName, self.fitName= shipFittingInfo @@ -614,13 +621,13 @@ class FitItem(wx.Window): ypos = (rect.height - 32) / 2 textStart = 48 xtext, ytext = mdc.GetTextExtent(shipName) - mdc.DrawText(shipName, textStart, ypos) + mdc.DrawText(fitName, textStart, ypos) ypos += ytext - mdc.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) + mdc.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) xtext, ytext = mdc.GetTextExtent("%d fitting(s)") - mdc.DrawText("%s" % fitName, textStart, ypos) + mdc.DrawText("%s" % shipName, textStart, ypos) # mdc.SetFont(wx.Font(7, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) self.editPosX = rect.width - 20 From ea990d6415d9f588cd255e39dc05a99916a81678 Mon Sep 17 00:00:00 2001 From: cncfanatics Date: Mon, 25 Oct 2010 21:59:02 +0200 Subject: [PATCH 14/62] Sorting for stage1 --- gui/shipBrowser.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 12d61583b..73cf288bb 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -47,10 +47,15 @@ class ShipBrowser(wx.Panel): def __del__(self): pass + def nameKey(self, info): + return info[1] + def stage1(self, event): sMarket = service.Market.getInstance() self.lpane.RemoveAllChildren() - for ID, name in sMarket.getShipRoot(): + categoryList = sMarket.getShipRoot() + categoryList.sort(key=self.nameKey) + for ID, name in categoryList: self.lpane.AddWidget(CategoryItem(self.lpane, ID, (name, 0))) self.lpane.Layout() @@ -60,8 +65,6 @@ class ShipBrowser(wx.Panel): def raceNameKey(self, shipInfo): return self.RACE_ORDER.index(shipInfo[2]), shipInfo[1] - def nameKey(self, fitInfo): - return fitInfo[1] def stage2(self, event): categoryID = event.categoryID From 92fe21ee04c84c925a437c4c648398ac7941e820 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 10:31:09 +0300 Subject: [PATCH 15/62] Scrollbar fix + some speed optimizations --- gui/shipBrowser.py | 49 +++++++++++++++++++--------------------------- 1 file changed, 20 insertions(+), 29 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 73cf288bb..bc2783def 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -41,7 +41,8 @@ class ShipBrowser(wx.Panel): ## if ewidth != self._lastWidth: ## self._lastWidth = ewidth self.Layout() - self.lpane.RefreshList() + self.lpane.Layout() + self.lpane.RefreshList(True) event.Skip() def __del__(self): @@ -51,6 +52,7 @@ class ShipBrowser(wx.Panel): return info[1] def stage1(self, event): + self.Layout() sMarket = service.Market.getInstance() self.lpane.RemoveAllChildren() categoryList = sMarket.getShipRoot() @@ -58,7 +60,7 @@ class ShipBrowser(wx.Panel): for ID, name in categoryList: self.lpane.AddWidget(CategoryItem(self.lpane, ID, (name, 0))) - self.lpane.Layout() + self.lpane.RefreshList() self.Show() RACE_ORDER = ["amarr", "caldari", "gallente", "minmatar", "ore", "serpentis", "angel", "blood", "sansha", "guristas", None] @@ -75,8 +77,7 @@ class ShipBrowser(wx.Panel): for ID, name, race in shipList: self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, 0), race)) - self.lpane.Layout() - self.lpane.Layout() + self.lpane.RefreshList() self.Show() def stage3(self, event): @@ -90,7 +91,7 @@ class ShipBrowser(wx.Panel): for ID, name in fitList: self.lpane.AddWidget(FitItem(self.lpane, ID, (shipName, name))) - self.lpane.Layout() + self.lpane.RefreshList() self.Show() class HeaderPane (wx.Panel): @@ -126,7 +127,7 @@ class ListPane (wx.ScrolledWindow): posy = self.GetScrollPos(wx.VERTICAL) posy -= 8 self.Scroll(0, posy) - self.RefreshList() +# self.RefreshList() event.Skip() def MScrollDown(self, event): @@ -134,7 +135,7 @@ class ListPane (wx.ScrolledWindow): posy = self.GetScrollPos(wx.VERTICAL) posy += 8 self.Scroll(0, posy) - self.RefreshList() +# self.RefreshList() event.Skip() @@ -143,24 +144,23 @@ class ListPane (wx.ScrolledWindow): self._wList.append(widget) self._wCount += 1 - def Layout(self): - wx.ScrolledWindow.Layout(self) - self.RefreshList() - - def RefreshList(self): + def RefreshList(self, doRefresh = False): ypos = 0 - cwidth, cheight = self.GetClientSize() + maxy = 0 for i in xrange(self._wCount): - xa, ya = self.CalcScrolledPosition((0, ypos)) iwidth, iheight = self._wList[i].GetSize() + xa, ya = self.CalcScrolledPosition((0, maxy)) self._wList[i].SetPosition((xa, ya)) + maxy += iheight + self.SetVirtualSize((1, maxy)) + cwidth, cheight = self.GetVirtualSize() + + + for i in xrange(self._wCount): + iwidth, iheight = self._wList[i].GetSize() self._wList[i].SetSize((cwidth, iheight)) - - ypos += iheight - - self._wList[i].Show() - self._wList[i].Refresh() - self.SetVirtualSize((1, ypos)) + if doRefresh == True: + self._wList[i].Refresh() def RemoveChild(self, child): wx.Panel.RemoveChild(self, child) @@ -291,15 +291,6 @@ class CategoryItem(wx.Window): event.Skip() -# def Destroy(self): -# self.Unbind(wx.EVT_PAINT) -# self.Unbind(wx.EVT_ERASE_BACKGROUND) -# self.Unbind(wx.EVT_LEFT_UP) -# self.Unbind(wx.EVT_ENTER_WINDOW) -# self.Unbind(wx.EVT_LEAVE_WINDOW) -# self.Close() - - class ShipItem(wx.Window): def __init__(self, parent, shipID=None, shipFittingInfo=("Test", 2), itemData=None, id=wx.ID_ANY, range=100, pos=wx.DefaultPosition, From df4b4590da16bc8f0bf34d49393b839c7ade125a Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 10:47:09 +0300 Subject: [PATCH 16/62] Minor graphics changes --- gui/shipBrowser.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index bc2783def..a7d3db363 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -243,7 +243,7 @@ class CategoryItem(wx.Window): mdc.Clear() mdc.DrawBitmap(self.shipBmp,5+(rect.height-self.shipBmp.GetHeight())/2,(rect.height-self.shipBmp.GetWidth())/2,0) - mdc.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD, False)) + mdc.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) @@ -261,12 +261,12 @@ class CategoryItem(wx.Window): mdc.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) if fittings <1: - fformat = "No fittings" + fformat = "No fits" else: if fittings == 1: - fformat = "%d fitting" + fformat = "%d fit" else: - fformat = "%d fittings" + fformat = "%d fits" if fittings>0: xtext, ytext = mdc.GetTextExtent(fformat % fittings) @@ -277,10 +277,7 @@ class CategoryItem(wx.Window): #seems that a scrolled window without scrollbars shown always HasScrollbar >< - if self.Parent.HasScrollbar(wx.VERTICAL): - addX = 20 - else: - addX = 20 + addX = 5 fPosX = rect.width - addX - xtext fPosY = (rect.height -ytext)/2 @@ -430,12 +427,13 @@ class ShipItem(wx.Window): ## r.top = r.height ## mdc.GradientFillLinear(r,startColor,wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW),wx.NORTH) ## mdc.SetTextForeground(wx.BLACK) - mdc.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD, False)) + else: mdc.SetBackground(wx.Brush(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW))) mdc.SetTextForeground(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)) mdc.Clear() - mdc.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD, False)) + + mdc.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD, False)) # mdc.DrawBitmap(self.effBmp,5+(rect.height-40)/2,(rect.height-40)/2,0) mdc.DrawBitmap(self.shipBmp, 5 + (rect.height - 32) / 2, (rect.height - 32) / 2, 0) @@ -597,12 +595,12 @@ class FitItem(wx.Window): ## r.top = r.height ## mdc.GradientFillLinear(r,startColor,wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW),wx.NORTH) ## mdc.SetTextForeground(wx.BLACK) - mdc.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD, False)) + else: mdc.SetBackground(wx.Brush(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW))) mdc.SetTextForeground(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)) mdc.Clear() - mdc.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD, False)) + mdc.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD, False)) # mdc.DrawBitmap(self.effBmp,5+(rect.height-40)/2,(rect.height-40)/2,0) mdc.DrawBitmap(self.shipBmp, 5 + (rect.height - 32) / 2, (rect.height - 32) / 2, 0) From 40902af0f1a24d1e1bf595af7f95ae3bd8607a3a Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 11:36:12 +0300 Subject: [PATCH 17/62] Added delete bmp(not working yet) to stage3 widget --- gui/shipBrowser.py | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index a7d3db363..f902cece5 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -89,7 +89,7 @@ class ShipBrowser(wx.Panel): fitList.sort(key=self.nameKey) shipName = sMarket.getItem(shipID).name for ID, name in fitList: - self.lpane.AddWidget(FitItem(self.lpane, ID, (shipName, name))) + self.lpane.AddWidget(FitItem(self.lpane, ID, (shipName, name),shipID)) self.lpane.RefreshList() self.Show() @@ -461,25 +461,28 @@ class ShipItem(wx.Window): event.Skip() class FitItem(wx.Window): - def __init__(self, parent, shipID=None, shipFittingInfo=("Test", "cnc's avatar"), itemData=None, + def __init__(self, parent, fitID=None, shipFittingInfo=("Test", "cnc's avatar"), shipID = None, itemData=None, id=wx.ID_ANY, range=100, pos=wx.DefaultPosition, size=(0, 36), style=0): wx.Window.__init__(self, parent, id, pos, size, style) self._itemData = itemData + self.fitID = fitID self.shipID = shipID + self.shipBrowser = self.Parent.Parent self.shipBmp = wx.EmptyBitmap(32, 32) self.shipFittingInfo = shipFittingInfo self.shipName, self.fitName= shipFittingInfo - self.newBmp = bitmapLoader.getBitmap("add_small", "icons") + self.renameBmp = bitmapLoader.getBitmap("rename", "icons") + self.deleteBmp = bitmapLoader.getBitmap("state_offline_small","icons") self.Bind(wx.EVT_PAINT, self.OnPaint) - self.editPosX = 0 - self.editPosY = 0 + self.renamePosX = 0 + self.renamePosY = 0 self.highlighted = 0 self.editWasShown = 0 - self.tcFitName = wx.TextCtrl(self, wx.ID_ANY, "%s fit" % self.fitName, wx.DefaultPosition, (150,-1), wx.TE_PROCESS_ENTER) + self.tcFitName = wx.TextCtrl(self, wx.ID_ANY, "%s" % self.fitName, wx.DefaultPosition, (150,-1), wx.TE_PROCESS_ENTER) self.tcFitName.Show(False) self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) @@ -514,7 +517,7 @@ class FitItem(wx.Window): def cursorCheck(self, event): pos = event.GetPosition() - if self.NHitTest((self.editPosX, self.editPosY), pos, (16, 16)): + if self.NHitTest((self.renamePosX, self.renamePosY), pos, (16, 16)): self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) else: self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) @@ -522,7 +525,7 @@ class FitItem(wx.Window): pos = event.GetPosition() x, y = pos - if self.NHitTest((self.editPosX, self.editPosY), pos, (16, 16)): + if self.NHitTest((self.renamePosX, self.renamePosY), pos, (16, 16)): if self.editWasShown == 1: self.renameFit() return @@ -530,15 +533,15 @@ class FitItem(wx.Window): self.Refresh() fnEditSize = self.tcFitName.GetSize() wSize = self.GetSize() - fnEditPosX = self.editPosX - fnEditSize.width - 5 - fnEditPosY = (wSize.height - fnEditSize.height) / 2 - self.tcFitName.SetPosition((fnEditPosX, fnEditPosY)) + fnrenamePosX = self.renamePosX - fnEditSize.width - 5 + fnrenamePosY = (wSize.height - fnEditSize.height) / 2 + self.tcFitName.SetPosition((fnrenamePosX, fnrenamePosY)) self.tcFitName.Show(True) self.tcFitName.SetFocus() self.tcFitName.SelectAll() return - if (not self.NHitTest((self.editPosX, self.editPosY), pos, (16, 16))): + if (not self.NHitTest((self.renamePosX, self.renamePosY), pos, (16, 16))): self.editWasShown = 0 self.Refresh() @@ -546,9 +549,10 @@ class FitItem(wx.Window): event.Skip() def renameFit(self, event=None): - print "Rename :", self.tcFitName.GetValue(), "add renamed fit " + print "Rename :", self.tcFitName.GetValue(), "refresh stage3 " self.tcFitName.Show(False) self.editWasShown = 0 + wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) def NHitTest(self, target, position, area): x, y = target @@ -622,7 +626,11 @@ class FitItem(wx.Window): mdc.DrawText("%s" % shipName, textStart, ypos) # mdc.SetFont(wx.Font(7, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) - self.editPosX = rect.width - 20 - self.editPosY = (rect.height - 16) / 2 - mdc.DrawBitmap(self.newBmp, self.editPosX, self.editPosY, 0) + self.deletePosX = rect.width - self.deleteBmp.GetWidth() - 5 + self.renamePosX = self.deletePosX - self.renameBmp.GetWidth() - 5 + self.renamePosY = self.deletePosY = (rect.height - 16) / 2 + + + mdc.DrawBitmap(self.renameBmp, self.renamePosX, self.renamePosY, 0) + mdc.DrawBitmap(self.deleteBmp, self.deletePosX, self.deletePosY, 0) event.Skip() From eff8eaca3c2c800bad9f9de9e1502fdd3ff3e2ed Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 13:21:26 +0300 Subject: [PATCH 18/62] Added new icons for add/delete/rename --- eos | 2 +- gui/shipBrowser.py | 12 +++++++----- icons/fadd.png | Bin 0 -> 733 bytes icons/fdelete.png | Bin 0 -> 715 bytes icons/frename.png | Bin 0 -> 512 bytes 5 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 icons/fadd.png create mode 100644 icons/fdelete.png create mode 100644 icons/frename.png diff --git a/eos b/eos index dd3cadec0..3e68fce62 160000 --- a/eos +++ b/eos @@ -1 +1 @@ -Subproject commit dd3cadec0f0320c22bce42867f18b4a98c931f89 +Subproject commit 3e68fce6254a7f1e807e407de79add20b6c2b349 diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index f902cece5..ca4aded01 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -299,7 +299,7 @@ class ShipItem(wx.Window): self.shipBmp = wx.EmptyBitmap(32, 32) self.shipFittingInfo = shipFittingInfo self.shipName, dummy = shipFittingInfo - self.newBmp = bitmapLoader.getBitmap("add_small", "icons") + self.newBmp = bitmapLoader.getBitmap("fadd", "icons") self.shipBrowser = self.Parent.Parent @@ -473,8 +473,9 @@ class FitItem(wx.Window): self.shipBmp = wx.EmptyBitmap(32, 32) self.shipFittingInfo = shipFittingInfo self.shipName, self.fitName= shipFittingInfo - self.renameBmp = bitmapLoader.getBitmap("rename", "icons") - self.deleteBmp = bitmapLoader.getBitmap("state_offline_small","icons") + self.copyBmp = bitmapLoader.getBitmap("fadd", "icons") + self.renameBmp = bitmapLoader.getBitmap("frename", "icons") + self.deleteBmp = bitmapLoader.getBitmap("fdelete","icons") self.Bind(wx.EVT_PAINT, self.OnPaint) self.renamePosX = 0 @@ -628,9 +629,10 @@ class FitItem(wx.Window): self.deletePosX = rect.width - self.deleteBmp.GetWidth() - 5 self.renamePosX = self.deletePosX - self.renameBmp.GetWidth() - 5 - self.renamePosY = self.deletePosY = (rect.height - 16) / 2 - + self.copyPosX = self.renamePosX - self.copyBmp.GetWidth() -5 + self.renamePosY = self.deletePosY = self.copyPosY = (rect.height - 16) / 2 + mdc.DrawBitmap(self.copyBmp, self.copyPosX, self.copyPosY, 0) mdc.DrawBitmap(self.renameBmp, self.renamePosX, self.renamePosY, 0) mdc.DrawBitmap(self.deleteBmp, self.deletePosX, self.deletePosY, 0) event.Skip() diff --git a/icons/fadd.png b/icons/fadd.png new file mode 100644 index 0000000000000000000000000000000000000000..6332fefea4be19eeadf211b0b202b272e8564898 GIT binary patch literal 733 zcmV<30wVp1P)9VHk(~TedF+gQSL8D5xnVSSWAVY>J9b+m>@{iq7_KE}go~11+5s4;8hc+i0Xa zI1j@EX5!S+Me6HNqKzU5YQwL;-W5$p%ZMKMeR<%zp69-~?<4?8|C8S?bklXr4v&Ov zb&06v2|-x?qB`90yn>Qi%Sh2^G4n)$ZdyvTPf9}1)_buUT7>`e2G&2VU@~Bb(o+Mz zi4)>IxlSY${Dj4k={-9RzU^W5g9|2V5RZ2ZulL9s2xQbZ@r6eP9Ra5u(s|C0Nj#&4>wTSkb?%#=9?@ z^oxDy-O@tyN{L@by(WWvQ3%CyEu8x{+#Jb4-h&K9Owi)2pgg+heWDyked|3R$$kL@A z#sp1v-r+=G4B8D6DqsDH0@7OztA7aT9qc1Py{()w`m``?Y0&gi2=ROcc-9+nU^I6< zT=e_Y=vSnG@?3Ue{BW5ONFttcE!R-R_W4O01|0-|K-YNXLo2`4Qv z`r1LxR6#yf3FB%T95gJnaKKivA~Z}S9A(ZxEDK}O3T04USJ P00000NkvXXu0mjf^IS-S literal 0 HcmV?d00001 diff --git a/icons/fdelete.png b/icons/fdelete.png new file mode 100644 index 0000000000000000000000000000000000000000..08f249365afd29594b51210c6e21ba253897505d GIT binary patch literal 715 zcmV;+0yO=JP)C4}Mrzlg<+1Y8PEBfUp0jJpx4B>@E+cy3`^(Gw`Mf+2&yxZm<$to~Vpgvg&QKNR z_f#1(r6svZt%iF?s+n<8X?B&!h3g9Dbb8_=MX}!;HiQSAh`bp^WMl~Z-44teO7W_Y zV4thSL{h;rJY7!l3%5J4H1!tIzB`Dv+YxO(haWeausGZYkI8^hWj6mzo=L0{%;yxzh{5!Htr?51 zvG|W62MzC8BZ76hRpCyO2zOn<%e)K>NHge!-~)Ap33OdWw6hsLYbCxGNt0%wk_2z7 zfyYvXheSG)5HRK1VB~%mq7Dmurw#bi@hEcOr3&G1ZiF*$M=&9nB#VNf&Q^r$4G5kp zTURh&s)E0%5&hyVD}sp<72~zmAY`Y(9aqO6CXF%=zFHGzO-A&I(pE}v70YQxCPJ{Y z4L+?5-crdLn3ZRPEs!A4ehEY3ZRpL~w9>@aMN+{F4dI@v&>(QDHQum!mG~E^$OS8l z!7?%Uwib*ROP67Hw`ika)gX-(8Ia`-u_IEhxG7U<13kSsMW+$lbb2dUMm5p6pa}cjgA+U$^mJ^AjD?&bdi)8~y+Q002ovPDHLkV1g8IMc@Dc literal 0 HcmV?d00001 diff --git a/icons/frename.png b/icons/frename.png new file mode 100644 index 0000000000000000000000000000000000000000..67de2c6ccbeac17742f56cf7391e72b2bf5033ba GIT binary patch literal 512 zcmV+b0{{JqP)CQDsH?WF>AIFt zQuJ}i;w2$ZUU#3SZ6RY0Gw;kZ&ol1~2ky^QZ(fom$=jNJZt!z7w_pH~wdQ;R)Gh%BbQFCx+Nm!4SuS-vkr`vhhrX zM*>w%e+v~?m@q~ImPAgtLkR_3U<2F8LP3W5=LJ*ZN|S5p#sf4YFr$p~Q~Z*0Ngxf2 zjk#J#<7EAlhzlrV53~GF&pIzcCN_lz9@05UeoUXiK%N z#x+4o*i_c|6_Uu1+&TIho?3@y4k-#b8Y_o94zW*B3a1ne2-Y5s0uke$$|@=}OP-i= zNYZQA=>PrZu0MfSL=b8UhD_={W4IY1{b{)U)*gc45xtL%IYLY&hF;d`@GzI&7H&D# zh;z_BX$#hqh@q?AY3sJTod2%*Yd)_>YM0#q&ixGuh+PQsneK)F0000 Date: Tue, 26 Oct 2010 14:05:34 +0300 Subject: [PATCH 19/62] Fit item add/delete/rename dummies implemented --- gui/shipBrowser.py | 56 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 51 insertions(+), 5 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index ca4aded01..9cd8aee64 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -480,9 +480,18 @@ class FitItem(wx.Window): self.Bind(wx.EVT_PAINT, self.OnPaint) self.renamePosX = 0 self.renamePosY = 0 + + self.deletePosX = 0 + self.deletePosY = 0 + + self.copyPosX = 0 + self.copyPosY = 0 + self.highlighted = 0 self.editWasShown = 0 + self.btnsStatus = "" + self.tcFitName = wx.TextCtrl(self, wx.ID_ANY, "%s" % self.fitName, wx.DefaultPosition, (150,-1), wx.TE_PROCESS_ENTER) self.tcFitName.Show(False) @@ -520,8 +529,24 @@ class FitItem(wx.Window): pos = event.GetPosition() if self.NHitTest((self.renamePosX, self.renamePosY), pos, (16, 16)): self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) + if self.btnsStatus != "Rename": + self.btnsStatus = "Rename" + self.Refresh() + elif self.NHitTest((self.deletePosX, self.deletePosY), pos, (16, 16)): + self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) + if self.btnsStatus != "Delete": + self.btnsStatus = "Delete" + self.Refresh() + elif self.NHitTest((self.copyPosX, self.copyPosY), pos, (16, 16)): + self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) + if self.btnsStatus != "Copy": + self.btnsStatus = "Copy" + self.Refresh() else: self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) + if self.btnsStatus != "": + self.btnsStatus = "" + self.Refresh() def checkPosition(self, event): pos = event.GetPosition() @@ -541,6 +566,13 @@ class FitItem(wx.Window): self.tcFitName.SetFocus() self.tcFitName.SelectAll() return + if self.NHitTest((self.deletePosX,self.deletePosY), pos, (16,16)): + if self.editWasShown != 1: + self.deleteFit() + + if self.NHitTest((self.copyPosX,self.copyPosY), pos, (16,16)): + if self.editWasShown != 1: + self.copyFit() if (not self.NHitTest((self.renamePosX, self.renamePosY), pos, (16, 16))): self.editWasShown = 0 @@ -550,11 +582,18 @@ class FitItem(wx.Window): event.Skip() def renameFit(self, event=None): - print "Rename :", self.tcFitName.GetValue(), "refresh stage3 " + print "Rename :", self.fitName," to", self.tcFitName.GetValue(), " dont forget to rename the fit :>" self.tcFitName.Show(False) self.editWasShown = 0 - wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) + self.fitName = self.tcFitName.GetValue() + self.Refresh() + def copyFit(self, event = None): + print "Copy" + wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) + def deleteFit(self, event = None): + print "Delete" + wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) def NHitTest(self, target, position, area): x, y = target px, py = position @@ -612,7 +651,8 @@ class FitItem(wx.Window): - shipName, fitName = self.shipFittingInfo + shipName = self.shipName + fitName = self.fitName ypos = (rect.height - 32) / 2 @@ -623,15 +663,21 @@ class FitItem(wx.Window): mdc.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) - xtext, ytext = mdc.GetTextExtent("%d fitting(s)") + mdc.DrawText("%s" % shipName, textStart, ypos) -# mdc.SetFont(wx.Font(7, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) + mdc.SetFont(wx.Font(7, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) self.deletePosX = rect.width - self.deleteBmp.GetWidth() - 5 self.renamePosX = self.deletePosX - self.renameBmp.GetWidth() - 5 self.copyPosX = self.renamePosX - self.copyBmp.GetWidth() -5 self.renamePosY = self.deletePosY = self.copyPosY = (rect.height - 16) / 2 + if self.btnsStatus != "": + status = "%s" % self.btnsStatus + xtext, ytext = mdc.GetTextExtent(status) + ytext = (rect.height - ytext)/2 + mdc.DrawText(status, self.copyPosX - xtext -5,ytext) + mdc.DrawBitmap(self.copyBmp, self.copyPosX, self.copyPosY, 0) mdc.DrawBitmap(self.renameBmp, self.renamePosX, self.renamePosY, 0) mdc.DrawBitmap(self.deleteBmp, self.deletePosX, self.deletePosY, 0) From 5c9539905ae12a51222705d64bf02d2f3d6f4520 Mon Sep 17 00:00:00 2001 From: cncfanatics Date: Tue, 26 Oct 2010 14:12:48 +0200 Subject: [PATCH 20/62] Wire things up --- gui/shipBrowser.py | 39 ++++++++++++++------ icons/{fadd.png => fit_add_small.png} | Bin icons/{fdelete.png => fit_delete_small.png} | Bin icons/{frename.png => fit_rename_small.png} | Bin 4 files changed, 28 insertions(+), 11 deletions(-) rename icons/{fadd.png => fit_add_small.png} (100%) rename icons/{fdelete.png => fit_delete_small.png} (100%) rename icons/{frename.png => fit_rename_small.png} (100%) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 9cd8aee64..d31ea8d74 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -1,6 +1,7 @@ import wx import copy from gui import bitmapLoader +import gui.mainFrame import service FitRenamed, EVT_FIT_RENAMED = wx.lib.newevent.NewEvent() @@ -193,6 +194,7 @@ class CategoryItem(wx.Window): self.highlighted = 0 self.editWasShown = 0 + self.mainFrame = gui.mainFrame.MainFrame.getInstance() self.Bind(wx.EVT_PAINT, self.OnPaint) self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) @@ -299,7 +301,7 @@ class ShipItem(wx.Window): self.shipBmp = wx.EmptyBitmap(32, 32) self.shipFittingInfo = shipFittingInfo self.shipName, dummy = shipFittingInfo - self.newBmp = bitmapLoader.getBitmap("fadd", "icons") + self.newBmp = bitmapLoader.getBitmap("fit_add_small", "icons") self.shipBrowser = self.Parent.Parent @@ -466,6 +468,7 @@ class FitItem(wx.Window): size=(0, 36), style=0): wx.Window.__init__(self, parent, id, pos, size, style) + self.mainFrame = gui.mainFrame.MainFrame.getInstance() self._itemData = itemData self.fitID = fitID self.shipID = shipID @@ -473,9 +476,9 @@ class FitItem(wx.Window): self.shipBmp = wx.EmptyBitmap(32, 32) self.shipFittingInfo = shipFittingInfo self.shipName, self.fitName= shipFittingInfo - self.copyBmp = bitmapLoader.getBitmap("fadd", "icons") - self.renameBmp = bitmapLoader.getBitmap("frename", "icons") - self.deleteBmp = bitmapLoader.getBitmap("fdelete","icons") + self.copyBmp = bitmapLoader.getBitmap("fit_add_small", "icons") + self.renameBmp = bitmapLoader.getBitmap("fit_rename_small", "icons") + self.deleteBmp = bitmapLoader.getBitmap("fit_delete_small","icons") self.Bind(wx.EVT_PAINT, self.OnPaint) self.renamePosX = 0 @@ -569,31 +572,45 @@ class FitItem(wx.Window): if self.NHitTest((self.deletePosX,self.deletePosY), pos, (16,16)): if self.editWasShown != 1: self.deleteFit() + return if self.NHitTest((self.copyPosX,self.copyPosY), pos, (16,16)): if self.editWasShown != 1: self.copyFit() + return if (not self.NHitTest((self.renamePosX, self.renamePosY), pos, (16, 16))): - self.editWasShown = 0 - self.Refresh() + if self.editWasShown != 1: + self.selectFit() + else: + self.editWasShown = 0 + self.Refresh() + event.Skip() def renameFit(self, event=None): - print "Rename :", self.fitName," to", self.tcFitName.GetValue(), " dont forget to rename the fit :>" + sFit = service.Fit.getInstance() self.tcFitName.Show(False) self.editWasShown = 0 self.fitName = self.tcFitName.GetValue() + sFit.renameFit(self.fitID, self.fitName) self.Refresh() - def copyFit(self, event = None): - print "Copy" + def copyFit(self, event=None): + sFit = service.Fit.getInstance() + sFit.copyFit(self.fitID) wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) - def deleteFit(self, event = None): - print "Delete" + + def deleteFit(self, event=None): + sFit = service.Fit.getInstance() + sFit.deleteFit(self.fitID) wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) + + def selectFit(self, event=None): + wx.PostEvent(self.mainFrame, FitSelected(fitID=self.fitID)) + def NHitTest(self, target, position, area): x, y = target px, py = position diff --git a/icons/fadd.png b/icons/fit_add_small.png similarity index 100% rename from icons/fadd.png rename to icons/fit_add_small.png diff --git a/icons/fdelete.png b/icons/fit_delete_small.png similarity index 100% rename from icons/fdelete.png rename to icons/fit_delete_small.png diff --git a/icons/frename.png b/icons/fit_rename_small.png similarity index 100% rename from icons/frename.png rename to icons/fit_rename_small.png From 0d33b3dba697464b65be8d86d5df3df07ff1d2c7 Mon Sep 17 00:00:00 2001 From: cncfanatics Date: Tue, 26 Oct 2010 14:21:52 +0200 Subject: [PATCH 21/62] Post forgotten events --- gui/shipBrowser.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index d31ea8d74..f15e04a0f 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -596,6 +596,7 @@ class FitItem(wx.Window): self.editWasShown = 0 self.fitName = self.tcFitName.GetValue() sFit.renameFit(self.fitID, self.fitName) + wx.PostEvent(self.mainFrame, FitRenamed(fitID=self.fitID)) self.Refresh() def copyFit(self, event=None): @@ -607,6 +608,7 @@ class FitItem(wx.Window): sFit = service.Fit.getInstance() sFit.deleteFit(self.fitID) wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) + wx.PostEvent(self.mainFrame, FitRemoved(fitID=self.fitID)) def selectFit(self, event=None): wx.PostEvent(self.mainFrame, FitSelected(fitID=self.fitID)) From f2d81d111f5395c738e6addd1f142e14586273cb Mon Sep 17 00:00:00 2001 From: cncfanatics Date: Tue, 26 Oct 2010 14:59:58 +0200 Subject: [PATCH 22/62] Implement the + button in stage 2 and make the fit count work --- gui/shipBrowser.py | 8 ++++---- service/fit.py | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index f15e04a0f..a1942eaaa 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -72,11 +72,12 @@ class ShipBrowser(wx.Panel): def stage2(self, event): categoryID = event.categoryID sMarket = service.Market.getInstance() + sFit = service.Fit.getInstance() self.lpane.RemoveAllChildren() shipList = sMarket.getShipList(categoryID) shipList.sort(key=self.raceNameKey) for ID, name, race in shipList: - self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, 0), race)) + self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, len(sFit.getFitsWithShip(ID))), race)) self.lpane.RefreshList() self.Show() @@ -379,7 +380,8 @@ class ShipItem(wx.Window): event.Skip() def createNewFit(self, event=None): - print "New :", self.tcFitName.GetValue(), "GTFO from stage2 to stage 3 (refresh stage 3)" + sFit = service.Fit.getInstance() + sFit.newFit(self.shipID, self.tcFitName.GetValue()) self.tcFitName.Show(False) self.editWasShown = 0 wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) @@ -586,8 +588,6 @@ class FitItem(wx.Window): self.editWasShown = 0 self.Refresh() - - event.Skip() def renameFit(self, event=None): diff --git a/service/fit.py b/service/fit.py index f55ca07a3..fed1017e5 100644 --- a/service/fit.py +++ b/service/fit.py @@ -45,10 +45,10 @@ class Fit(object): fit = eos.db.getFit(fitID) return fit.modules[pos] - def newFit(self, shipID, name): + def newFit(self, shipID, name=None): fit = eos.types.Fit() fit.ship = eos.types.Ship(eos.db.getItem(shipID)) - fit.name = name + fit.name = name if name is not None else "New %s" % fit.ship.item.name fit.damagePattern = DamagePattern.getInstance().getDamagePattern("Uniform") eos.db.save(fit) fit.calculateModifiedAttributes() From c277f6f64fd913b6f120b2cea0b08ca07ad7480b Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 16:16:05 +0300 Subject: [PATCH 23/62] Implemented proper back/forward --- gui/shipBrowser.py | 87 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 71 insertions(+), 16 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index f15e04a0f..18c76432a 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -17,6 +17,12 @@ class ShipBrowser(wx.Panel): wx.Panel.__init__ (self, parent) self._lastWidth = 0 + self._activeStage = 0 + + self._stage1Data = -1 + self._stage2Data = -1 + self._stage3Data = -1 + self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize) mainSizer = wx.BoxSizer(wx.VERTICAL) @@ -48,12 +54,22 @@ class ShipBrowser(wx.Panel): def __del__(self): pass + def GetActiveStage(self): + return self._activeStage + def GetStageData(self, stage): + if stage == 1: + return self._stage1Data + if stage == 2: + return self._stage2Data + if stage == 3: + return self._stage3Data + return -1 def nameKey(self, info): return info[1] def stage1(self, event): - self.Layout() + self._activeStage = 1 sMarket = service.Market.getInstance() self.lpane.RemoveAllChildren() categoryList = sMarket.getShipRoot() @@ -70,7 +86,10 @@ class ShipBrowser(wx.Panel): def stage2(self, event): + self._activeStage = 2 categoryID = event.categoryID + self._stage2Data = categoryID + sMarket = service.Market.getInstance() self.lpane.RemoveAllChildren() shipList = sMarket.getShipList(categoryID) @@ -82,7 +101,11 @@ class ShipBrowser(wx.Panel): self.Show() def stage3(self, event): + self._activeStage = 3 + shipID = event.shipID + self._stage3Data = shipID + sFit = service.Fit.getInstance() sMarket = service.Market.getInstance() self.lpane.RemoveAllChildren() @@ -99,16 +122,48 @@ class HeaderPane (wx.Panel): def __init__(self, parent): wx.Panel.__init__ (self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size(500, 32), style=wx.TAB_TRAVERSAL) - bSizer3 = wx.BoxSizer(wx.VERTICAL) + bSizer3 = wx.BoxSizer(wx.HORIZONTAL) self.stHeader = wx.StaticText(self, wx.ID_ANY, u"Back", wx.DefaultPosition, wx.DefaultSize, 0) self.stHeader.Wrap(-1) - bSizer3.Add(self.stHeader, 0, wx.ALL | wx.EXPAND, 5) + bSizer3.Add(self.stHeader, 0, wx.ALL , 5) self.stHeader.Bind(wx.EVT_LEFT_UP,self.OnBack) + self.stForward = wx.StaticText(self, wx.ID_ANY, u"Forward", wx.DefaultPosition, wx.DefaultSize, 0) + self.stForward.Wrap(-1) + bSizer3.Add(self.stForward, 1, wx.ALL , 5) + self.stForward.Bind(wx.EVT_LEFT_UP,self.OnForward) + + self.SetSizer(bSizer3) + self.Layout() + + def OnForward(self,event): + stage = self.Parent.GetActiveStage() + stage +=1 + if stage >3: + stage = 3 + return + self.gotoStage(stage) + event.Skip() def OnBack(self,event): - wx.PostEvent(self.Parent,Stage1Selected()) + stage = self.Parent.GetActiveStage() + stage -=1 + if stage <1: + stage = 1 + return + self.gotoStage(stage) event.Skip() + def gotoStage(self,stage): + if stage == 1: + wx.PostEvent(self.Parent,Stage1Selected()) + elif stage == 2: + categoryID = self.Parent.GetStageData(stage) + if categoryID != -1: + wx.PostEvent(self.Parent,Stage2Selected(categoryID=categoryID)) + elif stage == 3: + shipID = self.Parent.GetStageData(stage) + if shipID != -1: + wx.PostEvent(self.Parent,Stage3Selected(shipID=shipID)) class ListPane (wx.ScrolledWindow): def __init__(self, parent): @@ -148,7 +203,7 @@ class ListPane (wx.ScrolledWindow): def RefreshList(self, doRefresh = False): ypos = 0 maxy = 0 - for i in xrange(self._wCount): + for i in xrange( len(self._wList) ): iwidth, iheight = self._wList[i].GetSize() xa, ya = self.CalcScrolledPosition((0, maxy)) self._wList[i].SetPosition((xa, ya)) @@ -157,21 +212,20 @@ class ListPane (wx.ScrolledWindow): cwidth, cheight = self.GetVirtualSize() - for i in xrange(self._wCount): + for i in xrange( len(self._wList) ): iwidth, iheight = self._wList[i].GetSize() self._wList[i].SetSize((cwidth, iheight)) if doRefresh == True: self._wList[i].Refresh() - def RemoveChild(self, child): - wx.Panel.RemoveChild(self, child) - child.Hide() + def RemoveWidget(self, child): child.Destroy() - self._wCount -= 1 + self._wList.remove(child) + def RemoveAllChildren(self): for widget in self._wList: - self.RemoveChild(widget) + widget.Destroy() self._wList = [] @@ -579,12 +633,13 @@ class FitItem(wx.Window): self.copyFit() return - if (not self.NHitTest((self.renamePosX, self.renamePosY), pos, (16, 16))): - if self.editWasShown != 1: + if self.editWasShown != 1: + activeFitID = self.mainFrame.getActiveFit() + if activeFitID != self.fitID: self.selectFit() - else: - self.editWasShown = 0 - self.Refresh() + else: + self.editWasShown = 0 + self.Refresh() From afde2896521098c0270211ec27777646d93eaa47 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 16:43:49 +0300 Subject: [PATCH 24/62] Icons everywhere --- gui/shipBrowser.py | 26 ++++++++++++++++---------- icons/fforward_small.png | Bin 0 -> 607 bytes icons/frewind_small.png | Bin 0 -> 614 bytes icons/fsearch_small.png | Bin 0 -> 615 bytes 4 files changed, 16 insertions(+), 10 deletions(-) create mode 100644 icons/fforward_small.png create mode 100644 icons/frewind_small.png create mode 100644 icons/fsearch_small.png diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 330cf1606..4bd3ceaaa 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -123,18 +123,24 @@ class HeaderPane (wx.Panel): def __init__(self, parent): wx.Panel.__init__ (self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size(500, 32), style=wx.TAB_TRAVERSAL) - bSizer3 = wx.BoxSizer(wx.HORIZONTAL) - self.stHeader = wx.StaticText(self, wx.ID_ANY, u"Back", wx.DefaultPosition, wx.DefaultSize, 0) - self.stHeader.Wrap(-1) - bSizer3.Add(self.stHeader, 0, wx.ALL , 5) - self.stHeader.Bind(wx.EVT_LEFT_UP,self.OnBack) + self.rewBmp = bitmapLoader.getBitmap("frewind_small","icons") + self.forwBmp = bitmapLoader.getBitmap("fforward_small","icons") + self.searchBmp = bitmapLoader.getBitmap("fsearch_small","icons") + mainSizer = wx.BoxSizer(wx.HORIZONTAL) - self.stForward = wx.StaticText(self, wx.ID_ANY, u"Forward", wx.DefaultPosition, wx.DefaultSize, 0) - self.stForward.Wrap(-1) - bSizer3.Add(self.stForward, 1, wx.ALL , 5) - self.stForward.Bind(wx.EVT_LEFT_UP,self.OnForward) + self.sbRewind = wx.StaticBitmap( self, wx.ID_ANY, self.rewBmp, wx.DefaultPosition, wx.DefaultSize, 0 ) + mainSizer.Add(self.sbRewind, 0, wx.ALL , 5) - self.SetSizer(bSizer3) + self.sbForward = wx.StaticBitmap( self, wx.ID_ANY, self.forwBmp, wx.DefaultPosition, wx.DefaultSize, 0 ) + mainSizer.Add(self.sbForward, 0, wx.ALL , 5) + + self.sbSearch = wx.StaticBitmap( self, wx.ID_ANY, self.searchBmp, wx.DefaultPosition, wx.DefaultSize, 0 ) + mainSizer.Add(self.sbSearch, 0, wx.ALL , 5) + + self.SetSizer(mainSizer) + + self.sbForward.Bind(wx.EVT_LEFT_UP,self.OnForward) + self.sbRewind.Bind(wx.EVT_LEFT_UP,self.OnBack) self.Layout() def OnForward(self,event): diff --git a/icons/fforward_small.png b/icons/fforward_small.png new file mode 100644 index 0000000000000000000000000000000000000000..31f7fd3adf22f2ae4e1162d1e438be7c5d9c5292 GIT binary patch literal 607 zcmV-l0-*hgP)VN9{w9DwJzd%Gm5%l6k(Srw1f=C@i5k%a|<)Grew%RTzD&|xaqcXf< z9*@@$bXSuRnUR_GMnrG_gFk+>+ij)QYU#~plQkL*gL7`wYBg4^R`qhZto$k<$f_Xo z<#I{K-n-q7Ow**(=_LO_v`{FR`Fvje zCh%1@e~?F`5v|v2G7LjvFc=W3dWbN_cqWrko&v(J{s`D?He|Qk1!*YBtJR9ERvYzt zJ(|zwGN#k%P%@d+p8}#;49X}KB%94HV55G&Pm9Gu2v{Y$-LC8hs*A_t>?u&M*9|ml zyWL6wWCWZ}Ck=-~vRJGF7W(*b$n)iLp-3cRJO#v!q9QpfKQN-6~U9qjUp9KZp49DjNvG4H?RHybjH%6LlQtR+QmfUZ9|2q} zb1_@3R&Y9<;C{c0I3ABMpUdND#U4V-<+4^P zmE;$|hi&#L-fp+BSS&zQRT1m;8m7~!4xyB?d_FJf0A4Ra+kcClPUnkQQ53O{tKaWK zCX*pLfH#XG8LeWiR_h-DK5r;AuD_5{@H zb&4IwGM39FxLj^tf(vG|nGhgMQJgRykHusLg8@XN(Ps&Kz61{+kB1PTO^?STGGd^0 zLI@0pL%7{;P%IW991cI5$mc2*3I&EG;6f2*N9brY5<+}p0(|FU#zT6!NV!~2&StY3 zjt&2KI2?o<1mR`E%xIkpwLl;se|weF>9m|oCK)eD*v6h<%{X^{d4LO<&*zhW{FoAn zgcONHNGKGd!C+AJ`~4~xQLooa_`CG$*Z8mT4&e|nrfoDRBme*a07*qoM6N<$f-U?5 AUH||9 literal 0 HcmV?d00001 diff --git a/icons/fsearch_small.png b/icons/fsearch_small.png new file mode 100644 index 0000000000000000000000000000000000000000..cf3d97f75e9cde9c143980d89272fe61fc2d64ee GIT binary patch literal 615 zcmV-t0+{`YP)gNuvOO$0ks zMIj=HnnBRUR?tKXG11rxCU4&7dG4NbuvR2_mEvc)n?Cow;~Wve|KR^>9@p5l)|QB+ z$jmun3q#x>;ss-PW_mnr2MHVzLAl1RW&0?VkixF*4t!St0YVb2wnKdU(kmOHiL;aW zK8Xte%(k>MVGG$E4no6dcNnb>BhVHHGD&1pv4YZ68kE2V03t5#PCEFm7=ad$6)+3B zTCmn*?A?=u(o~ET7~-7g0)ZB=6|lumi4}B}MLgy~Ysy6)Q5%Al7|05&1z3Jpu>cF8 z3?VXs*3<}%h3`5Wld)N2zJnk%Agw<~3k)sPTLFd=F5;d8-bj-09SkQuynfflNcZLN z!^_37fdZvzrq=9~mp*($%mcDRKC&qvaaZuX+C=AT6O*~tHl>0mcP<_q>-z%$xO(@! zYluq5a8VQI$S@4?r*v;gPo!QQ%pX3A#>xx4t=w-L6COWx?aj&`f+!YePsFtj=hOQR zP3=E2j@9L7s8;T^&s?u(Hdpu?CubjMrGn{t_37>9$|AD)QE08weJlKn8|OyjL~7oP zC8mPT`jzuH*Dh^I0048RGafUIT)4H~*m8m>egI0iH=(LB%b@@O002ovPDHLkV1lw0 B3 Date: Tue, 26 Oct 2010 17:16:14 +0300 Subject: [PATCH 25/62] Pure Awesomeness/2 --- gui/bitmapLoader.py | 12 +++++++++--- gui/shipBrowser.py | 17 ++++++++++++++--- icons/fshipbk_big.png | Bin 0 -> 3198 bytes 3 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 icons/fshipbk_big.png diff --git a/gui/bitmapLoader.py b/gui/bitmapLoader.py index 0a0d6f9f8..acfd35811 100644 --- a/gui/bitmapLoader.py +++ b/gui/bitmapLoader.py @@ -26,7 +26,8 @@ def getStaticBitmap(name, parent, location): static.SetBitmap(getBitmap(name,location)) return static -locationMap = {"pack": os.path.join(config.staticPath, "icons")} +locationMap = {"pack": os.path.join(config.staticPath, "icons"), + "ships": os.path.join(config.staticPath, "ships")} def getBitmap(name,location): icon = getImage(name, location) @@ -35,8 +36,13 @@ def getBitmap(name,location): def getImage(name, location): if location in locationMap: - location = locationMap[location] - path = os.path.join(location, "icon%s.png" % name) + if location == "pack": + location = locationMap[location] + path = os.path.join(location, "icon%s.png" % name) + else: + location = locationMap[location] + path = os.path.join(location, "%s.png" % name) + else: location = os.path.join(config.path, location) path = os.path.join(location, name + ".png") diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 4bd3ceaaa..f459cc427 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -359,10 +359,14 @@ class ShipItem(wx.Window): self._itemData = itemData self.shipID = shipID - self.shipBmp = wx.EmptyBitmap(32, 32) + if shipID: + self.shipBmp = bitmapLoader.getBitmap(str(shipID),"ships") + else: + self.shipBmp = wx.EmptyBitmap(32, 32) self.shipFittingInfo = shipFittingInfo self.shipName, dummy = shipFittingInfo self.newBmp = bitmapLoader.getBitmap("fit_add_small", "icons") + self.shipEffBk = bitmapLoader.getBitmap("fshipbk_big","icons") self.shipBrowser = self.Parent.Parent @@ -498,7 +502,7 @@ class ShipItem(wx.Window): mdc.Clear() mdc.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD, False)) -# mdc.DrawBitmap(self.effBmp,5+(rect.height-40)/2,(rect.height-40)/2,0) + mdc.DrawBitmap(self.shipEffBk,5+(rect.height - self.shipEffBk.GetWidth())/2,(rect.height - self.shipEffBk.GetHeight())/2,0) mdc.DrawBitmap(self.shipBmp, 5 + (rect.height - 32) / 2, (rect.height - 32) / 2, 0) @@ -535,12 +539,18 @@ class FitItem(wx.Window): self.fitID = fitID self.shipID = shipID self.shipBrowser = self.Parent.Parent - self.shipBmp = wx.EmptyBitmap(32, 32) + + if shipID: + self.shipBmp = bitmapLoader.getBitmap(str(shipID),"ships") + else: + self.shipBmp = wx.EmptyBitmap(32, 32) + self.shipFittingInfo = shipFittingInfo self.shipName, self.fitName= shipFittingInfo self.copyBmp = bitmapLoader.getBitmap("fit_add_small", "icons") self.renameBmp = bitmapLoader.getBitmap("fit_rename_small", "icons") self.deleteBmp = bitmapLoader.getBitmap("fit_delete_small","icons") + self.shipEffBk = bitmapLoader.getBitmap("fshipbk_big","icons") self.Bind(wx.EVT_PAINT, self.OnPaint) self.renamePosX = 0 @@ -726,6 +736,7 @@ class FitItem(wx.Window): mdc.Clear() mdc.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD, False)) # mdc.DrawBitmap(self.effBmp,5+(rect.height-40)/2,(rect.height-40)/2,0) + mdc.DrawBitmap(self.shipEffBk,5+(rect.height - self.shipEffBk.GetWidth())/2,(rect.height - self.shipEffBk.GetHeight())/2,0) mdc.DrawBitmap(self.shipBmp, 5 + (rect.height - 32) / 2, (rect.height - 32) / 2, 0) diff --git a/icons/fshipbk_big.png b/icons/fshipbk_big.png new file mode 100644 index 0000000000000000000000000000000000000000..81f10490380c9ace144ae8ebd5be83f98427c3a0 GIT binary patch literal 3198 zcmV-^41x2BP)KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde00d`2O+f$vv5tKEQIh}w03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(` z>RI+y?e7jKeZ#YO-C0h>ugK~#9!?3l}K!!Qs;pD0p4BS;#^&GopXRFD!I11}1h|kT=Zy5)0!2|2(E){_ z6x{%GAfFN7ZHqH%kIT!lj1DLa;jl19og~?e0Br2j4n-~27`*gW(0W42ZMt>aGlY` z-HUpI%I9VT*fQpYJ^*&WWk%uA2{;3-Re-1McDr6Km%EsNo6Y7E*aJtP%^0)6nlbWv z2448h=Su$O)Kk<|)>|vi?SU`RJ~-Gah@LSk{#JlyLcm@CJ8A1t=04~adwHqHPLxjw k7((=3x!8vF2XsFJ0LZ^~&QAX0)c^nh07*qoM6N<$f-iduVgLXD literal 0 HcmV?d00001 From 804a726a60cfbc9cf711f959a0b3268484f72c67 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 17:25:32 +0300 Subject: [PATCH 26/62] Awesomeness*3/4 --- eos | 2 +- gui/bitmapLoader.py | 2 +- gui/shipBrowser.py | 56 +++++++++++++++++++++++++++------------------ 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/eos b/eos index 3e68fce62..4af51e067 160000 --- a/eos +++ b/eos @@ -1 +1 @@ -Subproject commit 3e68fce6254a7f1e807e407de79add20b6c2b349 +Subproject commit 4af51e06767b2bccf633f5e7b3bf1aebe3f497be diff --git a/gui/bitmapLoader.py b/gui/bitmapLoader.py index acfd35811..93849441e 100644 --- a/gui/bitmapLoader.py +++ b/gui/bitmapLoader.py @@ -27,7 +27,7 @@ def getStaticBitmap(name, parent, location): return static locationMap = {"pack": os.path.join(config.staticPath, "icons"), - "ships": os.path.join(config.staticPath, "ships")} + "ships": os.path.join(config.staticPath, "icons\\ships")} def getBitmap(name,location): icon = getImage(name, location) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index f459cc427..b69c70aa4 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -300,6 +300,18 @@ class CategoryItem(wx.Window): mdc.SetBackground(wx.Brush(wx.SystemSettings_GetColour(wx.SYS_COLOUR_HIGHLIGHT))) mdc.Clear() mdc.SetTextForeground(wx.SystemSettings_GetColour(wx.SYS_COLOUR_HIGHLIGHTTEXT)) + + sr = 221 + sg = 221 + sb = 221 + + startColor = (sr,sg,sb) + + mdc.GradientFillLinear(r,startColor,wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW),wx.SOUTH) + r.top = r.height + mdc.GradientFillLinear(r,startColor,wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW),wx.NORTH) + mdc.SetTextForeground(wx.BLACK) + else: mdc.SetBackground(wx.Brush(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW))) mdc.SetTextForeground(wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOWTEXT )) @@ -484,17 +496,17 @@ class ShipItem(wx.Window): mdc.SetBackground(wx.Brush(wx.SystemSettings_GetColour(wx.SYS_COLOUR_HIGHLIGHT))) mdc.Clear() mdc.SetTextForeground(wx.SystemSettings_GetColour(wx.SYS_COLOUR_HIGHLIGHTTEXT)) -## -## sr = 221 -## sg = 221 -## sb = 221 -## -## startColor = (sr,sg,sb) -## -## mdc.GradientFillLinear(r,startColor,wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW),wx.SOUTH) -## r.top = r.height -## mdc.GradientFillLinear(r,startColor,wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW),wx.NORTH) -## mdc.SetTextForeground(wx.BLACK) + + sr = 221 + sg = 221 + sb = 221 + + startColor = (sr,sg,sb) + + mdc.GradientFillLinear(r,startColor,wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW),wx.SOUTH) + r.top = r.height + mdc.GradientFillLinear(r,startColor,wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW),wx.NORTH) + mdc.SetTextForeground(wx.BLACK) else: mdc.SetBackground(wx.Brush(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW))) @@ -718,17 +730,17 @@ class FitItem(wx.Window): mdc.SetBackground(wx.Brush(wx.SystemSettings_GetColour(wx.SYS_COLOUR_HIGHLIGHT))) mdc.Clear() mdc.SetTextForeground(wx.SystemSettings_GetColour(wx.SYS_COLOUR_HIGHLIGHTTEXT)) -## -## sr = 221 -## sg = 221 -## sb = 221 -## -## startColor = (sr,sg,sb) -## -## mdc.GradientFillLinear(r,startColor,wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW),wx.SOUTH) -## r.top = r.height -## mdc.GradientFillLinear(r,startColor,wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW),wx.NORTH) -## mdc.SetTextForeground(wx.BLACK) + + sr = 221 + sg = 221 + sb = 221 + + startColor = (sr,sg,sb) + + mdc.GradientFillLinear(r,startColor,wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW),wx.SOUTH) + r.top = r.height + mdc.GradientFillLinear(r,startColor,wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW),wx.NORTH) + mdc.SetTextForeground(wx.BLACK) else: mdc.SetBackground(wx.Brush(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW))) From b68113cea71ea36653ce2f85d5471f8b773b790b Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 17:33:19 +0300 Subject: [PATCH 27/62] Workaround for some missing ship icon files --- gui/shipBrowser.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index b69c70aa4..792f4e41b 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -371,9 +371,10 @@ class ShipItem(wx.Window): self._itemData = itemData self.shipID = shipID + self.shipBmp = None if shipID: self.shipBmp = bitmapLoader.getBitmap(str(shipID),"ships") - else: + if not self.shipBmp: self.shipBmp = wx.EmptyBitmap(32, 32) self.shipFittingInfo = shipFittingInfo self.shipName, dummy = shipFittingInfo @@ -551,10 +552,10 @@ class FitItem(wx.Window): self.fitID = fitID self.shipID = shipID self.shipBrowser = self.Parent.Parent - + self.shipBmp = None if shipID: self.shipBmp = bitmapLoader.getBitmap(str(shipID),"ships") - else: + if not self.shipBmp: self.shipBmp = wx.EmptyBitmap(32, 32) self.shipFittingInfo = shipFittingInfo From 66a4b3cd4b5d85e0bd8a1ee1cefe80c59bf9c5b4 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 17:58:57 +0300 Subject: [PATCH 28/62] Test race --- gui/shipBrowser.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 792f4e41b..69492122e 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -370,6 +370,10 @@ class ShipItem(wx.Window): wx.Window.__init__(self, parent, id, pos, size, style) self._itemData = itemData + + self.shipRace = itemData + print self.shipRace + self.shipID = shipID self.shipBmp = None if shipID: @@ -378,6 +382,7 @@ class ShipItem(wx.Window): self.shipBmp = wx.EmptyBitmap(32, 32) self.shipFittingInfo = shipFittingInfo self.shipName, dummy = shipFittingInfo + self.newBmp = bitmapLoader.getBitmap("fit_add_small", "icons") self.shipEffBk = bitmapLoader.getBitmap("fshipbk_big","icons") From 7038954389a9c0e364efaab434711a69507d454c Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 18:55:00 +0300 Subject: [PATCH 29/62] Ugly stuff - race imgs --- gui/bitmapLoader.py | 2 +- gui/shipBrowser.py | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/gui/bitmapLoader.py b/gui/bitmapLoader.py index 93849441e..5caab81e6 100644 --- a/gui/bitmapLoader.py +++ b/gui/bitmapLoader.py @@ -27,7 +27,7 @@ def getStaticBitmap(name, parent, location): return static locationMap = {"pack": os.path.join(config.staticPath, "icons"), - "ships": os.path.join(config.staticPath, "icons\\ships")} + "ships": os.path.join(config.staticPath, "icons/ships")} def getBitmap(name,location): icon = getImage(name, location) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 69492122e..68aba439c 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -372,7 +372,6 @@ class ShipItem(wx.Window): self._itemData = itemData self.shipRace = itemData - print self.shipRace self.shipID = shipID self.shipBmp = None @@ -385,6 +384,7 @@ class ShipItem(wx.Window): self.newBmp = bitmapLoader.getBitmap("fit_add_small", "icons") self.shipEffBk = bitmapLoader.getBitmap("fshipbk_big","icons") + self.raceBmp = bitmapLoader.getBitmap("race_%s_small" % self.shipRace, "icons") self.shipBrowser = self.Parent.Parent @@ -520,10 +520,15 @@ class ShipItem(wx.Window): mdc.Clear() mdc.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD, False)) - mdc.DrawBitmap(self.shipEffBk,5+(rect.height - self.shipEffBk.GetWidth())/2,(rect.height - self.shipEffBk.GetHeight())/2,0) + mdc.DrawBitmap(self.shipEffBk, 5 + (rect.height - self.shipEffBk.GetWidth())/2, (rect.height - self.shipEffBk.GetHeight())/2, 0) mdc.DrawBitmap(self.shipBmp, 5 + (rect.height - 32) / 2, (rect.height - 32) / 2, 0) - + tempdc = wx.MemoryDCFromDC(mdc) + tempdc.DrawBitmap(self.raceBmp,0,0,0) +# mdc.Blit(5 + (rect.height - self.raceBmp.GetWidth()) / 2, (rect.height - self.raceBmp.GetHeight()) / 2, +# self.raceBmp.GetWidth(),self.raceBmp.GetHeight(), tempdc, 0, 0, rop = wx.XOR, useMask = True) + mdc.DrawBitmap(self.raceBmp, 5 + (rect.height - self.raceBmp.GetWidth()) / 2, (rect.height - self.raceBmp.GetHeight()) / 2, 0) + tempdc.SelectObject(wx.NullBitmap) shipName, fittings = self.shipFittingInfo From 5103420219fdc5b816ed141ee450d4f624828134 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 19:30:02 +0300 Subject: [PATCH 30/62] Small rearrangement in shipitem widget draw --- gui/shipBrowser.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 68aba439c..0b6e7b09e 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -523,12 +523,16 @@ class ShipItem(wx.Window): mdc.DrawBitmap(self.shipEffBk, 5 + (rect.height - self.shipEffBk.GetWidth())/2, (rect.height - self.shipEffBk.GetHeight())/2, 0) mdc.DrawBitmap(self.shipBmp, 5 + (rect.height - 32) / 2, (rect.height - 32) / 2, 0) - tempdc = wx.MemoryDCFromDC(mdc) - tempdc.DrawBitmap(self.raceBmp,0,0,0) +# tempdc = wx.MemoryDCFromDC(mdc) +# tempdc.DrawBitmap(self.raceBmp,0,0,0) # mdc.Blit(5 + (rect.height - self.raceBmp.GetWidth()) / 2, (rect.height - self.raceBmp.GetHeight()) / 2, # self.raceBmp.GetWidth(),self.raceBmp.GetHeight(), tempdc, 0, 0, rop = wx.XOR, useMask = True) - mdc.DrawBitmap(self.raceBmp, 5 + (rect.height - self.raceBmp.GetWidth()) / 2, (rect.height - self.raceBmp.GetHeight()) / 2, 0) - tempdc.SelectObject(wx.NullBitmap) +# img = self.raceBmp.ConvertToImage() +# img.AdjustChannels(1, 1, 1,0) +# self.raceBmp = wx.BitmapFromImage(img) +# mdc.DrawBitmap(self.raceBmp, 5 + (rect.height - self.raceBmp.GetWidth()) , (rect.height - self.raceBmp.GetHeight()) , 0) +# mdc.DrawBitmap(self.raceBmp, 5 + (rect.height - self.shipBmp.GetWidth()) / 2, (rect.height - self.shipBmp.GetHeight()) / 2, 0) +# tempdc.SelectObject(wx.NullBitmap) shipName, fittings = self.shipFittingInfo @@ -537,13 +541,17 @@ class ShipItem(wx.Window): ypos = (rect.height - 32) / 2 textStart = 48 xtext, ytext = mdc.GetTextExtent(shipName) - mdc.DrawText(shipName, textStart, ypos) + mdc.DrawBitmap(self.raceBmp,textStart, ypos + self.raceBmp.GetHeight()/2) + mdc.DrawText(shipName, textStart + self.raceBmp.GetWidth() + 4, ypos) + textStart += self.raceBmp.GetWidth() + 4 + ypos += ytext mdc.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) xtext, ytext = mdc.GetTextExtent("%d fitting(s)") mdc.DrawText("%d fitting(s)" % fittings, textStart, ypos) + # mdc.SetFont(wx.Font(7, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) self.editPosX = rect.width - 20 From c23700d3f5c662206929855d4938393c12641cb9 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 19:55:27 +0300 Subject: [PATCH 31/62] More improvments in shipitem widget --- gui/shipBrowser.py | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 0b6e7b09e..fed6bdb5a 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -366,7 +366,7 @@ class CategoryItem(wx.Window): class ShipItem(wx.Window): def __init__(self, parent, shipID=None, shipFittingInfo=("Test", 2), itemData=None, id=wx.ID_ANY, range=100, pos=wx.DefaultPosition, - size=(0, 36), style=0): + size=(0, 38), style=0): wx.Window.__init__(self, parent, id, pos, size, style) self._itemData = itemData @@ -397,6 +397,8 @@ class ShipItem(wx.Window): self.tcFitName = wx.TextCtrl(self, wx.ID_ANY, "%s fit" % self.shipName, wx.DefaultPosition, (120,-1), wx.TE_PROCESS_ENTER) self.tcFitName.Show(False) + self.btnsStatus = "" + self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) self.Bind(wx.EVT_LEFT_UP, self.checkPosition) @@ -431,8 +433,15 @@ class ShipItem(wx.Window): pos = event.GetPosition() if self.NHitTest((self.editPosX, self.editPosY), pos, (16, 16)): self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) + if self.btnsStatus != "New fit": + self.btnsStatus = "New fit" + self.Refresh() else: self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) + if self.btnsStatus != "": + self.btnsStatus = "" + self.Refresh() + def checkPosition(self, event): pos = event.GetPosition() @@ -549,14 +558,31 @@ class ShipItem(wx.Window): mdc.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) - xtext, ytext = mdc.GetTextExtent("%d fitting(s)") - mdc.DrawText("%d fitting(s)" % fittings, textStart, ypos) + if fittings <1: + fformat = "No fits" + else: + if fittings == 1: + fformat = "%d fit" + else: + fformat = "%d fits" + + if fittings>0: + xtext, ytext = mdc.GetTextExtent(fformat % fittings) + else: + xtext, ytext = mdc.GetTextExtent(fformat) + + mdc.DrawText(fformat %fittings if fittings >0 else fformat, textStart, ypos) # mdc.SetFont(wx.Font(7, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) self.editPosX = rect.width - 20 self.editPosY = (rect.height - 16) / 2 mdc.DrawBitmap(self.newBmp, self.editPosX, self.editPosY, 0) + if self.btnsStatus != "": + status = "%s" % self.btnsStatus + xtext, ytext = mdc.GetTextExtent(status) + ytext = (rect.height - ytext)/2 + mdc.DrawText(status, self.editPosX - xtext -5,ytext) event.Skip() class FitItem(wx.Window): From d045ed2732569fa8d63682440e7a0e83a002a4f0 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 20:09:07 +0300 Subject: [PATCH 32/62] Minor optimization for refresh in case of resize --- gui/shipBrowser.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index fed6bdb5a..2dfa9158b 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -218,12 +218,14 @@ class ListPane (wx.ScrolledWindow): self.SetVirtualSize((1, maxy)) cwidth, cheight = self.GetVirtualSize() - + clientW,clientH = self.GetSize() for i in xrange( len(self._wList) ): iwidth, iheight = self._wList[i].GetSize() + itemX,itemY = self._wList[i].GetPosition() self._wList[i].SetSize((cwidth, iheight)) if doRefresh == True: - self._wList[i].Refresh() + if itemY >=-iheight and itemY< clientH: + self._wList[i].Refresh() def RemoveWidget(self, child): child.Destroy() From 070fa9a0d17d564037c859e7fa45d8d9d954e1b9 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 20:51:00 +0300 Subject: [PATCH 33/62] Added text label for back/forw./search --- gui/shipBrowser.py | 84 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 81 insertions(+), 3 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 2dfa9158b..814bf4a71 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -129,19 +129,89 @@ class HeaderPane (wx.Panel): mainSizer = wx.BoxSizer(wx.HORIZONTAL) self.sbRewind = wx.StaticBitmap( self, wx.ID_ANY, self.rewBmp, wx.DefaultPosition, wx.DefaultSize, 0 ) - mainSizer.Add(self.sbRewind, 0, wx.ALL , 5) + mainSizer.Add(self.sbRewind, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) self.sbForward = wx.StaticBitmap( self, wx.ID_ANY, self.forwBmp, wx.DefaultPosition, wx.DefaultSize, 0 ) - mainSizer.Add(self.sbForward, 0, wx.ALL , 5) + mainSizer.Add(self.sbForward, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) self.sbSearch = wx.StaticBitmap( self, wx.ID_ANY, self.searchBmp, wx.DefaultPosition, wx.DefaultSize, 0 ) - mainSizer.Add(self.sbSearch, 0, wx.ALL , 5) + mainSizer.Add(self.sbSearch, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) + self.stStatus = wx.StaticText( self, wx.ID_ANY, "Status", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stStatus.Wrap( -1 ) + mainSizer.Add(self.stStatus, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) self.SetSizer(mainSizer) self.sbForward.Bind(wx.EVT_LEFT_UP,self.OnForward) + self.sbForward.Bind( wx.EVT_ENTER_WINDOW, self.OnEnterWForward ) + self.sbForward.Bind( wx.EVT_LEAVE_WINDOW, self.OnLeaveWForward ) + self.sbRewind.Bind(wx.EVT_LEFT_UP,self.OnBack) + self.sbRewind.Bind( wx.EVT_ENTER_WINDOW, self.OnEnterWRewind ) + self.sbRewind.Bind( wx.EVT_LEAVE_WINDOW, self.OnLeaveWRewind ) + + self.sbSearch.Bind(wx.EVT_LEFT_UP,self.OnSearch) + self.sbSearch.Bind( wx.EVT_ENTER_WINDOW, self.OnEnterWSearch ) + self.sbSearch.Bind( wx.EVT_LEAVE_WINDOW, self.OnLeaveWSearch ) + + self.Layout() + def OnEnterWForward(self, event): + self.stStatus.SetLabel("Forward") + stage = self.Parent.GetActiveStage() + stage +=1 + if stage >3: + stage = 3 + if stage < 3: + data = self.Parent.GetStageData(stage) + if data != -1: + self.stStatus.Enable() + else: + self.stStatus.Disable() + else: + self.stStatus.Disable() + + self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) + event.Skip() + + def OnLeaveWForward(self, event): + self.stStatus.Enable() + self.stStatus.SetLabel("") + self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) + event.Skip() + + def OnEnterWRewind(self, event): + self.stStatus.SetLabel("Back") + + stage = self.Parent.GetActiveStage() + + if stage > 1: + self.stStatus.Enable() + else: + self.stStatus.Disable() + + + self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) + event.Skip() + + def OnLeaveWRewind(self, event): + self.stStatus.Enable() + self.stStatus.SetLabel("") + self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) + event.Skip() + + def OnEnterWSearch(self, event): + self.stStatus.SetLabel("Search fitting") + self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) + event.Skip() + + def OnLeaveWSearch(self, event): + self.stStatus.SetLabel("") + self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) + event.Skip() + + def OnSearch(self, event): + event.Skip() def OnForward(self,event): stage = self.Parent.GetActiveStage() @@ -150,6 +220,10 @@ class HeaderPane (wx.Panel): stage = 3 return self.gotoStage(stage) + + self.stStatus.Enable() + self.stStatus.SetLabel("") + event.Skip() def OnBack(self,event): @@ -159,6 +233,10 @@ class HeaderPane (wx.Panel): stage = 1 return self.gotoStage(stage) + + self.stStatus.Enable() + self.stStatus.SetLabel("") + event.Skip() def gotoStage(self,stage): if stage == 1: From 34aad9c4c2a93c4e7384c2390d1f20836cea0a55 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 21:03:37 +0300 Subject: [PATCH 34/62] Show new fit textedit when group no. of fittings = 0 --- gui/shipBrowser.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 814bf4a71..c18b9ea1d 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -460,7 +460,7 @@ class ShipItem(wx.Window): if not self.shipBmp: self.shipBmp = wx.EmptyBitmap(32, 32) self.shipFittingInfo = shipFittingInfo - self.shipName, dummy = shipFittingInfo + self.shipName, self.shipFits = shipFittingInfo self.newBmp = bitmapLoader.getBitmap("fit_add_small", "icons") self.shipEffBk = bitmapLoader.getBitmap("fshipbk_big","icons") @@ -543,9 +543,23 @@ class ShipItem(wx.Window): return if (not self.NHitTest((self.editPosX, self.editPosY), pos, (16, 16))): - self.editWasShown = 0 self.Refresh() - wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) + if self.shipFits > 0: + self.editWasShown = 0 + wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) + + else: + if self.editWasShown == 0: + fnEditSize = self.tcFitName.GetSize() + wSize = self.GetSize() + fnEditPosX = self.editPosX - fnEditSize.width - 5 + fnEditPosY = (wSize.height - fnEditSize.height) / 2 + self.tcFitName.SetPosition((fnEditPosX, fnEditPosY)) + self.tcFitName.Show(True) + self.tcFitName.SetFocus() + self.tcFitName.SelectAll() + else: + self.editWasShown = 0 event.Skip() From cd421d48fcb90e33784113b083c3575627c17f50 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 21:09:13 +0300 Subject: [PATCH 35/62] Little fix of a minor frack-up on forward btn status --- gui/shipBrowser.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index c18b9ea1d..b1d1fa881 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -159,12 +159,9 @@ class HeaderPane (wx.Panel): def OnEnterWForward(self, event): self.stStatus.SetLabel("Forward") stage = self.Parent.GetActiveStage() - stage +=1 - if stage >3: - stage = 3 + if stage < 3: - data = self.Parent.GetStageData(stage) - if data != -1: + if self.Parent.GetStageData(stage+1) != -1: self.stStatus.Enable() else: self.stStatus.Disable() From b81eb6ef7e2377b058e0430408971f00b2c2da15 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 21:15:05 +0300 Subject: [PATCH 36/62] No status on init, plix --- gui/shipBrowser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index b1d1fa881..13c5f369a 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -136,7 +136,7 @@ class HeaderPane (wx.Panel): self.sbSearch = wx.StaticBitmap( self, wx.ID_ANY, self.searchBmp, wx.DefaultPosition, wx.DefaultSize, 0 ) mainSizer.Add(self.sbSearch, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) - self.stStatus = wx.StaticText( self, wx.ID_ANY, "Status", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stStatus = wx.StaticText( self, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, 0 ) self.stStatus.Wrap( -1 ) mainSizer.Add(self.stStatus, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) From ca4e87d7ea761195b200824b3703bedc49f7b2ef Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 21:28:48 +0300 Subject: [PATCH 37/62] Toggle new fit bmp to accept bmp when we want to create a new fit --- gui/shipBrowser.py | 13 ++++++++++--- icons/faccept_small.png | Bin 0 -> 781 bytes 2 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 icons/faccept_small.png diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 13c5f369a..b83b8c630 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -460,6 +460,8 @@ class ShipItem(wx.Window): self.shipName, self.shipFits = shipFittingInfo self.newBmp = bitmapLoader.getBitmap("fit_add_small", "icons") + self.acceptBmp = bitmapLoader.getBitmap("faccept_small", "icons") + self.newToggleBmp = self.newBmp self.shipEffBk = bitmapLoader.getBitmap("fshipbk_big","icons") self.raceBmp = bitmapLoader.getBitmap("race_%s_small" % self.shipRace, "icons") @@ -528,7 +530,6 @@ class ShipItem(wx.Window): self.createNewFit() return else: - self.Refresh() fnEditSize = self.tcFitName.GetSize() wSize = self.GetSize() fnEditPosX = self.editPosX - fnEditSize.width - 5 @@ -537,10 +538,11 @@ class ShipItem(wx.Window): self.tcFitName.Show(True) self.tcFitName.SetFocus() self.tcFitName.SelectAll() + self.newToggleBmp = self.acceptBmp + self.Refresh() return if (not self.NHitTest((self.editPosX, self.editPosY), pos, (16, 16))): - self.Refresh() if self.shipFits > 0: self.editWasShown = 0 wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) @@ -555,8 +557,12 @@ class ShipItem(wx.Window): self.tcFitName.Show(True) self.tcFitName.SetFocus() self.tcFitName.SelectAll() + self.newToggleBmp = self.acceptBmp + self.Refresh() else: self.editWasShown = 0 + self.newToggleBmp = self.newBmp + self.Refresh() event.Skip() @@ -668,7 +674,8 @@ class ShipItem(wx.Window): self.editPosX = rect.width - 20 self.editPosY = (rect.height - 16) / 2 - mdc.DrawBitmap(self.newBmp, self.editPosX, self.editPosY, 0) + + mdc.DrawBitmap(self.newToggleBmp, self.editPosX, self.editPosY, 0) if self.btnsStatus != "": status = "%s" % self.btnsStatus xtext, ytext = mdc.GetTextExtent(status) diff --git a/icons/faccept_small.png b/icons/faccept_small.png new file mode 100644 index 0000000000000000000000000000000000000000..89c8129a490b329f3165f32fa0781701aab417ea GIT binary patch literal 781 zcmV+o1M>WdP)4-QibtN)VXQDpczE`xXAkUjh%RI>;okxb7K@0kpyQ1k_Y(|Oe7$m(^ zNYX>mI||sUbmn+c3<&FnE=4u#()KBS^SH8e)Qs5i!#lY=$-1gbH6VluzU=m=EP78&5vQ z-?+fFP-G2l&l_QzYealK$;1Rl?FkzXR&Jv@fBPNjCr#AYRyJ7UJQ0v#?)7Ott=>3`#-pV!7>9}>Q1jL)H6h&gkP@3nI=+F3nA~M>u#(n* z8T!#8oEw&-mED4!h4s!N@Jo3S7N&Q6%6l3}nlcd~X@>;uelvPsSkXIgg~e+^T1zSf z3SNj(5%jK~i8@b;C Date: Tue, 26 Oct 2010 21:48:27 +0300 Subject: [PATCH 38/62] Jump back to stage 2 if stage 3 becomes empty --- gui/shipBrowser.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index b83b8c630..efb36c380 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -26,8 +26,8 @@ class ShipBrowser(wx.Panel): self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize) mainSizer = wx.BoxSizer(wx.VERTICAL) - hpane = HeaderPane(self) - mainSizer.Add(hpane, 0, wx.EXPAND) + self.hpane = HeaderPane(self) + mainSizer.Add(self.hpane, 0, wx.EXPAND) self.lpane = ListPane(self) mainSizer.Add(self.lpane, 1, wx.EXPAND) @@ -111,6 +111,12 @@ class ShipBrowser(wx.Panel): sMarket = service.Market.getInstance() self.lpane.RemoveAllChildren() fitList = sFit.getFitsWithShip(shipID) + + if len(fitList) == 0: + self._stage3Data = -1 + self.hpane.gotoStage(2) + return + fitList.sort(key=self.nameKey) shipName = sMarket.getItem(shipID).name for ID, name in fitList: From 3709cd46a144549f9adcabc56465e337327e7a00 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 22:17:51 +0300 Subject: [PATCH 39/62] Added new fit for stage 3 (headerpane) --- gui/shipBrowser.py | 46 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index efb36c380..c7da89400 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -22,6 +22,7 @@ class ShipBrowser(wx.Panel): self._stage1Data = -1 self._stage2Data = -1 self._stage3Data = -1 + self._stage3ShipName = "" self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize) @@ -65,11 +66,15 @@ class ShipBrowser(wx.Panel): if stage == 3: return self._stage3Data return -1 + def GetStage3ShipName(self): + return self._stage3ShipName + def nameKey(self, info): return info[1] def stage1(self, event): self._activeStage = 1 + self.hpane.ToggleNewFitSB(False) sMarket = service.Market.getInstance() self.lpane.RemoveAllChildren() categoryList = sMarket.getShipRoot() @@ -89,7 +94,7 @@ class ShipBrowser(wx.Panel): self._activeStage = 2 categoryID = event.categoryID self._stage2Data = categoryID - + self.hpane.ToggleNewFitSB(False) sMarket = service.Market.getInstance() sFit = service.Fit.getInstance() self.lpane.RemoveAllChildren() @@ -116,9 +121,10 @@ class ShipBrowser(wx.Panel): self._stage3Data = -1 self.hpane.gotoStage(2) return - + self.hpane.ToggleNewFitSB(True) fitList.sort(key=self.nameKey) shipName = sMarket.getItem(shipID).name + self._stage3ShipName = shipName for ID, name in fitList: self.lpane.AddWidget(FitItem(self.lpane, ID, (shipName, name),shipID)) @@ -132,6 +138,8 @@ class HeaderPane (wx.Panel): self.rewBmp = bitmapLoader.getBitmap("frewind_small","icons") self.forwBmp = bitmapLoader.getBitmap("fforward_small","icons") self.searchBmp = bitmapLoader.getBitmap("fsearch_small","icons") + self.newBmp = bitmapLoader.getBitmap("fit_add_small","icons") + mainSizer = wx.BoxSizer(wx.HORIZONTAL) self.sbRewind = wx.StaticBitmap( self, wx.ID_ANY, self.rewBmp, wx.DefaultPosition, wx.DefaultSize, 0 ) @@ -142,6 +150,10 @@ class HeaderPane (wx.Panel): self.sbSearch = wx.StaticBitmap( self, wx.ID_ANY, self.searchBmp, wx.DefaultPosition, wx.DefaultSize, 0 ) mainSizer.Add(self.sbSearch, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) + + self.sbNewFit = wx.StaticBitmap( self, wx.ID_ANY, self.newBmp, wx.DefaultPosition, wx.DefaultSize, 0 ) + mainSizer.Add(self.sbNewFit, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) + self.stStatus = wx.StaticText( self, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, 0 ) self.stStatus.Wrap( -1 ) mainSizer.Add(self.stStatus, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) @@ -160,8 +172,16 @@ class HeaderPane (wx.Panel): self.sbSearch.Bind( wx.EVT_ENTER_WINDOW, self.OnEnterWSearch ) self.sbSearch.Bind( wx.EVT_LEAVE_WINDOW, self.OnLeaveWSearch ) + self.sbNewFit.Bind(wx.EVT_LEFT_UP,self.OnNewFitting) + self.sbNewFit.Bind( wx.EVT_ENTER_WINDOW, self.OnEnterWNewFit ) + self.sbNewFit.Bind( wx.EVT_LEAVE_WINDOW, self.OnLeaveWNewFit ) self.Layout() + + def ToggleNewFitSB(self, toggle): + self.sbNewFit.Show(toggle) + self.Layout() + def OnEnterWForward(self, event): self.stStatus.SetLabel("Forward") stage = self.Parent.GetActiveStage() @@ -204,7 +224,7 @@ class HeaderPane (wx.Panel): event.Skip() def OnEnterWSearch(self, event): - self.stStatus.SetLabel("Search fitting") + self.stStatus.SetLabel("Search fittings") self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) event.Skip() @@ -213,9 +233,29 @@ class HeaderPane (wx.Panel): self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) event.Skip() + def OnEnterWNewFit(self, event): + self.stStatus.SetLabel("New fitting") + self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) + event.Skip() + + def OnLeaveWNewFit(self, event): + self.stStatus.SetLabel("") + self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) + event.Skip() + def OnSearch(self, event): event.Skip() + def OnNewFitting(self, event): + stage = self.Parent.GetActiveStage() + if stage == 3: + shipID = self.Parent.GetStageData(stage) + shipName = self.Parent.GetStage3ShipName() + sFit = service.Fit.getInstance() + sFit.newFit(shipID, "%s fit" %shipName) + wx.PostEvent(self.Parent,Stage3Selected(shipID=shipID)) + event.Skip() + def OnForward(self,event): stage = self.Parent.GetActiveStage() stage +=1 From 3705e7d5d50444ab6e23460b41ed845f9ea304c0 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 22:26:03 +0300 Subject: [PATCH 40/62] Fix in stage2 checkPosition logic --- gui/shipBrowser.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index c7da89400..a56a46e3e 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -590,9 +590,10 @@ class ShipItem(wx.Window): if (not self.NHitTest((self.editPosX, self.editPosY), pos, (16, 16))): if self.shipFits > 0: - self.editWasShown = 0 - wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) - + if self.editWasShown == 1: + self.editWasShown = 0 + else: + wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) else: if self.editWasShown == 0: fnEditSize = self.tcFitName.GetSize() @@ -611,6 +612,7 @@ class ShipItem(wx.Window): self.Refresh() + event.Skip() def createNewFit(self, event=None): From dcb5108e2c1ecbd96e10195681a84446fe0b9039 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 22:32:52 +0300 Subject: [PATCH 41/62] Do not allow getting into stage 3 using forward button if curent category not stage3 category --- gui/shipBrowser.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index a56a46e3e..9bd6be840 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -93,6 +93,9 @@ class ShipBrowser(wx.Panel): def stage2(self, event): self._activeStage = 2 categoryID = event.categoryID + if self.GetStageData(self._activeStage) != categoryID: + self._stage3Data = -1 + self._stage2Data = categoryID self.hpane.ToggleNewFitSB(False) sMarket = service.Market.getInstance() From fd9a76f8f1e3d2c77d434e48006cdeb02dcd9435 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Tue, 26 Oct 2010 22:46:32 +0300 Subject: [PATCH 42/62] Cosmetic changes header pane --- gui/shipBrowser.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 9bd6be840..bfaadd454 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -151,9 +151,15 @@ class HeaderPane (wx.Panel): self.sbForward = wx.StaticBitmap( self, wx.ID_ANY, self.forwBmp, wx.DefaultPosition, wx.DefaultSize, 0 ) mainSizer.Add(self.sbForward, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) + self.sl1 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_VERTICAL ) + mainSizer.Add( self.sl1, 0, wx.EXPAND |wx.ALL, 5 ) + self.sbSearch = wx.StaticBitmap( self, wx.ID_ANY, self.searchBmp, wx.DefaultPosition, wx.DefaultSize, 0 ) mainSizer.Add(self.sbSearch, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) + self.sl2 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_VERTICAL ) + mainSizer.Add( self.sl2, 0, wx.EXPAND |wx.ALL, 5 ) + self.sbNewFit = wx.StaticBitmap( self, wx.ID_ANY, self.newBmp, wx.DefaultPosition, wx.DefaultSize, 0 ) mainSizer.Add(self.sbNewFit, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) @@ -183,6 +189,7 @@ class HeaderPane (wx.Panel): def ToggleNewFitSB(self, toggle): self.sbNewFit.Show(toggle) + self.sl2.Show(toggle) self.Layout() def OnEnterWForward(self, event): @@ -737,7 +744,7 @@ class ShipItem(wx.Window): class FitItem(wx.Window): def __init__(self, parent, fitID=None, shipFittingInfo=("Test", "cnc's avatar"), shipID = None, itemData=None, id=wx.ID_ANY, range=100, pos=wx.DefaultPosition, - size=(0, 36), style=0): + size=(0, 38), style=0): wx.Window.__init__(self, parent, id, pos, size, style) self.mainFrame = gui.mainFrame.MainFrame.getInstance() From 9147a3f58f8775aab469bf490ac33046443f5383 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Wed, 27 Oct 2010 02:51:43 +0300 Subject: [PATCH 43/62] Added search control --- gui/shipBrowser.py | 126 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 122 insertions(+), 4 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index bfaadd454..d229a3000 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -134,6 +134,31 @@ class ShipBrowser(wx.Panel): self.lpane.RefreshList() self.Show() +class TransientWndSearch(wx.Panel): + def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,size=(0,16), style = 0): + wx.Panel.__init__(self, parent,id, pos, size, style) + mainSizer = wx.BoxSizer(wx.HORIZONTAL) + self.search = wx.SearchCtrl(self, wx.ID_ANY, "", style=wx.TE_PROCESS_ENTER) + self.search.ShowCancelButton(True) + self.search.SetMenu( self.MakeMenu() ) + mainSizer.Add(self.search,1, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL, 0 ) + self.SetSizer(mainSizer) + self.Fit() + self.Layout() + + def MakeMenu(self): + menu = wx.Menu() + item = menu.Append(-1, "Recent Searches") + item.Enable(False) + for txt in [ "You can maintain", + "a list of old", + "search strings here", + "and bind EVT_MENU to", + "catch their selections" ]: + menu.Append(-1, txt) + return menu + + class HeaderPane (wx.Panel): def __init__(self, parent): wx.Panel.__init__ (self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size(500, 32), style=wx.TAB_TRAVERSAL) @@ -143,6 +168,10 @@ class HeaderPane (wx.Panel): self.searchBmp = bitmapLoader.getBitmap("fsearch_small","icons") self.newBmp = bitmapLoader.getBitmap("fit_add_small","icons") + self.toggleSearch = -1 + self.recentSearches = [] + self.menu = None + mainSizer = wx.BoxSizer(wx.HORIZONTAL) self.sbRewind = wx.StaticBitmap( self, wx.ID_ANY, self.rewBmp, wx.DefaultPosition, wx.DefaultSize, 0 ) @@ -166,6 +195,15 @@ class HeaderPane (wx.Panel): self.stStatus = wx.StaticText( self, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, 0 ) self.stStatus.Wrap( -1 ) mainSizer.Add(self.stStatus, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) + self.spanel = wx.Panel(self) + spsizer = wx.BoxSizer(wx.HORIZONTAL) + self.spanel.SetSizer(spsizer) + + self.search = wx.TextCtrl(self.spanel, wx.ID_ANY, "", style=wx.TE_PROCESS_ENTER ) + + + spsizer.Add(self.search,1, wx.ALIGN_CENTER_VERTICAL) + mainSizer.Add(self.spanel,1,wx.EXPAND) self.SetSizer(mainSizer) @@ -185,7 +223,71 @@ class HeaderPane (wx.Panel): self.sbNewFit.Bind( wx.EVT_ENTER_WINDOW, self.OnEnterWNewFit ) self.sbNewFit.Bind( wx.EVT_LEAVE_WINDOW, self.OnLeaveWNewFit ) + self.search.Bind(wx.EVT_TEXT_ENTER, self.doSearch) + self.search.Bind(wx.EVT_KILL_FOCUS, self.editLostFocus) + self.search.Bind(wx.EVT_KEY_DOWN, self.editCheckEsc) + self.search.Bind(wx.EVT_CONTEXT_MENU,self.OnMenu) + self.search.Bind(wx.EVT_TEXT, self.scheduleSearch) + self.Layout() + self.spanel.Hide() + + def scheduleSearch(self, event): + search = self.search.GetValue() + if len(search) < 3 and len(search) > 0: + print "need more chars/clear search" + else: + if search: + print "DO SEARCH ", search + + event.Skip() + def OnMenu(self, event): + self.menu = self.MakeMenu() + self.PopupMenu(self.menu) + pass + def OnMenuSelected(self, event): + item = self.menu.FindItemById(event.GetId()) + text = item.GetText() + print "menu sel do search:",text + self.editLostFocus() + + def MakeMenu(self): + menu = wx.Menu() + item = menu.Append(-1, "Recent Searches") + item.Enable(False) + if len(self.recentSearches) > 0: + menu.AppendSeparator() + for txt in self.recentSearches: + if txt: + item = menu.Append(-1, txt) + menu.Bind(wx.EVT_MENU, self.OnMenuSelected, item) + return menu + + + def editLostFocus(self, event = None): + self.spanel.Show(False) + if self.menu: + self.menu.Destroy() + + stxt = self.search.GetValue() + if stxt not in self.recentSearches: + self.recentSearches.append(stxt) + if len(self.recentSearches) >5: + self.recentSearches.remove(self.recentSearches[0]) + self.search.SetValue("") + self.toggleSearch = -1 + + def editCheckEsc(self, event): + if event.GetKeyCode() == wx.WXK_ESCAPE: + self.spanel.Show(False) + self.toggleSearch = -1 + else: + event.Skip() + def doSearch(self, event): + stxt = self.search.GetValue() + if stxt: + print "ENTER -> Search", stxt + self.editLostFocus() def ToggleNewFitSB(self, toggle): self.sbNewFit.Show(toggle) @@ -193,7 +295,8 @@ class HeaderPane (wx.Panel): self.Layout() def OnEnterWForward(self, event): - self.stStatus.SetLabel("Forward") + if self.toggleSearch != 1: + self.stStatus.SetLabel("Forward") stage = self.Parent.GetActiveStage() if stage < 3: @@ -214,7 +317,8 @@ class HeaderPane (wx.Panel): event.Skip() def OnEnterWRewind(self, event): - self.stStatus.SetLabel("Back") + if self.toggleSearch != 1: + self.stStatus.SetLabel("Back") stage = self.Parent.GetActiveStage() @@ -234,7 +338,8 @@ class HeaderPane (wx.Panel): event.Skip() def OnEnterWSearch(self, event): - self.stStatus.SetLabel("Search fittings") + if self.toggleSearch != 1: + self.stStatus.SetLabel("Search fittings") self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) event.Skip() @@ -244,7 +349,8 @@ class HeaderPane (wx.Panel): event.Skip() def OnEnterWNewFit(self, event): - self.stStatus.SetLabel("New fitting") + if self.toggleSearch != 1: + self.stStatus.SetLabel("New fitting") self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) event.Skip() @@ -254,9 +360,19 @@ class HeaderPane (wx.Panel): event.Skip() def OnSearch(self, event): + self.stStatus.SetLabel("") + self.toggleSearch *= -1 + if self.toggleSearch == 1: + self.spanel.Show(True) + self.search.SetFocus() + self.Layout() + else: + self.spanel.Show(False) + self.Layout() event.Skip() def OnNewFitting(self, event): + self.editLostFocus() stage = self.Parent.GetActiveStage() if stage == 3: shipID = self.Parent.GetStageData(stage) @@ -267,6 +383,7 @@ class HeaderPane (wx.Panel): event.Skip() def OnForward(self,event): + self.editLostFocus() stage = self.Parent.GetActiveStage() stage +=1 if stage >3: @@ -280,6 +397,7 @@ class HeaderPane (wx.Panel): event.Skip() def OnBack(self,event): + self.editLostFocus() stage = self.Parent.GetActiveStage() stage -=1 if stage <1: From 7ff99fa0b1a20052f182cb9f7c9f522de1ab0322 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Wed, 27 Oct 2010 02:54:11 +0300 Subject: [PATCH 44/62] Small cleanup --- gui/shipBrowser.py | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index d229a3000..7c86a4908 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -134,31 +134,6 @@ class ShipBrowser(wx.Panel): self.lpane.RefreshList() self.Show() -class TransientWndSearch(wx.Panel): - def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,size=(0,16), style = 0): - wx.Panel.__init__(self, parent,id, pos, size, style) - mainSizer = wx.BoxSizer(wx.HORIZONTAL) - self.search = wx.SearchCtrl(self, wx.ID_ANY, "", style=wx.TE_PROCESS_ENTER) - self.search.ShowCancelButton(True) - self.search.SetMenu( self.MakeMenu() ) - mainSizer.Add(self.search,1, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL, 0 ) - self.SetSizer(mainSizer) - self.Fit() - self.Layout() - - def MakeMenu(self): - menu = wx.Menu() - item = menu.Append(-1, "Recent Searches") - item.Enable(False) - for txt in [ "You can maintain", - "a list of old", - "search strings here", - "and bind EVT_MENU to", - "catch their selections" ]: - menu.Append(-1, txt) - return menu - - class HeaderPane (wx.Panel): def __init__(self, parent): wx.Panel.__init__ (self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size(500, 32), style=wx.TAB_TRAVERSAL) From 0162abddfe52bd0a2372c7709c6e8acdad65c062 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Wed, 27 Oct 2010 02:58:51 +0300 Subject: [PATCH 45/62] Changed rename icon --- icons/fit_rename_small.png | Bin 512 -> 273 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/fit_rename_small.png b/icons/fit_rename_small.png index 67de2c6ccbeac17742f56cf7391e72b2bf5033ba..4e3688edc88c10d2f0e31198d0b17303bc1d223b 100644 GIT binary patch delta 205 zcmV;;05bo81d#%e83+ad001BJ|6!3KH-7-5NklacDswwEX7hx;_as_6q3n>w?_ z?rO29CkTes-)qOov3XhF#tU*}1@Xxdo3+*uLL_tYzXkFF-mN&;pPsI<00000NkvXX Hu0mjfW@%eG delta 446 zcmV;v0YUze0)PaN83+Ub006c6H|migH-7<=NklJZt!z7w_pH~wdQ;R)Gh%BbQFCx+Nm!4SuS-vkr`vhhrXM*>w%e+v~?m@q~ImPAgt zLkR_3U<2F8LP3W5=LJ*ZN|S5p#sf4YFr$p~Q~Z*0Ngxf2jk#J#<7EAlhzlrV53~GF z&pIzcCN_lz9@05UeQ3|IN4G7jAjsg+mp2{jJG)tbCa!Ar^*y#WL=B_`1S40qM z3WiMTK4Z8UA^mB%{nj3W;Ss%$jX6S0C5B$s>F_X@-WF~-)`)Y^K4}ZqlPid!tKMnr ow!57FuK8;|uSaT^-2cw~4GD-{2=bZkh5!Hn07*qoM6N<$f|B;kGynhq From 0e1fcb00909d95b5f2c2f9b35c1dc88915333586 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Wed, 27 Oct 2010 03:09:43 +0300 Subject: [PATCH 46/62] Small fixes --- gui/shipBrowser.py | 3 ++- icons/fit_rename_small.png | Bin 273 -> 512 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 7c86a4908..0dd3ca4bc 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -246,7 +246,8 @@ class HeaderPane (wx.Panel): stxt = self.search.GetValue() if stxt not in self.recentSearches: - self.recentSearches.append(stxt) + if stxt: + self.recentSearches.append(stxt) if len(self.recentSearches) >5: self.recentSearches.remove(self.recentSearches[0]) self.search.SetValue("") diff --git a/icons/fit_rename_small.png b/icons/fit_rename_small.png index 4e3688edc88c10d2f0e31198d0b17303bc1d223b..67de2c6ccbeac17742f56cf7391e72b2bf5033ba 100644 GIT binary patch delta 446 zcmV;v0YUze0)PaN83+Ub006c6H|migH-7<=NklJZt!z7w_pH~wdQ;R)Gh%BbQFCx+Nm!4SuS-vkr`vhhrXM*>w%e+v~?m@q~ImPAgt zLkR_3U<2F8LP3W5=LJ*ZN|S5p#sf4YFr$p~Q~Z*0Ngxf2jk#J#<7EAlhzlrV53~GF z&pIzcCN_lz9@05UeQ3|IN4G7jAjsg+mp2{jJG)tbCa!Ar^*y#WL=B_`1S40qM z3WiMTK4Z8UA^mB%{nj3W;Ss%$jX6S0C5B$s>F_X@-WF~-)`)Y^K4}ZqlPid!tKMnr ow!57FuK8;|uSaT^-2cw~4GD-{2=bZkh5!Hn07*qoM6N<$f|B;kGynhq delta 205 zcmV;;05bo81d#%e83+ad001BJ|6!3KH-7-5NklacDswwEX7hx;_as_6q3n>w?_ z?rO29CkTes-)qOov3XhF#tU*}1@Xxdo3+*uLL_tYzXkFF-mN&;pPsI<00000NkvXX Hu0mjfW@%eG From 2e0ef4705be9697d67028b2f525e7bc5d1aac990 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Wed, 27 Oct 2010 03:33:48 +0300 Subject: [PATCH 47/62] Updated context menu --- gui/shipBrowser.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 0dd3ca4bc..7b410fa18 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -228,14 +228,26 @@ class HeaderPane (wx.Panel): def MakeMenu(self): menu = wx.Menu() - item = menu.Append(-1, "Recent Searches") + normalCMItems = ["Undo","_sep_", "Cut", "Copy","Paste","Delte","_sep_", "Select All"] + item = menu.Append(-1, "Recent") item.Enable(False) + if len(self.recentSearches) > 0: menu.AppendSeparator() for txt in self.recentSearches: if txt: item = menu.Append(-1, txt) menu.Bind(wx.EVT_MENU, self.OnMenuSelected, item) + + menu.Break() + + for txt in normalCMItems: + if txt =="_sep_": + menu.AppendSeparator() + else: + item = menu.Append(-1, txt) + item.Enable(False) + menu.Bind(wx.EVT_MENU, self.OnMenuSelected, item) return menu @@ -343,8 +355,7 @@ class HeaderPane (wx.Panel): self.search.SetFocus() self.Layout() else: - self.spanel.Show(False) - self.Layout() + self.editLostFocus() event.Skip() def OnNewFitting(self, event): From 5268d264a0130946df9adc6ca70201ad70b4ec21 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Wed, 27 Oct 2010 03:46:29 +0300 Subject: [PATCH 48/62] Dont shot total fits for each category (temp disabled) --- gui/shipBrowser.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 7b410fa18..4c05b9305 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -594,10 +594,10 @@ class CategoryItem(wx.Window): fPosX = rect.width - addX - xtext fPosY = (rect.height -ytext)/2 - if fittings > 0: - mdc.DrawText(fformat % fittings, fPosX, fPosY) - else: - mdc.DrawText(fformat, fPosX, fPosY) +# if fittings > 0: +# mdc.DrawText(fformat % fittings, fPosX, fPosY) +# else: +# mdc.DrawText(fformat, fPosX, fPosY) event.Skip() From 702ca7d8d4ae09af4b21f354975b5fb0107f1ae2 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Wed, 27 Oct 2010 12:45:37 +0300 Subject: [PATCH 49/62] Fixed a horrible crash (on wxgtk) --- gui/shipBrowser.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 4c05b9305..059a0b5b8 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -253,8 +253,8 @@ class HeaderPane (wx.Panel): def editLostFocus(self, event = None): self.spanel.Show(False) - if self.menu: - self.menu.Destroy() +# if self.menu: +# self.menu.Destroy() stxt = self.search.GetValue() if stxt not in self.recentSearches: From 7d52c689484c8dfb838bf4cec8e998c76dc40e3b Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Wed, 27 Oct 2010 13:30:35 +0300 Subject: [PATCH 50/62] Dont hide search textctrl when losing focus (context menu on) --- gui/shipBrowser.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 059a0b5b8..76cc030d1 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -146,6 +146,7 @@ class HeaderPane (wx.Panel): self.toggleSearch = -1 self.recentSearches = [] self.menu = None + self.inPopup = 0 mainSizer = wx.BoxSizer(wx.HORIZONTAL) @@ -217,9 +218,12 @@ class HeaderPane (wx.Panel): event.Skip() def OnMenu(self, event): + self.inPopup = True self.menu = self.MakeMenu() self.PopupMenu(self.menu) + self.inPopup = False pass + def OnMenuSelected(self, event): item = self.menu.FindItemById(event.GetId()) text = item.GetText() @@ -252,6 +256,8 @@ class HeaderPane (wx.Panel): def editLostFocus(self, event = None): + if self.inPopup: + return self.spanel.Show(False) # if self.menu: # self.menu.Destroy() From 2cd73c7c821b8df723c81e6afd987889109816ff Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Wed, 27 Oct 2010 14:23:46 +0300 Subject: [PATCH 51/62] Fixed a long forgotten bug in wxgtk by making pyfa more awesome --- gui/shipBrowser.py | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 76cc030d1..f47f42823 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -4,6 +4,8 @@ from gui import bitmapLoader import gui.mainFrame import service +from wx.lib import buttons + FitRenamed, EVT_FIT_RENAMED = wx.lib.newevent.NewEvent() FitSelected, EVT_FIT_SELECTED = wx.lib.newevent.NewEvent() FitRemoved, EVT_FIT_REMOVED = wx.lib.newevent.NewEvent() @@ -146,27 +148,27 @@ class HeaderPane (wx.Panel): self.toggleSearch = -1 self.recentSearches = [] self.menu = None - self.inPopup = 0 - + self.inPopup = False + bmpSize = (16,16) mainSizer = wx.BoxSizer(wx.HORIZONTAL) - self.sbRewind = wx.StaticBitmap( self, wx.ID_ANY, self.rewBmp, wx.DefaultPosition, wx.DefaultSize, 0 ) - mainSizer.Add(self.sbRewind, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) + self.sbRewind = buttons.GenBitmapButton( self, wx.ID_ANY, self.rewBmp, wx.DefaultPosition, bmpSize, wx.BORDER_NONE ) + mainSizer.Add(self.sbRewind, 0, wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL , 5) - self.sbForward = wx.StaticBitmap( self, wx.ID_ANY, self.forwBmp, wx.DefaultPosition, wx.DefaultSize, 0 ) - mainSizer.Add(self.sbForward, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) + self.sbForward = buttons.GenBitmapButton( self, wx.ID_ANY, self.forwBmp, wx.DefaultPosition, bmpSize, wx.BORDER_NONE ) + mainSizer.Add(self.sbForward, 0, wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL , 5) self.sl1 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_VERTICAL ) mainSizer.Add( self.sl1, 0, wx.EXPAND |wx.ALL, 5 ) - self.sbSearch = wx.StaticBitmap( self, wx.ID_ANY, self.searchBmp, wx.DefaultPosition, wx.DefaultSize, 0 ) - mainSizer.Add(self.sbSearch, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) + self.sbSearch = buttons.GenBitmapButton( self, wx.ID_ANY, self.searchBmp, wx.DefaultPosition, bmpSize, wx.BORDER_NONE ) + mainSizer.Add(self.sbSearch, 0, wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL , 5) self.sl2 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_VERTICAL ) mainSizer.Add( self.sl2, 0, wx.EXPAND |wx.ALL, 5 ) - self.sbNewFit = wx.StaticBitmap( self, wx.ID_ANY, self.newBmp, wx.DefaultPosition, wx.DefaultSize, 0 ) - mainSizer.Add(self.sbNewFit, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) + self.sbNewFit = buttons.GenBitmapButton( self, wx.ID_ANY, self.newBmp, wx.DefaultPosition, bmpSize, wx.BORDER_NONE ) + mainSizer.Add(self.sbNewFit, 0, wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL , 5) self.stStatus = wx.StaticText( self, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, 0 ) self.stStatus.Wrap( -1 ) @@ -183,19 +185,19 @@ class HeaderPane (wx.Panel): self.SetSizer(mainSizer) - self.sbForward.Bind(wx.EVT_LEFT_UP,self.OnForward) + self.sbForward.Bind(wx.EVT_BUTTON,self.OnForward) self.sbForward.Bind( wx.EVT_ENTER_WINDOW, self.OnEnterWForward ) self.sbForward.Bind( wx.EVT_LEAVE_WINDOW, self.OnLeaveWForward ) - self.sbRewind.Bind(wx.EVT_LEFT_UP,self.OnBack) + self.sbRewind.Bind(wx.EVT_BUTTON,self.OnBack) self.sbRewind.Bind( wx.EVT_ENTER_WINDOW, self.OnEnterWRewind ) self.sbRewind.Bind( wx.EVT_LEAVE_WINDOW, self.OnLeaveWRewind ) - self.sbSearch.Bind(wx.EVT_LEFT_UP,self.OnSearch) + self.sbSearch.Bind(wx.EVT_BUTTON,self.OnSearch) self.sbSearch.Bind( wx.EVT_ENTER_WINDOW, self.OnEnterWSearch ) self.sbSearch.Bind( wx.EVT_LEAVE_WINDOW, self.OnLeaveWSearch ) - self.sbNewFit.Bind(wx.EVT_LEFT_UP,self.OnNewFitting) + self.sbNewFit.Bind(wx.EVT_BUTTON,self.OnNewFitting) self.sbNewFit.Bind( wx.EVT_ENTER_WINDOW, self.OnEnterWNewFit ) self.sbNewFit.Bind( wx.EVT_LEAVE_WINDOW, self.OnLeaveWNewFit ) @@ -205,9 +207,20 @@ class HeaderPane (wx.Panel): self.search.Bind(wx.EVT_CONTEXT_MENU,self.OnMenu) self.search.Bind(wx.EVT_TEXT, self.scheduleSearch) + self.sbSearch.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) + self.sbSearch.Bind(wx.EVT_LEFT_UP, self.OnLeftUp) + self.Layout() self.spanel.Hide() + def OnLeftDown(self, event): + self.inPopup = True + event.Skip() + + def OnLeftUp(self, event): + self.inPopup = False + event.Skip() + def scheduleSearch(self, event): search = self.search.GetValue() if len(search) < 3 and len(search) > 0: From 7353ac1da5852f699627c930be6112f8fa48a475 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Wed, 27 Oct 2010 15:29:13 +0300 Subject: [PATCH 52/62] Fixed wrong bkcolor when using genbitmapbutton --- gui/shipBrowser.py | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index f47f42823..7238e29f3 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -4,7 +4,7 @@ from gui import bitmapLoader import gui.mainFrame import service -from wx.lib import buttons +from wx.lib.buttons import GenBitmapButton FitRenamed, EVT_FIT_RENAMED = wx.lib.newevent.NewEvent() FitSelected, EVT_FIT_SELECTED = wx.lib.newevent.NewEvent() @@ -136,6 +136,17 @@ class ShipBrowser(wx.Panel): self.lpane.RefreshList() self.Show() +class PFGenBitmapButton(GenBitmapButton): + def __init__(self, parent, id, bitmap, pos, size, style): + GenBitmapButton.__init__(self, parent, id, bitmap, pos, size, style) + self.bgcolor = wx.Brush(wx.WHITE) + + def SetBackgroundColour(self, color): + self.bgcolor = wx.Brush(color) + + def GetBackgroundBrush(self, dc): + return self.bgcolor + class HeaderPane (wx.Panel): def __init__(self, parent): wx.Panel.__init__ (self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size(500, 32), style=wx.TAB_TRAVERSAL) @@ -150,30 +161,41 @@ class HeaderPane (wx.Panel): self.menu = None self.inPopup = False bmpSize = (16,16) + self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) + mainSizer = wx.BoxSizer(wx.HORIZONTAL) - self.sbRewind = buttons.GenBitmapButton( self, wx.ID_ANY, self.rewBmp, wx.DefaultPosition, bmpSize, wx.BORDER_NONE ) + self.sbRewind = PFGenBitmapButton( self, wx.ID_ANY, self.rewBmp, wx.DefaultPosition, bmpSize, wx.BORDER_NONE ) mainSizer.Add(self.sbRewind, 0, wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL , 5) + self.sbRewind.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) + self.sbRewind.SetBitmapSelected(self.rewBmp) - self.sbForward = buttons.GenBitmapButton( self, wx.ID_ANY, self.forwBmp, wx.DefaultPosition, bmpSize, wx.BORDER_NONE ) + self.sbForward = PFGenBitmapButton( self, wx.ID_ANY, self.forwBmp, wx.DefaultPosition, bmpSize, wx.BORDER_NONE ) mainSizer.Add(self.sbForward, 0, wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL , 5) + self.sbForward.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) self.sl1 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_VERTICAL ) mainSizer.Add( self.sl1, 0, wx.EXPAND |wx.ALL, 5 ) - self.sbSearch = buttons.GenBitmapButton( self, wx.ID_ANY, self.searchBmp, wx.DefaultPosition, bmpSize, wx.BORDER_NONE ) + self.sbSearch = PFGenBitmapButton( self, wx.ID_ANY, self.searchBmp, wx.DefaultPosition, bmpSize, wx.BORDER_NONE ) mainSizer.Add(self.sbSearch, 0, wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL , 5) + self.sbSearch.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) self.sl2 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_VERTICAL ) mainSizer.Add( self.sl2, 0, wx.EXPAND |wx.ALL, 5 ) - self.sbNewFit = buttons.GenBitmapButton( self, wx.ID_ANY, self.newBmp, wx.DefaultPosition, bmpSize, wx.BORDER_NONE ) + self.sbNewFit = PFGenBitmapButton( self, wx.ID_ANY, self.newBmp, wx.DefaultPosition, bmpSize, wx.BORDER_NONE ) mainSizer.Add(self.sbNewFit, 0, wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL , 5) + self.sbNewFit.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) self.stStatus = wx.StaticText( self, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stStatus.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) self.stStatus.Wrap( -1 ) mainSizer.Add(self.stStatus, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) + self.spanel = wx.Panel(self) + self.spanel.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) + spsizer = wx.BoxSizer(wx.HORIZONTAL) self.spanel.SetSizer(spsizer) @@ -443,7 +465,7 @@ class ListPane (wx.ScrolledWindow): def MScrollUp(self, event): posy = self.GetScrollPos(wx.VERTICAL) - posy -= 8 + posy -= 12 self.Scroll(0, posy) # self.RefreshList() event.Skip() @@ -451,7 +473,7 @@ class ListPane (wx.ScrolledWindow): def MScrollDown(self, event): posy = self.GetScrollPos(wx.VERTICAL) - posy += 8 + posy += 12 self.Scroll(0, posy) # self.RefreshList() event.Skip() From 05122de12d569ff26b8842f6b7999cddde347683 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Wed, 27 Oct 2010 15:53:37 +0300 Subject: [PATCH 53/62] Visual stuff --- gui/mainFrame.py | 2 +- gui/shipBrowser.py | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/gui/mainFrame.py b/gui/mainFrame.py index 68bc21020..32c57ca9d 100644 --- a/gui/mainFrame.py +++ b/gui/mainFrame.py @@ -114,7 +114,7 @@ class MainFrame(wx.Frame): tab, _ = self.notebookBrowsers.HitTest(event.Position) if tab != -1: self.notebookBrowsers.SetSelection(tab) - + def CloseCurrentFit(self, evt): self.fitMultiSwitch.removeCurrentTab() diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 7238e29f3..a759e52cf 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -16,7 +16,7 @@ Stage3Selected, EVT_SB_STAGE3_SEL = wx.lib.newevent.NewEvent() class ShipBrowser(wx.Panel): def __init__(self, parent): - wx.Panel.__init__ (self, parent) + wx.Panel.__init__ (self, parent,style = wx.SIMPLE_BORDER if 'wxGTK' in wx.PlatformInfo else wx.DOUBLE_BORDER) self._lastWidth = 0 self._activeStage = 0 @@ -29,9 +29,13 @@ class ShipBrowser(wx.Panel): self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize) mainSizer = wx.BoxSizer(wx.VERTICAL) + self.hpane = HeaderPane(self) mainSizer.Add(self.hpane, 0, wx.EXPAND) + self.m_sl2 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ) + mainSizer.Add( self.m_sl2, 0, wx.EXPAND, 0 ) + self.lpane = ListPane(self) mainSizer.Add(self.lpane, 1, wx.EXPAND) self.SetSizer(mainSizer) @@ -175,14 +179,14 @@ class HeaderPane (wx.Panel): self.sbForward.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) self.sl1 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_VERTICAL ) - mainSizer.Add( self.sl1, 0, wx.EXPAND |wx.ALL, 5 ) + mainSizer.Add( self.sl1, 0, wx.EXPAND |wx.LEFT, 5 ) self.sbSearch = PFGenBitmapButton( self, wx.ID_ANY, self.searchBmp, wx.DefaultPosition, bmpSize, wx.BORDER_NONE ) mainSizer.Add(self.sbSearch, 0, wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL , 5) self.sbSearch.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) self.sl2 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_VERTICAL ) - mainSizer.Add( self.sl2, 0, wx.EXPAND |wx.ALL, 5 ) + mainSizer.Add( self.sl2, 0, wx.EXPAND |wx.LEFT, 5 ) self.sbNewFit = PFGenBitmapButton( self, wx.ID_ANY, self.newBmp, wx.DefaultPosition, bmpSize, wx.BORDER_NONE ) mainSizer.Add(self.sbNewFit, 0, wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL , 5) From ba1279a0c6c57e64b3e85692e25f30c399d02c42 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Wed, 27 Oct 2010 16:01:52 +0300 Subject: [PATCH 54/62] wxgtk is UGLY so no style for shipbrowser main panel --- gui/shipBrowser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index a759e52cf..a29d63328 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -16,7 +16,7 @@ Stage3Selected, EVT_SB_STAGE3_SEL = wx.lib.newevent.NewEvent() class ShipBrowser(wx.Panel): def __init__(self, parent): - wx.Panel.__init__ (self, parent,style = wx.SIMPLE_BORDER if 'wxGTK' in wx.PlatformInfo else wx.DOUBLE_BORDER) + wx.Panel.__init__ (self, parent,style = 0 if 'wxGTK' in wx.PlatformInfo else wx.DOUBLE_BORDER) self._lastWidth = 0 self._activeStage = 0 From e5fc402565cb64f4d5c72aa34a55fcfe3711a2de Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Wed, 27 Oct 2010 16:20:33 +0300 Subject: [PATCH 55/62] Fix attempt for wxgtk overzealousness --- gui/shipBrowser.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index a29d63328..2bf14618e 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -556,8 +556,12 @@ class CategoryItem(wx.Window): wx.PostEvent(self.shipBrowser,Stage2Selected(categoryID=categoryID)) def enterW(self,event): - self.highlighted = 1 - self.Refresh() + mposx,mposy = self.Parent.ScreenToClient(wx.GetMousePosition()) + iposx,iposy = self.GetPosition() + iwidth, iheight = self.GetSize() + if mposy >= iposy and mposy Date: Wed, 27 Oct 2010 16:28:09 +0300 Subject: [PATCH 56/62] Revert "Fix attempt for wxgtk overzealousness" This reverts commit e5fc402565cb64f4d5c72aa34a55fcfe3711a2de. --- gui/shipBrowser.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 2bf14618e..a29d63328 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -556,12 +556,8 @@ class CategoryItem(wx.Window): wx.PostEvent(self.shipBrowser,Stage2Selected(categoryID=categoryID)) def enterW(self,event): - mposx,mposy = self.Parent.ScreenToClient(wx.GetMousePosition()) - iposx,iposy = self.GetPosition() - iwidth, iheight = self.GetSize() - if mposy >= iposy and mposy Date: Wed, 27 Oct 2010 16:02:56 +0200 Subject: [PATCH 57/62] Add search lookup method for shipbrowser --- gui/shipBrowser.py | 18 ++++++++++++++++++ service/fit.py | 8 ++++++++ service/market.py | 8 -------- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index a29d63328..79df0f928 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -140,6 +140,24 @@ class ShipBrowser(wx.Panel): self.lpane.RefreshList() self.Show() + def searchStage(self, event): + sMarket = service.Market.getInstance() + sFit = service.Market.getInstance() + query = event.text + + self.lpane.RemoveAllChildren() + shipList = sMarket.searchShips(query) + fitList = sFit.searchFits(query) + + for ID, name, race in shipList: + self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, len(sFit.getFitsWithShip(ID))), race)) + + for ID, name, shipID, shipName in fitList: + self.lpane.AddWidget(FitItem(self.lpane, ID, (shipName, name), shipID)) + + self.lpane.RefreshList() + self.Show() + class PFGenBitmapButton(GenBitmapButton): def __init__(self, parent, id, bitmap, pos, size, style): GenBitmapButton.__init__(self, parent, id, bitmap, pos, size, style) diff --git a/service/fit.py b/service/fit.py index fed1017e5..9e564b2ad 100644 --- a/service/fit.py +++ b/service/fit.py @@ -87,6 +87,14 @@ class Fit(object): fit.calculateModifiedAttributes() return fit + def searchFits(self, name): + results = eos.db.searchFits(name) + fits = [] + for fit in results: + fits.append((fit.ID, fit.name, fit.ship.item.ID, fit.ship.item.name)) + + return fits + def addImplant(self, fitID, itemID): if fitID is None: return False diff --git a/service/market.py b/service/market.py index dfacfadba..2658c8382 100644 --- a/service/market.py +++ b/service/market.py @@ -162,14 +162,6 @@ class Market(): def searchItems(self, name, callback): self.searchWorkerThread.scheduleSearch(name, callback) - def searchFits(self, name): - results = eos.db.searchFits(name) - fits = [] - for fit in results: - fits.append((fit.ID, fit.name, fit.ship.item.name)) - - return fits - def getImplantTree(self): return self.getChildren(27) From cc658e477f30819f6dfda8ca7f364c2db9c2a2e5 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Wed, 27 Oct 2010 17:06:12 +0300 Subject: [PATCH 58/62] Switch back to NEW bmp when text ctrl lost focus(this includes close by escape) --- gui/shipBrowser.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index a29d63328..6d5db72c8 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -706,6 +706,8 @@ class ShipItem(wx.Window): self.tcFitName.Show(False) if self.highlighted == 1: self.editWasShown = 1 + self.newToggleBmp = self.newBmp + self.Refresh() def editCheckEsc(self, event): if event.GetKeyCode() == wx.WXK_ESCAPE: @@ -768,10 +770,6 @@ class ShipItem(wx.Window): self.Refresh() else: self.editWasShown = 0 - self.newToggleBmp = self.newBmp - self.Refresh() - - event.Skip() From 35cd1bf6bacaebcac9e4e31da4b92bcb445d3fe6 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Wed, 27 Oct 2010 18:20:47 +0300 Subject: [PATCH 59/62] Basic search functionality --- gui/shipBrowser.py | 47 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 25d0758d7..23d7aa199 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -13,13 +13,15 @@ FitRemoved, EVT_FIT_REMOVED = wx.lib.newevent.NewEvent() 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() class ShipBrowser(wx.Panel): def __init__(self, parent): wx.Panel.__init__ (self, parent,style = 0 if 'wxGTK' in wx.PlatformInfo else wx.DOUBLE_BORDER) self._lastWidth = 0 - self._activeStage = 0 + self._activeStage = 1 + self._lastStage = 0 self._stage1Data = -1 self._stage2Data = -1 @@ -47,6 +49,7 @@ class ShipBrowser(wx.Panel): self.Bind(EVT_SB_STAGE2_SEL, self.stage2) 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.stage1(None) @@ -63,6 +66,8 @@ class ShipBrowser(wx.Panel): pass def GetActiveStage(self): return self._activeStage + def GetLastStage(self): + return self._lastStage def GetStageData(self, stage): if stage == 1: @@ -116,7 +121,8 @@ class ShipBrowser(wx.Panel): self.Show() def stage3(self, event): - self._activeStage = 3 + if self._activeStage != 4: + self._activeStage = 3 shipID = event.shipID self._stage3Data = shipID @@ -141,21 +147,27 @@ class ShipBrowser(wx.Panel): self.Show() def searchStage(self, event): + if self._activeStage != 4: + self._lastStage = self._activeStage + + self._activeStage = 4 + sMarket = service.Market.getInstance() - sFit = service.Market.getInstance() + sFit = service.Fit.getInstance() query = event.text self.lpane.RemoveAllChildren() - shipList = sMarket.searchShips(query) - fitList = sFit.searchFits(query) + if query: + shipList = sMarket.searchShips(query) + fitList = sFit.searchFits(query) - for ID, name, race in shipList: - self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, len(sFit.getFitsWithShip(ID))), race)) + for ID, name, race in shipList: + self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, len(sFit.getFitsWithShip(ID))), race)) - for ID, name, shipID, shipName in fitList: - self.lpane.AddWidget(FitItem(self.lpane, ID, (shipName, name), shipID)) + for ID, name, shipID, shipName in fitList: + self.lpane.AddWidget(FitItem(self.lpane, ID, (shipName, name), shipID)) - self.lpane.RefreshList() + self.lpane.RefreshList() self.Show() class PFGenBitmapButton(GenBitmapButton): @@ -178,6 +190,8 @@ class HeaderPane (wx.Panel): self.searchBmp = bitmapLoader.getBitmap("fsearch_small","icons") self.newBmp = bitmapLoader.getBitmap("fit_add_small","icons") + self.shipBrowser = self.Parent + self.toggleSearch = -1 self.recentSearches = [] self.menu = None @@ -269,9 +283,11 @@ class HeaderPane (wx.Panel): search = self.search.GetValue() if len(search) < 3 and len(search) > 0: print "need more chars/clear search" + wx.PostEvent(self.shipBrowser,SearchSelected(text=None)) else: if search: print "DO SEARCH ", search + wx.PostEvent(self.shipBrowser,SearchSelected(text=search)) event.Skip() def OnMenu(self, event): @@ -284,7 +300,10 @@ class HeaderPane (wx.Panel): def OnMenuSelected(self, event): item = self.menu.FindItemById(event.GetId()) text = item.GetText() + print "menu sel do search:",text + if len(text)>2 : + wx.PostEvent(self.shipBrowser,SearchSelected(text=text)) self.editLostFocus() def MakeMenu(self): @@ -336,8 +355,7 @@ class HeaderPane (wx.Panel): event.Skip() def doSearch(self, event): stxt = self.search.GetValue() - if stxt: - print "ENTER -> Search", stxt + if len(stxt) > 3: self.editLostFocus() def ToggleNewFitSB(self, toggle): @@ -449,6 +467,9 @@ class HeaderPane (wx.Panel): def OnBack(self,event): self.editLostFocus() stage = self.Parent.GetActiveStage() + if stage == 4: + self.gotoStage(self.Parent.GetLastStage()) + return stage -=1 if stage <1: stage = 1 @@ -470,6 +491,8 @@ class HeaderPane (wx.Panel): shipID = self.Parent.GetStageData(stage) if shipID != -1: wx.PostEvent(self.Parent,Stage3Selected(shipID=shipID)) + else: + wx.PostEvent(self.Parent,Stage1Selected()) class ListPane (wx.ScrolledWindow): def __init__(self, parent): From 658ecdb289e0ff23c6f996f6db10dc0875ef3d87 Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Wed, 27 Oct 2010 21:37:27 +0300 Subject: [PATCH 60/62] Search completed, found over 9000 bugs --- gui/shipBrowser.py | 97 ++++++++++++++++++++++++++-------------------- 1 file changed, 54 insertions(+), 43 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 23d7aa199..c1290322f 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -5,6 +5,7 @@ import gui.mainFrame import service from wx.lib.buttons import GenBitmapButton +from pickle import TRUE FitRenamed, EVT_FIT_RENAMED = wx.lib.newevent.NewEvent() FitSelected, EVT_FIT_SELECTED = wx.lib.newevent.NewEvent() @@ -21,7 +22,8 @@ class ShipBrowser(wx.Panel): self._lastWidth = 0 self._activeStage = 1 - self._lastStage = 0 + self.browseHist = [] + self.lastStage = (0,0) self._stage1Data = -1 self._stage2Data = -1 @@ -84,7 +86,9 @@ class ShipBrowser(wx.Panel): return info[1] def stage1(self, event): + self._activeStage = 1 + self.lastdata = 0 self.hpane.ToggleNewFitSB(False) sMarket = service.Market.getInstance() self.lpane.RemoveAllChildren() @@ -102,10 +106,13 @@ class ShipBrowser(wx.Panel): def stage2(self, event): + back = event.back + if not back: + self.browseHist.append( (1,0) ) + self._activeStage = 2 categoryID = event.categoryID - if self.GetStageData(self._activeStage) != categoryID: - self._stage3Data = -1 + self.lastdata = categoryID self._stage2Data = categoryID self.hpane.ToggleNewFitSB(False) @@ -121,11 +128,12 @@ class ShipBrowser(wx.Panel): self.Show() def stage3(self, event): - if self._activeStage != 4: - self._activeStage = 3 - + if not event.back: + self.browseHist.append( (2,self._stage2Data) ) shipID = event.shipID - self._stage3Data = shipID + self.lastdata = shipID + + self._activeStage = 3 sFit = service.Fit.getInstance() sMarket = service.Market.getInstance() @@ -133,13 +141,16 @@ class ShipBrowser(wx.Panel): fitList = sFit.getFitsWithShip(shipID) if len(fitList) == 0: - self._stage3Data = -1 - self.hpane.gotoStage(2) + stage,data = self.browseHist.pop() + self.hpane.gotoStage(stage,data) return self.hpane.ToggleNewFitSB(True) fitList.sort(key=self.nameKey) shipName = sMarket.getItem(shipID).name + self._stage3ShipName = shipName + self._stage3Data = shipID + for ID, name in fitList: self.lpane.AddWidget(FitItem(self.lpane, ID, (shipName, name),shipID)) @@ -147,9 +158,11 @@ class ShipBrowser(wx.Panel): self.Show() def searchStage(self, event): - if self._activeStage != 4: - self._lastStage = self._activeStage - + if self._activeStage !=4: + if len(self.browseHist) >0: + self.browseHist.append( (self._activeStage, self.lastdata) ) + else: + self.browseHist.append((1,0)) self._activeStage = 4 sMarket = service.Market.getInstance() @@ -196,6 +209,7 @@ class HeaderPane (wx.Panel): self.recentSearches = [] self.menu = None self.inPopup = False + self.inSearch = False bmpSize = (16,16) self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) @@ -206,9 +220,9 @@ class HeaderPane (wx.Panel): self.sbRewind.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) self.sbRewind.SetBitmapSelected(self.rewBmp) - self.sbForward = PFGenBitmapButton( self, wx.ID_ANY, self.forwBmp, wx.DefaultPosition, bmpSize, wx.BORDER_NONE ) - mainSizer.Add(self.sbForward, 0, wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL , 5) - self.sbForward.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) +# self.sbForward = PFGenBitmapButton( self, wx.ID_ANY, self.forwBmp, wx.DefaultPosition, bmpSize, wx.BORDER_NONE ) +# mainSizer.Add(self.sbForward, 0, wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL , 5) +# self.sbForward.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) self.sl1 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_VERTICAL ) mainSizer.Add( self.sl1, 0, wx.EXPAND |wx.LEFT, 5 ) @@ -243,9 +257,9 @@ class HeaderPane (wx.Panel): self.SetSizer(mainSizer) - self.sbForward.Bind(wx.EVT_BUTTON,self.OnForward) - self.sbForward.Bind( wx.EVT_ENTER_WINDOW, self.OnEnterWForward ) - self.sbForward.Bind( wx.EVT_LEAVE_WINDOW, self.OnLeaveWForward ) +# self.sbForward.Bind(wx.EVT_BUTTON,self.OnForward) +# self.sbForward.Bind( wx.EVT_ENTER_WINDOW, self.OnEnterWForward ) +# self.sbForward.Bind( wx.EVT_LEAVE_WINDOW, self.OnLeaveWForward ) self.sbRewind.Bind(wx.EVT_BUTTON,self.OnBack) self.sbRewind.Bind( wx.EVT_ENTER_WINDOW, self.OnEnterWRewind ) @@ -282,14 +296,18 @@ class HeaderPane (wx.Panel): def scheduleSearch(self, event): search = self.search.GetValue() if len(search) < 3 and len(search) > 0: - print "need more chars/clear search" - wx.PostEvent(self.shipBrowser,SearchSelected(text=None)) + if self.inSearch == True: + stage,data = self.shipBrowser.browseHist.pop() + self.gotoStage(stage,data) + + self.inSearch = False else: if search: - print "DO SEARCH ", search wx.PostEvent(self.shipBrowser,SearchSelected(text=search)) + self.inSearch = True event.Skip() + def OnMenu(self, event): self.inPopup = True self.menu = self.MakeMenu() @@ -447,7 +465,7 @@ class HeaderPane (wx.Panel): shipName = self.Parent.GetStage3ShipName() sFit = service.Fit.getInstance() sFit.newFit(shipID, "%s fit" %shipName) - wx.PostEvent(self.Parent,Stage3Selected(shipID=shipID)) + wx.PostEvent(self.Parent,Stage3Selected(shipID=shipID, back = True)) event.Skip() def OnForward(self,event): @@ -466,31 +484,24 @@ class HeaderPane (wx.Panel): def OnBack(self,event): self.editLostFocus() - stage = self.Parent.GetActiveStage() - if stage == 4: - self.gotoStage(self.Parent.GetLastStage()) - return - stage -=1 - if stage <1: - stage = 1 - return - self.gotoStage(stage) + + if len(self.shipBrowser.browseHist) > 0: + stage,data = self.shipBrowser.browseHist.pop() + + self.gotoStage(stage,data) self.stStatus.Enable() self.stStatus.SetLabel("") event.Skip() - def gotoStage(self,stage): + + def gotoStage(self,stage, data = None): if stage == 1: wx.PostEvent(self.Parent,Stage1Selected()) elif stage == 2: - categoryID = self.Parent.GetStageData(stage) - if categoryID != -1: - wx.PostEvent(self.Parent,Stage2Selected(categoryID=categoryID)) + wx.PostEvent(self.Parent,Stage2Selected(categoryID=data, back = True)) elif stage == 3: - shipID = self.Parent.GetStageData(stage) - if shipID != -1: - wx.PostEvent(self.Parent,Stage3Selected(shipID=shipID)) + wx.PostEvent(self.Parent,Stage3Selected(shipID=data, back = True)) else: wx.PostEvent(self.Parent,Stage1Selected()) @@ -594,7 +605,7 @@ class CategoryItem(wx.Window): pos = event.GetPosition() x,y = pos categoryID = self.categoryID - wx.PostEvent(self.shipBrowser,Stage2Selected(categoryID=categoryID)) + wx.PostEvent(self.shipBrowser,Stage2Selected(categoryID=categoryID, back=False)) def enterW(self,event): self.highlighted = 1 @@ -796,7 +807,7 @@ class ShipItem(wx.Window): if self.editWasShown == 1: self.editWasShown = 0 else: - wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) + wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID, back = True if self.shipBrowser.GetActiveStage() == 4 else False)) else: if self.editWasShown == 0: fnEditSize = self.tcFitName.GetSize() @@ -819,7 +830,7 @@ class ShipItem(wx.Window): sFit.newFit(self.shipID, self.tcFitName.GetValue()) self.tcFitName.Show(False) self.editWasShown = 0 - wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) + wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID, back=False)) def NHitTest(self, target, position, area): x, y = target @@ -1075,12 +1086,12 @@ class FitItem(wx.Window): def copyFit(self, event=None): sFit = service.Fit.getInstance() sFit.copyFit(self.fitID) - wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) + wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID, back=True)) def deleteFit(self, event=None): sFit = service.Fit.getInstance() sFit.deleteFit(self.fitID) - wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID)) + wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID, back=True)) wx.PostEvent(self.mainFrame, FitRemoved(fitID=self.fitID)) def selectFit(self, event=None): From ba3a316a4ef60ea02aa50cb65dc5962490514baa Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Wed, 27 Oct 2010 21:55:28 +0300 Subject: [PATCH 61/62] Check if list is empty, show stage1 --- gui/shipBrowser.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index c1290322f..a4a0063de 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -150,7 +150,7 @@ class ShipBrowser(wx.Panel): self._stage3ShipName = shipName self._stage3Data = shipID - + for ID, name in fitList: self.lpane.AddWidget(FitItem(self.lpane, ID, (shipName, name),shipID)) @@ -297,8 +297,11 @@ class HeaderPane (wx.Panel): search = self.search.GetValue() if len(search) < 3 and len(search) > 0: if self.inSearch == True: - stage,data = self.shipBrowser.browseHist.pop() - self.gotoStage(stage,data) + if len(self.shipBrowser.browseHist) > 0: + stage,data = self.shipBrowser.browseHist.pop() + self.gotoStage(stage,data) + else: + self.gotoStage(1,0) self.inSearch = False else: @@ -911,7 +914,7 @@ class ShipItem(wx.Window): ypos += ytext - mdc.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) + mdc.SetFont(wx.Font(7, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) if fittings <1: fformat = "No fits" @@ -928,8 +931,6 @@ class ShipItem(wx.Window): mdc.DrawText(fformat %fittings if fittings >0 else fformat, textStart, ypos) -# mdc.SetFont(wx.Font(7, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) - self.editPosX = rect.width - 20 self.editPosY = (rect.height - 16) / 2 From 37362d51d315a90694433bcc07126774f0bd3e2d Mon Sep 17 00:00:00 2001 From: HomeWorld Date: Thu, 28 Oct 2010 03:40:23 +0300 Subject: [PATCH 62/62] Shipbrowser search+history+some graphics updates --- gui/shipBrowser.py | 159 +++++++++++++++++++++++++++++++---------- icons/freset_small.png | Bin 0 -> 604 bytes 2 files changed, 121 insertions(+), 38 deletions(-) create mode 100644 icons/freset_small.png diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index a4a0063de..9379b42d6 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -128,8 +128,12 @@ class ShipBrowser(wx.Panel): self.Show() def stage3(self, event): - if not event.back: + if event.back == 0: self.browseHist.append( (2,self._stage2Data) ) + elif event.back == -1: + if len(self.hpane.recentSearches)>0: + self.browseHist.append((4, self.hpane.lastSearch)) + shipID = event.shipID self.lastdata = shipID @@ -158,12 +162,13 @@ class ShipBrowser(wx.Panel): self.Show() def searchStage(self, event): - if self._activeStage !=4: - if len(self.browseHist) >0: - self.browseHist.append( (self._activeStage, self.lastdata) ) - else: - self.browseHist.append((1,0)) - self._activeStage = 4 + if not event.back: + if self._activeStage !=4: + if len(self.browseHist) >0: + self.browseHist.append( (self._activeStage, self.lastdata) ) + else: + self.browseHist.append((1,0)) + self._activeStage = 4 sMarket = service.Market.getInstance() sFit = service.Fit.getInstance() @@ -202,11 +207,17 @@ class HeaderPane (wx.Panel): self.forwBmp = bitmapLoader.getBitmap("fforward_small","icons") self.searchBmp = bitmapLoader.getBitmap("fsearch_small","icons") self.newBmp = bitmapLoader.getBitmap("fit_add_small","icons") + self.resetBmp = bitmapLoader.getBitmap("freset_small","icons") + + img = self.newBmp.ConvertToImage() + img.RotateHue(0.625) + self.newBmp = wx.BitmapFromImage(img) self.shipBrowser = self.Parent self.toggleSearch = -1 self.recentSearches = [] + self.lastSearch = "" self.menu = None self.inPopup = False self.inSearch = False @@ -215,6 +226,11 @@ class HeaderPane (wx.Panel): mainSizer = wx.BoxSizer(wx.HORIZONTAL) + self.sbReset = PFGenBitmapButton( self, wx.ID_ANY, self.resetBmp, wx.DefaultPosition, bmpSize, wx.BORDER_NONE ) + mainSizer.Add(self.sbReset, 0, wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL , 5) + self.sbReset.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) + self.sbReset.SetBitmapSelected(self.resetBmp) + self.sbRewind = PFGenBitmapButton( self, wx.ID_ANY, self.rewBmp, wx.DefaultPosition, bmpSize, wx.BORDER_NONE ) mainSizer.Add(self.sbRewind, 0, wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL , 5) self.sbRewind.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) @@ -241,7 +257,7 @@ class HeaderPane (wx.Panel): self.stStatus = wx.StaticText( self, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, 0 ) self.stStatus.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) self.stStatus.Wrap( -1 ) - mainSizer.Add(self.stStatus, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL , 5) + mainSizer.Add(self.stStatus, 0, wx.ALL | wx.EXPAND | wx.ALIGN_CENTER_VERTICAL , 5) self.spanel = wx.Panel(self) self.spanel.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) @@ -261,10 +277,16 @@ class HeaderPane (wx.Panel): # self.sbForward.Bind( wx.EVT_ENTER_WINDOW, self.OnEnterWForward ) # self.sbForward.Bind( wx.EVT_LEAVE_WINDOW, self.OnLeaveWForward ) + self.sbReset.Bind(wx.EVT_BUTTON,self.OnReset) + self.sbReset.Bind( wx.EVT_ENTER_WINDOW, self.OnEnterWReset ) + self.sbReset.Bind( wx.EVT_LEAVE_WINDOW, self.OnLeaveWReset ) + self.sbRewind.Bind(wx.EVT_BUTTON,self.OnBack) self.sbRewind.Bind( wx.EVT_ENTER_WINDOW, self.OnEnterWRewind ) self.sbRewind.Bind( wx.EVT_LEAVE_WINDOW, self.OnLeaveWRewind ) + + self.sbSearch.Bind(wx.EVT_BUTTON,self.OnSearch) self.sbSearch.Bind( wx.EVT_ENTER_WINDOW, self.OnEnterWSearch ) self.sbSearch.Bind( wx.EVT_LEAVE_WINDOW, self.OnLeaveWSearch ) @@ -283,7 +305,8 @@ class HeaderPane (wx.Panel): self.sbSearch.Bind(wx.EVT_LEFT_UP, self.OnLeftUp) self.Layout() - self.spanel.Hide() +# self.spanel.Hide() + self.search.Hide() def OnLeftDown(self, event): self.inPopup = True @@ -294,20 +317,21 @@ class HeaderPane (wx.Panel): event.Skip() def scheduleSearch(self, event): + if self.inPopup: + return search = self.search.GetValue() - if len(search) < 3 and len(search) > 0: + if len(search) < 3 and len(search) >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: - self.gotoStage(1,0) - - self.inSearch = False else: if search: - wx.PostEvent(self.shipBrowser,SearchSelected(text=search)) + wx.PostEvent(self.shipBrowser,SearchSelected(text=search, back = False)) self.inSearch = True + else: + self.inSearch = False event.Skip() @@ -322,9 +346,8 @@ class HeaderPane (wx.Panel): item = self.menu.FindItemById(event.GetId()) text = item.GetText() - print "menu sel do search:",text if len(text)>2 : - wx.PostEvent(self.shipBrowser,SearchSelected(text=text)) + wx.PostEvent(self.shipBrowser,SearchSelected(text=text, back = False)) self.editLostFocus() def MakeMenu(self): @@ -340,7 +363,10 @@ class HeaderPane (wx.Panel): item = menu.Append(-1, txt) menu.Bind(wx.EVT_MENU, self.OnMenuSelected, item) - menu.Break() + if 'wxMSW' in wx.PlatformInfo: + menu.Break() + else: + menu.AppendSeparator() for txt in normalCMItems: if txt =="_sep_": @@ -355,7 +381,10 @@ class HeaderPane (wx.Panel): def editLostFocus(self, event = None): if self.inPopup: return - self.spanel.Show(False) + if self.toggleSearch == 1: + self.search.Show(False) + self.toggleSearch = -1 + # if self.menu: # self.menu.Destroy() @@ -363,20 +392,20 @@ class HeaderPane (wx.Panel): if stxt not in self.recentSearches: if stxt: self.recentSearches.append(stxt) + self.lastSearch = stxt if len(self.recentSearches) >5: self.recentSearches.remove(self.recentSearches[0]) self.search.SetValue("") - self.toggleSearch = -1 def editCheckEsc(self, event): if event.GetKeyCode() == wx.WXK_ESCAPE: - self.spanel.Show(False) + self.search.Show(False) self.toggleSearch = -1 else: event.Skip() def doSearch(self, event): stxt = self.search.GetValue() - if len(stxt) > 3: + if len(stxt) > 2: self.editLostFocus() def ToggleNewFitSB(self, toggle): @@ -384,6 +413,30 @@ class HeaderPane (wx.Panel): self.sl2.Show(toggle) self.Layout() + def OnReset(self,event): + if self.shipBrowser.browseHist: + self.shipBrowser.browseHist = [] + self.gotoStage(1,0) + self.stStatus.SetLabel("") + self.Layout() + event.Skip() + + def OnEnterWReset(self, event): + if self.shipBrowser.browseHist: + self.stStatus.Enable() + else: + self.stStatus.Disable() + if self.toggleSearch != 1: + self.stStatus.SetLabel("Reset history") + self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) + event.Skip() + + def OnLeaveWReset(self, event): + self.stStatus.SetLabel("") + self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) + event.Skip() + + def OnEnterWForward(self, event): if self.toggleSearch != 1: self.stStatus.SetLabel("Forward") @@ -451,13 +504,20 @@ class HeaderPane (wx.Panel): def OnSearch(self, event): self.stStatus.SetLabel("") - self.toggleSearch *= -1 - if self.toggleSearch == 1: - self.spanel.Show(True) + if self.toggleSearch == 2: + self.toggleSearch = -1 + return + if not self.search.IsShown(): + self.search.Show(True) self.search.SetFocus() + self.toggleSearch = 1 self.Layout() + self.spanel.Layout() + else: - self.editLostFocus() + self.search.Show(False) + self.toggleSearch = -1 + self.Layout() event.Skip() def OnNewFitting(self, event): @@ -486,16 +546,12 @@ class HeaderPane (wx.Panel): event.Skip() def OnBack(self,event): - self.editLostFocus() - - if len(self.shipBrowser.browseHist) > 0: - stage,data = self.shipBrowser.browseHist.pop() - - self.gotoStage(stage,data) self.stStatus.Enable() self.stStatus.SetLabel("") - + if len(self.shipBrowser.browseHist) > 0: + stage,data = self.shipBrowser.browseHist.pop() + self.gotoStage(stage,data) event.Skip() def gotoStage(self,stage, data = None): @@ -504,7 +560,12 @@ class HeaderPane (wx.Panel): elif stage == 2: wx.PostEvent(self.Parent,Stage2Selected(categoryID=data, back = True)) elif stage == 3: - wx.PostEvent(self.Parent,Stage3Selected(shipID=data, back = True)) + wx.PostEvent(self.Parent,Stage3Selected(shipID=data, back = 1)) + elif stage == 4: + self.shipBrowser._activeStage = 4 + self.stStatus.SetLabel("Search: %s" % data.capitalize()) + self.Layout() + wx.PostEvent(self.Parent,SearchSelected(text=data, back = True)) else: wx.PostEvent(self.Parent,Stage1Selected()) @@ -722,9 +783,16 @@ class ShipItem(wx.Window): self.newBmp = bitmapLoader.getBitmap("fit_add_small", "icons") self.acceptBmp = bitmapLoader.getBitmap("faccept_small", "icons") + img = self.acceptBmp.ConvertToImage() + img.RotateHue(0.625) + self.acceptBmp = wx.BitmapFromImage(img) self.newToggleBmp = self.newBmp self.shipEffBk = bitmapLoader.getBitmap("fshipbk_big","icons") self.raceBmp = bitmapLoader.getBitmap("race_%s_small" % self.shipRace, "icons") + self.raceMBmp = bitmapLoader.getBitmap("fit_delete_small","icons") + + if not self.raceBmp: + self.raceBmp = self.raceMBmp self.shipBrowser = self.Parent.Parent @@ -810,7 +878,7 @@ class ShipItem(wx.Window): if self.editWasShown == 1: self.editWasShown = 0 else: - wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID, back = True if self.shipBrowser.GetActiveStage() == 4 else False)) + wx.PostEvent(self.shipBrowser,Stage3Selected(shipID=self.shipID, back = -1 if self.shipBrowser.GetActiveStage() == 4 else 0)) else: if self.editWasShown == 0: fnEditSize = self.tcFitName.GetSize() @@ -914,7 +982,7 @@ class ShipItem(wx.Window): ypos += ytext - mdc.SetFont(wx.Font(7, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) + mdc.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) if fittings <1: fformat = "No fits" @@ -935,6 +1003,7 @@ class ShipItem(wx.Window): self.editPosY = (rect.height - 16) / 2 mdc.DrawBitmap(self.newToggleBmp, self.editPosX, self.editPosY, 0) + mdc.SetFont(wx.Font(7, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) if self.btnsStatus != "": status = "%s" % self.btnsStatus xtext, ytext = mdc.GetTextExtent(status) @@ -1162,8 +1231,8 @@ class FitItem(wx.Window): ypos = (rect.height - 32) / 2 textStart = 48 - xtext, ytext = mdc.GetTextExtent(shipName) - mdc.DrawText(fitName, textStart, ypos) + xtext, ytext = mdc.GetTextExtent(fitName) + fposy = ypos ypos += ytext mdc.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.NORMAL, False)) @@ -1182,6 +1251,20 @@ class FitItem(wx.Window): xtext, ytext = mdc.GetTextExtent(status) ytext = (rect.height - ytext)/2 mdc.DrawText(status, self.copyPosX - xtext -5,ytext) + else: + xtext = 0 + fnwidths = mdc.GetPartialTextExtents(fitName) + count = 0 + maxsize = self.copyPosX -xtext - 5 - textStart*2 + for i in fnwidths: + if i< maxsize: + count +=1 + else: + break + + fitName = "%s%s" % (fitName[:count if count >5 else 5],"..." if len(fitName)>count else "") + mdc.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD, False)) + mdc.DrawText(fitName, textStart, fposy) mdc.DrawBitmap(self.copyBmp, self.copyPosX, self.copyPosY, 0) mdc.DrawBitmap(self.renameBmp, self.renamePosX, self.renamePosY, 0) diff --git a/icons/freset_small.png b/icons/freset_small.png new file mode 100644 index 0000000000000000000000000000000000000000..7dd1c07fbade1ec8d985d95fd89385667bf83e3a GIT binary patch literal 604 zcmV-i0;BzjP)V=42{wMyJ==FL^x7*b^oepca+Xm;{Xf~Uy(P(J3T21*D zAjGN=^W}0$$K#Q1x0{T^;Xw2GoT}9-uT(1Pmw*qkc|M;B58k`oj!e^})9EDV04fefqL?N$IB5&$S;dHP}hDFLVh>akw0DUnDp3(#t{3=|9E&1OS( zyMvrg7bTNPIYt05old2T%jH7RXwM2F~VlEOTqhl>IpEJOe`0XNaO*i*Xs-w zM;fqav)QCzHk(OTpMddrEITt83@989KT;6=)$sFvzsthux=wFzy4(=~R{#u$L%LqC zR4f)L7z{p&DEg`t3I&ecu;8