Change the way we handle dialogs

This commit is contained in:
DarkPhoenix
2019-08-09 20:09:31 +03:00
parent 3174deed99
commit 01371f227c
19 changed files with 107 additions and 140 deletions

View File

@@ -27,21 +27,21 @@ class DroneSplitStack(ContextMenuSingle):
return "Split {} Stack".format(itmContext)
def activate(self, callingWindow, fullContext, mainItem, i):
dlg = DroneStackSplit(self.mainFrame, mainItem.amount)
with DroneStackSplit(self.mainFrame, mainItem.amount) as dlg:
if dlg.ShowModal() == wx.ID_OK:
if dlg.ShowModal() == wx.ID_OK:
if dlg.input.GetLineText(0).strip() == '':
return
if dlg.input.GetLineText(0).strip() == '':
return
fitID = self.mainFrame.getActiveFit()
fit = Fit.getInstance().getFit(fitID)
cleanInput = re.sub(r'[^0-9.]', '', dlg.input.GetLineText(0).strip())
fitID = self.mainFrame.getActiveFit()
fit = Fit.getInstance().getFit(fitID)
cleanInput = re.sub(r'[^0-9.]', '', dlg.input.GetLineText(0).strip())
if mainItem in fit.drones:
position = fit.drones.index(mainItem)
self.mainFrame.command.Submit(cmd.GuiSplitLocalDroneStackCommand(
fitID=fitID, position=position, amount=int(cleanInput)))
if mainItem in fit.drones:
position = fit.drones.index(mainItem)
self.mainFrame.command.Submit(cmd.GuiSplitLocalDroneStackCommand(
fitID=fitID, position=position, amount=int(cleanInput)))
DroneSplitStack.register()
@@ -50,6 +50,7 @@ DroneSplitStack.register()
class DroneStackSplit(wx.Dialog):
def __init__(self, parent, value):
wx.Dialog.__init__(self, parent, title="Split Drone Stack")
self.SetMinSize((346, 156))

View File

@@ -26,10 +26,10 @@ class AddBrowsedFits(ContextMenuUnconditional):
'graphFitList': 'Add Fits to Graph',
'graphTgtList': 'Add Targets to Graph'}
excludedFitIDs = callingWindow.getExistingFitIDs()
dlg = FitBrowserLiteDialog(self.mainFrame, title=titles[fullContext[0]], excludedFitIDs=excludedFitIDs)
if dlg.ShowModal() == wx.ID_OK:
fitIDs = dlg.getFitIDsToAdd()
callingWindow.addFitsByIDs(fitIDs)
with FitBrowserLiteDialog(self.mainFrame, title=titles[fullContext[0]], excludedFitIDs=excludedFitIDs) as dlg:
if dlg.ShowModal() == wx.ID_OK:
fitIDs = dlg.getFitIDsToAdd()
callingWindow.addFitsByIDs(fitIDs)
AddBrowsedFits.register()

View File

