From 72fc56024108264932dcc9ac30ad003f6ffc618f Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Sun, 21 Apr 2019 19:34:14 +0300 Subject: [PATCH] Make all secondary windows closable by ESC --- gui/characterEditor.py | 14 +++++++++++-- gui/esiFittings.py | 45 +++++++++++++++++++++++++++++++++++++---- gui/graphFrame.py | 19 ++++++++++++++--- gui/itemStats.py | 15 +++++++++++--- gui/patternEditor.py | 11 ++++++++++ gui/preferenceDialog.py | 14 ++++++++++++- gui/propertyEditor.py | 12 +++++++++++ gui/resistsEditor.py | 11 ++++++++++ gui/setEditor.py | 12 +++++++++++ 9 files changed, 140 insertions(+), 13 deletions(-) diff --git a/gui/characterEditor.py b/gui/characterEditor.py index 14934910f..a3af1b059 100644 --- a/gui/characterEditor.py +++ b/gui/characterEditor.py @@ -149,7 +149,7 @@ class CharacterEntityEditor(EntityEditor): class CharacterEditor(wx.Frame): def __init__(self, parent): - wx.Frame.__init__(self, parent, id=wx.ID_ANY, title="pyfa: Character Editor", pos=wx.DefaultPosition, + wx.Frame.__init__(self, parent, id=wx.ID_ANY, title="Character Editor", pos=wx.DefaultPosition, size=wx.Size(640, 600), style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER | wx.FRAME_FLOAT_ON_PARENT) i = wx.Icon(BitmapLoader.getBitmap("character_small", "gui")) @@ -208,6 +208,7 @@ class CharacterEditor(wx.Frame): self.Centre(wx.BOTH) self.Bind(wx.EVT_CLOSE, self.closeEvent) + self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent) self.Bind(GE.CHAR_LIST_UPDATED, self.refreshCharacterList) self.entityEditor.Bind(wx.EVT_CHOICE, self.charChanged) @@ -253,8 +254,17 @@ class CharacterEditor(wx.Frame): sChr.revertCharacter(char.ID) wx.PostEvent(self, GE.CharListUpdated()) + def kbEvent(self, event): + keycode = event.GetKeyCode() + if keycode == wx.WXK_ESCAPE: + self.closeWindow() + return + event.Skip() + def closeEvent(self, event): - # del self.disableWin + self.closeWindow() + + def closeWindow(self): wx.PostEvent(self.mainFrame, GE.CharListUpdated()) self.Destroy() diff --git a/gui/esiFittings.py b/gui/esiFittings.py index 9d14ad8fe..244df76ec 100644 --- a/gui/esiFittings.py +++ b/gui/esiFittings.py @@ -21,6 +21,7 @@ pyfalog = Logger(__name__) class EveFittings(wx.Frame): + def __init__(self, parent): wx.Frame.__init__(self, parent, id=wx.ID_ANY, title="Browse EVE Fittings", pos=wx.DefaultPosition, size=wx.Size(550, 450), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) @@ -69,6 +70,7 @@ class EveFittings(wx.Frame): self.deleteBtn.Bind(wx.EVT_BUTTON, self.deleteFitting) self.Bind(wx.EVT_CLOSE, self.OnClose) + self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent) self.statusbar = wx.StatusBar(self) self.statusbar.SetFieldsCount() @@ -92,12 +94,23 @@ class EveFittings(wx.Frame): self.charChoice.SetSelection(0) + def kbEvent(self, event): + keycode = event.GetKeyCode() + if keycode == wx.WXK_ESCAPE: + self.closeWindow() + return + event.Skip() + def OnClose(self, event): - self.mainFrame.Unbind(GE.EVT_SSO_LOGOUT) - self.mainFrame.Unbind(GE.EVT_SSO_LOGIN) + self.closeWindow() # self.cacheTimer.Stop() # must be manually stopped, otherwise crash. See https://github.com/wxWidgets/Phoenix/issues/632 event.Skip() + def closeWindow(self): + self.mainFrame.Unbind(GE.EVT_SSO_LOGOUT) + self.mainFrame.Unbind(GE.EVT_SSO_LOGIN) + self.Destroy() + def getActiveCharacter(self): selection = self.charChoice.GetCurrentSelection() return self.charChoice.GetClientData(selection) if selection is not None else None @@ -186,6 +199,7 @@ class ESIExceptionHandler(object): class ExportToEve(wx.Frame): + def __init__(self, parent): wx.Frame.__init__(self, parent, id=wx.ID_ANY, title="Export fit to EVE", pos=wx.DefaultPosition, size=(wx.Size(350, 100)), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) @@ -213,6 +227,7 @@ class ExportToEve(wx.Frame): self.statusbar.SetStatusWidths([100, -1]) self.Bind(wx.EVT_CLOSE, self.OnClose) + self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent) self.SetSizer(mainSizer) self.SetStatusBar(self.statusbar) @@ -233,11 +248,21 @@ class ExportToEve(wx.Frame): self.charChoice.SetSelection(0) + def kbEvent(self, event): + keycode = event.GetKeyCode() + if keycode == wx.WXK_ESCAPE: + self.closeWindow() + return + event.Skip() + def OnClose(self, event): + self.closeWindow() + event.Skip() + + def closeWindow(self): self.mainFrame.Unbind(GE.EVT_SSO_LOGOUT) self.mainFrame.Unbind(GE.EVT_SSO_LOGIN) - - event.Skip() + self.Destroy() def getActiveCharacter(self): selection = self.charChoice.GetCurrentSelection() @@ -283,6 +308,7 @@ class ExportToEve(wx.Frame): class SsoCharacterMgmt(wx.Dialog): + def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title="SSO Character Management", pos=wx.DefaultPosition, size=wx.Size(550, 250), style=wx.DEFAULT_DIALOG_STYLE) @@ -312,6 +338,7 @@ class SsoCharacterMgmt(wx.Dialog): self.deleteBtn.Bind(wx.EVT_BUTTON, self.delChar) self.mainFrame.Bind(GE.EVT_SSO_LOGIN, self.ssoLogin) + self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent) self.SetSizer(mainSizer) self.Layout() @@ -324,6 +351,16 @@ class SsoCharacterMgmt(wx.Dialog): self.popCharList() event.Skip() + def kbEvent(self, event): + keycode = event.GetKeyCode() + if keycode == wx.WXK_ESCAPE: + self.closeWindow() + return + event.Skip() + + def closeWindow(self): + self.Destroy() + def popCharList(self): sEsi = Esi.getInstance() chars = sEsi.getSsoCharacters() diff --git a/gui/graphFrame.py b/gui/graphFrame.py index 1ea9b86c3..fdbdb8daf 100644 --- a/gui/graphFrame.py +++ b/gui/graphFrame.py @@ -67,6 +67,7 @@ except Exception: class GraphFrame(wx.Frame): + def __init__(self, parent, style=wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE | wx.FRAME_FLOAT_ON_PARENT): global graphFrame_enabled global mplImported @@ -160,7 +161,8 @@ class GraphFrame(wx.Frame): self.fitList.fitList.Bind(wx.EVT_LEFT_DCLICK, self.removeItem) self.mainFrame.Bind(GE.FIT_CHANGED, self.draw) - self.Bind(wx.EVT_CLOSE, self.close) + self.Bind(wx.EVT_CLOSE, self.closeEvent) + self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent) self.Fit() self.SetMinSize(self.GetSize()) @@ -169,10 +171,21 @@ class GraphFrame(wx.Frame): if type == "fit": self.AppendFitToList(fitID) - def close(self, event): + def closeEvent(self, event): + self.closeWindow() + event.Skip() + + def kbEvent(self, event): + keycode = event.GetKeyCode() + if keycode == wx.WXK_ESCAPE: + self.closeWindow() + return + event.Skip() + + def closeWindow(self): self.fitList.fitList.Unbind(wx.EVT_LEFT_DCLICK, handler=self.removeItem) self.mainFrame.Unbind(GE.FIT_CHANGED, handler=self.draw) - event.Skip() + self.Destroy() def getView(self): return self.graphSelection.GetClientData(self.graphSelection.GetSelection()) diff --git a/gui/itemStats.py b/gui/itemStats.py index 0d7a7bb45..bb51d98a1 100644 --- a/gui/itemStats.py +++ b/gui/itemStats.py @@ -131,20 +131,29 @@ class ItemStatsDialog(wx.Dialog): self.Show() + self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent) self.Bind(wx.EVT_CLOSE, self.closeEvent) self.Bind(wx.EVT_ACTIVATE, self.OnActivate) def OnActivate(self, event): self.parentWnd.SetActiveStatsWindow(self) - def closeEvent(self, event): + def kbEvent(self, event): + keycode = event.GetKeyCode() + if keycode == wx.WXK_ESCAPE: + self.closeWindow() + return + event.Skip() + def closeEvent(self, event): + self.closeWindow() + event.Skip() + + def closeWindow(self): if self.dlgOrder == ItemStatsDialog.counter: ItemStatsDialog.counter -= 1 self.parentWnd.UnregisterStatsWindow(self) self.Destroy() - event.Skip() - class ItemStatsContainer(wx.Panel): def __init__(self, parent, stuff, item, context=None): diff --git a/gui/patternEditor.py b/gui/patternEditor.py index b8ae4f9af..6c0dfc6d7 100644 --- a/gui/patternEditor.py +++ b/gui/patternEditor.py @@ -188,6 +188,7 @@ class DmgPatternEditorDlg(wx.Dialog): self.CenterOnParent() self.Bind(wx.EVT_CHOICE, self.patternChanged) + self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent) self.patternChanged() @@ -272,3 +273,13 @@ class DmgPatternEditorDlg(wx.Dialog): sDP = DamagePattern.getInstance() toClipboard(sDP.exportPatterns()) self.stNotice.SetLabel("Patterns exported to clipboard") + + def kbEvent(self, event): + keycode = event.GetKeyCode() + if keycode == wx.WXK_ESCAPE: + self.closeWindow() + return + event.Skip() + + def closeWindow(self): + self.Destroy() diff --git a/gui/preferenceDialog.py b/gui/preferenceDialog.py index f65c8451f..28b0a024a 100644 --- a/gui/preferenceDialog.py +++ b/gui/preferenceDialog.py @@ -24,6 +24,7 @@ from gui.bitmap_loader import BitmapLoader class PreferenceDialog(wx.Dialog): + def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, size=wx.DefaultSize, style=wx.DEFAULT_DIALOG_STYLE) self.SetTitle("pyfa - Preferences") @@ -74,6 +75,17 @@ class PreferenceDialog(wx.Dialog): self.Layout() self.btnOK.Bind(wx.EVT_BUTTON, self.OnBtnOK) + self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent) def OnBtnOK(self, event): - self.Close() + self.closeWindow() + + def kbEvent(self, event): + keycode = event.GetKeyCode() + if keycode == wx.WXK_ESCAPE: + self.closeWindow() + return + event.Skip() + + def closeWindow(self): + self.Destroy() diff --git a/gui/propertyEditor.py b/gui/propertyEditor.py index 68cc93ee8..8010481de 100644 --- a/gui/propertyEditor.py +++ b/gui/propertyEditor.py @@ -25,6 +25,7 @@ pyfalog = Logger(__name__) class AttributeEditor(wx.Frame): + def __init__(self, parent): wx.Frame.__init__(self, parent, wx.ID_ANY, title="Attribute Editor", pos=wx.DefaultPosition, size=wx.Size(650, 600), @@ -89,8 +90,19 @@ class AttributeEditor(wx.Frame): self.SetAutoLayout(True) self.Bind(wx.EVT_CLOSE, self.OnClose) + self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent) + + def kbEvent(self, event): + keycode = event.GetKeyCode() + if keycode == wx.WXK_ESCAPE: + self.closeWindow() + return + event.Skip() def OnClose(self, event): + self.closeWindow() + + def closeWindow(self): fitID = self.mainFrame.getActiveFit() if fitID is not None: wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) diff --git a/gui/resistsEditor.py b/gui/resistsEditor.py index 4a6d4f3c0..f2136a0ff 100644 --- a/gui/resistsEditor.py +++ b/gui/resistsEditor.py @@ -183,6 +183,7 @@ class ResistsEditorDlg(wx.Dialog): self.CenterOnParent() self.Bind(wx.EVT_CHOICE, self.patternChanged) + self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent) self.patternChanged() @@ -292,3 +293,13 @@ class ResistsEditorDlg(wx.Dialog): sTR = TargetResists.getInstance() toClipboard(sTR.exportPatterns()) self.stNotice.SetLabel("Patterns exported to clipboard") + + def kbEvent(self, event): + keycode = event.GetKeyCode() + if keycode == wx.WXK_ESCAPE: + self.closeWindow() + return + event.Skip() + + def closeWindow(self): + self.Destroy() diff --git a/gui/setEditor.py b/gui/setEditor.py index 8de6b1217..7d592d491 100644 --- a/gui/setEditor.py +++ b/gui/setEditor.py @@ -113,6 +113,7 @@ class ImplantSetEditor(BaseImplantEditorView): class ImplantSetEditorDlg(wx.Dialog): + def __init__(self, parent): wx.Dialog.__init__( self, parent, id=wx.ID_ANY, @@ -168,6 +169,7 @@ class ImplantSetEditorDlg(wx.Dialog): return self.Bind(wx.EVT_CHOICE, self.entityChanged) + self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent) self.Import.Bind(wx.EVT_BUTTON, self.importPatterns) self.Export.Bind(wx.EVT_BUTTON, self.exportPatterns) @@ -180,6 +182,16 @@ class ImplantSetEditorDlg(wx.Dialog): self.Destroy() return + def kbEvent(self, event): + keycode = event.GetKeyCode() + if keycode == wx.WXK_ESCAPE: + self.closeWindow() + return + event.Skip() + + def closeWindow(self): + self.Destroy() + def __del__(self): pass