controls/UriLocationEditor.py
branch#2476
changeset 2001 bcbd41efd846
child 2005 0d32b17f15b9
equal deleted inserted replaced
1991:34a9287b6c7d 2001:bcbd41efd846
       
     1 import wx
       
     2 from zope.interface import Interface, Attribute
       
     3 from zope.interface.verify import verifyObject
       
     4 from connectors import connectors_dialog, ConnectorDialog, GetConnectorFromURI
       
     5 
       
     6 
       
     7 [ID_URIWIZARDDIALOG,ID_URITYPECHOICE] = [wx.NewId() for _init_ctrls in range(2)]
       
     8 URITYPES = ["- Select URI type -"]
       
     9 URITYPES.extend([key for key, value in connectors_dialog.iteritems()])
       
    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):
       
    18         """methode for set uri"""
       
    19 
       
    20     def GetURI():
       
    21         """metohde for get uri"""
       
    22 
       
    23 
       
    24 class UriLocationEditor(wx.Dialog):
       
    25     def _init_ctrls(self, parent):
       
    26         wx.Dialog.__init__(self, id=ID_URIWIZARDDIALOG,
       
    27               name='UriLocationEditor', parent=parent,
       
    28               title='Uri location')
       
    29         self.UriTypeChoice = wx.Choice(parent=self, id=ID_URIWIZARDDIALOG,
       
    30              choices = URITYPES)
       
    31         self.UriTypeChoice.SetSelection(0)
       
    32         self.Bind(wx.EVT_CHOICE, self.OnTypeChoice, self.UriTypeChoice)
       
    33         self.PanelSizer = wx.BoxSizer(wx.HORIZONTAL)
       
    34         self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL)
       
    35 
       
    36     def _init_sizers(self):
       
    37         self.mainSizer = wx.BoxSizer(wx.VERTICAL)
       
    38         # self.mainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=0)
       
    39         # self.mainSizer.AddGrowableCol(0)
       
    40         # self.mainSizer.AddGrowableRow(0)
       
    41 
       
    42         typeSizer = wx.BoxSizer(wx.HORIZONTAL)
       
    43         typeSizer.Add(wx.StaticText(self,wx.ID_ANY,"URI type:"), border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
       
    44         typeSizer.Add(self.UriTypeChoice, border=5, flag=wx.ALL)
       
    45         self.mainSizer.Add(typeSizer)
       
    46 
       
    47         self.mainSizer.Add(self.PanelSizer, border=5, flag=wx.ALL)
       
    48         self.mainSizer.Add(self.ButtonSizer, border=5, flag=wx.BOTTOM|wx.ALIGN_CENTER_HORIZONTAL)
       
    49         self.SetSizer(self.mainSizer)
       
    50 
       
    51     def __init__(self, parent, uri):
       
    52         self.selected = None
       
    53         self.parrent = parent
       
    54         self.logger = self.parrent.CTR.logger
       
    55         self._init_ctrls(parent)
       
    56         self._init_sizers()
       
    57         self.SetURI(uri)
       
    58         self.CenterOnParent()
       
    59 
       
    60     def OnTypeChoice(self, event):
       
    61         self._removePanelType()
       
    62         index = event.GetSelection()
       
    63         if index > 0:
       
    64             self.selected = event.GetString()
       
    65             self.panelType = self._getConnectorDialog(self.selected)
       
    66             if self.panelType:
       
    67                 self.PanelSizer.Add(self.panelType)
       
    68                 self.mainSizer.Layout()
       
    69                 self.Fit()
       
    70                 self.panelType.Refresh()
       
    71 
       
    72     def SetURI(self, uri):
       
    73         self._removePanelType()
       
    74         uri_list = uri.strip().split(":")
       
    75         if uri_list:
       
    76             uri_type = uri_list[0].upper()
       
    77             type = GetConnectorFromURI(uri_type)
       
    78             if type:
       
    79                 self.selected = type
       
    80                 self.UriTypeChoice.SetStringSelection(self.selected)
       
    81                 self.panelType = self._getConnectorDialog(self.selected)
       
    82                 if self.panelType:
       
    83                     self.panelType.SetURI(uri)
       
    84                     self.PanelSizer.Add(self.panelType)
       
    85                     self.PanelSizer.Layout()
       
    86                     self.mainSizer.Layout()
       
    87                     self.Fit()
       
    88                     self.panelType.Refresh()
       
    89 
       
    90     def GetURI(self):
       
    91         if not self.selected or not self.panelType:
       
    92             return ""
       
    93         else:
       
    94             return self.panelType.GetURI()
       
    95 
       
    96     def _removePanelType(self):
       
    97         for i in range(self.PanelSizer.GetItemCount()):
       
    98             item = self.PanelSizer.GetItem(i)
       
    99             item.DeleteWindows()
       
   100             self.PanelSizer.Remove(i)
       
   101             self.Fit()
       
   102         self.PanelSizer.Layout()
       
   103 
       
   104     def _getConnectorDialog(self, connectorType):
       
   105         connector = ConnectorDialog(connectorType, self)
       
   106         if connector and IConnectorPanel.providedBy(connector):
       
   107             if verifyObject(IConnectorPanel, connector):
       
   108                 return connector
       
   109         else:
       
   110             return None