diff -r dba062c5c3c1 -r 506f9700b9fb objdictgen/nodemanager.py --- a/objdictgen/nodemanager.py Tue Oct 02 10:32:11 2007 +0200 +++ b/objdictgen/nodemanager.py Tue Oct 02 14:06:30 2007 +0200 @@ -265,6 +265,7 @@ node = load(file) file.close() self.CurrentNode = node + self.CurrentNode.SetNodeID(0) # Add a new buffer and defining current state index = self.AddNodeBuffer(self.CurrentNode.Copy(), True) self.SetCurrentFilePath(filepath) @@ -297,6 +298,19 @@ # Verify if it's not forced that the current node is saved before closing it if self.UndoBuffers[self.NodeIndex].IsCurrentSaved() or ignore: self.RemoveNodeBuffer(self.NodeIndex) + if len(self.UndoBuffers) > 0: + previousindexes = [idx for idx in self.UndoBuffers.keys() if idx < self.NodeIndex] + nextindexes = [idx for idx in self.UndoBuffers.keys() if idx > self.NodeIndex] + if len(previousindexes) > 0: + previousindexes.sort() + self.NodeIndex = previousindexes[-1] + elif len(nextindexes) > 0: + nextindexes.sort() + self.NodeIndex = nextindexes[0] + else: + self.NodeIndex = None + else: + self.NodeIndex = None return True return False @@ -374,9 +388,13 @@ # Informations about entry infos = self.GetEntryInfos(index) length = self.CurrentNode.GetEntry(index, 0) + if "nbmin" in infos: + nbmin = infos["nbmin"] + else: + nbmin = 1 # Entry is a record, or is an array of manufacturer specific if infos["struct"] & OD_IdenticalSubindexes or 0x2000 <= index <= 0x5FFF and infos["struct"] & OD_IdenticalSubindexes: - for i in xrange(min(number, length - 1)): + for i in xrange(min(number, length - nbmin)): self.RemoveCurrentVariable(index, length - i) self.BufferCurrentNode() @@ -463,7 +481,12 @@ default = subentry_infos["default"] else: default = self.GetTypeDefaultValue(subentry_infos["type"]) - node.AddEntry(index, 1, default) + node.AddEntry(index, value = []) + if "nbmin" in subentry_infos: + for i in xrange(subentry_infos["nbmin"]): + node.AddEntry(index, i + 1, default) + else: + node.AddEntry(index, 1, default) # Second case entry is a record else: i = 1 @@ -493,6 +516,23 @@ """ + Reset an subentry from current node to its default value + """ + def SetCurrentEntryToDefault(self, index, subindex, node = None): + disable_buffer = node != None + if node == None: + node = self.CurrentNode + if node.IsEntry(index, subindex): + subentry_infos = self.GetSubentryInfos(index, subindex) + if "default" in subentry_infos: + default = subentry_infos["default"] + else: + default = self.GetTypeDefaultValue(subentry_infos["type"]) + node.SetEntry(index, subindex, default) + if not disable_buffer: + self.BufferCurrentNode() + + """ Remove an entry from current node. Analize the index to perform the correct method """ @@ -653,7 +693,9 @@ type = node.GetEntry(type)[1] if dic[type] == 0: try: - if value.startswith("0x"): + if value.startswith("$NODEID"): + value = "\"%s\""%value + elif value.startswith("0x"): value = int(value, 16) else: value = int(value) @@ -896,9 +938,9 @@ return self.CurrentNode.IsEntry(index) return False - def GetCurrentEntry(self, index, subIndex = None): - if self.CurrentNode: - return self.CurrentNode.GetEntry(index, subIndex) + def GetCurrentEntry(self, index, subIndex = None, compute = True): + if self.CurrentNode: + return self.CurrentNode.GetEntry(index, subIndex, compute) return None def GetCurrentParamsEntry(self, index, subIndex = None): @@ -947,7 +989,7 @@ entry_infos = node.GetEntryInfos(index) data = [] editors = [] - values = node.GetEntry(index) + values = node.GetEntry(index, compute = False) params = node.GetParamsEntry(index) if type(values) == ListType: for i, value in enumerate(values): @@ -1015,8 +1057,11 @@ if result: values = result.groups() if values[0] == "UNSIGNED": - format = "0x%0" + str(int(values[1])/4) + "X" - dic["value"] = format%dic["value"] + try: + format = "0x%0" + str(int(values[1])/4) + "X" + dic["value"] = format%dic["value"] + except: + pass editor["value"] = "string" if values[0] == "INTEGER": editor["value"] = "number"