diff -r e5703dc8848e -r 8c18b1a3e2bf dialogs/UriEditor.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dialogs/UriEditor.py Thu Nov 08 11:14:06 2018 +0100 @@ -0,0 +1,79 @@ +from __future__ import absolute_import + +import wx +from connectors import ConnectorSchemes, EditorClassFromScheme + + +[ID_URIWIZARDDIALOG, ID_URITYPECHOICE] = [wx.NewId() for _init_ctrls in range(2)] + +class UriEditor(wx.Dialog): + def _init_ctrls(self, parent): + self.UriTypeChoice = wx.Choice(parent=self, id=ID_URIWIZARDDIALOG, choices=self.URITYPES) + self.UriTypeChoice.SetSelection(0) + self.Bind(wx.EVT_CHOICE, self.OnTypeChoice, self.UriTypeChoice) + self.editor_sizer = wx.BoxSizer(wx.HORIZONTAL) + self.ButtonSizer = self.CreateButtonSizer(wx.OK | wx.CANCEL) + + def _init_sizers(self): + self.mainSizer = wx.BoxSizer(wx.VERTICAL) + typeSizer = wx.BoxSizer(wx.HORIZONTAL) + typeSizer.Add(wx.StaticText(self, wx.ID_ANY, _("Scheme :")), border=5, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL) + typeSizer.Add(self.UriTypeChoice, border=5, flag=wx.ALL) + self.mainSizer.Add(typeSizer) + + self.mainSizer.Add(self.editor_sizer, border=5, flag=wx.ALL) + self.mainSizer.Add(self.ButtonSizer, border=5, flag=wx.BOTTOM | wx.ALIGN_CENTER_HORIZONTAL) + self.SetSizer(self.mainSizer) + self.Layout() + self.Fit() + + def __init__(self, parent, uri): + wx.Dialog.__init__(self, id=ID_URIWIZARDDIALOG, + name='UriEditor', parent=parent, + title=_('URI Editor')) + self.URITYPES = [_("- Select URI Scheme -")] + ConnectorSchemes() + self._init_ctrls(parent) + self._init_sizers() + self.scheme = None + self.scheme_editor = None + self.SetURI(uri) + self.CenterOnParent() + + def OnTypeChoice(self, event): + index = event.GetSelection() + self._replaceSchemeEditor(event.GetString() if index > 0 else None) + + def SetURI(self, uri): + try: + scheme, loc = uri.strip().split("://",1) + except: + return None + scheme = scheme.upper() + if scheme in ConnectorSchemes(): + self.UriTypeChoice.SetStringSelection(scheme) + self._replaceSchemeEditor(scheme) + self.scheme_editor.SetLoc(loc) + + def GetURI(self): + if self.scheme_editor is None: + return None + else: + return self.scheme+"://"+self.scheme_editor.GetLoc() + + def _replaceSchemeEditor(self, scheme): + self.scheme = scheme + + if self.scheme_editor is not None: + self.editor_sizer.Detach(self.scheme_editor) + self.scheme_editor.Destroy() + self.scheme_editor = None + + EditorClass = EditorClassFromScheme(scheme) + if EditorClass is not None: + self.scheme_editor = EditorClass(scheme,self) + self.editor_sizer.Add(self.scheme_editor) + self.scheme_editor.Refresh() + self.editor_sizer.Layout() + self.mainSizer.Layout() + self.Fit() +