@@ -43,42 +43,43 @@ class ChangeItemAmount(ContextMenuSingle):
else:
value = mainItem.amount
dlg = AmountChanger(self.mainFrame, value, (0, 20)) if isinstance(mainItem, es_Fit) else AmountChanger(self.mainFrame, value)
if dlg.ShowModal() == wx.ID_OK:
limits = (0, 20) if isinstance(mainItem, es_Fit) else None
with AmountChanger(self.mainFrame, value, limits) as dlg:
if dlg.ShowModal() == wx.ID_OK:
if dlg.input.GetLineText(0).strip() == '':
return
if dlg.input.GetLineText(0).strip() == '':
return
sFit = Fit.getInstance()
fit = sFit.getFit(fitID)
cleanInput = int(float(re.sub(r'[^0-9.]', '', dlg.input.GetLineText(0).strip())))
sFit = Fit.getInstance()
fit = sFit.getFit(fitID)
cleanInput = int(float(re.sub(r'[^0-9.]', '', dlg.input.GetLineText(0).strip())))
if isinstance(mainItem, es_Cargo):
self.mainFrame.command.Submit(cmd.GuiChangeCargoAmountCommand(
fitID=fitID, itemID=mainItem.itemID, amount=cleanInput))
elif isinstance(mainItem, Drone):
if srcContext == "projectedDrone":
self.mainFrame.command.Submit(cmd.GuiChangeProjectedDroneAmountCommand(
if isinstance(mainItem, es_Cargo):
self.mainFrame.command.Submit(cmd.GuiChangeCargoAmountCommand(
fitID=fitID, itemID=mainItem.itemID, amount=cleanInput))
else:
if mainItem in fit.drones:
position = fit.drones.index(mainItem)
self.mainFrame.command.Submit(cmd.GuiChangeLocalDroneAmountCommand(
fitID=fitID, position=position, amount=cleanInput))
elif isinstance(mainItem, es_Fit):
self.mainFrame.command.Submit(cmd.GuiChangeProjectedFitAmountCommand(
fitID=fitID, projectedFitID=mainItem.ID, amount=cleanInput))
elif isinstance(mainItem, es_Fighter):
if srcContext == "projectedFighter":
if mainItem in fit.projectedFighters:
position = fit.projectedFighters.index(mainItem)
self.mainFrame.command.Submit(cmd.GuiChangeProjectedFighterAmountCommand(
fitID=fitID, position=position, amount=cleanInput))
else:
if mainItem in fit.fighters:
position = fit.fighters.index(mainItem)
self.mainFrame.command.Submit(cmd.GuiChangeLocalFighterAmountCommand(
fitID=fitID, position=position, amount=cleanInput))
elif isinstance(mainItem, Drone):
if srcContext == "projectedDrone":
self.mainFrame.command.Submit(cmd.GuiChangeProjectedDroneAmountCommand(
fitID=fitID, itemID=mainItem.itemID, amount=cleanInput))
else:
if mainItem in fit.drones:
position = fit.drones.index(mainItem)
self.mainFrame.command.Submit(cmd.GuiChangeLocalDroneAmountCommand(
fitID=fitID, position=position, amount=cleanInput))
elif isinstance(mainItem, es_Fit):
self.mainFrame.command.Submit(cmd.GuiChangeProjectedFitAmountCommand(
fitID=fitID, projectedFitID=mainItem.ID, amount=cleanInput))
elif isinstance(mainItem, es_Fighter):
if srcContext == "projectedFighter":
if mainItem in fit.projectedFighters:
position = fit.projectedFighters.index(mainItem)
self.mainFrame.command.Submit(cmd.GuiChangeProjectedFighterAmountCommand(
fitID=fitID, position=position, amount=cleanInput))
else:
if mainItem in fit.fighters:
position = fit.fighters.index(mainItem)
self.mainFrame.command.Submit(cmd.GuiChangeLocalFighterAmountCommand(
fitID=fitID, position=position, amount=cleanInput))
ChangeItemAmount.register()

View File

@@ -55,8 +55,7 @@ class ItemStats(ContextMenuSingle):
reuse = True
if self.mainFrame.GetActiveStatsWindow() is None and reuse:
ItemStatsDialog(stuff, fullContext)
dlg = ItemStatsDialog(stuff, fullContext)
elif reuse:
lastWnd = self.mainFrame.GetActiveStatsWindow()
pos = lastWnd.GetPosition()
@@ -66,11 +65,12 @@ class ItemStats(ContextMenuSingle):
else:
size = wx.DefaultSize
pos = wx.DefaultPosition
ItemStatsDialog(stuff, fullContext, pos, size, maximized)
dlg = ItemStatsDialog(stuff, fullContext, pos, size, maximized)
lastWnd.Close()
else:
ItemStatsDialog(stuff, fullContext)
dlg = ItemStatsDialog(stuff, fullContext)
dlg.Show()
ItemStats.register()

View File

@@ -25,7 +25,8 @@ class TargetProfileEditor(ContextMenuSingle):
return 'Edit Target Profile'
def activate(self, callingWindow, fullContext, mainItem, i):
TargetProfileEditorDlg(parent=callingWindow, selected=mainItem.item)
with TargetProfileEditorDlg(parent=callingWindow, selected=mainItem.item) as dlg:
dlg.ShowModal()
TargetProfileEditor.register()

View File

@@ -480,13 +480,11 @@ class SkillTreeView(wx.Panel):
def onSecStatus(self, event):
sChar = Character.getInstance()
char = self.charEditor.entityEditor.getActiveEntity()
myDlg = SecStatusDialog(self, char.secStatus or 0.0)
res = myDlg.ShowModal()
if res == wx.ID_OK:
value = myDlg.floatSpin.GetValue()
sChar.setSecStatus(char, value)
self.btnSecStatus.SetLabel("Sec Status: {0:.2f}".format(value))
myDlg.Destroy()
with SecStatusDialog(self, char.secStatus or 0.0) as dlg:
if dlg.ShowModal() == wx.ID_OK:
value = dlg.floatSpin.GetValue()
sChar.setSecStatus(char, value)
self.btnSecStatus.SetLabel("Sec Status: {0:.2f}".format(value))
def delaySearch(self, evt):
if self.searchInput.GetValue() == "" or self.searchInput.GetValue() == self.searchInput.default_text:
@@ -897,19 +895,19 @@ class APIView(wx.Panel):
class SecStatusDialog(wx.Dialog):
def __init__(self, parent, sec):
wx.Dialog.__init__(self, parent, title="Set Security Status", size=(275, 175))
wx.Dialog.__init__(self, parent, title="Set Security Status", size=(300, 175))
self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)
bSizer1 = wx.BoxSizer(wx.VERTICAL)
self.m_staticText1 = wx.StaticText(self, wx.ID_ANY,
"Security Status is used in some CONCORD hull calculations; you can set the characters security status here",
"Security Status is used in some CONCORD hull calculations",
wx.DefaultPosition, wx.DefaultSize, 0)
self.m_staticText1.Wrap(-1)
bSizer1.Add(self.m_staticText1, 1, wx.ALL | wx.EXPAND, 5)
self.floatSpin = FloatSpin(self, value=sec, min_val=-5.0, max_val=5.0, increment=0.1, digits=2, size=(100, -1))
self.floatSpin = FloatSpin(self, value=sec, min_val=-5.0, max_val=5.0, increment=0.1, digits=2, size=(-1, -1))
bSizer1.Add(self.floatSpin, 0, wx.ALIGN_CENTER | wx.ALL, 5)
btnOk = wx.Button(self, wx.ID_OK)
@@ -918,4 +916,4 @@ class SecStatusDialog(wx.Dialog):
self.SetSizer(bSizer1)
self.Layout()
self.Centre(wx.BOTH)
self.Center(wx.BOTH)

View File

@@ -17,13 +17,15 @@
# along with pyfa. If not, see <http://www.gnu.org/licenses/>.
# =============================================================================
import gc
import threading
import time
# noinspection PyPackageRequirements
import wx
from logbook import Logger
import gc
import eos
import time
import threading
import eos.db
from gui.builtinShipBrowser.events import FitSelected
@@ -34,7 +36,7 @@ class DevTools(wx.Dialog):
DAMAGE_TYPES = ("em", "thermal", "kinetic", "explosive")
def __init__(self, parent):
wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title="Damage Pattern Editor", size=wx.Size(400, 240))
wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title="Development Tools", size=wx.Size(400, 240))
self.mainFrame = parent
self.block = False
self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)
@@ -62,13 +64,15 @@ class DevTools(wx.Dialog):
mainSizer.Add(self.cmdPrint, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5)
self.cmdPrint.Bind(wx.EVT_BUTTON, self.cmd_print)
self.Bind(wx.EVT_CLOSE, self.OnClose)
self.SetSizer(mainSizer)
self.Layout()
self.CenterOnParent()
self.Show()
print(parent)
def OnClose(self, event):
self.Destroy()
def objects_by_id(self, evt):
input = self.id_get.GetValue()

