diff -r 7eb6cb70bf5b -r e5703dc8848e controls/UriLocationEditor.py --- a/controls/UriLocationEditor.py Tue Oct 30 14:08:28 2018 +0100 +++ b/controls/UriLocationEditor.py Thu Nov 08 09:39:06 2018 +0100 @@ -1,42 +1,27 @@ from __future__ import absolute_import import wx -from zope.interface import Interface, Attribute -from zope.interface.verify import verifyObject -from connectors import connectors_dialog, ConnectorDialog, GetConnectorFromURI +from connectors import ConnectorSchemes, EditorClassFromScheme [ID_URIWIZARDDIALOG, ID_URITYPECHOICE] = [wx.NewId() for _init_ctrls in range(2)] - -class IConnectorPanel(Interface): - """This is interface for panel of seperate connector type""" - uri = Attribute("""uri of connections""") - type = Attribute("""type of connector""") - - def SetURI(uri): # pylint: disable=no-self-argument - """methode for set uri""" - - def GetURI(): # pylint: disable=no-self-argument - """metohde for get uri""" - - class UriLocationEditor(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.PanelSizer = wx.BoxSizer(wx.HORIZONTAL) + 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, _("URI type:")), border=5, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL) + 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.PanelSizer, border=5, flag=wx.ALL) + 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() @@ -45,71 +30,50 @@ def __init__(self, parent, uri): wx.Dialog.__init__(self, id=ID_URIWIZARDDIALOG, name='UriLocationEditor', parent=parent, - title='Uri location') - self.URITYPES = [_("- Select URI type -")] - for connector_type, connector_function in connectors_dialog.iteritems(): - try: - connector_function['function']() - self.URITYPES.append(connector_type) - except Exception: - pass - - self.selected = None - self.parrent = parent - self.logger = self.parrent.CTR.logger + 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): - self._removePanelType() index = event.GetSelection() - if index > 0: - self.selected = event.GetString() - self.panelType = self._getConnectorDialog(self.selected) - if self.panelType: - self.PanelSizer.Add(self.panelType) - self.mainSizer.Layout() - self.Fit() - self.panelType.Refresh() + self._replaceSchemeEditor(event.GetString() if index > 0 else None) def SetURI(self, uri): - self._removePanelType() - uri_list = uri.strip().split(":") - if uri_list: - uri_type = uri_list[0].upper() - type = GetConnectorFromURI(uri_type) - if type: - self.selected = type - self.UriTypeChoice.SetStringSelection(self.selected) - self.panelType = self._getConnectorDialog(self.selected) - if self.panelType: - self.panelType.SetURI(uri) - self.PanelSizer.Add(self.panelType) - self.PanelSizer.Layout() - self.mainSizer.Layout() - self.Fit() - self.panelType.Refresh() + 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 not self.selected or not self.panelType: - return "" + if self.scheme_editor is None: + return None else: - return self.panelType.GetURI() + return self.scheme+"://"+self.scheme_editor.GetLoc() - def _removePanelType(self): - for i in range(self.PanelSizer.GetItemCount()): - item = self.PanelSizer.GetItem(i) - item.DeleteWindows() - self.PanelSizer.Remove(i) - self.Fit() - self.PanelSizer.Layout() + 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 - def _getConnectorDialog(self, connectorType): - connector = ConnectorDialog(connectorType, self) - if connector and IConnectorPanel.providedBy(connector): - if verifyObject(IConnectorPanel, connector): - return connector - else: - return 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() +