--- 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_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 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]),
@@ -1145,37 +1156,67 @@
wx.CallAfter(self.RefreshView)
- def OnModulesGridLeftDClick(self, event):
+ def OnModulesGridLeftDown(self, event): item, flags, col = self.ModulesGrid.HitTest(event.GetPosition())
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 + self.CurrentSelectedCol = None + self.CurrentSelectedCol = None + def OnModulesGridBeginLabelEdit(self, event): + entry_infos = self.ModulesGrid.GetItemPyData(item) + if entry_infos is not None: + def OnModulesGridEndLabelEdit(self, event): + 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() + self.ModuleLibrary.SetModuleExtraParam( + entry_infos["product_code"], + entry_infos["revision_number"], + wx.CallAfter(self.RefreshModulesGrid) + message = wx.MessageDialog(self, + _("Module %s must be an integer!") % stripped_column_label, + _("Error"), wx.OK|wx.ICON_ERROR) - if dialog.ShowModal() == wx.ID_OK:
- self.ModuleLibrary.SetModuleExtraParam(
- entry_infos["product_code"],
- entry_infos["revision_number"],
- int(dialog.GetValue()))
- wx.CallAfter(self.RefreshModulesGrid)
- message = wx.MessageDialog(self,
- _("Module %s must be an integer!") % stripped_column_label,
- _("Error"), wx.OK|wx.ICON_ERROR)
+ 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 + self.LastToolTipCol = col + param, param_infos = self.ModuleLibrary.MODULES_EXTRA_PARAMS[col - 1] + wx.CallAfter(self.ModulesGrid.SetToolTip, + wx.ToolTip(param_infos["description"])) class DatabaseManagementDialog(wx.Dialog):
--- a/etherlab/etherlab.py Fri Apr 26 13:57:10 2013 +0200
+++ b/etherlab/etherlab.py Fri Apr 26 23:23:09 2013 +0200
@@ -236,14 +236,27 @@
- "column_label": _("PDO alignment (bits)"),
+ "column_label": _("PDO alignment"), +"Minimal size in bits between 2 pdo entries")}), - "column_label": _("Max entries by PDO (-1=unbounded)"),
+ "column_label": _("Max entries by PDO"), +"""Maximal number of entries mapped in a PDO +including empty entries used for PDO alignment - "column_label": _("Creating new PDO (1=possible)"),
+ "column_label": _("Creating new PDO"), +"""Adding a PDO not defined in default configuration +for mapping needed location variables def __init__(self, path, parent_library=None):
@@ -388,12 +401,13 @@
- self.ModulesExtraParams[tuple(map(int, row[:3]))] = dict(
- zip([param for param, params_infos in self.MODULES_EXTRA_PARAMS],
+ for (param, param_infos), value in zip( + self.MODULES_EXTRA_PARAMS, row[3:]): + params_values[param] = int(value) + self.ModulesExtraParams[ + tuple(map(int, row[:3]))] = params_values def SaveModulesExtraParams(self):
@@ -412,7 +426,10 @@
product_code = ExtractHexDecValue(product_code)
revision_number = ExtractHexDecValue(revision_number)
- self.ModulesExtraParams[tuple([vendor, product_code, revision_number])][param] = value
+ module_infos = (vendor, product_code, revision_number) + self.ModulesExtraParams.setdefault(module_infos, {}) + self.ModulesExtraParams[module_infos][param] = value self.SaveModulesExtraParams()
def GetModuleExtraParams(self, vendor, product_code, revision_number):
@@ -425,7 +442,7 @@
- extra_params.update(self.ModulesExtraParams.get(tuple([vendor, product_code, revision_number]), {}))
+ extra_params.update(self.ModulesExtraParams.get((vendor, product_code, revision_number), {})) for param, param_infos in self.MODULES_EXTRA_PARAMS:
extra_params.setdefault(param, param_infos["default"])