diff -r 2cb34a4ac65a -r 6b5a4c21e061 doc/doxygen/html/nodemanager_8py-source.html --- a/doc/doxygen/html/nodemanager_8py-source.html Tue Jun 05 17:34:33 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1107 +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 gnosis.xml.pickle import * -00025 from gnosis.xml.pickle.util import setParanoia -00026 setParanoia(0) -00027 -00028 from node import * -00029 import eds_utils, gen_cfile -00030 -00031 from types import * -00032 import os, re -00033 -00034 UndoBufferLength = 20 -00035 -00036 type_model = re.compile('([\_A-Z]*)([0-9]*)') -00037 range_model = re.compile('([\_A-Z]*)([0-9]*)\[([\-0-9]*)-([\-0-9]*)\]') -00038 -00039 # ID for the file viewed -00040 CurrentID = 0 -00041 -00042 # Returns a new id -00043 def GetNewId(): -00044 global CurrentID -00045 CurrentID += 1 -00046 return CurrentID -00047 -00048 """ -00049 Class implementing a buffer of changes made on the current editing Object Dictionary -00050 """ -00051 -00052 class UndoBuffer: -00053 -00054 """ -00055 Constructor initialising buffer -00056 """ -00057 def __init__(self, currentstate, issaved = False): -00058 self.BufferBuffer = [] -00059 self.CurrentIndexCurrentIndex = -1 -00060 self.MinIndexMinIndex = -1 -00061 self.MaxIndexMaxIndex = -1 -00062 # if current state is defined -00063 if currentstate: -00064 self.CurrentIndexCurrentIndex = 0 -00065 self.MinIndexMinIndex = 0 -00066 self.MaxIndexMaxIndex = 0 -00067 # Initialising buffer with currentstate at the first place -00068 for i in xrange(UndoBufferLength): -00069 if i == 0: -00070 self.BufferBuffer.append(currentstate) -00071 else: -00072 self.BufferBuffer.append(None) -00073 # Initialising index of state saved -00074 if issaved: -00075 self.LastSaveLastSave = 0 -00076 else: -00077 self.LastSaveLastSave = -1 -00078 -00079 """ -00080 Add a new state in buffer -00081 """ -00082 def Buffering(self, currentstate): -00083 self.CurrentIndexCurrentIndex = (self.CurrentIndexCurrentIndex + 1) % UndoBufferLength -00084 self.BufferBuffer[self.CurrentIndexCurrentIndex] = currentstate -00085 # Actualising buffer limits -00086 self.MaxIndexMaxIndex = self.CurrentIndexCurrentIndex -00087 if self.MinIndexMinIndex == self.CurrentIndexCurrentIndex: -00088 # If the removed state was the state saved, there is no state saved in the buffer -00089 if self.LastSaveLastSave == self.MinIndexMinIndex: -00090 self.LastSaveLastSave = -1 -00091 self.MinIndexMinIndex = (self.MinIndexMinIndex + 1) % UndoBufferLength -00092 self.MinIndexMinIndex = max(self.MinIndexMinIndex, 0) -00093 -00094 """ -00095 Return current state of buffer -00096 """ -00097 def Current(self): -00098 return self.BufferBuffer[self.CurrentIndexCurrentIndex] -00099 -00100 """ -00101 Change current state to previous in buffer and return new current state -00102 """ -00103 def Previous(self): -00104 if self.CurrentIndexCurrentIndex != self.MinIndexMinIndex: -00105 self.CurrentIndexCurrentIndex = (self.CurrentIndexCurrentIndex - 1) % UndoBufferLength -00106 return self.BufferBuffer[self.CurrentIndexCurrentIndex] -00107 return None -00108 -00109 """ -00110 Change current state to next in buffer and return new current state -00111 """ -00112 def Next(self): -00113 if self.CurrentIndexCurrentIndex != self.MaxIndexMaxIndex: -00114 self.CurrentIndexCurrentIndex = (self.CurrentIndexCurrentIndex + 1) % UndoBufferLength -00115 return self.BufferBuffer[self.CurrentIndexCurrentIndex] -00116 return None -00117 -00118 """ -00119 Return True if current state is the first in buffer -00120 """ -00121 def IsFirst(self): -00122 return self.CurrentIndexCurrentIndex == self.MinIndexMinIndex -00123 -00124 """ -00125 Return True if current state is the last in buffer -00126 """ -00127 def IsLast(self): -00128 return self.CurrentIndexCurrentIndex == self.MaxIndexMaxIndex -00129 -00130 """ -00131 Note that current state is saved -00132 """ -00133 def CurrentSaved(self): -00134 self.LastSaveLastSave = self.CurrentIndexCurrentIndex -00135 -00136 """ -00137 Return True if current state is saved -00138 """ -00139 def IsCurrentSaved(self): -00140 return self.LastSaveLastSave == self.CurrentIndexCurrentIndex -00141 -00142 -00143 -00144 """ -00145 Class which control the operations made on the node and answer to view requests -00146 """ -00147 -00148 class NodeManager: -00149 -00150 """ -00151 Constructor -00152 """ -00153 def __init__(self, cwd): -00154 self.LastNewIndexLastNewIndex = 0 -00155 self.FilePathsFilePaths = {} -00156 self.FileNamesFileNames = {} -00157 self.NodeIndexNodeIndex = None -00158 self.CurrentNodeCurrentNode = None -00159 self.ScriptDirectoryScriptDirectory = cwd -00160 self.UndoBuffersUndoBuffers = {} -00161 -00162 #------------------------------------------------------------------------------- -00163 # Type and Map Variable Lists -00164 #------------------------------------------------------------------------------- -00165 -00166 """ -00167 Return the list of types defined for the current node -00168 """ -00169 def GetCurrentTypeList(self): -00170 if self.CurrentNodeCurrentNode: -00171 return self.CurrentNodeCurrentNode.GetTypeList() -00172 else: -00173 return "" -00174 -00175 """ -00176 Return the list of variables that can be mapped for the current node -00177 """ -00178 def GetCurrentMapList(self): -00179 if self.CurrentNodeCurrentNode: -00180 return self.CurrentNodeCurrentNode.GetMapList() -00181 else: -00182 return "" -00183 -00184 #------------------------------------------------------------------------------- -00185 # Create Load and Save Functions -00186 #------------------------------------------------------------------------------- -00187 -00188 """ -00189 Create a new node and add a new buffer for storing it -00190 """ -00191 def CreateNewNode(self, name, id, type, description, profile, filepath, NMT, options): -00192 # Create a new node -00193 node = Node() -00194 # Try to load profile given -00195 result = self.LoadProfileLoadProfile(profile, filepath, node) -00196 if not result: -00197 # if success, initialising node -00198 self.CurrentNodeCurrentNode = node -00199 self.CurrentNodeCurrentNode.SetNodeName(name) -00200 self.CurrentNodeCurrentNode.SetNodeID(id) -00201 self.CurrentNodeCurrentNode.SetNodeType(type) -00202 self.CurrentNodeCurrentNode.SetNodeDescription(description) -00203 AddIndexList = self.GetMandatoryIndexesGetMandatoryIndexes() -00204 if NMT == "NodeGuarding": -00205 AddIndexList.extend([0x100C, 0x100D]) -00206 elif NMT == "Heartbeat": -00207 AddIndexList.append(0x1017) -00208 for option in options: -00209 if option == "DS302": -00210 DS302Path = os.path.join(self.ScriptDirectoryScriptDirectory, "config/DS-302.prf") -00211 # Charging DS-302 profile if choosen by user -00212 if os.path.isfile(DS302Path): -00213 try: -00214 execfile(DS302Path) -00215 self.CurrentNodeCurrentNode.SetDS302Profile(Mapping) -00216 self.CurrentNodeCurrentNode.ExtendSpecificMenu(AddMenuEntries) -00217 except: -00218 return "Problem with DS-302! Syntax Error." -00219 else: -00220 return "Couldn't find DS-302 in 'config' folder!" -00221 elif option == "GenSYNC": -00222 AddIndexList.extend([0x1005, 0x1006]) -00223 elif option == "Emergency": -00224 AddIndexList.append(0x1014) -00225 elif option == "SaveConfig": -00226 AddIndexList.extend([0x1010, 0x1011, 0x1020]) -00227 elif option == "StoreEDS": -00228 AddIndexList.extend([0x1021, 0x1022]) -00229 # Add a new buffer -00230 index = self.AddNodeBufferAddNodeBuffer() -00231 self.SetCurrentFilePathSetCurrentFilePath("") -00232 # Add Mandatory indexes -00233 self.ManageEntriesOfCurrentManageEntriesOfCurrent(AddIndexList, []) -00234 return index -00235 else: -00236 return result -00237 -00238 """ -00239 Load a profile in node -00240 """ -00241 def LoadProfile(self, profile, filepath, node): -00242 if profile != "None": -00243 # Try to charge the profile given -00244 try: -00245 execfile(filepath) -00246 node.SetProfileName(profile) -00247 node.SetProfile(Mapping) -00248 node.SetSpecificMenu(AddMenuEntries) -00249 return None -00250 except: -00251 return "Syntax Error\nBad OD Profile file!." -00252 else: -00253 # Default profile -00254 node.SetProfileName("None") -00255 node.SetProfile({}) -00256 node.SetSpecificMenu([]) -00257 return None -00258 -00259 """ -00260 Open a file and store it in a new buffer -00261 """ -00262 def OpenFileInCurrent(self, filepath): -00263 # Open and load file -00264 file = open(filepath, "r") -00265 node = load(file) -00266 file.close() -00267 self.CurrentNodeCurrentNode = node -00268 # Add a new buffer and defining current state -00269 index = self.AddNodeBufferAddNodeBuffer(self.CurrentNodeCurrentNode.Copy(), True) -00270 self.SetCurrentFilePathSetCurrentFilePath(filepath) -00271 return index -00272 -00273 """ -00274 Save current node in a file -00275 """ -00276 def SaveCurrentInFile(self, filepath = None): -00277 # if no filepath given, verify if current node has a filepath defined -00278 if not filepath: -00279 filepath = self.GetCurrentFilePathGetCurrentFilePath() -00280 if filepath == "": -00281 return False -00282 # Save node in file -00283 file = open(filepath, "w") -00284 dump(self.CurrentNodeCurrentNode, file) -00285 file.close() -00286 self.SetCurrentFilePathSetCurrentFilePath(filepath) -00287 # Update saved state in buffer -00288 self.UndoBuffersUndoBuffers[self.NodeIndexNodeIndex].CurrentSaved() -00289 return True -00290 -00291 """ -00292 Close current state -00293 """ -00294 def CloseCurrent(self, ignore = False): -00295 # Verify if it's not forced that the current node is saved before closing it -00296 if self.UndoBuffersUndoBuffers[self.NodeIndexNodeIndex].IsCurrentSaved() or ignore: -00297 self.RemoveNodeBufferRemoveNodeBuffer(self.NodeIndexNodeIndex) -00298 return True -00299 return False -00300 -00301 """ -00302 Import an eds file and store it in a new buffer if no node edited -00303 """ -00304 def ImportCurrentFromEDSFile(self, filepath): -00305 # Generate node from definition in a xml file -00306 result = eds_utils.GenerateNode(filepath, self.ScriptDirectoryScriptDirectory) -00307 if isinstance(result, Node): -00308 self.CurrentNodeCurrentNode = result -00309 if len(self.UndoBuffersUndoBuffers) == 0: -00310 index = self.AddNodeBufferAddNodeBuffer() -00311 self.SetCurrentFilePathSetCurrentFilePath("") -00312 self.BufferCurrentNodeBufferCurrentNode() -00313 return index -00314 else: -00315 return result -00316 -00317 """ -00318 Export to an eds file and store it in a new buffer if no node edited -00319 """ -00320 def ExportCurrentToEDSFile(self, filepath): -00321 return eds_utils.GenerateEDSFile(filepath, self) -00322 -00323 """ -00324 Build the C definition of Object Dictionary for current node -00325 """ -00326 def ExportCurrentToCFile(self, filepath): -00327 return gen_cfile.GenerateFile(filepath, self) -00328 -00329 #------------------------------------------------------------------------------- -00330 # Add Entries to Current Functions -00331 #------------------------------------------------------------------------------- -00332 -00333 """ -00334 Add the specified number of subentry for the given entry. Verify that total -00335 number of subentry (except 0) doesn't exceed nbmax defined -00336 """ -00337 def AddSubentriesToCurrent(self, index, number): -00338 # Informations about entry -00339 length = self.CurrentNodeCurrentNode.GetEntry(index, 0) -00340 infos = self.GetEntryInfosGetEntryInfos(index) -00341 subentry_infos = self.GetSubentryInfosGetSubentryInfos(index, 1) -00342 # Get default value for subindex -00343 if "default" in subentry_infos: -00344 default = subentry_infos["default"] -00345 else: -00346 default = self.GetTypeDefaultValueGetTypeDefaultValue(subentry_infos["type"]) -00347 # First case entry is record -00348 if infos["struct"] & OD_IdenticalSubindexes: -00349 for i in xrange(1, min(number,subentry_infos["nbmax"]-length) + 1): -00350 self.CurrentNodeCurrentNode.AddEntry(index, length + i, default) -00351 self.BufferCurrentNodeBufferCurrentNode() -00352 # Second case entry is array, only possible for manufacturer specific -00353 elif infos["struct"] & OD_MultipleSubindexes and 0x2000 <= index <= 0x5FFF: -00354 values = {"name" : "Undefined", "type" : 5, "access" : "rw", "pdo" : True} -00355 for i in xrange(1, min(number,0xFE-length) + 1): -00356 self.CurrentNodeCurrentNode.AddMappingEntry(index, length + i, values = values.copy()) -00357 self.CurrentNodeCurrentNode.AddEntry(index, length + i, 0) -00358 self.BufferCurrentNodeBufferCurrentNode() -00359 -00360 """ -00361 Remove the specified number of subentry for the given entry. Verify that total -00362 number of subentry (except 0) isn't less than 1 -00363 """ -00364 def RemoveSubentriesFromCurrent(self, index, number): -00365 # Informations about entry -00366 infos = self.GetEntryInfosGetEntryInfos(index) -00367 length = self.CurrentNodeCurrentNode.GetEntry(index, 0) -00368 # Entry is a record, or is an array of manufacturer specific -00369 if infos["struct"] & OD_IdenticalSubindexes or 0x2000 <= index <= 0x5FFF and infos["struct"] & OD_IdenticalSubindexes: -00370 for i in xrange(min(number, length - 1)): -00371 self.RemoveCurrentVariableRemoveCurrentVariable(index, length - i) -00372 self.BufferCurrentNodeBufferCurrentNode() -00373 -00374 """ -00375 Add a SDO Server to current node -00376 """ -00377 def AddSDOServerToCurrent(self): -00378 # An SDO Server is already defined at index 0x1200 -00379 if self.CurrentNodeCurrentNode.IsEntry(0x1200): -00380 indexlist = [self.GetLineFromIndexGetLineFromIndex(0x1201)] -00381 if None not in indexlist: -00382 self.ManageEntriesOfCurrentManageEntriesOfCurrent(indexlist, []) -00383 # Add an SDO Server at index 0x1200 -00384 else: -00385 self.ManageEntriesOfCurrentManageEntriesOfCurrent([0x1200], []) -00386 -00387 """ -00388 Add a SDO Server to current node -00389 """ -00390 def AddSDOClientToCurrent(self): -00391 indexlist = [self.GetLineFromIndexGetLineFromIndex(0x1280)] -00392 if None not in indexlist: -00393 self.ManageEntriesOfCurrentManageEntriesOfCurrent(indexlist, []) -00394 -00395 """ -00396 Add a Transmit PDO to current node -00397 """ -00398 def AddPDOTransmitToCurrent(self): -00399 indexlist = [self.GetLineFromIndexGetLineFromIndex(0x1800),self.GetLineFromIndexGetLineFromIndex(0x1A00)] -00400 if None not in indexlist: -00401 self.ManageEntriesOfCurrentManageEntriesOfCurrent(indexlist, []) -00402 -00403 """ -00404 Add a Receive PDO to current node -00405 """ -00406 def AddPDOReceiveToCurrent(self): -00407 indexlist = [self.GetLineFromIndexGetLineFromIndex(0x1400),self.GetLineFromIndexGetLineFromIndex(0x1600)] -00408 if None not in indexlist: -00409 self.ManageEntriesOfCurrentManageEntriesOfCurrent(indexlist, []) -00410 -00411 """ -00412 Add a list of entries defined in profile for menu item selected to current node -00413 """ -00414 def AddSpecificEntryToCurrent(self, menuitem): -00415 indexlist = [] -00416 for menu, indexes in self.CurrentNodeCurrentNode.GetSpecificMenu(): -00417 if menuitem == menu: -00418 for index in indexes: -00419 indexlist.append(self.GetLineFromIndexGetLineFromIndex(index)) -00420 if None not in indexlist: -00421 self.ManageEntriesOfCurrentManageEntriesOfCurrent(indexlist, []) -00422 -00423 """ -00424 Search the first index available for a pluri entry from base_index -00425 """ -00426 def GetLineFromIndex(self, base_index): -00427 found = False -00428 index = base_index -00429 infos = self.GetEntryInfosGetEntryInfos(base_index) -00430 while index < base_index + infos["incr"]*infos["nbmax"] and not found: -00431 if not self.CurrentNodeCurrentNode.IsEntry(index): -00432 found = True -00433 else: -00434 index += infos["incr"] -00435 if found: -00436 return index -00437 return None -00438 -00439 """ -00440 Add entries specified in addinglist and remove entries specified in removinglist -00441 """ -00442 def ManageEntriesOfCurrent(self, addinglist, removinglist): -00443 # Add all the entries in addinglist -00444 for index in addinglist: -00445 infos = self.GetEntryInfosGetEntryInfos(index) -00446 if infos["struct"] & OD_MultipleSubindexes: -00447 # First case entry is a record -00448 if infos["struct"] & OD_IdenticalSubindexes: -00449 subentry_infos = self.GetSubentryInfosGetSubentryInfos(index, 1) -00450 if "default" in subentry_infos: -00451 default = subentry_infos["default"] -00452 else: -00453 default = self.GetTypeDefaultValueGetTypeDefaultValue(subentry_infos["type"]) -00454 self.CurrentNodeCurrentNode.AddEntry(index, 1, default) -00455 # Second case entry is a record -00456 else: -00457 i = 1 -00458 subentry_infos = self.GetSubentryInfosGetSubentryInfos(index, i) -00459 while subentry_infos: -00460 if "default" in subentry_infos: -00461 default = subentry_infos["default"] -00462 else: -00463 default = self.GetTypeDefaultValueGetTypeDefaultValue(subentry_infos["type"]) -00464 self.CurrentNodeCurrentNode.AddEntry(index, i, default) -00465 i += 1 -00466 subentry_infos = self.GetSubentryInfosGetSubentryInfos(index, i) -00467 # Third case entry is a record -00468 else: -00469 subentry_infos = self.GetSubentryInfosGetSubentryInfos(index, 0) -00470 if "default" in subentry_infos: -00471 default = subentry_infos["default"] -00472 else: -00473 default = self.GetTypeDefaultValueGetTypeDefaultValue(subentry_infos["type"]) -00474 self.CurrentNodeCurrentNode.AddEntry(index, 0, default) -00475 # Remove all the entries in removinglist -00476 for index in removinglist: -00477 self.RemoveCurrentVariableRemoveCurrentVariable(index) -00478 self.BufferCurrentNodeBufferCurrentNode() -00479 -00480 -00481 """ -00482 Remove an entry from current node. Analize the index to perform the correct -00483 method -00484 """ -00485 def RemoveCurrentVariable(self, index, subIndex = None): -00486 Mappings = self.CurrentNodeCurrentNode.GetMappings() -00487 if index < 0x1000 and subIndex == None: -00488 type = self.CurrentNodeCurrentNode.GetEntry(index, 1) -00489 for i in Mappings[-1]: -00490 for value in Mappings[-1][i]["values"]: -00491 if value["type"] == index: -00492 value["type"] = type -00493 self.CurrentNodeCurrentNode.RemoveMappingEntry(index) -00494 self.CurrentNodeCurrentNode.RemoveEntry(index) -00495 elif index == 0x1200 and subIndex == None: -00496 self.CurrentNodeCurrentNode.RemoveEntry(0x1200) -00497 elif 0x1201 <= index <= 0x127F and subIndex == None: -00498 self.CurrentNodeCurrentNode.RemoveLine(index, 0x127F) -00499 elif 0x1280 <= index <= 0x12FF and subIndex == None: -00500 self.CurrentNodeCurrentNode.RemoveLine(index, 0x12FF) -00501 elif 0x1400 <= index <= 0x15FF or 0x1600 <= index <= 0x17FF and subIndex == None: -00502 if 0x1600 <= index <= 0x17FF and subIndex == None: -00503 index -= 0x200 -00504 self.CurrentNodeCurrentNode.RemoveLine(index, 0x15FF) -00505 self.CurrentNodeCurrentNode.RemoveLine(index + 0x200, 0x17FF) -00506 elif 0x1800 <= index <= 0x19FF or 0x1A00 <= index <= 0x1BFF and subIndex == None: -00507 if 0x1A00 <= index <= 0x1BFF: -00508 index -= 0x200 -00509 self.CurrentNodeCurrentNode.RemoveLine(index, 0x19FF) -00510 self.CurrentNodeCurrentNode.RemoveLine(index + 0x200, 0x1BFF) -00511 else: -00512 found = False -00513 for menu,list in self.CurrentNodeCurrentNode.GetSpecificMenu(): -00514 for i in list: -00515 iinfos = self.GetEntryInfosGetEntryInfos(i) -00516 indexes = [i + incr * iinfos["incr"] for incr in xrange(iinfos["nbmax"])] -00517 if index in indexes: -00518 found = True -00519 diff = index - i -00520 for j in list: -00521 jinfos = self.GetEntryInfosGetEntryInfos(j) -00522 self.CurrentNodeCurrentNode.RemoveLine(j + diff, j + jinfos["incr"]*jinfos["nbmax"], jinfos["incr"]) -00523 self.CurrentNodeCurrentNode.RemoveMapVariable(index, subIndex) -00524 if not found: -00525 infos = self.GetEntryInfosGetEntryInfos(index) -00526 if not infos["need"]: -00527 self.CurrentNodeCurrentNode.RemoveEntry(index, subIndex) -00528 if index in Mappings[-1]: -00529 self.CurrentNodeCurrentNode.RemoveMappingEntry(index, subIndex) -00530 -00531 def AddMapVariableToCurrent(self, index, name, struct, number): -00532 if 0x2000 <= index <= 0x5FFF: -00533 if not self.CurrentNodeCurrentNode.IsEntry(index): -00534 self.CurrentNodeCurrentNode.AddMappingEntry(index, name = name, struct = struct) -00535 if struct == var: -00536 values = {"name" : name, "type" : 0x05, "access" : "rw", "pdo" : True} -00537 self.CurrentNodeCurrentNode.AddMappingEntry(index, 0, values = values) -00538 self.CurrentNodeCurrentNode.AddEntry(index, 0, 0) -00539 else: -00540 values = {"name" : "Number of Entries", "type" : 0x05, "access" : "ro", "pdo" : False} -00541 self.CurrentNodeCurrentNode.AddMappingEntry(index, 0, values = values) -00542 if struct == rec: -00543 values = {"name" : name + " %d[(sub)]", "type" : 0x05, "access" : "rw", "pdo" : True, "nbmax" : 0xFE} -00544 self.CurrentNodeCurrentNode.AddMappingEntry(index, 1, values = values) -00545 for i in xrange(number): -00546 self.CurrentNodeCurrentNode.AddEntry(index, i + 1, 0) -00547 else: -00548 for i in xrange(number): -00549 values = {"name" : "Undefined", "type" : 0x05, "access" : "rw", "pdo" : True} -00550 self.CurrentNodeCurrentNode.AddMappingEntry(index, i + 1, values = values) -00551 self.CurrentNodeCurrentNode.AddEntry(index, i + 1, 0) -00552 self.BufferCurrentNodeBufferCurrentNode() -00553 return None -00554 else: -00555 return "Index 0x%04X already defined!"%index -00556 else: -00557 return "Index 0x%04X isn't a valid index for Map Variable!"%index -00558 -00559 def AddUserTypeToCurrent(self, type, min, max, length): -00560 index = 0xA0 -00561 while index < 0x100 and self.CurrentNodeCurrentNode.IsEntry(index): -00562 index += 1 -00563 if index < 0x100: -00564 customisabletypes = self.GetCustomisableTypesGetCustomisableTypes() -00565 name, valuetype = customisabletypes[type] -00566 size = self.GetEntryInfosGetEntryInfos(type)["size"] -00567 default = self.GetTypeDefaultValueGetTypeDefaultValue(type) -00568 if valuetype == 0: -00569 self.CurrentNodeCurrentNode.AddMappingEntry(index, name = "%s[%d-%d]"%(name, min, max), struct = 3, size = size, default = default) -00570 self.CurrentNodeCurrentNode.AddMappingEntry(index, 0, values = {"name" : "Number of Entries", "type" : 0x05, "access" : "ro", "pdo" : False}) -00571 self.CurrentNodeCurrentNode.AddMappingEntry(index, 1, values = {"name" : "Type", "type" : 0x05, "access" : "ro", "pdo" : False}) -00572 self.CurrentNodeCurrentNode.AddMappingEntry(index, 2, values = {"name" : "Minimum Value", "type" : type, "access" : "ro", "pdo" : False}) -00573 self.CurrentNodeCurrentNode.AddMappingEntry(index, 3, values = {"name" : "Maximum Value", "type" : type, "access" : "ro", "pdo" : False}) -00574 self.CurrentNodeCurrentNode.AddEntry(index, 1, type) -00575 self.CurrentNodeCurrentNode.AddEntry(index, 2, min) -00576 self.CurrentNodeCurrentNode.AddEntry(index, 3, max) -00577 elif valuetype == 1: -00578 self.CurrentNodeCurrentNode.AddMappingEntry(index, name = "%s%d"%(name, length), struct = 3, size = length * size, default = default) -00579 self.CurrentNodeCurrentNode.AddMappingEntry(index, 0, values = {"name" : "Number of Entries", "type" : 0x05, "access" : "ro", "pdo" : False}) -00580 self.CurrentNodeCurrentNode.AddMappingEntry(index, 1, values = {"name" : "Type", "type" : 0x05, "access" : "ro", "pdo" : False}) -00581 self.CurrentNodeCurrentNode.AddMappingEntry(index, 2, values = {"name" : "Length", "type" : 0x05, "access" : "ro", "pdo" : False}) -00582 self.CurrentNodeCurrentNode.AddEntry(index, 1, type) -00583 self.CurrentNodeCurrentNode.AddEntry(index, 2, length) -00584 self.BufferCurrentNodeBufferCurrentNode() -00585 return None -00586 else: -00587 return "Too many User Types have already been defined!" -00588 -00589 #------------------------------------------------------------------------------- -00590 # Modify Entry and Mapping Functions -00591 #------------------------------------------------------------------------------- -00592 -00593 def SetCurrentEntryCallbacks(self, index, value): -00594 if self.CurrentNodeCurrentNode and self.CurrentNodeCurrentNode.IsEntry(index): -00595 entry_infos = self.GetEntryInfosGetEntryInfos(index) -00596 if "callback" not in entry_infos: -00597 self.CurrentNodeCurrentNode.SetParamsEntry(index, None, callback = value) -00598 self.BufferCurrentNodeBufferCurrentNode() -00599 -00600 def SetCurrentEntry(self, index, subIndex, value, name, editor): -00601 if self.CurrentNodeCurrentNode and self.CurrentNodeCurrentNode.IsEntry(index): -00602 if name == "value": -00603 if editor == "map": -00604 value = self.CurrentNodeCurrentNode.GetMapValue(value) -00605 if value: -00606 self.CurrentNodeCurrentNode.SetEntry(index, subIndex, value) -00607 elif editor == "bool": -00608 value = value == "True" -00609 self.CurrentNodeCurrentNode.SetEntry(index, subIndex, value) -00610 elif editor == "time": -00611 self.CurrentNodeCurrentNode.SetEntry(index, subIndex, value) -00612 elif editor == "number": -00613 try: -00614 self.CurrentNodeCurrentNode.SetEntry(index, subIndex, int(value)) -00615 except: -00616 pass -00617 elif editor == "domain": -00618 try: -00619 if len(value) % 2 != 0: -00620 value = "0" + value -00621 value = value.decode('hex_codec') -00622 self.CurrentNodeCurrentNode.SetEntry(index, subIndex, value) -00623 except: -00624 pass -00625 else: -00626 subentry_infos = self.GetSubentryInfosGetSubentryInfos(index, subIndex) -00627 type = subentry_infos["type"] -00628 dic = {} -00629 for typeindex, typevalue in CustomisableTypes: -00630 dic[typeindex] = typevalue -00631 if type not in dic: -00632 type = self.CurrentNodeCurrentNode.GetEntry(type)[1] -00633 if dic[type] == 0: -00634 try: -00635 value = int(value, 16) -00636 self.CurrentNodeCurrentNode.SetEntry(index, subIndex, value) -00637 except: -00638 pass -00639 else: -00640 self.CurrentNodeCurrentNode.SetEntry(index, subIndex, value) -00641 elif name in ["comment", "save"]: -00642 if editor == "option": -00643 value = value == "Yes" -00644 if name == "save": -00645 self.CurrentNodeCurrentNode.SetParamsEntry(index, subIndex, save = value) -00646 elif name == "comment": -00647 self.CurrentNodeCurrentNode.SetParamsEntry(index, subIndex, comment = value) -00648 else: -00649 if editor == "type": -00650 value = self.GetTypeIndexGetTypeIndex(value) -00651 size = self.GetEntryInfosGetEntryInfos(value)["size"] -00652 self.CurrentNodeCurrentNode.UpdateMapVariable(index, subIndex, size) -00653 elif editor in ["access","raccess"]: -00654 dic = {} -00655 for abbrev,access in AccessType.iteritems(): -00656 dic[access] = abbrev -00657 value = dic[value] -00658 if editor == "raccess" and not self.CurrentNodeCurrentNode.IsMappingEntry(index): -00659 entry_infos = self.GetEntryInfosGetEntryInfos(index) -00660 self.CurrentNodeCurrentNode.AddMappingEntry(index, name = entry_infos["name"], struct = 7) -00661 self.CurrentNodeCurrentNode.AddMappingEntry(index, 0, values = self.GetSubentryInfosGetSubentryInfos(index, 0, False).copy()) -00662 self.CurrentNodeCurrentNode.AddMappingEntry(index, 1, values = self.GetSubentryInfosGetSubentryInfos(index, 1, False).copy()) -00663 self.CurrentNodeCurrentNode.SetMappingEntry(index, subIndex, values = {name : value}) -00664 self.BufferCurrentNodeBufferCurrentNode() -00665 -00666 def SetCurrentEntryName(self, index, name): -00667 self.CurrentNodeCurrentNode.SetMappingEntry(index, name=name) -00668 self.BufferCurrentNodeBufferCurrentNode() -00669 -00670 def SetCurrentUserType(self, index, type, min, max, length): -00671 customisabletypes = self.GetCustomisableTypesGetCustomisableTypes() -00672 values, valuetype = self.GetCustomisedTypeValuesGetCustomisedTypeValues(index) -00673 name, new_valuetype = customisabletypes[type] -00674 size = self.GetEntryInfosGetEntryInfos(type)["size"] -00675 default = self.GetTypeDefaultValueGetTypeDefaultValue(type) -00676 if new_valuetype == 0: -00677 self.CurrentNodeCurrentNode.SetMappingEntry(index, name = "%s[%d-%d]"%(name, min, max), struct = 3, size = size, default = default) -00678 if valuetype == 1: -00679 self.CurrentNodeCurrentNode.SetMappingEntry(index, 2, values = {"name" : "Minimum Value", "type" : type, "access" : "ro", "pdo" : False}) -00680 self.CurrentNodeCurrentNode.AddMappingEntry(index, 3, values = {"name" : "Maximum Value", "type" : type, "access" : "ro", "pdo" : False}) -00681 self.CurrentNodeCurrentNode.SetEntry(index, 1, type) -00682 self.CurrentNodeCurrentNode.SetEntry(index, 2, min) -00683 if valuetype == 1: -00684 self.CurrentNodeCurrentNode.AddEntry(index, 3, max) -00685 else: -00686 self.CurrentNodeCurrentNode.SetEntry(index, 3, max) -00687 elif new_valuetype == 1: -00688 self.CurrentNodeCurrentNode.SetMappingEntry(index, name = "%s%d"%(name, length), struct = 3, size = size, default = default) -00689 if valuetype == 0: -00690 self.CurrentNodeCurrentNode.SetMappingEntry(index, 2, values = {"name" : "Length", "type" : 0x02, "access" : "ro", "pdo" : False}) -00691 self.CurrentNodeCurrentNode.RemoveMappingEntry(index, 3) -00692 self.CurrentNodeCurrentNode.SetEntry(index, 1, type) -00693 self.CurrentNodeCurrentNode.SetEntry(index, 2, length) -00694 if valuetype == 0: -00695 self.CurrentNodeCurrentNode.RemoveEntry(index, 3) -00696 self.BufferCurrentNodeBufferCurrentNode() -00697 -00698 #------------------------------------------------------------------------------- -00699 # Current Buffering Management Functions -00700 #------------------------------------------------------------------------------- -00701 -00702 def BufferCurrentNode(self): -00703 self.UndoBuffersUndoBuffers[self.NodeIndexNodeIndex].Buffering(self.CurrentNodeCurrentNode.Copy()) -00704 -00705 def CurrentIsSaved(self): -00706 return self.UndoBuffersUndoBuffers[self.NodeIndexNodeIndex].IsCurrentSaved() -00707 -00708 def OneFileHasChanged(self): -00709 result = False -00710 for buffer in self.UndoBuffersUndoBuffers.values(): -00711 result |= not buffer.IsCurrentSaved() -00712 return result -00713 -00714 def GetBufferNumber(self): -00715 return len(self.UndoBuffersUndoBuffers) -00716 -00717 def LoadCurrentPrevious(self): -00718 self.CurrentNodeCurrentNode = self.UndoBuffersUndoBuffers[self.NodeIndexNodeIndex].Previous().Copy() -00719 -00720 def LoadCurrentNext(self): -00721 self.CurrentNodeCurrentNode = self.UndoBuffersUndoBuffers[self.NodeIndexNodeIndex].Next().Copy() -00722 -00723 def AddNodeBuffer(self, currentstate = None, issaved = False): -00724 self.NodeIndexNodeIndex = GetNewId() -00725 self.UndoBuffersUndoBuffers[self.NodeIndexNodeIndex] = UndoBuffer(currentstate, issaved) -00726 self.FilePathsFilePaths[self.NodeIndexNodeIndex] = "" -00727 self.FileNamesFileNames[self.NodeIndexNodeIndex] = "" -00728 return self.NodeIndexNodeIndex -00729 -00730 def ChangeCurrentNode(self, index): -00731 if index in self.UndoBuffersUndoBuffers.keys(): -00732 self.NodeIndexNodeIndex = index -00733 self.CurrentNodeCurrentNode = self.UndoBuffersUndoBuffers[self.NodeIndexNodeIndex].Current().Copy() -00734 -00735 def RemoveNodeBuffer(self, index): -00736 self.UndoBuffersUndoBuffers.pop(index) -00737 self.FilePathsFilePaths.pop(index) -00738 self.FileNamesFileNames.pop(index) -00739 -00740 def GetCurrentNodeIndex(self): -00741 return self.NodeIndexNodeIndex -00742 -00743 def GetCurrentFilename(self): -00744 return self.GetFilenameGetFilename(self.NodeIndexNodeIndex) -00745 -00746 def GetAllFilenames(self): -00747 indexes = self.UndoBuffersUndoBuffers.keys() -00748 indexes.sort() -00749 return [self.GetFilenameGetFilename(idx) for idx in indexes] -00750 -00751 def GetFilename(self, index): -00752 if self.UndoBuffersUndoBuffers[index].IsCurrentSaved(): -00753 return self.FileNamesFileNames[index] -00754 else: -00755 return "~%s~"%self.FileNamesFileNames[index] -00756 -00757 def SetCurrentFilePath(self, filepath): -00758 self.FilePathsFilePaths[self.NodeIndexNodeIndex] = filepath -00759 if filepath == "": -00760 self.LastNewIndexLastNewIndex += 1 -00761 self.FileNamesFileNames[self.NodeIndexNodeIndex] = "Unnamed%d"%self.LastNewIndexLastNewIndex -00762 else: -00763 self.FileNamesFileNames[self.NodeIndexNodeIndex] = os.path.splitext(os.path.basename(filepath))[0] -00764 -00765 def GetCurrentFilePath(self): -00766 if len(self.FilePathsFilePaths) > 0: -00767 return self.FilePathsFilePaths[self.NodeIndexNodeIndex] -00768 else: -00769 return "" -00770 -00771 def GetCurrentBufferState(self): -00772 first = self.UndoBuffersUndoBuffers[self.NodeIndexNodeIndex].IsFirst() -00773 last = self.UndoBuffersUndoBuffers[self.NodeIndexNodeIndex].IsLast() -00774 return not first, not last -00775 -00776 #------------------------------------------------------------------------------- -00777 # Profiles Management Functions -00778 #------------------------------------------------------------------------------- -00779 -00780 def GetCurrentCommunicationLists(self): -00781 list = [] -00782 for index in MappingDictionary.iterkeys(): -00783 if 0x1000 <= index < 0x1200: -00784 list.append(index) -00785 return self.GetProfileListsGetProfileLists(MappingDictionary, list) -00786 -00787 def GetCurrentDS302Lists(self): -00788 return self.GetSpecificProfileListsGetSpecificProfileLists(self.CurrentNodeCurrentNode.GetDS302Profile()) -00789 -00790 def GetCurrentProfileLists(self): -00791 return self.GetSpecificProfileListsGetSpecificProfileLists(self.CurrentNodeCurrentNode.GetProfile()) -00792 -00793 def GetSpecificProfileLists(self, mappingdictionary): -00794 validlist = [] -00795 exclusionlist = [] -00796 for name, list in self.CurrentNodeCurrentNode.GetSpecificMenu(): -00797 exclusionlist.extend(list) -00798 for index in mappingdictionary.iterkeys(): -00799 if index not in exclusionlist: -00800 validlist.append(index) -00801 return self.GetProfileListsGetProfileLists(mappingdictionary, validlist) -00802 -00803 def GetProfileLists(self, mappingdictionary, list): -00804 dictionary = {} -00805 current = [] -00806 for index in list: -00807 dictionary[index] = (mappingdictionary[index]["name"], mappingdictionary[index]["need"]) -00808 if self.CurrentNodeCurrentNode.IsEntry(index): -00809 current.append(index) -00810 return dictionary, current -00811 -00812 def GetCurrentNextMapIndex(self): -00813 if self.CurrentNodeCurrentNode: -00814 index = 0x2000 -00815 while self.CurrentNodeCurrentNode.IsEntry(index) and index < 0x5FFF: -00816 index += 1 -00817 if index < 0x6000: -00818 return index -00819 else: -00820 return None -00821 -00822 def CurrentDS302Defined(self): -00823 if self.CurrentNodeCurrentNode: -00824 return len(self.CurrentNodeCurrentNode.GetDS302Profile()) > 0 -00825 return False -00826 -00827 #------------------------------------------------------------------------------- -00828 # Node State and Values Functions -00829 #------------------------------------------------------------------------------- -00830 -00831 def GetCurrentNodeName(self): -00832 if self.CurrentNodeCurrentNode: -00833 return self.CurrentNodeCurrentNode.GetNodeName() -00834 else: -00835 return "" -00836 -00837 def GetCurrentNodeID(self): -00838 if self.CurrentNodeCurrentNode: -00839 return self.CurrentNodeCurrentNode.GetNodeID() -00840 else: -00841 return None -00842 -00843 def GetCurrentNodeInfos(self): -00844 name = self.CurrentNodeCurrentNode.GetNodeName() -00845 id = self.CurrentNodeCurrentNode.GetNodeID() -00846 type = self.CurrentNodeCurrentNode.GetNodeType() -00847 description = self.CurrentNodeCurrentNode.GetNodeDescription() -00848 return name, id, type, description -00849 -00850 def SetCurrentNodeInfos(self, name, id, type, description): -00851 self.CurrentNodeCurrentNode.SetNodeName(name) -00852 self.CurrentNodeCurrentNode.SetNodeID(id) -00853 self.CurrentNodeCurrentNode.SetNodeType(type) -00854 self.CurrentNodeCurrentNode.SetNodeDescription(description) -00855 self.BufferCurrentNodeBufferCurrentNode() -00856 -00857 def GetCurrentProfileName(self): -00858 if self.CurrentNodeCurrentNode: -00859 return self.CurrentNodeCurrentNode.GetProfileName() -00860 return "" -00861 -00862 def IsCurrentEntry(self, index): -00863 if self.CurrentNodeCurrentNode: -00864 return self.CurrentNodeCurrentNode.IsEntry(index) -00865 return False -00866 -00867 def GetCurrentEntry(self, index, subIndex = None): -00868 if self.CurrentNodeCurrentNode: -00869 return self.CurrentNodeCurrentNode.GetEntry(index, subIndex) -00870 return None -00871 -00872 def GetCurrentParamsEntry(self, index, subIndex = None): -00873 if self.CurrentNodeCurrentNode: -00874 return self.CurrentNodeCurrentNode.GetParamsEntry(index, subIndex) -00875 return None -00876 -00877 def GetCurrentValidIndexes(self, min, max): -00878 validindexes = [] -00879 for index in self.CurrentNodeCurrentNode.GetIndexes(): -00880 if min <= index <= max: -00881 validindexes.append((self.GetEntryNameGetEntryName(index), index)) -00882 return validindexes -00883 -00884 def GetCurrentValidChoices(self, min, max): -00885 validchoices = [] -00886 exclusionlist = [] -00887 for menu, indexes in self.CurrentNodeCurrentNode.GetSpecificMenu(): -00888 exclusionlist.extend(indexes) -00889 good = True -00890 for index in indexes: -00891 good &= min <= index <= max -00892 if good: -00893 validchoices.append((menu, None)) -00894 list = [index for index in MappingDictionary.keys() if index >= 0x1000] -00895 profiles = self.CurrentNodeCurrentNode.GetMappings(False) -00896 for profile in profiles: -00897 list.extend(profile.keys()) -00898 list.sort() -00899 for index in list: -00900 if min <= index <= max and not self.CurrentNodeCurrentNode.IsEntry(index) and index not in exclusionlist: -00901 validchoices.append((self.GetEntryNameGetEntryName(index), index)) -00902 return validchoices -00903 -00904 def HasCurrentEntryCallbacks(self, index): -00905 if self.CurrentNodeCurrentNode and self.CurrentNodeCurrentNode.IsEntry(index): -00906 entry_infos = self.GetEntryInfosGetEntryInfos(index) -00907 if "callback" in entry_infos: -00908 return entry_infos["callback"] -00909 return self.CurrentNodeCurrentNode.HasEntryCallbacks(index) -00910 return False -00911 -00912 def GetCurrentEntryValues(self, index): -00913 if self.CurrentNodeCurrentNode: -00914 return self.GetNodeEntryValuesGetNodeEntryValues(self.CurrentNodeCurrentNode, index) -00915 -00916 def GetNodeEntryValues(self, node, index): -00917 if node and node.IsEntry(index): -00918 entry_infos = node.GetEntryInfos(index) -00919 data = [] -00920 editors = [] -00921 values = node.GetEntry(index) -00922 params = node.GetParamsEntry(index) -00923 if type(values) == ListType: -00924 for i, value in enumerate(values): -00925 data.append({"value" : value}) -00926 data[-1].update(params[i]) -00927 else: -00928 data.append({"value" : values}) -00929 data[-1].update(params) -00930 for i, dic in enumerate(data): -00931 infos = node.GetSubentryInfos(index, i) -00932 dic["subindex"] = "0x%02X"%i -00933 dic["name"] = infos["name"] -00934 dic["type"] = node.GetTypeName(infos["type"]) -00935 dic["access"] = AccessType[infos["access"]] -00936 dic["save"] = OptionType[dic["save"]] -00937 editor = {"subindex" : None, "save" : "option", "callback" : "option", "comment" : "string"} -00938 if type(values) == ListType and i == 0: -00939 editor["name"] = None -00940 editor["type"] = None -00941 if 0x1600 <= index <= 0x17FF or 0x1A00 <= index <= 0x1C00: -00942 editor["access"] = "raccess" -00943 else: -00944 editor["access"] = None -00945 editor["value"] = None -00946 else: -00947 if infos["user_defined"]: -00948 if entry_infos["struct"] & OD_IdenticalSubindexes: -00949 editor["name"] = None -00950 if i > 1: -00951 editor["type"] = None -00952 editor["access"] = None -00953 else: -00954 editor["type"] = "type" -00955 editor["access"] = "access" -00956 else: -00957 if entry_infos["struct"] & OD_MultipleSubindexes: -00958 editor["name"] = "string" -00959 else: -00960 editor["name"] = None -00961 editor["type"] = "type" -00962 editor["access"] = "access" -00963 else: -00964 editor["name"] = None -00965 editor["type"] = None -00966 editor["access"] = None -00967 if index < 0x260: -00968 editor["value"] = None -00969 if i == 1: -00970 dic["value"] = node.GetTypeName(dic["value"]) -00971 elif 0x1600 <= index <= 0x17FF or 0x1A00 <= index <= 0x1C00: -00972 editor["value"] = "map" -00973 dic["value"] = node.GetMapName(dic["value"]) -00974 else: -00975 if dic["type"].startswith("VISIBLE_STRING"): -00976 editor["value"] = "string" -00977 elif dic["type"] in ["TIME_OF_DAY","TIME_DIFFERENCE"]: -00978 editor["value"] = "time" -00979 elif dic["type"] == "DOMAIN": -00980 editor["value"] = "domain" -00981 dic["value"] = dic["value"].encode('hex_codec') -00982 elif dic["type"] == "BOOLEAN": -00983 editor["value"] = "bool" -00984 dic["value"] = BoolType[dic["value"]] -00985 result = type_model.match(dic["type"]) -00986 if result: -00987 values = result.groups() -00988 if values[0] == "UNSIGNED": -00989 format = "0x%0" + str(int(values[1])/4) + "X" -00990 dic["value"] = format%dic["value"] -00991 editor["value"] = "string" -00992 if values[0] == "INTEGER": -00993 editor["value"] = "number" -00994 elif values[0] == "REAL": -00995 editor["value"] = "float" -00996 elif values[0] == "VISIBLE_STRING": -00997 editor["length"] = values[0] -00998 result = range_model.match(dic["type"]) -00999 if result: -01000 values = result.groups() -01001 if values[0] in ["UNSIGNED", "INTEGER", "REAL"]: -01002 editor["min"] = values[2] -01003 editor["max"] = values[3] -01004 editors.append(editor) -01005 return data, editors -01006 else: -01007 return None -01008 -01009 #------------------------------------------------------------------------------- -01010 # Node Informations Functions -01011 #------------------------------------------------------------------------------- -01012 -01013 def GetCustomisedTypeValues(self, index): -01014 if self.CurrentNodeCurrentNode: -01015 values = self.CurrentNodeCurrentNode.GetEntry(index) -01016 customisabletypes = self.GetCustomisableTypesGetCustomisableTypes() -01017 return values, customisabletypes[values[1]][1] -01018 else: -01019 return None, None -01020 -01021 def GetEntryName(self, index): -01022 if self.CurrentNodeCurrentNode: -01023 return self.CurrentNodeCurrentNode.GetEntryName(index) -01024 else: -01025 return FindEntryName(index, MappingDictionary) -01026 -01027 def GetEntryInfos(self, index): -01028 if self.CurrentNodeCurrentNode: -01029 return self.CurrentNodeCurrentNode.GetEntryInfos(index) -01030 else: -01031 return FindEntryInfos(index, MappingDictionary) -01032 -01033 def GetSubentryInfos(self, index, subindex): -01034 if self.CurrentNodeCurrentNode: -01035 return self.CurrentNodeCurrentNode.GetSubentryInfos(index, subindex) -01036 else: -01037 result = FindSubentryInfos(index, subindex, MappingDictionary) -01038 if result: -01039 result["user_defined"] = False -01040 return result -01041 -01042 def GetTypeIndex(self, typename): -01043 if self.CurrentNodeCurrentNode: -01044 return self.CurrentNodeCurrentNode.GetTypeIndex(typename) -01045 else: -01046 return FindTypeIndex(typename, MappingDictionary) -01047 -01048 def GetTypeName(self, typeindex): -01049 if self.CurrentNodeCurrentNode: -01050 return self.CurrentNodeCurrentNode.GetTypeName(typeindex) -01051 else: -01052 return FindTypeName(typeindex, MappingDictionary) -01053 -01054 def GetTypeDefaultValue(self, typeindex): -01055 if self.CurrentNodeCurrentNode: -01056 return self.CurrentNodeCurrentNode.GetTypeDefaultValue(typeindex) -01057 else: -01058 return FindTypeDefaultValue(typeindex, MappingDictionary) -01059 -01060 def GetMapVariableList(self): -01061 if self.CurrentNodeCurrentNode: -01062 return self.CurrentNodeCurrentNode.GetMapVariableList() -01063 else: -01064 return [] -01065 -01066 def GetMandatoryIndexes(self, node = None): -01067 if self.CurrentNodeCurrentNode: -01068 return self.CurrentNodeCurrentNode.GetMapVariableList() -01069 else: -01070 return FindMandatoryIndexes(MappingDictionary) -01071 -01072 def GetCustomisableTypes(self): -01073 dic = {} -01074 for index, valuetype in CustomisableTypes: -01075 name = self.GetTypeNameGetTypeName(index) -01076 dic[index] = [name, valuetype] -01077 return dic -01078 -01079 def GetCurrentSpecificMenu(self): -01080 if self.CurrentNodeCurrentNode: -01081 return self.CurrentNodeCurrentNode.GetSpecificMenu() -01082 return [] -01083 -