View File

@@ -99,20 +99,13 @@ class EveFittings(wx.Frame):
keycode = event.GetKeyCode()
mstate = wx.GetMouseState()
if keycode == wx.WXK_ESCAPE and mstate.GetModifiers() == wx.MOD_NONE:
self.closeWindow()
self.Close()
return
event.Skip()
def OnClose(self, event):
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
@@ -254,19 +247,13 @@ class ExportToEve(wx.Frame):
keycode = event.GetKeyCode()
mstate = wx.GetMouseState()
if keycode == wx.WXK_ESCAPE and mstate.GetModifiers() == wx.MOD_NONE:
self.closeWindow()
self.Close()
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)
self.Destroy()
def getActiveCharacter(self):
selection = self.charChoice.GetCurrentSelection()
return self.charChoice.GetClientData(selection) if selection is not None else None
@@ -341,6 +328,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_CLOSE, self.OnClose)
self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent)
self.SetSizer(mainSizer)
@@ -349,20 +337,19 @@ class SsoCharacterMgmt(wx.Dialog):
self.Centre(wx.BOTH)
def ssoLogin(self, event):
if self:
# todo: these events don't unbind properly when window is closed (?), hence the `if`. Figure out better way of doing this.
self.popCharList()
event.Skip()
self.popCharList()
event.Skip()
def kbEvent(self, event):
keycode = event.GetKeyCode()
mstate = wx.GetMouseState()
if keycode == wx.WXK_ESCAPE and mstate.GetModifiers() == wx.MOD_NONE:
self.closeWindow()
self.Close()
return
event.Skip()
def closeWindow(self):
def OnClose(self, event):
self.mainFrame.Unbind(GE.EVT_SSO_LOGIN, handler=self.ssoLogin)
self.Destroy()
def popCharList(self):

