diff -r b65abacdbdf9 -r 79dc2d15c580 etherlab/ConfigEditor.py --- a/etherlab/ConfigEditor.py Fri Apr 26 13:57:10 2013 +0200 +++ b/etherlab/ConfigEditor.py Fri Apr 26 23:23:09 2013 +0200 @@ -1042,8 +1042,14 @@ wx.TR_COLUMN_LINES | wx.TR_HIDE_ROOT | wx.TR_FULL_ROW_HIGHLIGHT) - self.ModulesGrid.GetMainWindow().Bind(wx.EVT_LEFT_DCLICK, - self.OnModulesGridLeftDClick) + self.ModulesGrid.GetMainWindow().Bind(wx.EVT_LEFT_DOWN, + self.OnModulesGridLeftDown) + self.ModulesGrid.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, + self.OnModulesGridBeginLabelEdit) + self.ModulesGrid.Bind(wx.EVT_TREE_END_LABEL_EDIT, + self.OnModulesGridEndLabelEdit) + self.ModulesGrid.GetHeaderWindow().Bind(wx.EVT_MOTION, + self.OnModulesGridHeaderMotion) self.AddWindow(self.ModulesGrid, border=10, flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT) @@ -1051,10 +1057,15 @@ [_("Name")] + [param_infos["column_label"] for param, param_infos in self.ModuleLibrary.MODULES_EXTRA_PARAMS], - [400] + [150] * len(self.ModuleLibrary.MODULES_EXTRA_PARAMS), + [400] + [param_infos["column_size"] + for param, param_infos in + self.ModuleLibrary.MODULES_EXTRA_PARAMS], [wx.ALIGN_LEFT] + [wx.ALIGN_RIGHT] * len(self.ModuleLibrary.MODULES_EXTRA_PARAMS)): - self.ModulesGrid.AddColumn(_(colname), colsize, colalign) + self.ModulesGrid.AddColumn(_(colname), colsize, colalign, edit=True) self.ModulesGrid.SetMainColumn(0) + + self.CurrentSelectedCol = None + self.LastToolTipCol = None def GetPath(self): return self.ModuleLibrary.GetPath() @@ -1088,7 +1099,7 @@ item = self.ModulesGrid.AppendItem(root, "") self.ModulesGrid.SetItemText(item, module["name"], 0) if module["infos"] is not None: - for param_idx, (param, params_infos) in enumerate(self.ModuleLibrary.MODULES_EXTRA_PARAMS): + for param_idx, (param, param_infos) in enumerate(self.ModuleLibrary.MODULES_EXTRA_PARAMS): self.ModulesGrid.SetItemText(item, str(module["infos"][param]), param_idx + 1) @@ -1145,37 +1156,67 @@ wx.CallAfter(self.RefreshView) event.Skip() - def OnModulesGridLeftDClick(self, event): + def OnModulesGridLeftDown(self, event): item, flags, col = self.ModulesGrid.HitTest(event.GetPosition()) if item.IsOk(): entry_infos = self.ModulesGrid.GetItemPyData(item) if entry_infos is not None and col > 0: - param, param_infos = self.ModuleLibrary.MODULES_EXTRA_PARAMS[col - 1] - column_label = param_infos["column_label"] - stripped_column_label = column_label.split('(')[0].strip() - dialog = wx.TextEntryDialog(self.ParentWindow, - _("Set %s:") % column_label, - self.ModulesGrid.GetItemText(item) + " " + stripped_column_label, - str(entry_infos[param])) + self.CurrentSelectedCol = col + else: + self.CurrentSelectedCol = None + else: + self.CurrentSelectedCol = None + event.Skip() + + def OnModulesGridBeginLabelEdit(self, event): + item = event.GetItem() + if item.IsOk(): + entry_infos = self.ModulesGrid.GetItemPyData(item) + if entry_infos is not None: + event.Skip() + else: + event.Veto() + else: + event.Veto() + + def OnModulesGridEndLabelEdit(self, event): + item = event.GetItem() + if item.IsOk() and self.CurrentSelectedCol is not None: + entry_infos = self.ModulesGrid.GetItemPyData(item) + if entry_infos is not None and self.CurrentSelectedCol > 0: + param, param_infos = self.ModuleLibrary.MODULES_EXTRA_PARAMS[self.CurrentSelectedCol - 1] + stripped_column_label = param_infos["column_label"].split('(')[0].strip() + try: + self.ModuleLibrary.SetModuleExtraParam( + entry_infos["vendor"], + entry_infos["product_code"], + entry_infos["revision_number"], + param, + int(event.GetLabel())) + wx.CallAfter(self.RefreshModulesGrid) + event.Skip() + except ValueError: + message = wx.MessageDialog(self, + _("Module %s must be an integer!") % stripped_column_label, + _("Error"), wx.OK|wx.ICON_ERROR) + message.ShowModal() + message.Destroy() + event.Veto() + else: + event.Veto() + else: + event.Veto() - if dialog.ShowModal() == wx.ID_OK: - try: - self.ModuleLibrary.SetModuleExtraParam( - entry_infos["vendor"], - entry_infos["product_code"], - entry_infos["revision_number"], - param, - int(dialog.GetValue())) - wx.CallAfter(self.RefreshModulesGrid) - except ValueError: - message = wx.MessageDialog(self, - _("Module %s must be an integer!") % stripped_column_label, - _("Error"), wx.OK|wx.ICON_ERROR) - message.ShowModal() - message.Destroy() - - dialog.Destroy() - + def OnModulesGridHeaderMotion(self, event): + item, flags, col = self.ModulesGrid.HitTest(event.GetPosition()) + if col != self.LastToolTipCol and self.LastToolTipCol is not None: + self.ModulesGrid.SetToolTip(None) + self.LastToolTipCol = None + if col > 0: + self.LastToolTipCol = col + param, param_infos = self.ModuleLibrary.MODULES_EXTRA_PARAMS[col - 1] + wx.CallAfter(self.ModulesGrid.SetToolTip, + wx.ToolTip(param_infos["description"])) event.Skip() class DatabaseManagementDialog(wx.Dialog):