controls/IDManager.py
changeset 2335 4262256e1d28
parent 2334 d1470c052662
equal deleted inserted replaced
2334:d1470c052662 2335:4262256e1d28
   107         self.data.append(value)
   107         self.data.append(value)
   108         self.RowAppended()
   108         self.RowAppended()
   109         self._saveData()
   109         self._saveData()
   110 
   110 
   111 colflags = dv.DATAVIEW_COL_RESIZABLE|dv.DATAVIEW_COL_SORTABLE
   111 colflags = dv.DATAVIEW_COL_RESIZABLE|dv.DATAVIEW_COL_SORTABLE
       
   112 COL_ID,COL_URI,COL_DESC,COL_LAST = range(4)
   112 
   113 
   113 class IDManager(wx.Panel):
   114 class IDManager(wx.Panel):
   114     def __init__(self, parent, ctr, SelectURICallBack, *args, **kwargs):
   115     def __init__(self, parent, ctr, SelectURICallBack=None, SelectIDCallBack=None, **kwargs):
   115         wx.Panel.__init__(self, parent, -1, size=(400,200))
   116         wx.Panel.__init__(self, parent, -1, size=(400,200))
   116 
   117 
   117         self.isManager = SelectURICallBack is None 
   118         self.isManager = SelectURICallBack is None and SelectIDCallBack is None 
   118         self.SelectURICallBack = SelectURICallBack
   119         self.SelectURICallBack = SelectURICallBack
       
   120         self.SelectIDCallBack = SelectIDCallBack
   119 
   121 
   120         dvStyle = wx.BORDER_THEME | dv.DV_ROW_LINES
   122         dvStyle = wx.BORDER_THEME | dv.DV_ROW_LINES
   121         if self.isManager :
   123         if self.isManager :
   122             # no multiple selection in selector mode
   124             # no multiple selection in selector mode
   123             dvStyle |= dv.DV_MULTIPLE
   125             dvStyle |= dv.DV_MULTIPLE
   124         self.dvc = dv.DataViewCtrl(self, style = dvStyle)
   126         self.dvc = dv.DataViewCtrl(self, style = dvStyle)
   125                     
   127                     
   126         args = lambda *a,**k:(a,k)
   128         args = lambda *a,**k:(a,k)
   127 
   129 
   128         ColumnsDesc = [
   130         ColumnsDesc = [
   129             args(_("ID"), 0, width = 100),
   131             args(_("ID"), COL_ID, width = 100),
   130             args(_("Last URI"), 1, width = 80),
   132             args(_("Last URI"), COL_URI, width = 80),
   131             args(_("Description"), 2, width = 200, 
   133             args(_("Description"), COL_DESC, width = 200, 
   132                 mode = dv.DATAVIEW_CELL_EDITABLE 
   134                 mode = dv.DATAVIEW_CELL_EDITABLE 
   133                        if self.isManager 
   135                        if self.isManager 
   134                        else dv.DATAVIEW_CELL_INERT),
   136                        else dv.DATAVIEW_CELL_INERT),
   135             args(_("Last connection"),  3, width = 100),
   137             args(_("Last connection"),  COL_LAST, width = 100),
   136         ]
   138         ]
   137 
   139 
   138         self.model = IDManagerModel(
   140         self.model = IDManagerModel(
   139             os.path.join(str(ctr.ProjectPath), 'psk'),
   141             os.path.join(str(ctr.ProjectPath), 'psk'),
   140             len(ColumnsDesc))
   142             len(ColumnsDesc))
   170 
   172 
   171         else :
   173         else :
   172             # selector mode
   174             # selector mode
   173             # use last known URI button
   175             # use last known URI button
   174             # TODO : disable use URI button until something selected
   176             # TODO : disable use URI button until something selected
   175             selectButton = wx.Button(self, label=_("Use last URI"))
   177             self.useURIButton = wx.Button(self, label=_("Use last URI"))
   176             self.Bind(wx.EVT_BUTTON, self.OnSelectButton, selectButton)
   178             self.Bind(wx.EVT_BUTTON, self.OnUseURIButton, self.useURIButton)
   177             btnbox.Add(selectButton, 0, wx.LEFT|wx.RIGHT, 5)
   179             self.useURIButton.Disable()
       
   180             btnbox.Add(self.useURIButton, 0, wx.LEFT|wx.RIGHT, 5)
   178 
   181 
   179         self.Sizer.Add(btnbox, 0, wx.TOP|wx.BOTTOM, 5)
   182         self.Sizer.Add(btnbox, 0, wx.TOP|wx.BOTTOM, 5)
       
   183         self.Bind(dv.EVT_DATAVIEW_SELECTION_CHANGED, self.OnSelectionChanged, self.dvc)
       
   184 
   180 
   185 
   181     def OnDeleteButton(self, evt):
   186     def OnDeleteButton(self, evt):
   182         items = self.dvc.GetSelections()
   187         items = self.dvc.GetSelections()
   183         rows = [self.model.GetRow(item) for item in items]
   188         rows = [self.model.GetRow(item) for item in items]
   184 
   189 
   188                              wx.YES_NO | wx.CENTRE | wx.NO_DEFAULT) != wx.YES:
   193                              wx.YES_NO | wx.CENTRE | wx.NO_DEFAULT) != wx.YES:
   189             return
   194             return
   190 
   195 
   191         self.model.DeleteRows(rows)
   196         self.model.DeleteRows(rows)
   192 
   197 
   193     def OnSelectButton(self, evt):
   198     def OnSelectionChanged(self, evt):
   194         # TODO : call SetURICallback with URI from curent selection.
   199         if not self.isManager :
   195         wx.MessageBox(_('?'),
   200             items = self.dvc.GetSelections()
   196                       _('Mhe'),
   201             somethingSelected = len(items) > 0
   197                       wx.YES_NO | wx.CENTRE | wx.NO_DEFAULT)
   202             self.useURIButton.Enable(somethingSelected)
       
   203             if somethingSelected:
       
   204                 row = self.model.GetRow(items[0])
       
   205                 ID = self.model.GetValueByRow(row, COL_ID)
       
   206                 self.SelectIDCallBack(ID)
       
   207 
       
   208 
       
   209     def OnUseURIButton(self, evt):
       
   210         row = self.model.GetRow(self.dvc.GetSelections()[0])
       
   211         URI = self.model.GetValueByRow(row, COL_URI)
       
   212         if URI:
       
   213             self.SelectURICallBack(URI)
   198 
   214 
   199     def OnExportButton(self, evt):
   215     def OnExportButton(self, evt):
   200         # TODO 
   216         # TODO 
   201         wx.MessageBox(_('?'),
   217         wx.MessageBox(_('?'),
   202                       _('Mhe'),
   218                       _('Mhe'),