--- /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()
+