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 @@ - - -CanFestival: /home/epimerde/documents/tc11/CanFestival-3/objdictgen/nodemanager.py Source File - - - - -
-
-
-
-

/home/epimerde/documents/tc11/CanFestival-3/objdictgen/nodemanager.py

Go to the documentation of this file.
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 
-

Generated on Mon Jun 4 16:29:06 2007 for CanFestival by  - -doxygen 1.5.1
- -