diff -r 2cb34a4ac65a -r 6b5a4c21e061 doc/doxygen/html/subindextable_8py-source.html --- a/doc/doxygen/html/subindextable_8py-source.html Tue Jun 05 17:34:33 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,751 +0,0 @@ - -
-00001 #!/usr/bin/env python -00002 # -*- coding: utf-8 -*- -00003 -00004 #This file is part of CanFestival, a library implementing CanOpen Stack. -00005 # -00006 #Copyright (C): Edouard TISSERANT, Francis DUPIN and Laurent BESSARD -00007 # -00008 #See COPYING file for copyrights details. -00009 # -00010 #This library is free software; you can redistribute it and/or -00011 #modify it under the terms of the GNU Lesser General Public -00012 #License as published by the Free Software Foundation; either -00013 #version 2.1 of the License, or (at your option) any later version. -00014 # -00015 #This library is distributed in the hope that it will be useful, -00016 #but WITHOUT ANY WARRANTY; without even the implied warranty of -00017 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -00018 #Lesser General Public License for more details. -00019 # -00020 #You should have received a copy of the GNU Lesser General Public -00021 #License along with this library; if not, write to the Free Software -00022 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -00023 -00024 from wxPython.wx import * -00025 from wxPython.grid import * -00026 import wx -00027 import wx.grid -00028 -00029 from types import * -00030 -00031 from node import OD_Subindex, OD_MultipleSubindexes, OD_IdenticalSubindexes, OD_IdenticalIndexes -00032 -00033 ColSizes = [75, 250, 150, 125, 100, 60, 250] -00034 ColAlignements = [wxALIGN_CENTER, wxALIGN_LEFT, wxALIGN_CENTER, wxALIGN_RIGHT, wxALIGN_CENTER, wxALIGN_CENTER, wxALIGN_LEFT] -00035 AccessList = "Read Only,Write Only,Read/Write" -00036 RAccessList = "Read Only,Read/Write" -00037 BoolList = "True,False" -00038 OptionList = "Yes,No" -00039 -00040 DictionaryOrganisation = [ -00041 {"minIndex" : 0x0001, "maxIndex" : 0x0FFF, "name" : "Data Type Definitions"}, -00042 {"minIndex" : 0x1000, "maxIndex" : 0x1029, "name" : "Communication Parameters"}, -00043 {"minIndex" : 0x1200, "maxIndex" : 0x12FF, "name" : "SDO Parameters"}, -00044 {"minIndex" : 0x1400, "maxIndex" : 0x15FF, "name" : "Receive PDO Parameters"}, -00045 {"minIndex" : 0x1600, "maxIndex" : 0x17FF, "name" : "Receive PDO Mapping"}, -00046 {"minIndex" : 0x1800, "maxIndex" : 0x19FF, "name" : "Transmit PDO Parameters"}, -00047 {"minIndex" : 0x1A00, "maxIndex" : 0x1BFF, "name" : "Transmit PDO Mapping"}, -00048 {"minIndex" : 0x1C00, "maxIndex" : 0x1FFF, "name" : "Other Communication Parameters"}, -00049 {"minIndex" : 0x2000, "maxIndex" : 0x5FFF, "name" : "Manufacturer Specific"}, -00050 {"minIndex" : 0x6000, "maxIndex" : 0x9FFF, "name" : "Standardized Device Profile"}, -00051 {"minIndex" : 0xA000, "maxIndex" : 0xBFFF, "name" : "Standardized Interface Profile"}] -00052 -00053 class SubindexTable(wxPyGridTableBase): -00054 -00055 """ -00056 A custom wxGrid Table using user supplied data -00057 """ -00058 def __init__(self, parent, data, editors, colnames): -00059 # The base class must be initialized *first* -00060 wxPyGridTableBase.__init__(self) -00061 self.datadata = data -00062 self.editorseditors = editors -00063 self.CurrentIndexCurrentIndex = 0 -00064 self.colnamescolnames = colnames -00065 self.ParentParent = parent -00066 self.EditableEditable = True -00067 # XXX -00068 # we need to store the row length and collength to -00069 # see if the table has changed size -00070 self._rows_rows = self.GetNumberRowsGetNumberRows() -00071 self._cols_cols = self.GetNumberColsGetNumberCols() -00072 -00073 def Disable(self): -00074 self.EditableEditable = False -00075 -00076 def Enable(self): -00077 self.EditableEditable = True -00078 -00079 def GetNumberCols(self): -00080 return len(self.colnamescolnames) -00081 -00082 def GetNumberRows(self): -00083 return len(self.datadata) -00084 -00085 def GetColLabelValue(self, col): -00086 if col < len(self.colnamescolnames): -00087 return self.colnamescolnames[col] -00088 -00089 def GetRowLabelValues(self, row): -00090 return row -00091 -00092 def GetValue(self, row, col): -00093 if row < self.GetNumberRowsGetNumberRows(): -00094 value = self.datadata[row].get(self.GetColLabelValueGetColLabelValue(col), "") -00095 if (type(value) == UnicodeType): -00096 return value -00097 else: -00098 return str(value) -00099 -00100 def GetEditor(self, row, col): -00101 if row < self.GetNumberRowsGetNumberRows(): -00102 return self.editorseditors[row].get(self.GetColLabelValueGetColLabelValue(col), "") -00103 -00104 def GetValueByName(self, row, colname): -00105 return self.datadata[row].get(colname) -00106 -00107 def SetValue(self, row, col, value): -00108 if col < len(self.colnamescolnames): -00109 self.datadata[row][self.GetColLabelValueGetColLabelValue(col)] = value -00110 -00111 def ResetView(self, grid): -00112 """ -00113 (wxGrid) -> Reset the grid view. Call this to -00114 update the grid if rows and columns have been added or deleted -00115 """ -00116 grid.BeginBatch() -00117 for current, new, delmsg, addmsg in [ -00118 (self._rows_rows, self.GetNumberRowsGetNumberRows(), wxGRIDTABLE_NOTIFY_ROWS_DELETED, wxGRIDTABLE_NOTIFY_ROWS_APPENDED), -00119 (self._cols_cols, self.GetNumberColsGetNumberCols(), wxGRIDTABLE_NOTIFY_COLS_DELETED, wxGRIDTABLE_NOTIFY_COLS_APPENDED), -00120 ]: -00121 if new < current: -00122 msg = wxGridTableMessage(self,delmsg,new,current-new) -00123 grid.ProcessTableMessage(msg) -00124 elif new > current: -00125 msg = wxGridTableMessage(self,addmsg,new-current) -00126 grid.ProcessTableMessage(msg) -00127 self.UpdateValuesUpdateValues(grid) -00128 grid.EndBatch() -00129 -00130 self._rows_rows = self.GetNumberRowsGetNumberRows() -00131 self._cols_cols = self.GetNumberColsGetNumberCols() -00132 # update the column rendering scheme -00133 self._updateColAttrs_updateColAttrs(grid) -00134 -00135 # update the scrollbars and the displayed part of the grid -00136 grid.AdjustScrollbars() -00137 grid.ForceRefresh() -00138 -00139 -00140 def UpdateValues(self, grid): -00141 """Update all displayed values""" -00142 # This sends an event to the grid table to update all of the values -00143 msg = wxGridTableMessage(self, wxGRIDTABLE_REQUEST_VIEW_GET_VALUES) -00144 grid.ProcessTableMessage(msg) -00145 -00146 def _updateColAttrs(self, grid): -00147 """ -00148 wxGrid -> update the column attributes to add the -00149 appropriate renderer given the column name. -00150 -00151 Otherwise default to the default renderer. -00152 """ -00153 -00154 for col in range(self.GetNumberColsGetNumberCols()): -00155 attr = wxGridCellAttr() -00156 attr.SetAlignment(ColAlignements[col], wxALIGN_CENTRE) -00157 grid.SetColAttr(col, attr) -00158 grid.SetColSize(col, ColSizes[col]) -00159 -00160 typelist = None -00161 maplist = None -00162 for row in range(self.GetNumberRowsGetNumberRows()): -00163 editors = self.editorseditors[row] -00164 for col in range(self.GetNumberColsGetNumberCols()): -00165 editor = None -00166 renderer = None -00167 -00168 colname = self.GetColLabelValueGetColLabelValue(col) -00169 editortype = editors[colname] -00170 if editortype and self.EditableEditable: -00171 grid.SetReadOnly(row, col, False) -00172 if editortype == "string": -00173 editor = wxGridCellTextEditor() -00174 renderer = wxGridCellStringRenderer() -00175 if colname == "value" and "length" in editors: -00176 editor.SetParameters(editors["length"]) -00177 elif editortype == "number": -00178 editor = wxGridCellNumberEditor() -00179 renderer = wxGridCellNumberRenderer() -00180 if colname == "value" and "min" in editors and "max" in editors: -00181 editor.SetParameters("%s,%s"%(editors["min"],editors["max"])) -00182 elif editortype == "real": -00183 editor = wxGridCellFloatEditor() -00184 renderer = wxGridCellFloatRenderer() -00185 if colname == "value" and "min" in editors and "max" in editors: -00186 editor.SetParameters("%s,%s"%(editors["min"],editors["max"])) -00187 elif editortype == "bool": -00188 editor = wxGridCellChoiceEditor() -00189 editor.SetParameters(BoolList) -00190 elif editortype == "access": -00191 editor = wxGridCellChoiceEditor() -00192 editor.SetParameters(AccessList) -00193 elif editortype == "raccess": -00194 editor = wxGridCellChoiceEditor() -00195 editor.SetParameters(RAccessList) -00196 elif editortype == "option": -00197 editor = wxGridCellChoiceEditor() -00198 editor.SetParameters(OptionList) -00199 elif editortype == "type": -00200 editor = wxGridCellChoiceEditor() -00201 if typelist == None: -00202 typelist = self.ParentParent.Manager.GetCurrentTypeList() -00203 editor.SetParameters(typelist) -00204 elif editortype == "map": -00205 editor = wxGridCellChoiceEditor() -00206 if maplist == None: -00207 maplist = self.ParentParent.Manager.GetCurrentMapList() -00208 editor.SetParameters(maplist) -00209 elif editortype == "time": -00210 editor = wxGridCellTextEditor() -00211 renderer = wxGridCellStringRenderer() -00212 elif editortype == "domain": -00213 editor = wxGridCellTextEditor() -00214 renderer = wxGridCellStringRenderer() -00215 else: -00216 grid.SetReadOnly(row, col, True) -00217 -00218 grid.SetCellEditor(row, col, editor) -00219 grid.SetCellRenderer(row, col, renderer) -00220 -00221 grid.SetCellBackgroundColour(row, col, wxWHITE) -00222 -00223 def SetData(self, data): -00224 self.datadata = data -00225 -00226 def SetEditors(self, editors): -00227 self.editorseditors = editors -00228 -00229 def GetCurrentIndex(self): -00230 return self.CurrentIndexCurrentIndex -00231 -00232 def SetCurrentIndex(self, index): -00233 self.CurrentIndexCurrentIndex = index -00234 -00235 def AppendRow(self, row_content): -00236 self.datadata.append(row_content) -00237 -00238 def Empty(self): -00239 self.datadata = [] -00240 self.editorseditors = [] -00241 -00242 [wxID_EDITINGPANEL, wxID_EDITINGPANELADDBUTTON, wxID_EDITINGPANELINDEXCHOICE, -00243 wxID_EDITINGPANELINDEXLIST, wxID_EDITINGPANELINDEXLISTPANEL, wxID_EDITINGPANELPARTLIST, -00244 wxID_EDITINGPANELSECONDSPLITTER, wxID_EDITINGPANELSUBINDEXGRID, -00245 wxID_EDITINGPANELSUBINDEXGRIDPANEL, wxID_EDITINGPANELCALLBACKCHECK, -00246 ] = [wx.NewId() for _init_ctrls in range(10)] -00247 -00248 [wxID_EDITINGPANELINDEXLISTMENUITEMS0, wxID_EDITINGPANELINDEXLISTMENUITEMS1, -00249 wxID_EDITINGPANELINDEXLISTMENUITEMS2, -00250 ] = [wx.NewId() for _init_coll_IndexListMenu_Items in range(3)] -00251 -00252 [wxID_EDITINGPANELMENU1ITEMS0, wxID_EDITINGPANELMENU1ITEMS1, -00253 ] = [wx.NewId() for _init_coll_SubindexGridMenu_Items in range(2)] -00254 -00255 class EditingPanel(wx.SplitterWindow): -00256 def _init_coll_AddToListSizer_Items(self, parent): -00257 # generated method, don't edit -00258 -00259 parent.AddWindow(self.AddButtonAddButton, 0, border=0, flag=0) -00260 parent.AddWindow(self.IndexChoiceIndexChoice, 0, border=0, flag=wxGROW) -00261 -00262 def _init_coll_SubindexGridSizer_Items(self, parent): -00263 # generated method, don't edit -00264 -00265 parent.AddWindow(self.CallbackCheckCallbackCheck, 0, border=0, flag=0) -00266 parent.AddWindow(self.SubindexGridSubindexGrid, 0, border=0, flag=wxGROW) -00267 -00268 def _init_coll_IndexListSizer_Items(self, parent): -00269 # generated method, don't edit -00270 -00271 parent.AddWindow(self.IndexListIndexList, 0, border=0, flag=wxGROW) -00272 parent.AddSizer(self.AddToListSizer, 0, border=0, flag=wxGROW) -00273 -00274 def _init_coll_AddToListSizer_Growables(self, parent): -00275 # generated method, don't edit -00276 -00277 parent.AddGrowableCol(1) -00278 -00279 def _init_coll_SubindexGridSizer_Growables(self, parent): -00280 # generated method, don't edit -00281 -00282 parent.AddGrowableCol(0) -00283 parent.AddGrowableRow(1) -00284 -00285 def _init_coll_IndexListSizer_Growables(self, parent): -00286 # generated method, don't edit -00287 -00288 parent.AddGrowableCol(0) -00289 parent.AddGrowableRow(0) -00290 -00291 def _init_coll_SubindexGridMenu_Items(self, parent): -00292 # generated method, don't edit -00293 -00294 parent.Append(help='', id=wxID_EDITINGPANELMENU1ITEMS0, -00295 kind=wx.ITEM_NORMAL, text='Add') -00296 parent.Append(help='', id=wxID_EDITINGPANELMENU1ITEMS1, -00297 kind=wx.ITEM_NORMAL, text='Delete') -00298 self.Bind(wx.EVT_MENU, self.OnAddSubindexMenuOnAddSubindexMenu, -00299 id=wxID_EDITINGPANELMENU1ITEMS0) -00300 self.Bind(wx.EVT_MENU, self.OnDeleteSubindexMenuOnDeleteSubindexMenu, -00301 id=wxID_EDITINGPANELMENU1ITEMS1) -00302 -00303 def _init_coll_IndexListMenu_Items(self, parent): -00304 # generated method, don't edit -00305 -00306 parent.Append(help='', id=wxID_EDITINGPANELINDEXLISTMENUITEMS0, -00307 kind=wx.ITEM_NORMAL, text='Rename') -00308 parent.Append(help='', id=wxID_EDITINGPANELINDEXLISTMENUITEMS2, -00309 kind=wx.ITEM_NORMAL, text='Modify') -00310 parent.Append(help='', id=wxID_EDITINGPANELINDEXLISTMENUITEMS1, -00311 kind=wx.ITEM_NORMAL, text='Delete') -00312 self.Bind(wx.EVT_MENU, self.OnRenameIndexMenuOnRenameIndexMenu, -00313 id=wxID_EDITINGPANELINDEXLISTMENUITEMS0) -00314 self.Bind(wx.EVT_MENU, self.OnDeleteIndexMenuOnDeleteIndexMenu, -00315 id=wxID_EDITINGPANELINDEXLISTMENUITEMS1) -00316 self.Bind(wx.EVT_MENU, self.OnModifyIndexMenuOnModifyIndexMenu, -00317 id=wxID_EDITINGPANELINDEXLISTMENUITEMS2) -00318 -00319 def _init_utils(self): -00320 # generated method, don't edit -00321 self.IndexListMenu = wx.Menu(title='') -00322 -00323 self.SubindexGridMenu = wx.Menu(title='') -00324 -00325 self._init_coll_IndexListMenu_Items_init_coll_IndexListMenu_Items(self.IndexListMenu) -00326 self._init_coll_SubindexGridMenu_Items_init_coll_SubindexGridMenu_Items(self.SubindexGridMenu) -00327 -00328 def _init_sizers(self): -00329 # generated method, don't edit -00330 self.IndexListSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) -00331 -00332 self.SubindexGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) -00333 -00334 self.AddToListSizer = wx.FlexGridSizer(cols=2, hgap=0, rows=1, vgap=0) -00335 -00336 self._init_coll_IndexListSizer_Growables_init_coll_IndexListSizer_Growables(self.IndexListSizer) -00337 self._init_coll_IndexListSizer_Items_init_coll_IndexListSizer_Items(self.IndexListSizer) -00338 self._init_coll_SubindexGridSizer_Growables_init_coll_SubindexGridSizer_Growables(self.SubindexGridSizer) -00339 self._init_coll_SubindexGridSizer_Items_init_coll_SubindexGridSizer_Items(self.SubindexGridSizer) -00340 self._init_coll_AddToListSizer_Growables_init_coll_AddToListSizer_Growables(self.AddToListSizer) -00341 self._init_coll_AddToListSizer_Items_init_coll_AddToListSizer_Items(self.AddToListSizer) -00342 -00343 self.SubindexGridPanelSubindexGridPanel.SetSizer(self.SubindexGridSizer) -00344 self.IndexListPanelIndexListPanel.SetSizer(self.IndexListSizer) -00345 -00346 def _init_ctrls(self, prnt): -00347 wx.SplitterWindow.__init__(self, id=wxID_EDITINGPANEL, -00348 name='MainSplitter', parent=prnt, point=wx.Point(0, 0), -00349 size=wx.Size(-1, -1), style=wx.SP_3D) -00350 self._init_utils_init_utils() -00351 self.SetNeedUpdating(True) -00352 self.SetMinimumPaneSize(1) -00353 -00354 self.PartListPartList = wx.ListBox(choices=[], id=wxID_EDITINGPANELPARTLIST, -00355 name='PartList', parent=self, pos=wx.Point(0, 0), -00356 size=wx.Size(-1, -1), style=0) -00357 self.PartListPartList.Bind(wx.EVT_LISTBOX, self.OnPartListBoxClickOnPartListBoxClick, -00358 id=wxID_EDITINGPANELPARTLIST) -00359 -00360 self.SecondSplitterSecondSplitter = wx.SplitterWindow(id=wxID_EDITINGPANELSECONDSPLITTER, -00361 name='SecondSplitter', parent=self, point=wx.Point(0, -00362 0), size=wx.Size(-1, -1), style=wx.SP_3D) -00363 self.SecondSplitterSecondSplitter.SetMinimumPaneSize(1) -00364 self.SplitHorizontally(self.PartListPartList, self.SecondSplitterSecondSplitter, -00365 110) -00366 -00367 self.SubindexGridPanelSubindexGridPanel = wx.Panel(id=wxID_EDITINGPANELSUBINDEXGRIDPANEL, -00368 name='SubindexGridPanel', parent=self.SecondSplitterSecondSplitter, pos=wx.Point(0, -00369 0), size=wx.Size(-1, -1), style=wx.TAB_TRAVERSAL) -00370 -00371 self.IndexListPanelIndexListPanel = wx.Panel(id=wxID_EDITINGPANELINDEXLISTPANEL, -00372 name='IndexListPanel', parent=self.SecondSplitterSecondSplitter, pos=wx.Point(0, -00373 0), size=wx.Size(-1, -1), style=wx.TAB_TRAVERSAL) -00374 self.SecondSplitterSecondSplitter.SplitVertically(self.IndexListPanelIndexListPanel, -00375 self.SubindexGridPanelSubindexGridPanel, 280) -00376 -00377 self.SubindexGridSubindexGrid = wx.grid.Grid(id=wxID_EDITINGPANELSUBINDEXGRID, -00378 name='SubindexGrid', parent=self.SubindexGridPanelSubindexGridPanel, pos=wx.Point(0, -00379 0), size=wx.Size(-1, -1), style=0) -00380 self.SubindexGridSubindexGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, -00381 'Sans')) -00382 self.SubindexGridSubindexGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, -00383 False, 'Sans')) -00384 self.SubindexGridSubindexGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, -00385 self.OnSubindexGridCellChangeOnSubindexGridCellChange) -00386 self.SubindexGridSubindexGrid.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, -00387 self.OnSubindexGridRightClickOnSubindexGridRightClick) -00388 self.SubindexGridSubindexGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL, -00389 self.OnSubindexGridSelectCellOnSubindexGridSelectCell) -00390 -00391 self.CallbackCheckCallbackCheck = wx.CheckBox(id=wxID_EDITINGPANELCALLBACKCHECK, -00392 label='Have Callbacks', name='CallbackCheck', -00393 parent=self.SubindexGridPanelSubindexGridPanel, pos=wx.Point(0, 0), size=wx.Size(152, -00394 24), style=0) -00395 self.CallbackCheckCallbackCheck.Bind(wx.EVT_CHECKBOX, self.OnCallbackCheckOnCallbackCheck, -00396 id=wxID_EDITINGPANELCALLBACKCHECK) -00397 -00398 self.IndexListIndexList = wx.ListBox(choices=[], id=wxID_EDITINGPANELINDEXLIST, -00399 name='IndexList', parent=self.IndexListPanelIndexListPanel, pos=wx.Point(0, 0), -00400 size=wx.Size(-1, -1), style=0) -00401 self.IndexListIndexList.Bind(wx.EVT_LISTBOX, self.OnIndexListClickOnIndexListClick, -00402 id=wxID_EDITINGPANELINDEXLIST) -00403 self.IndexListIndexList.Bind(wx.EVT_RIGHT_UP, self.OnIndexListRightUpOnIndexListRightUp) -00404 -00405 self.AddButtonAddButton = wx.Button(id=wxID_EDITINGPANELADDBUTTON, label='Add', -00406 name='AddButton', parent=self.IndexListPanelIndexListPanel, pos=wx.Point(0, 0), -00407 size=wx.Size(50, 30), style=0) -00408 self.AddButtonAddButton.Bind(wx.EVT_BUTTON, self.OnAddButtonClickOnAddButtonClick, -00409 id=wxID_EDITINGPANELADDBUTTON) -00410 -00411 self.IndexChoiceIndexChoice = wx.Choice(choices=[], id=wxID_EDITINGPANELINDEXCHOICE, -00412 name='IndexChoice', parent=self.IndexListPanelIndexListPanel, pos=wx.Point(50, -00413 0), size=wx.Size(-1, 30), style=0) -00414 -00415 self._init_sizers_init_sizers() -00416 -00417 def __init__(self, parent, manager, editable = True): -00418 self._init_ctrls_init_ctrls(parent.GetNoteBook()) -00419 self.ParentParent = parent -00420 self.ManagerManager = manager -00421 self.ListIndexListIndex = [] -00422 self.ChoiceIndexChoiceIndex = [] -00423 self.FirstCallFirstCall = False -00424 self.EditableEditable = editable -00425 self.IndexIndex = None -00426 -00427 for values in DictionaryOrganisation: -00428 text = " 0x%04X-0x%04X %s"%(values["minIndex"],values["maxIndex"],values["name"]) -00429 self.PartListPartList.Append(text) -00430 self.TableTable = SubindexTable(self, [], [], ["subindex", "name", "type", "value", "access", "save", "comment"]) -00431 self.SubindexGridSubindexGrid.SetTable(self.TableTable) -00432 self.SubindexGridSubindexGrid.SetRowLabelSize(0) -00433 self.CallbackCheckCallbackCheck.Disable() -00434 self.TableTable.ResetView(self.SubindexGridSubindexGrid) -00435 -00436 if not self.EditableEditable: -00437 self.AddButtonAddButton.Disable() -00438 self.IndexChoiceIndexChoice.Disable() -00439 self.CallbackCheckCallbackCheck.Disable() -00440 self.TableTable.Disable() -00441 -00442 def GetIndex(self): -00443 return self.IndexIndex -00444 -00445 def SetIndex(self, index): -00446 self.IndexIndex = index -00447 -00448 def GetSelection(self): -00449 selected = self.IndexListIndexList.GetSelection() -00450 if selected != wxNOT_FOUND: -00451 index = self.ListIndexListIndex[selected] -00452 subIndex = self.SubindexGridSubindexGrid.GetGridCursorRow() -00453 return index, subIndex -00454 return None -00455 -00456 def OnAddButtonClick(self, event): -00457 if self.EditableEditable: -00458 self.SubindexGridSubindexGrid.SetGridCursor(0, 0) -00459 selected = self.IndexChoiceIndexChoice.GetStringSelection() -00460 if selected != "": -00461 if selected == "User Type": -00462 self.ParentParent.AddUserType() -00463 elif selected == "SDO Server": -00464 self.ManagerManager.AddSDOServerToCurrent() -00465 elif selected == "SDO Client": -00466 self.ManagerManager.AddSDOClientToCurrent() -00467 elif selected == "PDO Receive": -00468 self.ManagerManager.AddPDOReceiveToCurrent() -00469 elif selected == "PDO Transmit": -00470 self.ManagerManager.AddPDOTransmitToCurrent() -00471 elif selected == "Map Variable": -00472 self.ParentParent.AddMapVariable() -00473 elif selected in [menu for menu, indexes in self.ManagerManager.GetCurrentSpecificMenu()]: -00474 self.ManagerManager.AddSpecificEntryToCurrent(selected) -00475 else: -00476 index = self.ChoiceIndexChoiceIndex[self.IndexChoiceIndexChoice.GetSelection()] -00477 self.ManagerManager.ManageEntriesOfCurrent([index], []) -00478 self.ParentParent.RefreshBufferState() -00479 self.RefreshIndexListRefreshIndexList() -00480 event.Skip() -00481 -00482 def OnPartListBoxClick(self, event): -00483 self.SubindexGridSubindexGrid.SetGridCursor(0, 0) -00484 self.RefreshIndexListRefreshIndexList() -00485 event.Skip() -00486 -00487 def OnIndexListClick(self, event): -00488 self.SubindexGridSubindexGrid.SetGridCursor(0, 0) -00489 self.RefreshTableRefreshTable() -00490 event.Skip() -00491 -00492 def OnSubindexGridSelectCell(self, event): -00493 wxCallAfter(self.ParentParent.RefreshStatusBar) -00494 event.Skip() -00495 -00496 #------------------------------------------------------------------------------- -00497 # Refresh Functions -00498 #------------------------------------------------------------------------------- -00499 -00500 def RefreshIndexList(self): -00501 selected = self.IndexListIndexList.GetSelection() -00502 choice = self.IndexChoiceIndexChoice.GetStringSelection() -00503 choiceindex = self.IndexChoiceIndexChoice.GetSelection() -00504 if selected != wxNOT_FOUND: -00505 selectedindex = self.ListIndexListIndex[selected] -00506 self.IndexListIndexList.Clear() -00507 self.IndexChoiceIndexChoice.Clear() -00508 i = self.PartListPartList.GetSelection() -00509 if i < len(DictionaryOrganisation): -00510 values = DictionaryOrganisation[i] -00511 self.ListIndexListIndex = [] -00512 for name, index in self.ManagerManager.GetCurrentValidIndexes(values["minIndex"], values["maxIndex"]): -00513 self.IndexListIndexList.Append("0x%04X %s"%(index, name)) -00514 self.ListIndexListIndex.append(index) -00515 if self.EditableEditable: -00516 self.ChoiceIndexChoiceIndex = [] -00517 if i == 0: -00518 self.IndexChoiceIndexChoice.Append("User Type") -00519 self.IndexChoiceIndexChoice.SetStringSelection("User Type") -00520 elif i == 2: -00521 self.IndexChoiceIndexChoice.Append("SDO Server") -00522 self.IndexChoiceIndexChoice.Append("SDO Client") -00523 if choiceindex != wxNOT_FOUND and choice == self.IndexChoiceIndexChoice.GetString(choiceindex): -00524 self.IndexChoiceIndexChoice.SetStringSelection(choice) -00525 elif i in (3, 4): -00526 self.IndexChoiceIndexChoice.Append("PDO Receive") -00527 self.IndexChoiceIndexChoice.SetStringSelection("PDO Receive") -00528 elif i in (5, 6): -00529 self.IndexChoiceIndexChoice.Append("PDO Transmit") -00530 self.IndexChoiceIndexChoice.SetStringSelection("PDO Transmit") -00531 elif i == 8: -00532 self.IndexChoiceIndexChoice.Append("Map Variable") -00533 self.IndexChoiceIndexChoice.SetStringSelection("Map Variable") -00534 else: -00535 for name, index in self.ManagerManager.GetCurrentValidChoices(values["minIndex"], values["maxIndex"]): -00536 if index: -00537 self.IndexChoiceIndexChoice.Append("0x%04X %s"%(index, name)) -00538 else: -00539 self.IndexChoiceIndexChoice.Append(name) -00540 self.ChoiceIndexChoiceIndex.append(index) -00541 if choiceindex != wxNOT_FOUND and choice == self.IndexChoiceIndexChoice.GetString(choiceindex): -00542 self.IndexChoiceIndexChoice.SetStringSelection(choice) -00543 if self.EditableEditable: -00544 self.IndexChoiceIndexChoice.Enable(self.IndexChoiceIndexChoice.GetCount() != 0) -00545 self.AddButtonAddButton.Enable(self.IndexChoiceIndexChoice.GetCount() != 0) -00546 if selected == wxNOT_FOUND or selected >= len(self.ListIndexListIndex) or selectedindex != self.ListIndexListIndex[selected]: -00547 self.TableTable.Empty() -00548 self.CallbackCheckCallbackCheck.SetValue(False) -00549 self.CallbackCheckCallbackCheck.Disable() -00550 self.TableTable.ResetView(self.SubindexGridSubindexGrid) -00551 self.ParentParent.RefreshStatusBar() -00552 else: -00553 self.IndexListIndexList.SetSelection(selected) -00554 self.RefreshTableRefreshTable() -00555 -00556 def RefreshTable(self): -00557 selected = self.IndexListIndexList.GetSelection() -00558 if selected != wxNOT_FOUND: -00559 index = self.ListIndexListIndex[selected] -00560 if index > 0x260 and self.EditableEditable: -00561 self.CallbackCheckCallbackCheck.Enable() -00562 self.CallbackCheckCallbackCheck.SetValue(self.ManagerManager.HasCurrentEntryCallbacks(index)) -00563 result = self.ManagerManager.GetCurrentEntryValues(index) -00564 if result != None: -00565 self.TableTable.SetCurrentIndex(index) -00566 data, editors = result -00567 self.TableTable.SetData(data) -00568 self.TableTable.SetEditors(editors) -00569 self.TableTable.ResetView(self.SubindexGridSubindexGrid) -00570 self.ParentParent.RefreshStatusBar() -00571 -00572 #------------------------------------------------------------------------------- -00573 # Editing Table value function -00574 #------------------------------------------------------------------------------- -00575 -00576 def OnSubindexGridCellChange(self, event): -00577 if self.EditableEditable: -00578 index = self.TableTable.GetCurrentIndex() -00579 subIndex = event.GetRow() -00580 col = event.GetCol() -00581 name = self.TableTable.GetColLabelValue(col) -00582 value = self.TableTable.GetValue(subIndex, col) -00583 editor = self.TableTable.GetEditor(subIndex, col) -00584 self.ManagerManager.SetCurrentEntry(index, subIndex, value, name, editor) -00585 self.ParentParent.RefreshBufferState() -00586 wxCallAfter(self.RefreshTableRefreshTable) -00587 event.Skip() -00588 -00589 def OnCallbackCheck(self, event): -00590 if self.EditableEditable: -00591 index = self.TableTable.GetCurrentIndex() -00592 self.ManagerManager.SetCurrentEntryCallbacks(index, self.CallbackCheckCallbackCheck.GetValue()) -00593 self.ParentParent.RefreshBufferState() -00594 wxCallAfter(self.RefreshTableRefreshTable) -00595 event.Skip() -00596 -00597 #------------------------------------------------------------------------------- -00598 # Contextual Menu functions -00599 #------------------------------------------------------------------------------- -00600 -00601 def OnIndexListRightUp(self, event): -00602 if self.EditableEditable: -00603 if not self.FirstCallFirstCall: -00604 self.FirstCallFirstCall = True -00605 selected = self.IndexListIndexList.GetSelection() -00606 if selected != wxNOT_FOUND: -00607 index = self.ListIndexListIndex[selected] -00608 if index < 0x260: -00609 self.IndexListMenu.FindItemByPosition(0).Enable(False) -00610 self.IndexListMenu.FindItemByPosition(1).Enable(True) -00611 self.PopupMenu(self.IndexListMenu) -00612 elif 0x1000 <= index <= 0x1BFF: -00613 self.IndexListMenu.FindItemByPosition(0).Enable(False) -00614 self.IndexListMenu.FindItemByPosition(1).Enable(False) -00615 self.PopupMenu(self.IndexListMenu) -00616 elif 0x2000 <= index <= 0x5FFF: -00617 self.IndexListMenu.FindItemByPosition(0).Enable(True) -00618 self.IndexListMenu.FindItemByPosition(1).Enable(False) -00619 self.PopupMenu(self.IndexListMenu) -00620 elif index >= 0x6000: -00621 self.IndexListMenu.FindItemByPosition(0).Enable(False) -00622 self.IndexListMenu.FindItemByPosition(1).Enable(False) -00623 self.PopupMenu(self.IndexListMenu) -00624 else: -00625 self.FirstCallFirstCall = False -00626 event.Skip() -00627 -00628 def OnSubindexGridRightClick(self, event): -00629 if self.EditableEditable: -00630 selected = self.IndexListIndexList.GetSelection() -00631 if selected != wxNOT_FOUND: -00632 index = self.ListIndexListIndex[selected] -00633 if self.ManagerManager.IsCurrentEntry(index): -00634 infos = self.ManagerManager.GetEntryInfos(index) -00635 if index >= 0x2000 and infos["struct"] & OD_MultipleSubindexes or infos["struct"] & OD_IdenticalSubindexes: -00636 self.PopupMenu(self.SubindexGridMenu) -00637 event.Skip() -00638 -00639 def OnRenameIndexMenu(self, event): -00640 if self.EditableEditable: -00641 selected = self.IndexListIndexList.GetSelection() -00642 if selected != wxNOT_FOUND: -00643 index = self.ListIndexListIndex[selected] -00644 if self.ManagerManager.IsCurrentEntry(index): -00645 infos = self.ManagerManager.GetEntryInfos(index) -00646 dialog = wxTextEntryDialog(self, "Give a new name for index 0x%04X"%index, -00647 "Rename an index", infos["name"], wxOK|wxCANCEL) -00648 if dialog.ShowModal() == wxID_OK: -00649 self.ManagerManager.SetCurrentEntryName(index, dialog.GetValue()) -00650 self.ParentParent.RefreshBufferState() -00651 self.RefreshIndexListRefreshIndexList() -00652 dialog.Destroy() -00653 event.Skip() -00654 -00655 def OnModifyIndexMenu(self, event): -00656 if self.EditableEditable: -00657 selected = self.IndexListIndexList.GetSelection() -00658 if selected != wxNOT_FOUND: -00659 index = self.ListIndexListIndex[selected] -00660 if self.ManagerManager.IsCurrentEntry(index) and index < 0x260: -00661 values, valuetype = self.ManagerManager.GetCustomisedTypeValues(index) -00662 dialog = UserTypeDialog(self) -00663 dialog.SetTypeList(self.ManagerManager.GetCustomisableTypes(), values[1]) -00664 if valuetype == 0: -00665 dialog.SetValues(min = values[2], max = values[3]) -00666 elif valuetype == 1: -00667 dialog.SetValues(length = values[2]) -00668 if dialog.ShowModal() == wxID_OK: -00669 type, min, max, length = dialog.GetValues() -00670 self.ManagerManager.SetCurrentUserType(index, type, min, max, length) -00671 self.ParentParent.RefreshBufferState() -00672 self.RefreshIndexListRefreshIndexList() -00673 event.Skip() -00674 -00675 def OnDeleteIndexMenu(self, event): -00676 if self.EditableEditable: -00677 selected = self.IndexListIndexList.GetSelection() -00678 if selected != wxNOT_FOUND: -00679 index = self.ListIndexListIndex[selected] -00680 if self.ManagerManager.IsCurrentEntry(index): -00681 self.ManagerManager.ManageEntriesOfCurrent([],[index]) -00682 self.ParentParent.RefreshBufferState() -00683 self.RefreshIndexListRefreshIndexList() -00684 event.Skip() -00685 -00686 def OnAddSubindexMenu(self, event): -00687 if self.EditableEditable: -00688 selected = self.IndexListIndexList.GetSelection() -00689 if selected != wxNOT_FOUND: -00690 index = self.ListIndexListIndex[selected] -00691 if self.ManagerManager.IsCurrentEntry(index): -00692 dialog = wxTextEntryDialog(self, "Number of subindexes to add:", -00693 "Add subindexes", "1", wxOK|wxCANCEL) -00694 if dialog.ShowModal() == wxID_OK: -00695 try: -00696 number = int(dialog.GetValue()) -00697 self.ManagerManager.AddSubentriesToCurrent(index, number) -00698 self.ParentParent.RefreshBufferState() -00699 self.RefreshIndexListRefreshIndexList() -00700 except: -00701 message = wxMessageDialog(self, "An integer is required!", "ERROR", wxOK|wxICON_ERROR) -00702 message.ShowModal() -00703 message.Destroy() -00704 dialog.Destroy() -00705 event.Skip() -00706 -00707 def OnDeleteSubindexMenu(self, event): -00708 if self.EditableEditable: -00709 selected = self.IndexListIndexList.GetSelection() -00710 if selected != wxNOT_FOUND: -00711 index = self.ListIndexListIndex[selected] -00712 if self.ManagerManager.IsCurrentEntry(index): -00713 dialog = wxTextEntryDialog(self, "Number of subindexes to delete:", -00714 "Delete subindexes", "1", wxOK|wxCANCEL) -00715 if dialog.ShowModal() == wxID_OK: -00716 try: -00717 number = int(dialog.GetValue()) -00718 self.ManagerManager.RemoveSubentriesFromCurrent(index, number) -00719 self.ParentParent.RefreshBufferState() -00720 self.RefreshIndexListRefreshIndexList() -00721 except: -00722 message = wxMessageDialog(self, "An integer is required!", "ERROR", wxOK|wxICON_ERROR) -00723 message.ShowModal() -00724 message.Destroy() -00725 dialog.Destroy() -00726 event.Skip() -00727 -