|
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 |