diff --git a/gui/PFListPane.py b/gui/PFListPane.py index a61b25738..48b2d6e9e 100644 --- a/gui/PFListPane.py +++ b/gui/PFListPane.py @@ -151,6 +151,8 @@ class PFListPane(wx.ScrolledWindow): if itemY >=-iheight and itemY< clientH: self._wList[i].Refresh() + self.SetFocus() + def RemoveWidget(self, child): child.Destroy() self._wList.remove(child) diff --git a/gui/fleetBrowser.py b/gui/fleetBrowser.py index b081096f1..3e287de29 100644 --- a/gui/fleetBrowser.py +++ b/gui/fleetBrowser.py @@ -182,10 +182,12 @@ class FleetBrowserHeader (wx.Panel): def fbNewEnterWindow(self, event): self.stStatus.SetLabel("New fleet") + self.Parent.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) event.Skip() def fbHItemLeaveWindow(self, event): self.stStatus.SetLabel("") + self.Parent.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) event.Skip() def fbFilterEnterWindow(self, event): @@ -278,7 +280,7 @@ class FleetItem(SFItem.SFBrowserItem): self.fleetEffBmp = wx.BitmapFromImage(fleetImg) self.toolbar.AddButton(self.copyBmp, "Copy", self.CopyFleetCB) - self.toolbar.AddButton(self.renameBmp, "Rename", self.RenameFleetCB) + self.renameBtn = self.toolbar.AddButton(self.renameBmp, "Rename", self.RenameFleetCB) self.toolbar.AddButton(self.deleteBmp, "Delete", self.DeleteFleetCB) self.editWidth = 150 @@ -290,6 +292,7 @@ class FleetItem(SFItem.SFBrowserItem): self.tcFleetName.SetFocus() self.tcFleetName.SelectAll() self.fleetBrowser.fleetIDMustEditName = -1 + self.renameBtn.SetBitmap(self.acceptBmp) self.selected = True self.tcFleetName.Bind(wx.EVT_KILL_FOCUS, self.OnEditLostFocus) @@ -301,13 +304,13 @@ class FleetItem(SFItem.SFBrowserItem): def MouseLeftUp(self, event): if self.tcFleetName.IsShown(): - self.tcFleetName.Show(False) + self.RestoreEditButton() else: wx.PostEvent(self.fleetBrowser, FleetItemSelect(fleetID = self.fleetID)) def CopyFleetCB(self): if self.tcFleetName.IsShown(): - self.tcFleetName.Show(False) + self.RestoreEditButton() return wx.PostEvent(self.fleetBrowser, FleetItemCopy(fleetID = self.fleetID)) @@ -315,12 +318,17 @@ class FleetItem(SFItem.SFBrowserItem): def RenameFleetCB(self): if self.tcFleetName.IsShown(): - self.tcFleetName.Show(False) + self.RenameFleet(None) + self.RestoreEditButton() + else: self.tcFleetName.SetValue(self.fleetName) self.tcFleetName.Show() + self.renameBtn.SetBitmap(self.acceptBmp) + self.Refresh() + self.tcFleetName.SetFocus() self.tcFleetName.SelectAll() @@ -338,17 +346,22 @@ class FleetItem(SFItem.SFBrowserItem): def DeleteFleetCB(self): if self.tcFleetName.IsShown(): - self.tcFleetName.Show(False) + self.RestoreEditButton() return wx.PostEvent(self.fleetBrowser, FleetItemDelete(fleetID = self.fleetID)) + def RestoreEditButton(self): + self.tcFleetName.Show(False) + self.renameBtn.SetBitmap(self.renameBmp) + self.Refresh() + def OnEditLostFocus(self, event): - self.tcFleetName.Show(False) + self.RestoreEditButton() self.Refresh() def EditCheckEsc(self, event): if event.GetKeyCode() == wx.WXK_ESCAPE: - self.tcFleetName.Show(False) + self.RestoreEditButton() else: event.Skip() diff --git a/gui/mainFrame.py b/gui/mainFrame.py index c3f5a2baa..53e690bb4 100644 --- a/gui/mainFrame.py +++ b/gui/mainFrame.py @@ -450,7 +450,7 @@ class MainFrame(wx.Frame): filePath = saveDialog.GetPath() if '.' not in os.path.basename(filePath): filePath += ".xml" - self.waitDialog = WaitDialog(self) + self.waitDialog = animUtils.WaitDialog(self) sFit.backupFits(filePath, self.closeWaitDialog) self.waitDialog.ShowModal() @@ -482,19 +482,3 @@ class MainFrame(wx.Frame): wnd = self InspectionTool().Show(wnd, True) - -class WaitDialog(wx.Dialog): - def __init__(self, parent): - wx.Dialog.__init__ (self, parent, id=wx.ID_ANY, title=u"Please wait ...", size=(300,30), - style=wx.NO_BORDER) - mainSizer = wx.BoxSizer( wx.HORIZONTAL ) - - self.progress = animUtils.LoadAnimation(self,label = "Processing", size=(300,30)) - mainSizer.Add( self.progress, 1, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 0 ) - self.SetSizer( mainSizer ) - self.Layout() - self.Bind(wx.EVT_CLOSE,self.OnClose) - self.CenterOnParent() - - def OnClose(self, event): - pass diff --git a/gui/sfBrowserItem.py b/gui/sfBrowserItem.py index 884241a96..5a60de531 100644 --- a/gui/sfBrowserItem.py +++ b/gui/sfBrowserItem.py @@ -67,7 +67,8 @@ class PFBaseButton(object): return self.disabledBmp class PFToolbar(object): - def __init__(self): + def __init__(self, parent): + self.Parent = parent self.buttons =[] self.toolbarX = 0 self.toolbarY = 0 @@ -89,15 +90,18 @@ class PFToolbar(object): def MouseMove(self, event): doRefresh = False + changeCursor = False bx = self.toolbarX self.hoverLabel = "" for button in self.buttons: state = button.GetState() if self.HitTest( (bx, self.toolbarY), event.GetPosition(), button.GetSize()): + changeCursor = True if not state & BTN_HOVER: button.SetState(state | BTN_HOVER) self.hoverLabel = button.GetLabel() + self.Parent.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) doRefresh = True else: if state & BTN_HOVER: @@ -106,6 +110,9 @@ class PFToolbar(object): bwidth, bheight = button.GetSize() bx += bwidth + self.padding + + if not changeCursor: + self.Parent.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) return doRefresh def MouseClick(self, event): @@ -193,7 +200,7 @@ class SFBrowserItem(wx.Window): self.highlighted = False self.selected = False self.bkBitmap = None - self.toolbar = PFToolbar() + self.toolbar = PFToolbar(self) self.Bind(wx.EVT_PAINT, self.OnPaint) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 57c28e8f3..e44244ae7 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -152,6 +152,10 @@ class ShipBrowser(wx.Panel): self.hpane.ToggleNewFitSB(False) self.hpane.ToggleFitViewModeSB(False) sMarket = service.Market.getInstance() + + self.lpane.ShowLoading(False) + + self.lpane.Freeze() self.lpane.RemoveAllChildren() if len(self.categoryList) == 0: self.categoryList = sMarket.getShipRoot() @@ -160,6 +164,7 @@ class ShipBrowser(wx.Panel): self.lpane.AddWidget(CategoryItem(self.lpane, ID, (name, 0))) self.lpane.RefreshList() + self.lpane.Thaw() RACE_ORDER = ["amarr", "caldari", "gallente", "minmatar", "ore", "serpentis", "angel", "blood", "sansha", "guristas", None] def raceNameKey(self, shipInfo): @@ -181,6 +186,7 @@ class ShipBrowser(wx.Panel): self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, fits), race)) self.lpane.ShowLoading(False) + self.lpane.RefreshList() def stage2(self, event): @@ -192,10 +198,10 @@ class ShipBrowser(wx.Panel): categoryID = event.categoryID self.lastdata = categoryID + self.lpane.ShowLoading() self.lpane.RemoveAllChildren() - self.lpane.ShowLoading() sMarket = service.Market.getInstance() sMarket.getShipListDelayed(self.stage2Callback, categoryID) @@ -205,6 +211,9 @@ class ShipBrowser(wx.Panel): self.hpane.ToggleFitViewModeSB(True) def stage3(self, event): + + self.lpane.ShowLoading(False) + if event.back == 0: self.browseHist.append( (2,self._stage2Data) ) elif event.back == -1: @@ -218,11 +227,14 @@ class ShipBrowser(wx.Panel): sFit = service.Fit.getInstance() sMarket = service.Market.getInstance() + + self.lpane.Freeze() self.lpane.RemoveAllChildren() fitList = sFit.getFitsWithShip(shipID) if len(fitList) == 0: stage,data = self.browseHist.pop() + self.lpane.Thaw() self.hpane.gotoStage(stage,data) return self.hpane.ToggleFitViewModeSB(False) @@ -237,8 +249,12 @@ class ShipBrowser(wx.Panel): self.lpane.AddWidget(FitItem(self.lpane, ID, (shipName, name, timestamp),shipID)) self.lpane.RefreshList() + self.lpane.Thaw() def searchStage(self, event): + + self.lpane.ShowLoading(False) + if not event.back: if self._activeStage !=4: if len(self.browseHist) >0: @@ -252,6 +268,8 @@ class ShipBrowser(wx.Panel): sFit = service.Fit.getInstance() query = event.text + self.lpane.Freeze() + self.lpane.RemoveAllChildren() if query: shipList = sMarket.searchShips(query) @@ -265,6 +283,7 @@ class ShipBrowser(wx.Panel): if len(shipList) == 0 and len(fitList) == 0 : self.lpane.AddWidget(PFStaticText(self.lpane, label = "No matching results.")) self.lpane.RefreshList() + self.lpane.Thaw() class PFStaticText(wx.StaticText): def _init__(self,parent, label = wx.EmptyString): @@ -1158,6 +1177,7 @@ class FitItem(SFItem.SFBrowserItem): 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.acceptBmp = bitmapLoader.getBitmap("faccept_small", "icons") self.shipEffBk = bitmapLoader.getBitmap("fshipbk_big","icons") @@ -1179,7 +1199,7 @@ class FitItem(SFItem.SFBrowserItem): self.fontSmall = wx.FontFromPixelSize((0,12),wx.SWISS, wx.NORMAL, wx.NORMAL, False) self.toolbar.AddButton(self.copyBmp,"Copy", self.copyBtnCB) - self.toolbar.AddButton(self.renameBmp,"Rename", self.renameBtnCB) + self.renameBtn = self.toolbar.AddButton(self.renameBmp,"Rename", self.renameBtnCB) self.toolbar.AddButton(self.deleteBmp, "Delete", self.deleteBtnCB) self.tcFitName = wx.TextCtrl(self, wx.ID_ANY, "%s" % self.fitName, wx.DefaultPosition, (self.editWidth,-1), wx.TE_PROCESS_ENTER) @@ -1190,6 +1210,7 @@ class FitItem(SFItem.SFBrowserItem): self.tcFitName.SetFocus() self.tcFitName.SelectAll() self.shipBrowser.fitIDMustEditName = -1 + self.renameBtn.SetBitmap(self.acceptBmp) self.tcFitName.Bind(wx.EVT_TEXT_ENTER, self.renameFit) self.tcFitName.Bind(wx.EVT_KILL_FOCUS, self.editLostFocus) @@ -1201,6 +1222,8 @@ class FitItem(SFItem.SFBrowserItem): self.animPeriod = 10 self.animDuration = 100 + self.maxDelta = 60 + self.Bind(wx.EVT_TIMER, self.OnTimer) if self.shipBrowser.GetActiveStage() != 4 and self.shipBrowser.GetLastStage() !=3: @@ -1217,13 +1240,13 @@ class FitItem(SFItem.SFBrowserItem): if self.selTimerID == event.GetId(): ctimestamp = time.time() - interval = 10 + interval = 5 if ctimestamp < self.timestamp + interval: delta = (ctimestamp - self.timestamp) / interval - self.selectedDelta = self.CalculateDelta(0x0,0x66,delta) + self.selectedDelta = self.CalculateDelta(0x0,self.maxDelta,delta) self.Refresh() else: - self.selectedDelta = 0x66 + self.selectedDelta = self.maxDelta self.selTimer.Stop() if self.animTimerId == event.GetId(): @@ -1249,16 +1272,20 @@ class FitItem(SFItem.SFBrowserItem): return -c *(t)*(t-2) + b def editLostFocus(self, event): - self.tcFitName.Show(False) + self.RestoreEditButton() self.Refresh() def editCheckEsc(self, event): if event.GetKeyCode() == wx.WXK_ESCAPE: - self.tcFitName.Show(False) + self.RestoreEditButton() else: event.Skip() def copyBtnCB(self): + if self.tcFitName.IsShown(): + self.RestoreEditButton() + return + self.copyFit() def copyFit(self, event=None): @@ -1270,12 +1297,12 @@ class FitItem(SFItem.SFBrowserItem): def renameBtnCB(self): if self.tcFitName.IsShown(): - self.tcFitName.Show(False) + self.RestoreEditButton() self.renameFit() else: self.tcFitName.SetValue(self.fitName) self.tcFitName.Show() - + self.renameBtn.SetBitmap(self.acceptBmp) self.tcFitName.SetFocus() self.tcFitName.SelectAll() @@ -1295,6 +1322,10 @@ class FitItem(SFItem.SFBrowserItem): self.tcFitName.SetValue(self.fitName) def deleteBtnCB(self): + if self.tcFitName.IsShown(): + self.RestoreEditButton() + return + self.deleteFit() def deleteFit(self, event=None): @@ -1344,8 +1375,7 @@ class FitItem(SFItem.SFBrowserItem): self.dragging = False if self.tcFitName.IsShown(): - self.tcFitName.Show(False) - self.Refresh() + self.RestoreEditButton() else: activeFitID = self.mainFrame.getActiveFit() if activeFitID != self.fitID: @@ -1376,6 +1406,11 @@ class FitItem(SFItem.SFBrowserItem): wx.PostEvent(self.mainFrame, FitSelected(fitID=self.fitID)) self.Parent.RefreshList(True) + def RestoreEditButton(self): + self.tcFitName.Show(False) + self.renameBtn.SetBitmap(self.renameBmp) + self.Refresh() + def UpdateElementsPos(self, mdc): rect = self.GetRect() @@ -1432,9 +1467,10 @@ class FitItem(SFItem.SFBrowserItem): mdc.SetFont(self.fontNormal) fitDate = time.localtime(self.timestamp) - fitLocalDate = "%02d/%02d %02d:%02d" % (fitDate[1], fitDate[2], fitDate[3], fitDate[4]) + fitLocalDate = "%d/%02d/%02d %02d:%02d" % ( fitDate[0], fitDate[1], fitDate[2], fitDate[3], fitDate[4]) + pfdate = drawUtils.GetPartialText(mdc, fitLocalDate, self.toolbarx - self.textStartx - self.padding * 2 - self.thoverw) - mdc.DrawText(fitLocalDate, self.textStartx, self.timestampy) + mdc.DrawText(pfdate, self.textStartx, self.timestampy) mdc.SetFont(self.fontSmall) mdc.DrawText(self.toolbar.hoverLabel, self.thoverx, self.thovery) @@ -1501,7 +1537,7 @@ class FitItem(SFItem.SFBrowserItem): elif state == SFItem.SB_ITEM_SELECTED | SFItem.SB_ITEM_HIGHLIGHTED: eFactor = 0.3 elif state == SFItem.SB_ITEM_SELECTED: - eFactor = (0x33 - self.selectedDelta)/100 + eFactor = (self.maxDelta - self.selectedDelta)/100 + 0.15 else: sFactor = 0 diff --git a/gui/utils/animUtils.py b/gui/utils/animUtils.py index c225d0b13..deaa1c70d 100644 --- a/gui/utils/animUtils.py +++ b/gui/utils/animUtils.py @@ -84,3 +84,18 @@ class LoadAnimation(wx.Window): dc.SetTextForeground(textColor) dc.DrawLabel(self.label,rect,wx.ALIGN_CENTER) +class WaitDialog(wx.Dialog): + def __init__(self, parent, title = "Processing"): + wx.Dialog.__init__ (self, parent, id=wx.ID_ANY, title = title, size=(300,30), + style=wx.NO_BORDER) + mainSizer = wx.BoxSizer( wx.HORIZONTAL ) + + self.progress = LoadAnimation(self,label = title, size=(300,30)) + mainSizer.Add( self.progress, 1, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 0 ) + self.SetSizer( mainSizer ) + self.Layout() + self.Bind(wx.EVT_CLOSE,self.OnClose) + self.CenterOnParent() + + def OnClose(self, event): + pass