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