andrej@2182: from __future__ import absolute_import andrej@2182: denis@2001: import wx Edouard@2329: from connectors import ConnectorSchemes, EditorClassFromScheme denis@2001: denis@2001: andrej@2182: [ID_URIWIZARDDIALOG, ID_URITYPECHOICE] = [wx.NewId() for _init_ctrls in range(2)] andrej@2182: Edouard@2330: class UriEditor(wx.Dialog): denis@2001: def _init_ctrls(self, parent): andrej@2182: self.UriTypeChoice = wx.Choice(parent=self, id=ID_URIWIZARDDIALOG, choices=self.URITYPES) denis@2001: self.UriTypeChoice.SetSelection(0) denis@2001: self.Bind(wx.EVT_CHOICE, self.OnTypeChoice, self.UriTypeChoice) Edouard@2329: self.editor_sizer = wx.BoxSizer(wx.HORIZONTAL) andrej@2182: self.ButtonSizer = self.CreateButtonSizer(wx.OK | wx.CANCEL) denis@2001: denis@2001: def _init_sizers(self): denis@2001: self.mainSizer = wx.BoxSizer(wx.VERTICAL) denis@2001: typeSizer = wx.BoxSizer(wx.HORIZONTAL) Edouard@2329: typeSizer.Add(wx.StaticText(self, wx.ID_ANY, _("Scheme :")), border=5, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL) denis@2001: typeSizer.Add(self.UriTypeChoice, border=5, flag=wx.ALL) denis@2001: self.mainSizer.Add(typeSizer) denis@2001: Edouard@2329: self.mainSizer.Add(self.editor_sizer, border=5, flag=wx.ALL) andrej@2182: self.mainSizer.Add(self.ButtonSizer, border=5, flag=wx.BOTTOM | wx.ALIGN_CENTER_HORIZONTAL) denis@2001: self.SetSizer(self.mainSizer) andrej@2176: self.Layout() andrej@2176: self.Fit() denis@2001: denis@2001: def __init__(self, parent, uri): andrej@2182: wx.Dialog.__init__(self, id=ID_URIWIZARDDIALOG, Edouard@2330: name='UriEditor', parent=parent, Edouard@2329: title=_('URI Editor')) Edouard@2329: self.URITYPES = [_("- Select URI Scheme -")] + ConnectorSchemes() denis@2001: self._init_ctrls(parent) denis@2001: self._init_sizers() Edouard@2329: self.scheme = None Edouard@2329: self.scheme_editor = None denis@2001: self.SetURI(uri) denis@2001: self.CenterOnParent() denis@2001: denis@2001: def OnTypeChoice(self, event): denis@2001: index = event.GetSelection() Edouard@2329: self._replaceSchemeEditor(event.GetString() if index > 0 else None) denis@2001: denis@2001: def SetURI(self, uri): Edouard@2329: try: Edouard@2329: scheme, loc = uri.strip().split("://",1) Edouard@2329: except: Edouard@2329: return None Edouard@2329: scheme = scheme.upper() Edouard@2329: if scheme in ConnectorSchemes(): Edouard@2329: self.UriTypeChoice.SetStringSelection(scheme) Edouard@2329: self._replaceSchemeEditor(scheme) Edouard@2329: self.scheme_editor.SetLoc(loc) denis@2001: denis@2001: def GetURI(self): Edouard@2329: if self.scheme_editor is None: Edouard@2329: return None denis@2001: else: Edouard@2329: return self.scheme+"://"+self.scheme_editor.GetLoc() denis@2001: Edouard@2329: def _replaceSchemeEditor(self, scheme): Edouard@2329: self.scheme = scheme Edouard@2329: Edouard@2329: if self.scheme_editor is not None: Edouard@2329: self.editor_sizer.Detach(self.scheme_editor) Edouard@2329: self.scheme_editor.Destroy() Edouard@2329: self.scheme_editor = None denis@2001: Edouard@2329: EditorClass = EditorClassFromScheme(scheme) Edouard@2329: if EditorClass is not None: Edouard@2329: self.scheme_editor = EditorClass(scheme,self) Edouard@2329: self.editor_sizer.Add(self.scheme_editor) Edouard@2329: self.scheme_editor.Refresh() Edouard@2329: self.editor_sizer.Layout() Edouard@2329: self.mainSizer.Layout() Edouard@2329: self.Fit() Edouard@2329: