|
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 |
|
9 class IConnectorPanel(Interface): |
|
10 """This is interface for panel of seperate connector type""" |
|
11 uri = Attribute("""uri of connections""") |
|
12 type = Attribute("""type of connector""") |
|
13 |
|
14 def SetURI(uri): |
|
15 """methode for set uri""" |
|
16 |
|
17 def GetURI(): |
|
18 """metohde for get uri""" |
|
19 |
|
20 |
|
21 class UriLocationEditor(wx.Dialog): |
|
22 def _init_ctrls(self, parent): |
|
23 wx.Dialog.__init__(self, id=ID_URIWIZARDDIALOG, |
|
24 name='UriLocationEditor', parent=parent, |
|
25 title='Uri location') |
|
26 self.UriTypeChoice = wx.Choice(parent=self, id=ID_URIWIZARDDIALOG, choices = self.URITYPES) |
|
27 self.UriTypeChoice.SetSelection(0) |
|
28 self.Bind(wx.EVT_CHOICE, self.OnTypeChoice, self.UriTypeChoice) |
|
29 self.PanelSizer = wx.BoxSizer(wx.HORIZONTAL) |
|
30 self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL) |
|
31 |
|
32 def _init_sizers(self): |
|
33 self.mainSizer = wx.BoxSizer(wx.VERTICAL) |
|
34 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) |
|
36 typeSizer.Add(self.UriTypeChoice, border=5, flag=wx.ALL) |
|
37 self.mainSizer.Add(typeSizer) |
|
38 |
|
39 self.mainSizer.Add(self.PanelSizer, border=5, flag=wx.ALL) |
|
40 self.mainSizer.Add(self.ButtonSizer, border=5, flag=wx.BOTTOM|wx.ALIGN_CENTER_HORIZONTAL) |
|
41 self.SetSizer(self.mainSizer) |
|
42 |
|
43 def __init__(self, parent, uri): |
|
44 self.URITYPES = ["- Select URI type -"] |
|
45 for connector_type, connector_function in connectors_dialog.iteritems(): |
|
46 try: |
|
47 connector_function['function']() |
|
48 self.URITYPES.append(connector_type) |
|
49 except Exception as e: |
|
50 pass |
|
51 |
|
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 |