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 |