|
- import wx
-
- from ..data import Position
- from ..i18n import _
-
-
- class PositionWindow(wx.Dialog):
- position: Position
-
- def __init__(self, parent, position: Position = None):
- super(PositionWindow, self).__init__(parent, title=_('Set position'), style=wx.DEFAULT_DIALOG_STYLE ^ wx.CLOSE_BOX)
- self.position = position
-
- latitude_lbl = wx.StaticText(self, label=_('Latitude:'))
- self._latitude_input = wx.SpinCtrlDouble(self, initial=position.latitude if position is not None else 0,
- min=-90, max=90)
- self._latitude_input.SetDigits(4)
-
- longitude_lbl = wx.StaticText(self, label=_('Longitude:'))
- self._longitude_input = wx.SpinCtrlDouble(self, initial=position.longitude if position is not None else 0,
- min=-180, max=180)
- self._longitude_input.SetDigits(4)
-
- ok_button = wx.Button(self, label=_('OK'))
- cancel_button = wx.Button(self, label=_('Cancel'))
-
- self.Bind(wx.EVT_BUTTON, self.on_ok, ok_button)
- self.Bind(wx.EVT_BUTTON, self.on_cancel, cancel_button)
-
- btn_sizer = wx.GridSizer(1, 2, 5, 5)
- btn_sizer.AddMany([(ok_button, 0, wx.EXPAND),
- (cancel_button, 0, wx.EXPAND)])
-
- sizer = wx.FlexGridSizer(2, 5, 5)
- sizer.AddGrowableCol(0, 2)
- sizer.AddMany([(latitude_lbl, 0, wx.EXPAND | wx.ALL, 5),
- (self._latitude_input, 0, wx.EXPAND | wx.ALL, 5),
- (longitude_lbl, 0, wx.EXPAND | wx.ALL, 5),
- (self._longitude_input, 0, wx.EXPAND | wx.ALL, 5),
- (wx.StaticText(self), 0, wx.EXPAND | wx.ALL, 5),
- (btn_sizer, 0, wx.EXPAND | wx.ALL, 5)])
-
- self.SetSizer(sizer)
- self.Fit()
- self.Center()
-
- self.Bind(wx.EVT_CHAR_HOOK, self.on_key_down)
-
- def on_cancel(self, _=None):
- self.Close()
-
- def on_ok(self, _=None):
- self.position = Position(self._latitude_input.GetValue(), self._longitude_input.GetValue())
- self.Close()
-
- def on_key_down(self, event):
- key = event.GetKeyCode()
-
- if key == wx.WXK_ESCAPE:
- self.on_cancel()
- elif key in [wx.WXK_RETURN, wx.WXK_NUMPAD_ENTER]:
- self.on_ok()
- else:
- event.Skip()
|