controls/UriLocationEditor.py
changeset 2329 e5703dc8848e
parent 2182 eeca1aff0691
equal deleted inserted replaced
2328:7eb6cb70bf5b 2329:e5703dc8848e
     1 from __future__ import absolute_import
     1 from __future__ import absolute_import
     2 
     2 
     3 import wx
     3 import wx
     4 from zope.interface import Interface, Attribute
     4 from connectors import ConnectorSchemes, EditorClassFromScheme
     5 from zope.interface.verify import verifyObject
       
     6 from connectors import connectors_dialog, ConnectorDialog, GetConnectorFromURI
       
     7 
     5 
     8 
     6 
     9 [ID_URIWIZARDDIALOG, ID_URITYPECHOICE] = [wx.NewId() for _init_ctrls in range(2)]
     7 [ID_URIWIZARDDIALOG, ID_URITYPECHOICE] = [wx.NewId() for _init_ctrls in range(2)]
    10 
       
    11 
       
    12 class IConnectorPanel(Interface):
       
    13     """This is interface for panel of seperate connector type"""
       
    14     uri = Attribute("""uri of connections""")
       
    15     type = Attribute("""type of connector""")
       
    16 
       
    17     def SetURI(uri):     # pylint: disable=no-self-argument
       
    18         """methode for set uri"""
       
    19 
       
    20     def GetURI():        # pylint: disable=no-self-argument
       
    21         """metohde for get uri"""
       
    22 
       
    23 
     8 
    24 class UriLocationEditor(wx.Dialog):
     9 class UriLocationEditor(wx.Dialog):
    25     def _init_ctrls(self, parent):
    10     def _init_ctrls(self, parent):
    26         self.UriTypeChoice = wx.Choice(parent=self, id=ID_URIWIZARDDIALOG, choices=self.URITYPES)
    11         self.UriTypeChoice = wx.Choice(parent=self, id=ID_URIWIZARDDIALOG, choices=self.URITYPES)
    27         self.UriTypeChoice.SetSelection(0)
    12         self.UriTypeChoice.SetSelection(0)
    28         self.Bind(wx.EVT_CHOICE, self.OnTypeChoice, self.UriTypeChoice)
    13         self.Bind(wx.EVT_CHOICE, self.OnTypeChoice, self.UriTypeChoice)
    29         self.PanelSizer = wx.BoxSizer(wx.HORIZONTAL)
    14         self.editor_sizer = wx.BoxSizer(wx.HORIZONTAL)
    30         self.ButtonSizer = self.CreateButtonSizer(wx.OK | wx.CANCEL)
    15         self.ButtonSizer = self.CreateButtonSizer(wx.OK | wx.CANCEL)
    31 
    16 
    32     def _init_sizers(self):
    17     def _init_sizers(self):
    33         self.mainSizer = wx.BoxSizer(wx.VERTICAL)
    18         self.mainSizer = wx.BoxSizer(wx.VERTICAL)
    34         typeSizer = wx.BoxSizer(wx.HORIZONTAL)
    19         typeSizer = wx.BoxSizer(wx.HORIZONTAL)
    35         typeSizer.Add(wx.StaticText(self, wx.ID_ANY, _("URI type:")), border=5, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
    20         typeSizer.Add(wx.StaticText(self, wx.ID_ANY, _("Scheme :")), border=5, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
    36         typeSizer.Add(self.UriTypeChoice, border=5, flag=wx.ALL)
    21         typeSizer.Add(self.UriTypeChoice, border=5, flag=wx.ALL)
    37         self.mainSizer.Add(typeSizer)
    22         self.mainSizer.Add(typeSizer)
    38 
    23 
    39         self.mainSizer.Add(self.PanelSizer, border=5, flag=wx.ALL)
    24         self.mainSizer.Add(self.editor_sizer, border=5, flag=wx.ALL)
    40         self.mainSizer.Add(self.ButtonSizer, border=5, flag=wx.BOTTOM | wx.ALIGN_CENTER_HORIZONTAL)
    25         self.mainSizer.Add(self.ButtonSizer, border=5, flag=wx.BOTTOM | wx.ALIGN_CENTER_HORIZONTAL)
    41         self.SetSizer(self.mainSizer)
    26         self.SetSizer(self.mainSizer)
    42         self.Layout()
    27         self.Layout()
    43         self.Fit()
    28         self.Fit()
    44 
    29 
    45     def __init__(self, parent, uri):
    30     def __init__(self, parent, uri):
    46         wx.Dialog.__init__(self, id=ID_URIWIZARDDIALOG,
    31         wx.Dialog.__init__(self, id=ID_URIWIZARDDIALOG,
    47                            name='UriLocationEditor', parent=parent,
    32                            name='UriLocationEditor', parent=parent,
    48                            title='Uri location')
    33                            title=_('URI Editor'))
    49         self.URITYPES = [_("- Select URI type -")]
    34         self.URITYPES = [_("- Select URI Scheme -")] + ConnectorSchemes()
    50         for connector_type, connector_function in connectors_dialog.iteritems():
       
    51             try:
       
    52                 connector_function['function']()
       
    53                 self.URITYPES.append(connector_type)
       
    54             except Exception:
       
    55                 pass
       
    56 
       
    57         self.selected = None
       
    58         self.parrent = parent
       
    59         self.logger = self.parrent.CTR.logger
       
    60         self._init_ctrls(parent)
    35         self._init_ctrls(parent)
    61         self._init_sizers()
    36         self._init_sizers()
       
    37         self.scheme = None
       
    38         self.scheme_editor = None
    62         self.SetURI(uri)
    39         self.SetURI(uri)
    63         self.CenterOnParent()
    40         self.CenterOnParent()
    64 
    41 
    65     def OnTypeChoice(self, event):
    42     def OnTypeChoice(self, event):
    66         self._removePanelType()
       
    67         index = event.GetSelection()
    43         index = event.GetSelection()
    68         if index > 0:
    44         self._replaceSchemeEditor(event.GetString() if index > 0 else None)
    69             self.selected = event.GetString()
       
    70             self.panelType = self._getConnectorDialog(self.selected)
       
    71             if self.panelType:
       
    72                 self.PanelSizer.Add(self.panelType)
       
    73                 self.mainSizer.Layout()
       
    74                 self.Fit()
       
    75                 self.panelType.Refresh()
       
    76 
    45 
    77     def SetURI(self, uri):
    46     def SetURI(self, uri):
    78         self._removePanelType()
    47         try:
    79         uri_list = uri.strip().split(":")
    48             scheme, loc = uri.strip().split("://",1)
    80         if uri_list:
    49         except:
    81             uri_type = uri_list[0].upper()
    50             return None
    82             type = GetConnectorFromURI(uri_type)
    51         scheme = scheme.upper()
    83             if type:
    52         if scheme in ConnectorSchemes():
    84                 self.selected = type
    53             self.UriTypeChoice.SetStringSelection(scheme)
    85                 self.UriTypeChoice.SetStringSelection(self.selected)
    54             self._replaceSchemeEditor(scheme)
    86                 self.panelType = self._getConnectorDialog(self.selected)
    55             self.scheme_editor.SetLoc(loc)
    87                 if self.panelType:
       
    88                     self.panelType.SetURI(uri)
       
    89                     self.PanelSizer.Add(self.panelType)
       
    90                     self.PanelSizer.Layout()
       
    91                     self.mainSizer.Layout()
       
    92                     self.Fit()
       
    93                     self.panelType.Refresh()
       
    94 
    56 
    95     def GetURI(self):
    57     def GetURI(self):
    96         if not self.selected or not self.panelType:
    58         if self.scheme_editor is None:
    97             return ""
    59             return None
    98         else:
    60         else:
    99             return self.panelType.GetURI()
    61             return self.scheme+"://"+self.scheme_editor.GetLoc()
   100 
    62 
   101     def _removePanelType(self):
    63     def _replaceSchemeEditor(self, scheme):
   102         for i in range(self.PanelSizer.GetItemCount()):
    64         self.scheme = scheme
   103             item = self.PanelSizer.GetItem(i)
    65        
   104             item.DeleteWindows()
    66         if self.scheme_editor is not None:
   105             self.PanelSizer.Remove(i)
    67             self.editor_sizer.Detach(self.scheme_editor)
   106             self.Fit()
    68             self.scheme_editor.Destroy()
   107         self.PanelSizer.Layout()
    69             self.scheme_editor = None
   108 
    70 
   109     def _getConnectorDialog(self, connectorType):
    71         EditorClass = EditorClassFromScheme(scheme)
   110         connector = ConnectorDialog(connectorType, self)
    72         if EditorClass is not None:
   111         if connector and IConnectorPanel.providedBy(connector):
    73             self.scheme_editor = EditorClass(scheme,self)
   112             if verifyObject(IConnectorPanel, connector):
    74             self.editor_sizer.Add(self.scheme_editor)
   113                 return connector
    75             self.scheme_editor.Refresh()
   114         else:
    76         self.editor_sizer.Layout()
   115             return None
    77         self.mainSizer.Layout()
       
    78         self.Fit()
       
    79