View File

@@ -62,7 +62,6 @@ class FitBrowserLiteDialog(wx.Dialog):
self.Bind(wx.EVT_TIMER, self.OnInputTimer, self.inputTimer)
self.searchBox.Bind(event=wx.EVT_TEXT, handler=self.OnSearchChanged)
self.SetSizer(mainSizer)
self.Layout()
self.SetSize(self.GetBestSize())

View File

@@ -133,8 +133,6 @@ class ItemStatsDialog(wx.Dialog):
self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent)
self.Bind(wx.EVT_ACTIVATE, self.OnActivate)
self.Show()
def OnActivate(self, event):
self.parentWnd.SetActiveStatsWindow(self)

View File

@@ -237,8 +237,8 @@ class MainFrame(wx.Frame):
return Fit.getCommandProcessor(fitID)
def ShowUpdateBox(self, release, version):
dlg = UpdateDialog(self, release, version)
dlg.ShowModal()
with UpdateDialog(self, release, version) as dlg:
dlg.ShowModal()
def LoadPreviousOpenFits(self):
sFit = Fit.getInstance()
@@ -386,7 +386,8 @@ class MainFrame(wx.Frame):
wx.adv.AboutBox(info)
def showDevTools(self, event):
DevTools(self)
dlg = DevTools(self)
dlg.Show()
def showCharacterEditor(self, event):
dlg = CharacterEditor(self)
@@ -397,18 +398,16 @@ class MainFrame(wx.Frame):
dlg.Show()
def showTargetProfileEditor(self, event):
TargetProfileEditorDlg(self)
with TargetProfileEditorDlg(self) as dlg:
dlg.ShowModal()
def showDamagePatternEditor(self, event):
dlg = DmgPatternEditorDlg(self)
dlg.ShowModal()
try:
dlg.Destroy()
except RuntimeError:
pyfalog.error("Tried to destroy an object that doesn't exist in <showDamagePatternEditor>.")
with DmgPatternEditorDlg(self) as dlg:
dlg.ShowModal()
def showImplantSetEditor(self, event):
ImplantSetEditorDlg(self)
with ImplantSetEditorDlg(self) as dlg:
dlg.ShowModal()
def showExportDialog(self, event):
""" Export active fit """
@@ -446,8 +445,8 @@ class MainFrame(wx.Frame):
pyfalog.error("Tried to destroy an object that doesn't exist in <showExportDialog>.")
def showPreferenceDialog(self, event):
dlg = PreferenceDialog(self)
dlg.ShowModal()
with PreferenceDialog(self) as dlg:
dlg.ShowModal()
@staticmethod
def goWiki(event):

View File

@@ -278,9 +278,6 @@ class DmgPatternEditorDlg(wx.Dialog):
keycode = event.GetKeyCode()
mstate = wx.GetMouseState()
if keycode == wx.WXK_ESCAPE and mstate.GetModifiers() == wx.MOD_NONE:
self.closeWindow()
self.Close()
return
event.Skip()
def closeWindow(self):
self.Destroy()

View File

@@ -74,7 +74,6 @@ class PreferenceDialog(wx.Dialog):
self.Layout()
self.Bind(wx.EVT_CLOSE, self.OnClose)
self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent)
self.btnOK.Bind(wx.EVT_BUTTON, self.OnBtnOK)
@@ -88,8 +87,3 @@ class PreferenceDialog(wx.Dialog):
self.Close()
return
event.Skip()
def OnClose(self, event):
if self.IsModal():
self.EndModal(wx.ID_OK)
self.Destroy()

