diff -r 34a9287b6c7d -r bcbd41efd846 controls/UriLocationEditor.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/controls/UriLocationEditor.py Fri Apr 20 11:21:20 2018 +0200 @@ -0,0 +1,110 @@ +import wx +from zope.interface import Interface, Attribute +from zope.interface.verify import verifyObject +from connectors import connectors_dialog, ConnectorDialog, GetConnectorFromURI + + +[ID_URIWIZARDDIALOG,ID_URITYPECHOICE] = [wx.NewId() for _init_ctrls in range(2)] +URITYPES = ["- Select URI type -"] +URITYPES.extend([key for key, value in connectors_dialog.iteritems()]) + + +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): + """methode for set uri""" + + def GetURI(): + """metohde for get uri""" + + +class UriLocationEditor(wx.Dialog): + def _init_ctrls(self, parent): + wx.Dialog.__init__(self, id=ID_URIWIZARDDIALOG, + name='UriLocationEditor', parent=parent, + title='Uri location') + self.UriTypeChoice = wx.Choice(parent=self, id=ID_URIWIZARDDIALOG, + choices = URITYPES) + self.UriTypeChoice.SetSelection(0) + self.Bind(wx.EVT_CHOICE, self.OnTypeChoice, self.UriTypeChoice) + self.PanelSizer = wx.BoxSizer(wx.HORIZONTAL) + self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL) + + def _init_sizers(self): + self.mainSizer = wx.BoxSizer(wx.VERTICAL) + # self.mainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=0) + # self.mainSizer.AddGrowableCol(0) + # self.mainSizer.AddGrowableRow(0) + + 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(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.ButtonSizer, border=5, flag=wx.BOTTOM|wx.ALIGN_CENTER_HORIZONTAL) + self.SetSizer(self.mainSizer) + + def __init__(self, parent, uri): + self.selected = None + self.parrent = parent + self.logger = self.parrent.CTR.logger + self._init_ctrls(parent) + self._init_sizers() + 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() + + 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() + + def GetURI(self): + if not self.selected or not self.panelType: + return "" + else: + return self.panelType.GetURI() + + 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 _getConnectorDialog(self, connectorType): + connector = ConnectorDialog(connectorType, self) + if connector and IConnectorPanel.providedBy(connector): + if verifyObject(IConnectorPanel, connector): + return connector + else: + return None