etherlab/ConfigEditor.py
changeset 2138 79dc2d15c580
parent 2137 b65abacdbdf9
child 2143 83a2e3db4c8c
equal deleted inserted replaced
2137:b65abacdbdf9 2138:79dc2d15c580
  1040               style=wx.TR_DEFAULT_STYLE |
  1040               style=wx.TR_DEFAULT_STYLE |
  1041                     wx.TR_ROW_LINES |
  1041                     wx.TR_ROW_LINES |
  1042                     wx.TR_COLUMN_LINES |
  1042                     wx.TR_COLUMN_LINES |
  1043                     wx.TR_HIDE_ROOT |
  1043                     wx.TR_HIDE_ROOT |
  1044                     wx.TR_FULL_ROW_HIGHLIGHT)
  1044                     wx.TR_FULL_ROW_HIGHLIGHT)
  1045         self.ModulesGrid.GetMainWindow().Bind(wx.EVT_LEFT_DCLICK,
  1045         self.ModulesGrid.GetMainWindow().Bind(wx.EVT_LEFT_DOWN,
  1046             self.OnModulesGridLeftDClick)
  1046             self.OnModulesGridLeftDown)
       
  1047         self.ModulesGrid.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT,
       
  1048             self.OnModulesGridBeginLabelEdit)
       
  1049         self.ModulesGrid.Bind(wx.EVT_TREE_END_LABEL_EDIT,
       
  1050             self.OnModulesGridEndLabelEdit)
       
  1051         self.ModulesGrid.GetHeaderWindow().Bind(wx.EVT_MOTION, 
       
  1052             self.OnModulesGridHeaderMotion)
  1047         self.AddWindow(self.ModulesGrid, border=10, 
  1053         self.AddWindow(self.ModulesGrid, border=10, 
  1048             flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT)
  1054             flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT)
  1049         
  1055         
  1050         for colname, colsize, colalign in zip(
  1056         for colname, colsize, colalign in zip(
  1051                 [_("Name")] + [param_infos["column_label"] 
  1057                 [_("Name")] + [param_infos["column_label"] 
  1052                                for param, param_infos in 
  1058                                for param, param_infos in 
  1053                                self.ModuleLibrary.MODULES_EXTRA_PARAMS],
  1059                                self.ModuleLibrary.MODULES_EXTRA_PARAMS],
  1054                 [400] + [150] * len(self.ModuleLibrary.MODULES_EXTRA_PARAMS),
  1060                 [400] + [param_infos["column_size"] 
       
  1061                          for param, param_infos in 
       
  1062                          self.ModuleLibrary.MODULES_EXTRA_PARAMS],
  1055                 [wx.ALIGN_LEFT] + [wx.ALIGN_RIGHT] * len(self.ModuleLibrary.MODULES_EXTRA_PARAMS)):
  1063                 [wx.ALIGN_LEFT] + [wx.ALIGN_RIGHT] * len(self.ModuleLibrary.MODULES_EXTRA_PARAMS)):
  1056             self.ModulesGrid.AddColumn(_(colname), colsize, colalign)
  1064             self.ModulesGrid.AddColumn(_(colname), colsize, colalign, edit=True)
  1057         self.ModulesGrid.SetMainColumn(0)
  1065         self.ModulesGrid.SetMainColumn(0)
       
  1066         
       
  1067         self.CurrentSelectedCol = None
       
  1068         self.LastToolTipCol = None
  1058     
  1069     
  1059     def GetPath(self):
  1070     def GetPath(self):
  1060         return self.ModuleLibrary.GetPath()
  1071         return self.ModuleLibrary.GetPath()
  1061     
  1072     
  1062     def SetControlMinSize(self, size):
  1073     def SetControlMinSize(self, size):
  1086         for module in modules:
  1097         for module in modules:
  1087             if no_more_items:
  1098             if no_more_items:
  1088                 item = self.ModulesGrid.AppendItem(root, "")
  1099                 item = self.ModulesGrid.AppendItem(root, "")
  1089             self.ModulesGrid.SetItemText(item, module["name"], 0)
  1100             self.ModulesGrid.SetItemText(item, module["name"], 0)
  1090             if module["infos"] is not None:
  1101             if module["infos"] is not None:
  1091                 for param_idx, (param, params_infos) in enumerate(self.ModuleLibrary.MODULES_EXTRA_PARAMS):
  1102                 for param_idx, (param, param_infos) in enumerate(self.ModuleLibrary.MODULES_EXTRA_PARAMS):
  1092                     self.ModulesGrid.SetItemText(item, 
  1103                     self.ModulesGrid.SetItemText(item, 
  1093                                                  str(module["infos"][param]), 
  1104                                                  str(module["infos"][param]), 
  1094                                                  param_idx + 1)
  1105                                                  param_idx + 1)
  1095             else:
  1106             else:
  1096                 self.ModulesGrid.SetItemBackgroundColour(item, wx.LIGHT_GREY)
  1107                 self.ModulesGrid.SetItemBackgroundColour(item, wx.LIGHT_GREY)
  1143                 os.remove(filepath)
  1154                 os.remove(filepath)
  1144                 self.ModuleLibrary.LoadModules()
  1155                 self.ModuleLibrary.LoadModules()
  1145                 wx.CallAfter(self.RefreshView)
  1156                 wx.CallAfter(self.RefreshView)
  1146         event.Skip()
  1157         event.Skip()
  1147     
  1158     
  1148     def OnModulesGridLeftDClick(self, event):
  1159     def OnModulesGridLeftDown(self, event):
  1149         item, flags, col = self.ModulesGrid.HitTest(event.GetPosition())
  1160         item, flags, col = self.ModulesGrid.HitTest(event.GetPosition())
  1150         if item.IsOk():
  1161         if item.IsOk():
  1151             entry_infos = self.ModulesGrid.GetItemPyData(item)
  1162             entry_infos = self.ModulesGrid.GetItemPyData(item)
  1152             if entry_infos is not None and col > 0:
  1163             if entry_infos is not None and col > 0:
  1153                 param, param_infos = self.ModuleLibrary.MODULES_EXTRA_PARAMS[col - 1]
  1164                 self.CurrentSelectedCol = col
  1154                 column_label = param_infos["column_label"]
  1165             else:
  1155                 stripped_column_label = column_label.split('(')[0].strip()
  1166                 self.CurrentSelectedCol = None
  1156                 dialog = wx.TextEntryDialog(self.ParentWindow, 
  1167         else:
  1157                     _("Set %s:") % column_label,
  1168             self.CurrentSelectedCol = None
  1158                     self.ModulesGrid.GetItemText(item) + " " + stripped_column_label, 
  1169         event.Skip()
  1159                     str(entry_infos[param]))
  1170 
       
  1171     def OnModulesGridBeginLabelEdit(self, event):
       
  1172         item = event.GetItem()
       
  1173         if item.IsOk():
       
  1174             entry_infos = self.ModulesGrid.GetItemPyData(item)
       
  1175             if entry_infos is not None:
       
  1176                 event.Skip()
       
  1177             else:
       
  1178                 event.Veto()
       
  1179         else:
       
  1180             event.Veto()
       
  1181 
       
  1182     def OnModulesGridEndLabelEdit(self, event):
       
  1183         item = event.GetItem()
       
  1184         if item.IsOk() and self.CurrentSelectedCol is not None:
       
  1185             entry_infos = self.ModulesGrid.GetItemPyData(item)
       
  1186             if entry_infos is not None and self.CurrentSelectedCol > 0:
       
  1187                 param, param_infos = self.ModuleLibrary.MODULES_EXTRA_PARAMS[self.CurrentSelectedCol - 1]
       
  1188                 stripped_column_label = param_infos["column_label"].split('(')[0].strip()
       
  1189                 try:
       
  1190                     self.ModuleLibrary.SetModuleExtraParam(
       
  1191                         entry_infos["vendor"],
       
  1192                         entry_infos["product_code"],
       
  1193                         entry_infos["revision_number"],
       
  1194                         param,
       
  1195                         int(event.GetLabel()))
       
  1196                     wx.CallAfter(self.RefreshModulesGrid)
       
  1197                     event.Skip()
       
  1198                 except ValueError:
       
  1199                     message = wx.MessageDialog(self, 
       
  1200                         _("Module %s must be an integer!") % stripped_column_label, 
       
  1201                         _("Error"), wx.OK|wx.ICON_ERROR)
       
  1202                     message.ShowModal()
       
  1203                     message.Destroy()
       
  1204                     event.Veto()
       
  1205             else:
       
  1206                 event.Veto()
       
  1207         else:
       
  1208             event.Veto()
  1160                 
  1209                 
  1161                 if dialog.ShowModal() == wx.ID_OK:
  1210     def OnModulesGridHeaderMotion(self, event):
  1162                     try:
  1211         item, flags, col = self.ModulesGrid.HitTest(event.GetPosition())
  1163                         self.ModuleLibrary.SetModuleExtraParam(
  1212         if col != self.LastToolTipCol and self.LastToolTipCol is not None:
  1164                             entry_infos["vendor"],
  1213             self.ModulesGrid.SetToolTip(None)
  1165                             entry_infos["product_code"],
  1214             self.LastToolTipCol = None
  1166                             entry_infos["revision_number"],
  1215         if col > 0:
  1167                             param,
  1216             self.LastToolTipCol = col
  1168                             int(dialog.GetValue()))
  1217             param, param_infos = self.ModuleLibrary.MODULES_EXTRA_PARAMS[col - 1]
  1169                         wx.CallAfter(self.RefreshModulesGrid)
  1218             wx.CallAfter(self.ModulesGrid.SetToolTip,
  1170                     except ValueError:
  1219                          wx.ToolTip(param_infos["description"]))
  1171                         message = wx.MessageDialog(self, 
       
  1172                             _("Module %s must be an integer!") % stripped_column_label, 
       
  1173                             _("Error"), wx.OK|wx.ICON_ERROR)
       
  1174                         message.ShowModal()
       
  1175                         message.Destroy()
       
  1176                     
       
  1177                 dialog.Destroy()
       
  1178         
       
  1179         event.Skip()
  1220         event.Skip()
  1180 
  1221 
  1181 class DatabaseManagementDialog(wx.Dialog):
  1222 class DatabaseManagementDialog(wx.Dialog):
  1182     
  1223     
  1183     def __init__(self, parent, database):
  1224     def __init__(self, parent, database):