dialogs/UriEditor.py
changeset 2330 8c18b1a3e2bf
parent 2329 e5703dc8848e
child 2331 91ae5a11a462
equal deleted inserted replaced
2329:e5703dc8848e 2330:8c18b1a3e2bf
       
     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 UriEditor(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='UriEditor', 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