View File

@@ -175,7 +175,6 @@ class ImplantSetEditorDlg(wx.Dialog):
self.Export.Bind(wx.EVT_BUTTON, self.exportPatterns)
self.CenterOnParent()
self.ShowModal()
def entityChanged(self, event):
if not self.entityEditor.checkEntitiesExist():
@@ -186,13 +185,10 @@ class ImplantSetEditorDlg(wx.Dialog):
keycode = event.GetKeyCode()
mstate = wx.GetMouseState()
if keycode == wx.WXK_ESCAPE and mstate.GetModifiers() == wx.MOD_NONE:
self.closeWindow()
self.Close()
return
event.Skip()
def closeWindow(self):
self.Destroy()
def __del__(self):
pass

View File

@@ -5,6 +5,7 @@ import gui.globalEvents as GE
class SsoLogin(wx.Dialog):
def __init__(self):
mainFrame = gui.mainFrame.MainFrame.getInstance()

View File

@@ -112,6 +112,7 @@ class TargetProfileEntityEditor(EntityEditor):
class TargetProfileEditorDlg(wx.Dialog):
DAMAGE_TYPES = OrderedDict([
("em", "EM resistance"),
("thermal", "Thermal resistance"),
@@ -243,7 +244,6 @@ class TargetProfileEditorDlg(wx.Dialog):
self.CenterOnParent()
self.Bind(wx.EVT_CHOICE, self.patternChanged)
self.Bind(wx.EVT_CLOSE, self.onClose)
self.Bind(wx.EVT_CHAR_HOOK, self.kbEvent)
self.inputTimer = wx.Timer(self)
@@ -251,8 +251,6 @@ class TargetProfileEditorDlg(wx.Dialog):
self.patternChanged()
self.ShowModal()
def OnFieldChanged(self, event=None):
if event is not None:
event.Skip()
@@ -366,18 +364,10 @@ class TargetProfileEditorDlg(wx.Dialog):
keycode = event.GetKeyCode()
mstate = wx.GetMouseState()
if keycode == wx.WXK_ESCAPE and mstate.GetModifiers() == wx.MOD_NONE:
self.closeWindow()
self.Close()
return
event.Skip()
def onClose(self, event):
self.processChanges()
event.Skip()
def closeWindow(self):
self.processChanges()
self.Destroy()
def processChanges(self):
changedFitIDs = Fit.getInstance().processTargetProfileChange()
if changedFitIDs:

View File

@@ -46,6 +46,7 @@ hr {{ border: #000 1px solid; }}
class UpdateDialog(wx.Dialog):
def __init__(self, parent, release, version):
wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title="pyfa Update Available", pos=wx.DefaultPosition,
size=wx.Size(550, 450), style=wx.DEFAULT_DIALOG_STYLE)

View File

@@ -89,6 +89,7 @@ class LoadAnimation(wx.Window):
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)

View File

@@ -103,13 +103,12 @@ class Esi(EsiAccess):
def login(self):
# always start the local server if user is using client details. Otherwise, start only if they choose to do so.
if self.settings.get('ssoMode') == EsiSsoMode.CUSTOM or self.settings.get('loginMode') == EsiLoginMethod.SERVER:
dlg = gui.ssoLogin.SsoLoginServer(6461 if self.settings.get('ssoMode') == EsiSsoMode.CUSTOM else 0)
dlg.ShowModal()
with gui.ssoLogin.SsoLoginServer(6461 if self.settings.get('ssoMode') == EsiSsoMode.CUSTOM else 0) as dlg:
dlg.ShowModal()
else:
dlg = gui.ssoLogin.SsoLogin()
if dlg.ShowModal() == wx.ID_OK:
self.handleLogin({'SSOInfo': [dlg.ssoInfoCtrl.Value.strip()]})
with gui.ssoLogin.SsoLogin() as dlg:
if dlg.ShowModal() == wx.ID_OK:
self.handleLogin({'SSOInfo': [dlg.ssoInfoCtrl.Value.strip()]})
def stopServer(self):
pyfalog.debug("Stopping Server")