1 from __future__ import absolute_import |
|
2 |
|
3 import wx |
|
4 from connectors import ConnectorSchemes, EditorClassFromScheme |
|
5 |
|
6 |
|
7 [ID_URIWIZARDDIALOG, ID_URITYPECHOICE] = [wx.NewId() for _init_ctrls in range(2)] |
|
8 |
|
9 class UriLocationEditor(wx.Dialog): |
|
10 def _init_ctrls(self, parent): |
|
11 self.UriTypeChoice = wx.Choice(parent=self, id=ID_URIWIZARDDIALOG, choices=self.URITYPES) |
|
12 self.UriTypeChoice.SetSelection(0) |
|
13 self.Bind(wx.EVT_CHOICE, self.OnTypeChoice, self.UriTypeChoice) |
|
14 self.editor_sizer = wx.BoxSizer(wx.HORIZONTAL) |
|
15 self.ButtonSizer = self.CreateButtonSizer(wx.OK | wx.CANCEL) |
|
16 |
|
17 def _init_sizers(self): |
|
18 self.mainSizer = wx.BoxSizer(wx.VERTICAL) |
|
19 typeSizer = wx.BoxSizer(wx.HORIZONTAL) |
|
20 typeSizer.Add(wx.StaticText(self, wx.ID_ANY, _("Scheme :")), border=5, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL) |
|
21 typeSizer.Add(self.UriTypeChoice, border=5, flag=wx.ALL) |
|
22 self.mainSizer.Add(typeSizer) |
|
23 |
|
24 self.mainSizer.Add(self.editor_sizer, border=5, flag=wx.ALL) |
|
25 self.mainSizer.Add(self.ButtonSizer, border=5, flag=wx.BOTTOM | wx.ALIGN_CENTER_HORIZONTAL) |
|
26 self.SetSizer(self.mainSizer) |
|
27 self.Layout() |
|
28 self.Fit() |
|
29 |
|
30 def __init__(self, parent, uri): |
|
31 wx.Dialog.__init__(self, id=ID_URIWIZARDDIALOG, |
|
32 name='UriLocationEditor', parent=parent, |
|
33 title=_('URI Editor')) |
|
34 self.URITYPES = [_("- Select URI Scheme -")] + ConnectorSchemes() |
|
35 self._init_ctrls(parent) |
|
36 self._init_sizers() |
|
37 self.scheme = None |
|
38 self.scheme_editor = None |
|
39 self.SetURI(uri) |
|
40 self.CenterOnParent() |
|
41 |
|
42 def OnTypeChoice(self, event): |
|
43 index = event.GetSelection() |
|
44 self._replaceSchemeEditor(event.GetString() if index > 0 else None) |
|
45 |
|
46 def SetURI(self, uri): |
|
47 try: |
|
48 scheme, loc = uri.strip().split("://",1) |
|
49 except: |
|
50 return None |
|
51 scheme = scheme.upper() |
|
52 if scheme in ConnectorSchemes(): |
|
53 self.UriTypeChoice.SetStringSelection(scheme) |
|
54 self._replaceSchemeEditor(scheme) |
|
55 self.scheme_editor.SetLoc(loc) |
|
56 |
|
57 def GetURI(self): |
|
58 if self.scheme_editor is None: |
|
59 return None |
|
60 else: |
|
61 return self.scheme+"://"+self.scheme_editor.GetLoc() |
|
62 |
|
63 def _replaceSchemeEditor(self, scheme): |
|
64 self.scheme = scheme |
|
65 |
|
66 if self.scheme_editor is not None: |
|
67 self.editor_sizer.Detach(self.scheme_editor) |
|
68 self.scheme_editor.Destroy() |
|
69 self.scheme_editor = None |
|
70 |
|
71 EditorClass = EditorClassFromScheme(scheme) |
|
72 if EditorClass is not None: |
|
73 self.scheme_editor = EditorClass(scheme,self) |
|
74 self.editor_sizer.Add(self.scheme_editor) |
|
75 self.scheme_editor.Refresh() |
|
76 self.editor_sizer.Layout() |
|
77 self.mainSizer.Layout() |
|
78 self.Fit() |
|
79 |
|