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