# HG changeset patch # User lbessard # Date 1189440967 -7200 # Node ID 2245e8776086edce6264e380d7fc0014d5b97bfa # Parent a6ff2b3fcc25b805229e83033381c5734da9a48e Adding support support for using PLCOpenEditor with Beremiz Modify code for wxPython 2.8.4 diff -r a6ff2b3fcc25 -r 2245e8776086 LDViewer.py --- a/LDViewer.py Mon Sep 10 16:12:29 2007 +0200 +++ b/LDViewer.py Mon Sep 10 18:16:07 2007 +0200 @@ -448,7 +448,7 @@ #------------------------------------------------------------------------------- def AddLadderRung(self): - dialog = LDElementDialog(self.Parent, "coil") + dialog = LDElementDialog(self.ParentWindow, "coil") varlist = [] vars = self.Controler.GetCurrentElementEditingInterfaceVars() if vars: @@ -537,7 +537,7 @@ for element in self.SelectedElement.GetElements(): wires.append(element) if len(wires) > 0: - dialog = LDElementDialog(self.Parent, "contact") + dialog = LDElementDialog(self.ParentWindow, "contact") varlist = [] vars = self.Controler.GetCurrentElementEditingInterfaceVars() if vars: @@ -758,7 +758,7 @@ new_wire.ConnectEndPoint(None, connectors[index + 1]) right_elements.reverse() elif right_powerrail: - dialog = LDElementDialog(self.Parent, "coil") + dialog = LDElementDialog(self.ParentWindow, "coil") varlist = [] vars = self.Controler.GetCurrentElementEditingInterfaceVars() if vars: @@ -1179,7 +1179,7 @@ if self.GetDrawingMode() == FREEDRAWING_MODE: Viewer.EditContactContent(self, contact) else: - dialog = LDElementDialog(self.Parent, "contact") + dialog = LDElementDialog(self.ParentWindow, "contact") varlist = [] vars = self.Controler.GetCurrentElementEditingInterfaceVars() if vars: @@ -1202,7 +1202,7 @@ if self.GetDrawingMode() == FREEDRAWING_MODE: Viewer.EditCoilContent(self, coil) else: - dialog = LDElementDialog(self.Parent, "coil") + dialog = LDElementDialog(self.ParentWindow, "coil") varlist = [] vars = self.Controler.GetCurrentElementEditingInterfaceVars() if vars: diff -r a6ff2b3fcc25 -r 2245e8776086 PLCControler.py --- a/PLCControler.py Mon Sep 10 16:12:29 2007 +0200 +++ b/PLCControler.py Mon Sep 10 18:16:07 2007 +0200 @@ -1213,6 +1213,7 @@ infos["connectors"] = {"inputs":[],"outputs":[]} for variable in instance.inputVariables.getVariable(): connector = {} + connector["name"] = variable.getFormalParameter() connector["position"] = variable.connectionPointIn.getRelPosition() connector["negated"] = variable.getNegated() connector["edge"] = variable.getConnectorEdge() @@ -1225,6 +1226,7 @@ infos["connectors"]["inputs"].append(connector) for variable in instance.outputVariables.getVariable(): connector = {} + connector["name"] = variable.getFormalParameter() connector["position"] = variable.connectionPointOut.getRelPosition() connector["negated"] = variable.getNegated() connector["edge"] = variable.getConnectorEdge() diff -r a6ff2b3fcc25 -r 2245e8776086 PLCOpenEditor.py --- a/PLCOpenEditor.py Mon Sep 10 16:12:29 2007 +0200 +++ b/PLCOpenEditor.py Mon Sep 10 18:16:07 2007 +0200 @@ -346,6 +346,10 @@ self.SetClientSize(wx.Size(1000, 600)) self.SetMenuBar(self.menuBar1) self.Bind(wx.EVT_CLOSE, self.OnCloseFrame, id=ID_PLCOPENEDITOR) + if not self.ModeSolo: + self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=ID_PLCOPENEDITORFILEMENUITEMS5) + accel = wx.AcceleratorTable([wx.AcceleratorEntry(wx.ACCEL_CTRL, 83, ID_PLCOPENEDITORFILEMENUITEMS5)]) + self.SetAcceleratorTable(accel) self.MainSplitter = wx.SplitterWindow(id=ID_PLCOPENEDITORMAINSPLITTER, name='MainSplitter', parent=self, point=wx.Point(0, 0), @@ -365,7 +369,7 @@ self.ToolBar = wx.ToolBar(id=ID_PLCOPENEDITORTOOLBAR, name='ToolBar', parent=self.EditorPanel, pos=wx.Point(0, 0), size=wx.Size(0, 40), - style=wx.TB_HORIZONTAL | wx.NO_BORDER) + style=wx.TB_HORIZONTAL|wx.NO_BORDER) self.ToolBar.AddRadioTool(ID_PLCOPENEDITORTOOLBARSELECTION, wx.Bitmap(os.path.join(CWD, 'Images/select.png')), wx.NullBitmap, "Select an object") self.Bind(wx.EVT_TOOL, self.OnSelectionTool, @@ -496,7 +500,10 @@ dialog.Destroy() def OnCloseFrame(self, event): - if not self.Controler.ProjectIsSaved(): + if not self.ModeSolo and getattr(self, "_onclose", None) != None: + self._onclose() + event.Skip() + elif not self.Controler.ProjectIsSaved(): dialog = wx.MessageDialog(self, "There are changes, do you want to save?", "Close Application", wx.YES_NO|wx.CANCEL|wx.ICON_QUESTION) answer = dialog.ShowModal() dialog.Destroy() @@ -570,7 +577,10 @@ event.Skip() def OnSaveProjectMenu(self, event): - self.SaveProject() + if not self.ModeSolo and getattr(self, "_onsave", None) != None: + self._onsave() + else: + self.SaveProject() event.Skip() def OnSaveProjectAsMenu(self, event): @@ -1015,26 +1025,25 @@ def RefreshProjectTree(self): infos = self.Controler.GetProjectInfos() root = self.ProjectTree.GetRootItem() + if not root.IsOk(): + root = self.ProjectTree.AddRoot(infos["name"]) self.GenerateTreeBranch(root, infos) self.ProjectTree.Expand(self.ProjectTree.GetRootItem()) def GenerateTreeBranch(self, root, infos): to_delete = [] - if root.IsOk(): - self.ProjectTree.SetItemText(root, infos["name"]) - else: - root = self.ProjectTree.AddRoot(infos["name"]) + self.ProjectTree.SetItemText(root, infos["name"]) self.ProjectTree.SetPyData(root, infos["type"]) if infos["type"] == ITEM_POU: self.ProjectTree.SetItemImage(root, LANGUAGES.index(self.Controler.GetPouBodyType(infos["name"]))) item, root_cookie = self.ProjectTree.GetFirstChild(root) - if len(infos["values"]) > 0: - for values in infos["values"]: - if not item.IsOk(): - item = self.ProjectTree.AppendItem(root, "") + for values in infos["values"]: + if not item.IsOk(): + item = self.ProjectTree.AppendItem(root, "") + if wx.VERSION < (2, 7, 0): item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) - self.GenerateTreeBranch(item, values) - item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) + self.GenerateTreeBranch(item, values) + item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) while item.IsOk(): to_delete.append(item) item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie) @@ -2187,20 +2196,20 @@ def __init__(self, parent): wx.TextDropTarget.__init__(self) - self.Parent = parent + self.ParentWindow = parent def OnDropText(self, x, y, data): - col = self.Parent.VariablesGrid.XToCol(x) - row = self.Parent.VariablesGrid.YToRow(y) + col = self.ParentWindow.VariablesGrid.XToCol(x) + row = self.ParentWindow.VariablesGrid.YToRow(y) if col != wx.NOT_FOUND and row != wx.NOT_FOUND: - if self.Parent.Table.GetColLabelValue(col) != "Location": + if self.ParentWindow.Table.GetColLabelValue(col) != "Location": return try: values = eval(data) except: values = None if values and values[1] == "location": - dialog = wx.SingleChoiceDialog(self.Parent, "Select a variable class:", "Variable class", ["Input", "Output", "Memory"], wx.OK|wx.CANCEL) + dialog = wx.SingleChoiceDialog(self.ParentWindow, "Select a variable class:", "Variable class", ["Input", "Output", "Memory"], wx.OK|wx.CANCEL) if dialog.ShowModal() == wx.ID_OK: selected = dialog.GetSelection() if selected == 0: @@ -2209,9 +2218,9 @@ location = "%Q" + values[0] else: location = "%M" + values[0] - self.Parent.Table.SetValue(row - 1, col, location) - self.Parent.Table.ResetView(self.Parent.VariablesGrid) - self.Parent.SaveValues() + self.ParentWindow.Table.SetValue(row - 1, col, location) + self.ParentWindow.Table.ResetView(self.ParentWindow.VariablesGrid) + self.ParentWindow.SaveValues() dialog.Destroy() [ID_POUEDITORPANEL, ID_POUEDITORPANELVIEWER, @@ -2290,15 +2299,15 @@ self.Viewer.ResetBuffer = lambda: None self.Viewer.RefreshView = lambda: None elif element_type == "resource": - self.Viewer = ResourceEditor(self, self.Parent, self.Controler) + self.Viewer = ResourceEditor(self, self.ParentWindow, self.Controler) elif element_type == "FBD": - self.Viewer = Viewer(self, self.Parent, self.Controler) + self.Viewer = Viewer(self, self.ParentWindow, self.Controler) elif element_type == "LD": - self.Viewer = LD_Viewer(self, self.Parent, self.Controler) + self.Viewer = LD_Viewer(self, self.ParentWindow, self.Controler) elif element_type == "SFC": - self.Viewer = SFC_Viewer(self, self.Parent, self.Controler) + self.Viewer = SFC_Viewer(self, self.ParentWindow, self.Controler) else: - self.Viewer = TextViewer(self, self.Parent, self.Controler) + self.Viewer = TextViewer(self, self.ParentWindow, self.Controler) self.Viewer.SetTextSyntax(element_type) if element_type == "IL": self.Viewer.SetKeywords(IL_KEYWORDS) @@ -2365,7 +2374,7 @@ self._init_sizers() def __init__(self, parent, window, controler, element_type, pou_name = None, transition_name = None, action_name = None, config_name = None, resource_name = None): - self.Parent = window + self.ParentWindow = window self.Controler = controler self.ElementType = element_type self.PouName = pou_name @@ -2496,8 +2505,8 @@ def OnReturnTypeChanged(self, event): self.Controler.SetPouInterfaceReturnType(self.PouName, self.ReturnType.GetStringSelection()) self.Controler.BufferProject() - self.Parent.RefreshTitle() - self.Parent.RefreshEditMenu() + self.ParentWindow.RefreshTitle() + self.ParentWindow.RefreshEditMenu() event.Skip() def OnClassFilter(self, event): @@ -2590,8 +2599,8 @@ if old_value != "": self.Controler.UpdateCurrentPouEditingUsedVariable(old_value, value) self.Controler.BufferProject() - self.Parent.RefreshTitle() - self.Parent.RefreshEditMenu() + self.ParentWindow.RefreshTitle() + self.ParentWindow.RefreshEditMenu() self.RefreshViewerVarList() self.Viewer.RefreshView() event.Skip() @@ -2690,8 +2699,8 @@ self.Controler.SetPouInterfaceVars(self.PouName, self.Values) if buffer: self.Controler.BufferProject() - self.Parent.RefreshTitle() - self.Parent.RefreshEditMenu() + self.ParentWindow.RefreshTitle() + self.ParentWindow.RefreshEditMenu() #------------------------------------------------------------------------------- # Exception Handler diff -r a6ff2b3fcc25 -r 2245e8776086 RessourceEditor.py --- a/RessourceEditor.py Mon Sep 10 16:12:29 2007 +0200 +++ b/RessourceEditor.py Mon Sep 10 18:16:07 2007 +0200 @@ -351,7 +351,7 @@ def __init__(self, parent, window, controler): self._init_ctrls(parent) - self.Parent = window + self.ParentWindow = window self.Controler = controler self.TasksDefaultValue = {"Name" : "", "Single" : "", "Interval" : "", "Priority" : 0} @@ -399,8 +399,8 @@ # Buffer the last model state def RefreshBuffer(self): self.Controler.BufferProject() - self.Parent.RefreshTitle() - self.Parent.RefreshEditMenu() + self.ParentWindow.RefreshTitle() + self.ParentWindow.RefreshEditMenu() def RefreshView(self): tasks, instances = self.Controler.GetCurrentResourceEditingInfos() diff -r a6ff2b3fcc25 -r 2245e8776086 SFCViewer.py --- a/SFCViewer.py Mon Sep 10 16:12:29 2007 +0200 +++ b/SFCViewer.py Mon Sep 10 18:16:07 2007 +0200 @@ -369,7 +369,7 @@ #------------------------------------------------------------------------------- def AddInitialStep(self, pos): - dialog = StepNameDialog(self.Parent, "Add a new initial step", "Please enter step name", "", wx.OK|wx.CANCEL) + dialog = StepNameDialog(self.ParentWindow, "Add a new initial step", "Please enter step name", "", wx.OK|wx.CANCEL) dialog.SetPouNames(self.Controler.GetProjectPouNames()) dialog.SetVariables(self.Controler.GetCurrentElementEditingInterfaceVars()) dialog.SetStepNames([block.GetName() for block in self.Blocks if isinstance(block, SFC_Step)]) @@ -391,7 +391,7 @@ def AddStep(self): if self.SelectedElement in self.Wires or isinstance(self.SelectedElement, SFC_Step): - dialog = StepNameDialog(self.Parent, "Add a new step", "Please enter step name", "", wx.OK|wx.CANCEL) + dialog = StepNameDialog(self.ParentWindow, "Add a new step", "Please enter step name", "", wx.OK|wx.CANCEL) dialog.SetPouNames(self.Controler.GetProjectPouNames()) dialog.SetVariables(self.Controler.GetCurrentElementEditingInterfaceVars()) dialog.SetStepNames([block.GetName() for block in self.Blocks if isinstance(block, SFC_Step)]) @@ -447,7 +447,7 @@ if isinstance(self.SelectedElement, SFC_Step): connectors = self.SelectedElement.GetConnectors() if not connectors["action"]: - dialog = ActionBlockDialog(self.Parent) + dialog = ActionBlockDialog(self.ParentWindow) dialog.SetQualifierList(self.Controler.GetQualifierTypes()) dialog.SetActionList(self.Controler.GetCurrentElementEditingActions()) dialog.SetVariableList(self.Controler.GetCurrentElementEditingInterfaceVars()) @@ -474,7 +474,7 @@ def AddDivergence(self): if self.SelectedElement in self.Wires or isinstance(self.SelectedElement, Graphic_Group) or isinstance(self.SelectedElement, SFC_Step): - dialog = DivergenceCreateDialog(self.Parent) + dialog = DivergenceCreateDialog(self.ParentWindow) if dialog.ShowModal() == wx.ID_OK: value = dialog.GetValues() if value["type"] == SELECTION_DIVERGENCE: @@ -702,7 +702,7 @@ for block in self.Blocks: if isinstance(block, SFC_Step): choices.append(block.GetName()) - dialog = wx.SingleChoiceDialog(self.Parent, "Add a new jump", "Please choose a target", choices, wx.OK|wx.CANCEL) + dialog = wx.SingleChoiceDialog(self.ParentWindow, "Add a new jump", "Please choose a target", choices, wx.OK|wx.CANCEL) if dialog.ShowModal() == wx.ID_OK: value = dialog.GetStringSelection() self.SelectedElement.AddOutput() @@ -730,7 +730,7 @@ if self.GetDrawingMode() == FREEDRAWING_MODE: Viewer.EditStepContent(self, step) else: - dialog = StepNameDialog(self.Parent, "Edit step name", "Please enter step name", step.GetName(), wx.OK|wx.CANCEL) + dialog = StepNameDialog(self.ParentWindow, "Edit step name", "Please enter step name", step.GetName(), wx.OK|wx.CANCEL) dialog.SetPouNames(self.Controler.GetProjectPouNames()) dialog.SetVariables(self.Controler.GetCurrentElementEditingInterfaceVars()) dialog.SetStepNames([block.GetName() for block in self.Blocks if isinstance(block, SFC_Step) and block.GetName() != step.GetName()]) diff -r a6ff2b3fcc25 -r 2245e8776086 TextViewer.py --- a/TextViewer.py Mon Sep 10 16:12:29 2007 +0200 +++ b/TextViewer.py Mon Sep 10 18:16:07 2007 +0200 @@ -118,7 +118,10 @@ # Indicators styles self.IndicatorSetStyle(0, wx.stc.STC_INDIC_SQUIGGLE) - self.IndicatorSetForeground(0, wx.RED) + if window and controler: + self.IndicatorSetForeground(0, wx.RED) + else: + self.IndicatorSetForeground(0, wx.WHITE) # Line numbers in the margin self.SetMarginType(1, wx.stc.STC_MARGIN_NUMBER) @@ -137,13 +140,13 @@ self.TextSyntax = "ST" self.CurrentAction = None - self.Parent = window + self.ParentWindow = window self.Controler = controler self.SetModEventMask(wx.stc.STC_MOD_BEFOREINSERT|wx.stc.STC_MOD_BEFOREDELETE) self.Bind(wx.stc.EVT_STC_STYLENEEDED, self.OnStyleNeeded, id=ID_TEXTVIEWER) - if window and controler : + if window and controler: self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) self.Bind(wx.stc.EVT_STC_DO_DROP, self.OnDoDrop, id=ID_TEXTVIEWER) self.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus) @@ -207,13 +210,13 @@ # Buffer the last model state def RefreshBuffer(self): self.Controler.BufferProject() - self.Parent.RefreshTitle() - self.Parent.RefreshEditMenu() + self.ParentWindow.RefreshTitle() + self.ParentWindow.RefreshEditMenu() def StartBuffering(self): self.Controler.StartBuffering() - self.Parent.RefreshTitle() - self.Parent.RefreshEditMenu() + self.ParentWindow.RefreshTitle() + self.ParentWindow.RefreshEditMenu() def ResetBuffer(self): if self.CurrentAction != None: diff -r a6ff2b3fcc25 -r 2245e8776086 Viewer.py --- a/Viewer.py Mon Sep 10 16:12:29 2007 +0200 +++ b/Viewer.py Mon Sep 10 18:16:07 2007 +0200 @@ -49,38 +49,38 @@ def __init__(self, parent): wx.TextDropTarget.__init__(self) - self.Parent = parent + self.ParentWindow = parent def OnDropText(self, x, y, data): values = eval(data) if values[1] in ["function", "functionBlock", "program"]: - id = self.Parent.GetNewId() - block = FBD_Block(self.Parent, values[0], values[2], id) + id = self.ParentWindow.GetNewId() + block = FBD_Block(self.ParentWindow, values[0], values[2], id) block.SetPosition(x, y) width, height = block.GetMinSize() block.SetSize(width, height) - self.Parent.AddBlock(block) - self.Parent.Controler.AddCurrentElementEditingBlock(id) - self.Parent.RefreshBlockModel(block) - self.Parent.RefreshScrollBars() - self.Parent.Refresh() + self.ParentWindow.AddBlock(block) + self.ParentWindow.Controler.AddCurrentElementEditingBlock(id) + self.ParentWindow.RefreshBlockModel(block) + self.ParentWindow.RefreshScrollBars() + self.ParentWindow.Update() elif values[1] != "location": - id = self.Parent.GetNewId() + id = self.ParentWindow.GetNewId() if values[1] == "Output": var_type = OUTPUT elif values[1] == "InOut": var_type = INPUT else: var_type = INPUT - variable = FBD_Variable(self.Parent, var_type, values[0], values[2], id) + variable = FBD_Variable(self.ParentWindow, var_type, values[0], values[2], id) variable.SetPosition(x, y) width, height = variable.GetMinSize() variable.SetSize(width, height) - self.Parent.AddBlock(variable) - self.Parent.Controler.AddCurrentElementEditingVariable(id, var_type) - self.Parent.RefreshVariableModel(variable) - self.Parent.RefreshScrollBars() - self.Parent.Refresh() + self.ParentWindow.AddBlock(variable) + self.ParentWindow.Controler.AddCurrentElementEditingVariable(id, var_type) + self.ParentWindow.RefreshVariableModel(variable) + self.ParentWindow.RefreshScrollBars() + self.ParentWindow.Update() """ @@ -161,7 +161,7 @@ self.Mode = MODE_SELECTION self.SavedMode = False - self.Parent = window + self.ParentWindow = window self.Controler = controler self.SetDropTarget(ViewerDropTarget(self)) @@ -174,8 +174,9 @@ self.Bind(wx.EVT_RIGHT_UP, self.OnViewerRightUp) self.Bind(wx.EVT_MOTION, self.OnViewerMotion) self.Bind(wx.EVT_CHAR, self.OnChar) - self.Bind(wx.EVT_SCROLLWIN, self.OnMoveWindow) - self.Bind(wx.EVT_SIZE, self.OnMoveWindow) + if wx.VERSION < (2, 7, 0): + self.Bind(wx.EVT_SCROLLWIN, self.OnMoveWindow) + self.Bind(wx.EVT_SIZE, self.OnMoveWindow) # Returns a new id def GetNewId(self): @@ -186,8 +187,12 @@ def __del__(self): self.ResetView() - def GetLogicalDC(self): - dc = wx.ClientDC(self) + def GetLogicalDC(self, buffered=False): + if buffered: + dc = wx.BufferedPaintDC(self) + else: + dc = wx.ClientDC(self) + dc.SetFont(wx.NORMAL_FONT) self.DoPrepareDC(dc) return dc @@ -265,17 +270,17 @@ if self.Mode != MODE_SELECTION and self.SelectedElement: self.SelectedElement.SetSelected(False) self.SelectedElement = None - self.Refresh() + self.Refresh(False) # Return current drawing mode def GetDrawingMode(self): - return self.Parent.GetDrawingMode() + return self.ParentWindow.GetDrawingMode() # Buffer the last model state def RefreshBuffer(self): self.Controler.BufferProject() - self.Parent.RefreshTitle() - self.Parent.RefreshEditMenu() + self.ParentWindow.RefreshTitle() + self.ParentWindow.RefreshEditMenu() #------------------------------------------------------------------------------- # Refresh functions @@ -298,7 +303,7 @@ if instance: self.loadInstance(instance, ids) self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) def RefreshScrollBars(self): xstart, ystart = self.GetViewStart() @@ -518,10 +523,25 @@ connector.SetPosition(wx.Point(*instance["connector"]["position"])) self.CreateWires(connector, instance["connector"]["links"], ids) else: + connectors = {"inputs" : [], "outputs" : []} + for input in instance["connectors"]["inputs"]: + if input["negated"]: + connectors["inputs"].append((input["name"], None, "negated")) + elif input["edge"]: + connectors["inputs"].append((input["name"], None, input["edge"])) + else: + connectors["inputs"].append((input["name"], None, "none")) + for output in instance["connectors"]["outputs"]: + if output["negated"]: + connectors["outputs"].append((output["name"], None, "negated")) + elif output["edge"]: + connectors["outputs"].append((output["name"], None, output["edge"])) + else: + connectors["outputs"].append((output["name"], None, "none")) if instance["name"] != None: - block = FBD_Block(self, instance["type"], instance["name"], instance["id"], len(instance["connectors"]["inputs"])) - else: - block = FBD_Block(self, instance["type"], "", instance["id"], len(instance["connectors"]["inputs"])) + block = FBD_Block(self, instance["type"], instance["name"], instance["id"], len(instance["connectors"]["inputs"]), connectors=connectors) + else: + block = FBD_Block(self, instance["type"], "", instance["id"], len(instance["connectors"]["inputs"]), connectors=connectors) block.SetPosition(instance["x"], instance["y"]) block.SetSize(instance["width"], instance["height"]) self.AddBlock(block) @@ -685,17 +705,6 @@ self.ContextualMenu.FindItemByPosition(9).Enable(False) self.PopupMenu(self.ContextualMenu) - def EditCommentContent(self, comment): - dialog = wx.TextEntryDialog(self.Parent, "Edit comment", "Please enter comment text", comment.GetContent(), wx.OK|wx.CANCEL|wx.TE_MULTILINE) - if dialog.ShowModal() == wx.ID_OK: - value = dialog.GetValue() - comment.SetContent(value) - infos = {"content" : value} - infos["width"], infos["height"] = comment.GetSize() - self.Controler.SetCurrentElementEditingCommentInfos(comment.GetId(), infos) - self.Refresh() - dialog.Destroy() - #------------------------------------------------------------------------------- # Menu items functions #------------------------------------------------------------------------------- @@ -783,11 +792,11 @@ if self.SelectedElement and self.SelectedElement != element: self.SelectedElement.SetSelected(False) self.SelectedElement = None - self.Refresh() + self.Refresh(False) if element: self.SelectedElement = element self.SelectedElement.OnLeftDown(event, dc, self.Scaling) - self.Refresh() + self.Refresh(False) else: self.rubberBand.Reset() self.rubberBand.OnLeftDown(event, dc, self.Scaling) @@ -815,7 +824,7 @@ elif self.SelectedElement: self.SelectedElement.SetSelected(False) self.SelectedElement = None - self.Refresh() + self.Refresh(False) event.Skip() def OnViewerLeftUp(self, event): @@ -826,12 +835,12 @@ if len(elements) == 1: self.SelectedElement = elements[0] self.SelectedElement.SetSelected(True) - self.Refresh() + self.Refresh(False) elif len(elements) > 1: self.SelectedElement = Graphic_Group(self) self.SelectedElement.SetElements(elements) self.SelectedElement.SetSelected(True) - self.Refresh() + self.Refresh(False) else: bbox = self.rubberBand.GetCurrentExtent() self.rubberBand.OnLeftUp(event, self.GetLogicalDC(), self.Scaling) @@ -864,8 +873,7 @@ elif self.Mode == MODE_SELECTION and self.SelectedElement: self.SelectedElement.OnLeftUp(event, self.GetLogicalDC(), self.Scaling) wx.CallAfter(self.SetCursor, wx.NullCursor) - self.ReleaseMouse() - self.Refresh() + self.Refresh(False) elif self.Mode == MODE_WIRE and self.SelectedElement: if self.SelectedElement.EndConnected != None: self.SelectedElement.ResetPoints() @@ -877,9 +885,9 @@ else: self.SelectedElement.Delete() self.SelectedElement = None - self.Refresh() + self.Refresh(False) if not self.SavedMode: - wx.CallAfter(self.Parent.ResetCurrentMode) + wx.CallAfter(self.ParentWindow.ResetCurrentMode) event.Skip() def OnViewerRightUp(self, event): @@ -894,21 +902,21 @@ self.SelectedElement.OnRightUp(event, self.GetLogicalDC(), self.Scaling) wx.CallAfter(self.SetCursor, wx.NullCursor) self.ReleaseMouse() - self.Refresh() + self.Refresh(False) event.Skip() def OnViewerLeftDClick(self, event): if self.Mode == MODE_SELECTION and self.SelectedElement: self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling) - self.Refresh() + self.Refresh(False) event.Skip() def OnViewerMotion(self, event): if self.rubberBand.IsShown(): self.rubberBand.OnMotion(event, self.GetLogicalDC(), self.Scaling) elif self.Mode == MODE_SELECTION and self.SelectedElement: - self.SelectedElement.OnMotion(event, self.GetLogicalDC(), self.Scaling) - self.Refresh() + if self.SelectedElement.OnMotion(event, self.GetLogicalDC(), self.Scaling): + self.Refresh(False) elif self.Mode == MODE_WIRE and self.SelectedElement: dc = self.GetLogicalDC() pos = GetScaledEventPosition(event, dc, self.Scaling) @@ -917,7 +925,7 @@ self.SelectedElement.ResetPoints() self.SelectedElement.OnMotion(event, dc, self.Scaling) self.SelectedElement.GeneratePoints() - self.Refresh() + self.Refresh(False) event.Skip() def UpdateScrollPos(self, event): @@ -957,7 +965,7 @@ self.SelectedElement = None self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) elif keycode == wx.WXK_LEFT: if event.ControlDown() and event.ShiftDown(): self.Scroll(0, ypos) @@ -968,7 +976,7 @@ self.SelectedElement.RefreshModel() self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) elif keycode == wx.WXK_RIGHT: if event.ControlDown() and event.ShiftDown(): self.Scroll(xmax, ypos) @@ -979,7 +987,7 @@ self.SelectedElement.RefreshModel() self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) elif keycode == wx.WXK_UP: if event.ControlDown() and event.ShiftDown(): self.Scroll(xpos, 0) @@ -990,7 +998,7 @@ self.SelectedElement.RefreshModel() self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) elif keycode == wx.WXK_DOWN: if event.ControlDown() and event.ShiftDown(): self.Scroll(xpos, ymax) @@ -1001,14 +1009,14 @@ self.SelectedElement.RefreshModel() self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) #------------------------------------------------------------------------------- # Model adding functions #------------------------------------------------------------------------------- def AddNewBlock(self, bbox): - dialog = BlockPropertiesDialog(self.Parent) + dialog = BlockPropertiesDialog(self.ParentWindow) dialog.SetBlockList(self.Controler.GetBlockTypes()) dialog.SetPouNames(self.Controler.GetProjectPouNames()) dialog.SetPouElementNames(self.Controler.GetCurrentElementEditingVariables()) @@ -1027,12 +1035,12 @@ self.RefreshBlockModel(block) self.RefreshBuffer() self.RefreshScrollBars() - self.Parent.RefreshEditor() - self.Refresh() + self.ParentWindow.RefreshEditor() + self.Refresh(False) dialog.Destroy() def AddNewVariable(self, bbox): - dialog = VariablePropertiesDialog(self.Parent) + dialog = VariablePropertiesDialog(self.ParentWindow) dialog.SetMinVariableSize((bbox.width, bbox.height)) varlist = [] vars = self.Controler.GetCurrentElementEditingInterfaceVars() @@ -1055,11 +1063,11 @@ self.RefreshVariableModel(variable) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def AddNewConnection(self, bbox): - dialog = ConnectionPropertiesDialog(self.Parent) + dialog = ConnectionPropertiesDialog(self.ParentWindow) dialog.SetMinConnectionSize((bbox.width, bbox.height)) if dialog.ShowModal() == wx.ID_OK: id = self.GetNewId() @@ -1072,11 +1080,11 @@ self.RefreshConnectionModel(connection) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def AddNewComment(self, bbox): - dialog = wx.TextEntryDialog(self.Parent, "Add a new comment", "Please enter comment text", "", wx.OK|wx.CANCEL|wx.TE_MULTILINE) + dialog = wx.TextEntryDialog(self.ParentWindow, "Add a new comment", "Please enter comment text", "", wx.OK|wx.CANCEL|wx.TE_MULTILINE) if dialog.ShowModal() == wx.ID_OK: value = dialog.GetValue() id = self.GetNewId() @@ -1089,11 +1097,11 @@ self.RefreshCommentModel(comment) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def AddNewContact(self, bbox): - dialog = LDElementDialog(self.Parent, "contact") + dialog = LDElementDialog(self.ParentWindow, "contact") varlist = [] vars = self.Controler.GetCurrentElementEditingInterfaceVars() if vars: @@ -1114,11 +1122,11 @@ self.RefreshContactModel(contact) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def AddNewCoil(self, bbox): - dialog = LDElementDialog(self.Parent, "coil") + dialog = LDElementDialog(self.ParentWindow, "coil") varlist = [] vars = self.Controler.GetCurrentElementEditingInterfaceVars() if vars: @@ -1142,11 +1150,11 @@ self.RefreshCoilModel(coil) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def AddNewPowerRail(self, bbox): - dialog = LDPowerRailDialog(self.Parent) + dialog = LDPowerRailDialog(self.ParentWindow) dialog.SetMinSize((bbox.width, bbox.height)) if dialog.ShowModal() == wx.ID_OK: id = self.GetNewId() @@ -1159,11 +1167,11 @@ self.RefreshPowerRailModel(powerrail) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def AddNewStep(self, bbox, initial = False): - dialog = StepContentDialog(self.Parent, initial) + dialog = StepContentDialog(self.ParentWindow, initial) dialog.SetPouNames(self.Controler.GetProjectPouNames()) dialog.SetVariables(self.Controler.GetCurrentElementEditingInterfaceVars()) dialog.SetStepNames([block.GetName() for block in self.Blocks if isinstance(block, SFC_Step)]) @@ -1192,11 +1200,11 @@ self.RefreshStepModel(step) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def AddNewTransition(self, bbox): - dialog = TransitionContentDialog(self.Parent, self.GetDrawingMode() == FREEDRAWING_MODE) + dialog = TransitionContentDialog(self.ParentWindow, self.GetDrawingMode() == FREEDRAWING_MODE) dialog.SetTransitions(self.Controler.GetCurrentElementEditingTransitions()) if dialog.ShowModal() == wx.ID_OK: id = self.GetNewId() @@ -1210,11 +1218,11 @@ self.RefreshTransitionModel(transition) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def AddNewDivergence(self, bbox): - dialog = DivergenceCreateDialog(self.Parent) + dialog = DivergenceCreateDialog(self.ParentWindow) dialog.SetMinSize((bbox.width, bbox.height)) if dialog.ShowModal() == wx.ID_OK: id = self.GetNewId() @@ -1228,7 +1236,7 @@ self.RefreshDivergenceModel(divergence) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() @@ -1237,7 +1245,7 @@ #------------------------------------------------------------------------------- def EditBlockContent(self, block): - dialog = BlockPropertiesDialog(self.Parent) + dialog = BlockPropertiesDialog(self.ParentWindow) dialog.SetBlockList(self.Controler.GetBlockTypes()) dialog.SetPouNames(self.Controler.GetProjectPouNames()) dialog.SetPouElementNames(self.Controler.GetCurrentElementEditingVariables()) @@ -1254,11 +1262,11 @@ self.RefreshBlockModel(block) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def EditVariableContent(self, variable): - dialog = VariablePropertiesDialog(self.Parent) + dialog = VariablePropertiesDialog(self.ParentWindow) dialog.SetMinVariableSize(variable.GetSize()) varlist = [] vars = self.Controler.GetCurrentElementEditingInterfaceVars() @@ -1285,11 +1293,11 @@ self.RefreshVariableModel(variable) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def EditConnectionContent(self, connection): - dialog = ConnectionPropertiesDialog(self.Parent) + dialog = ConnectionPropertiesDialog(self.ParentWindow) dialog.SetMinConnectionSize(connection.GetSize()) values = {"name" : connection.GetName(), "type" : connection.GetType()} dialog.SetValues(values) @@ -1306,11 +1314,11 @@ self.RefreshConnectionModel(connection) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def EditContactContent(self, contact): - dialog = LDElementDialog(self.Parent, "contact") + dialog = LDElementDialog(self.ParentWindow, "contact") varlist = [] vars = self.Controler.GetCurrentElementEditingInterfaceVars() if vars: @@ -1329,11 +1337,11 @@ self.RefreshContactModel(contact) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def EditCoilContent(self, coil): - dialog = LDElementDialog(self.Parent, "coil") + dialog = LDElementDialog(self.ParentWindow, "coil") varlist = [] vars = self.Controler.GetCurrentElementEditingInterfaceVars() if vars: @@ -1355,11 +1363,11 @@ self.RefreshCoilModel(coil) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def EditPowerRailContent(self, powerrail): - dialog = LDPowerRailDialog(self.Parent, powerrail.GetType(), len(powerrail.GetConnectors())) + dialog = LDPowerRailDialog(self.ParentWindow, powerrail.GetType(), len(powerrail.GetConnectors())) dialog.SetMinSize(powerrail.GetSize()) if dialog.ShowModal() == wx.ID_OK: old_type = powerrail.GetType() @@ -1373,11 +1381,11 @@ self.RefreshPowerRailModel(powerrail) self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def EditStepContent(self, step): - dialog = StepContentDialog(self.Parent, step.GetInitial()) + dialog = StepContentDialog(self.ParentWindow, step.GetInitial()) dialog.SetPouNames(self.Controler.GetProjectPouNames()) dialog.SetVariables(self.Controler.GetCurrentElementEditingInterfaceVars()) dialog.SetStepNames([block.GetName() for block in self.Blocks if isinstance(block, SFC_Step) and block.GetName() != step.GetName()]) @@ -1407,10 +1415,10 @@ step.RefreshModel() self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) def EditTransitionContent(self, transition): - dialog = TransitionContentDialog(self.Parent, self.GetDrawingMode() == FREEDRAWING_MODE) + dialog = TransitionContentDialog(self.ParentWindow, self.GetDrawingMode() == FREEDRAWING_MODE) dialog.SetTransitions(self.Controler.GetCurrentElementEditingTransitions()) dialog.SetValues({"type":transition.GetType(),"value":transition.GetCondition(), "priority":transition.GetPriority()}) dialog.SetElementSize(transition.GetSize()) @@ -1421,7 +1429,7 @@ transition.RefreshModel() self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def EditJumpContent(self, jump): @@ -1429,7 +1437,7 @@ for block in self.Blocks: if isinstance(block, SFC_Step): choices.append(block.GetName()) - dialog = wx.SingleChoiceDialog(self.Parent, "Edit jump target", "Please choose a target", choices, wx.OK|wx.CANCEL) + dialog = wx.SingleChoiceDialog(self.ParentWindow, "Edit jump target", "Please choose a target", choices, wx.OK|wx.CANCEL) dialog.SetSelection(choices.index(jump.GetTarget())) if dialog.ShowModal() == wx.ID_OK: value = dialog.GetStringSelection() @@ -1437,11 +1445,11 @@ jump.RefreshModel() self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) dialog.Destroy() def EditActionBlockContent(self, actionblock): - dialog = ActionBlockDialog(self.Parent) + dialog = ActionBlockDialog(self.ParentWindow) dialog.SetQualifierList(self.Controler.GetQualifierTypes()) dialog.SetActionList(self.Controler.GetCurrentElementEditingActions()) dialog.SetVariableList(self.Controler.GetCurrentElementEditingInterfaceVars()) @@ -1452,7 +1460,18 @@ actionblock.RefreshModel() self.RefreshBuffer() self.RefreshScrollBars() - self.Refresh() + self.Refresh(False) + dialog.Destroy() + + def EditCommentContent(self, comment): + dialog = wx.TextEntryDialog(self.ParentWindow, "Edit comment", "Please enter comment text", comment.GetContent(), wx.OK|wx.CANCEL|wx.TE_MULTILINE) + if dialog.ShowModal() == wx.ID_OK: + value = dialog.GetValue() + comment.SetContent(value) + comment.RefreshModel() + self.RefreshBuffer() + self.RefreshScrollBars() + self.Refresh(False) dialog.Destroy() #------------------------------------------------------------------------------- @@ -1587,7 +1606,7 @@ self.Controler.RemoveCurrentElementEditingInstance(block.GetId()) for element in elements: element.RefreshModel() - wx.CallAfter(self.Parent.RefreshEditor) + wx.CallAfter(self.ParentWindow.RefreshEditor) def DeleteVariable(self, variable): connectors = variable.GetConnectors() @@ -1732,9 +1751,10 @@ event.Skip() def OnPaint(self, event): - dc = self.GetLogicalDC() + dc = self.GetLogicalDC(True) dc.Clear() dc.SetPen(wx.Pen(wx.Colour(230, 230, 230))) + dc.BeginDrawing() if self.Scaling and self.DrawGrid: width, height = dc.GetSize() for i in xrange(1, width / self.Scaling[0] + 1): @@ -1753,7 +1773,8 @@ if self.SelectedElement: self.SelectedElement.Draw(dc) if self.rubberBand.IsShown(): - self.rubberBand.Draw() + self.rubberBand.Draw(dc) + dc.EndDrawing() event.Skip() diff -r a6ff2b3fcc25 -r 2245e8776086 graphics/FBD_Objects.py --- a/graphics/FBD_Objects.py Mon Sep 10 16:12:29 2007 +0200 +++ b/graphics/FBD_Objects.py Mon Sep 10 18:16:07 2007 +0200 @@ -39,7 +39,7 @@ class FBD_Block(Graphic_Element): # Create a new block - def __init__(self, parent, type, name, id = None, extension = 0, inputs = None): + def __init__(self, parent, type, name, id = None, extension = 0, inputs = None, connectors = {}): Graphic_Element.__init__(self, parent) self.Type = None self.Extension = None @@ -48,7 +48,9 @@ self.Inputs = [] self.Outputs = [] self.RefreshNameSize() - self.SetType(type, extension, inputs) + self.Colour = wx.BLACK + self.Pen = wx.BLACK_PEN + self.SetType(type, extension, inputs, connectors) # Destructor def __del__(self): @@ -153,7 +155,7 @@ return None # Changes the block type - def SetType(self, type, extension, inputs = None): + def SetType(self, type, extension, inputs = None, connectors = {}): if type != self.Type or self.Extension != extension: if type != self.Type: self.Type = type @@ -164,6 +166,7 @@ # inputs and outputs blocktype = GetBlockType(type, inputs) if blocktype: + self.Colour = wx.BLACK inputs = [input for input in blocktype["inputs"]] outputs = [output for output in blocktype["outputs"]] if blocktype["extensible"]: @@ -172,7 +175,16 @@ start += 1 inputs.append(("IN%d"%start, inputs[-1][1], inputs[-1][2])) else: - raise ValueError, "This block type isn't defined" + self.Colour = wx.RED + if "inputs" in connectors: + inputs = connectors["inputs"] + else: + inputs = [] + if "outputs" in connectors: + outputs = connectors["outputs"] + else: + outputs = [] + self.Pen = wx.Pen(self.Colour) self.Clean() # Extract the inputs properties and create the corresponding connector self.Inputs = [] @@ -277,8 +289,9 @@ # Draws block def Draw(self, dc): - dc.SetPen(wx.BLACK_PEN) + dc.SetPen(self.Pen) dc.SetBrush(wx.WHITE_BRUSH) + dc.SetTextForeground(self.Colour) # Draw a rectangle with the block size dc.DrawRectangle(self.Pos.x, self.Pos.y, self.Size[0] + 1, self.Size[1] + 1) # Draw block name and block type @@ -292,6 +305,7 @@ for output in self.Outputs: output.Draw(dc) Graphic_Element.Draw(self, dc) + dc.SetTextForeground(wx.BLACK) #------------------------------------------------------------------------------- diff -r a6ff2b3fcc25 -r 2245e8776086 graphics/GraphicCommons.py --- a/graphics/GraphicCommons.py Mon Sep 10 16:12:29 2007 +0200 +++ b/graphics/GraphicCommons.py Mon Sep 10 18:16:07 2007 +0200 @@ -229,8 +229,9 @@ self.Redraw() # Method that erase the last box and draw the new box - def Redraw(self): - dc = self.drawingSurface.GetLogicalDC() + def Redraw(self, dc = None): + if not dc: + dc = self.drawingSurface.GetLogicalDC() dc.SetPen(wx.Pen(wx.WHITE, 1, wx.DOT)) dc.SetBrush(wx.TRANSPARENT_BRUSH) dc.SetLogicalFunction(wx.XOR) @@ -242,20 +243,22 @@ # Draw current box dc.DrawRectangle(self.currentBox.x, self.currentBox.y, self.currentBox.width, self.currentBox.height) - + # Erase last box - def Erase(self): - dc = self.drawingSurface.GetLogicalDC() + def Erase(self, dc = None): + if not dc: + dc = self.drawingSurface.GetLogicalDC() dc.SetPen(wx.Pen(wx.WHITE, 1, wx.DOT)) dc.SetBrush(wx.TRANSPARENT_BRUSH) dc.SetLogicalFunction(wx.XOR) if self.lastBox: dc.DrawRectangle(self.lastBox.x, self.lastBox.y, self.lastBox.width, self.lastBox.height) - + # Draw current box - def Draw(self): - dc = self.drawingSurface.GetLogicalDC() + def Draw(self, dc = None): + if not dc: + dc = self.drawingSurface.GetLogicalDC() dc.SetPen(wx.Pen(wx.WHITE, 1, wx.DOT)) dc.SetBrush(wx.TRANSPARENT_BRUSH) dc.SetLogicalFunction(wx.XOR) @@ -264,7 +267,6 @@ dc.DrawRectangle(self.currentBox.x, self.currentBox.y, self.currentBox.width, self.currentBox.height) - #------------------------------------------------------------------------------- # Graphic element base class #------------------------------------------------------------------------------- @@ -451,6 +453,7 @@ if self.Dragging: self.oldPos = pos self.ProcessDragging(movex, movey) + return True # If cursor just pass over the element, changes the cursor if it is on a handle else: pos = event.GetLogicalPosition(dc) @@ -461,6 +464,7 @@ if cursor != self.CurrentCursor: self.Parent.SetCursor(CURSORS[cursor]) self.CurrentCursor = cursor + return False # Moves the element def Move(self, dx, dy, exclude = []): @@ -1578,6 +1582,7 @@ if self.CurrentCursor != 5: self.CurrentCursor = 5 wx.CallAfter(self.Parent.SetCursor, CURSORS[5]) + return False else: # Test if a point has been handled #result = self.TestPoint(pos) @@ -1590,10 +1595,10 @@ # self.OverStart = False # self.OverEnd = False # Execute the default method for a graphic element - Graphic_Element.OnMotion(self, event, dc, scaling) + return Graphic_Element.OnMotion(self, event, dc, scaling) else: # Execute the default method for a graphic element - Graphic_Element.OnMotion(self, event, dc, scaling) + return Graphic_Element.OnMotion(self, event, dc, scaling) # Refreshes the wire state according to move defined and handle selected def ProcessDragging(self, movex, movey): diff -r a6ff2b3fcc25 -r 2245e8776086 xmlclass/xmlclass.py --- a/xmlclass/xmlclass.py Mon Sep 10 16:12:29 2007 +0200 +++ b/xmlclass/xmlclass.py Mon Sep 10 18:16:07 2007 +0200 @@ -42,6 +42,12 @@ date_model = re.compile('([0-9]{4})-([0-9]{2})-([0-9]{2})') datetime_model = re.compile('([0-9]{4})-([0-9]{2})-([0-9]{2})[ T]([0-9]{2}):([0-9]{2}):([0-9]{2}(?:.[0-9]*)?)') +XSD_INTEGER_TYPES = ["integer","nonPositiveInteger","negativeInteger","long", + "int","short","byte","nonNegativeInteger","unsignedLong","unsignedInt", + "unsignedShort","unsignedByte","positiveInteger"] + +XSD_STRING_TYPES = ["string","normalizedString","token","anyURI","NMTOKEN","language"] + """ This function calculates the number of whitespace for indentation """ @@ -88,14 +94,14 @@ return False else: raise ValueError, "\"%s\" is not a valid boolean!"%value - elif type_compute in ["unsignedLong","long","integer"]: + elif type_compute in XSD_INTEGER_TYPES: return int(value) - elif type_compute == "decimal": + elif type_compute in ["decimal", "float", "double"]: computed_value = float(value) if computed_value % 1 == 0: return int(computed_value) return computed_value - elif type_compute in ["string","anyURI","NMTOKEN","language"]: + elif type_compute in XSD_STRING_TYPES: return value elif type_compute == "time": result = time_model.match(value)