denis@2001: import wx denis@2001: from zope.interface import Interface, Attribute denis@2001: from zope.interface.verify import verifyObject denis@2007: from connectors import connectors_dialog, ConnectorDialog, GetConnectorFromURI denis@2001: denis@2001: denis@2001: [ID_URIWIZARDDIALOG,ID_URITYPECHOICE] = [wx.NewId() for _init_ctrls in range(2)] denis@2001: denis@2001: class IConnectorPanel(Interface): denis@2001: """This is interface for panel of seperate connector type""" denis@2001: uri = Attribute("""uri of connections""") denis@2001: type = Attribute("""type of connector""") denis@2001: denis@2001: def SetURI(uri): denis@2001: """methode for set uri""" denis@2001: denis@2001: def GetURI(): denis@2001: """metohde for get uri""" denis@2001: denis@2001: denis@2001: class UriLocationEditor(wx.Dialog): denis@2001: def _init_ctrls(self, parent): denis@2001: wx.Dialog.__init__(self, id=ID_URIWIZARDDIALOG, denis@2001: name='UriLocationEditor', parent=parent, denis@2001: title='Uri location') denis@2005: 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) denis@2001: self.PanelSizer = wx.BoxSizer(wx.HORIZONTAL) denis@2001: 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) andrej@2179: typeSizer.Add(wx.StaticText(self,wx.ID_ANY, _("URI type:")), 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: denis@2001: self.mainSizer.Add(self.PanelSizer, border=5, flag=wx.ALL) denis@2001: 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@2179: self.URITYPES = [_("- Select URI type -")] denis@2005: for connector_type, connector_function in connectors_dialog.iteritems(): denis@2005: try: denis@2005: connector_function['function']() denis@2005: self.URITYPES.append(connector_type) denis@2005: except Exception as e: denis@2005: pass denis@2005: denis@2001: self.selected = None denis@2001: self.parrent = parent denis@2001: self.logger = self.parrent.CTR.logger denis@2001: self._init_ctrls(parent) denis@2001: self._init_sizers() denis@2001: self.SetURI(uri) denis@2001: self.CenterOnParent() denis@2001: denis@2001: def OnTypeChoice(self, event): denis@2001: self._removePanelType() denis@2001: index = event.GetSelection() denis@2001: if index > 0: denis@2001: self.selected = event.GetString() denis@2001: self.panelType = self._getConnectorDialog(self.selected) denis@2001: if self.panelType: denis@2001: self.PanelSizer.Add(self.panelType) denis@2001: self.mainSizer.Layout() denis@2001: self.Fit() denis@2001: self.panelType.Refresh() denis@2001: denis@2001: def SetURI(self, uri): denis@2001: self._removePanelType() denis@2001: uri_list = uri.strip().split(":") denis@2001: if uri_list: denis@2001: uri_type = uri_list[0].upper() denis@2001: type = GetConnectorFromURI(uri_type) denis@2001: if type: denis@2001: self.selected = type denis@2001: self.UriTypeChoice.SetStringSelection(self.selected) denis@2001: self.panelType = self._getConnectorDialog(self.selected) denis@2001: if self.panelType: denis@2001: self.panelType.SetURI(uri) denis@2001: self.PanelSizer.Add(self.panelType) denis@2001: self.PanelSizer.Layout() denis@2001: self.mainSizer.Layout() denis@2001: self.Fit() denis@2001: self.panelType.Refresh() denis@2001: denis@2001: def GetURI(self): denis@2001: if not self.selected or not self.panelType: denis@2001: return "" denis@2001: else: denis@2001: return self.panelType.GetURI() denis@2001: denis@2001: def _removePanelType(self): denis@2001: for i in range(self.PanelSizer.GetItemCount()): denis@2001: item = self.PanelSizer.GetItem(i) denis@2001: item.DeleteWindows() denis@2001: self.PanelSizer.Remove(i) denis@2001: self.Fit() denis@2001: self.PanelSizer.Layout() denis@2001: denis@2001: def _getConnectorDialog(self, connectorType): denis@2001: connector = ConnectorDialog(connectorType, self) denis@2001: if connector and IConnectorPanel.providedBy(connector): denis@2001: if verifyObject(IConnectorPanel, connector): denis@2001: return connector denis@2001: else: denis@2001: return None