211 properties["creationDateTime"] = datetime(*localtime()[:6]) |
213 properties["creationDateTime"] = datetime(*localtime()[:6]) |
212 self.Project.setfileHeader(properties) |
214 self.Project.setfileHeader(properties) |
213 self.Project.setcontentHeader(properties) |
215 self.Project.setcontentHeader(properties) |
214 self.SetFilePath("") |
216 self.SetFilePath("") |
215 # Initialize the project buffer |
217 # Initialize the project buffer |
216 self.ProjectBuffer = UndoBuffer(self.Copy(self.Project), False) |
218 self.CreateProjectBuffer(False) |
217 self.ProgramChunks = [] |
219 self.ProgramChunks = [] |
218 self.NextCompiledProject = self.Copy(self.Project) |
220 self.NextCompiledProject = self.Copy(self.Project) |
219 self.CurrentCompiledProject = None |
221 self.CurrentCompiledProject = None |
220 self.Buffering = False |
222 self.Buffering = False |
221 |
223 |
651 # Found the pou corresponding to old name and change its name to new name |
653 # Found the pou corresponding to old name and change its name to new name |
652 datatype = self.Project.getdataType(old_name) |
654 datatype = self.Project.getdataType(old_name) |
653 if datatype is not None: |
655 if datatype is not None: |
654 datatype.setname(new_name) |
656 datatype.setname(new_name) |
655 self.Project.updateElementName(old_name, new_name) |
657 self.Project.updateElementName(old_name, new_name) |
|
658 self.Project.RefreshElementUsingTree() |
|
659 self.Project.RefreshDataTypeHierarchy() |
656 self.BufferProject() |
660 self.BufferProject() |
657 |
661 |
658 # Change the name of a pou |
662 # Change the name of a pou |
659 def ChangePouName(self, old_name, new_name): |
663 def ChangePouName(self, old_name, new_name): |
660 if self.Project is not None: |
664 if self.Project is not None: |
2643 self.Project.loadXMLTree(child, ["xmlns", "xmlns:xhtml", "xmlns:xsi", "xsi:schemaLocation"]) |
2647 self.Project.loadXMLTree(child, ["xmlns", "xmlns:xhtml", "xmlns:xsi", "xsi:schemaLocation"]) |
2644 self.SetFilePath(filepath) |
2648 self.SetFilePath(filepath) |
2645 self.Project.RefreshElementUsingTree() |
2649 self.Project.RefreshElementUsingTree() |
2646 self.Project.RefreshDataTypeHierarchy() |
2650 self.Project.RefreshDataTypeHierarchy() |
2647 self.Project.RefreshCustomBlockTypes() |
2651 self.Project.RefreshCustomBlockTypes() |
2648 self.ProjectBuffer = UndoBuffer(self.Copy(self.Project), True) |
2652 self.CreateProjectBuffer(True) |
2649 self.ProgramChunks = [] |
2653 self.ProgramChunks = [] |
2650 self.NextCompiledProject = self.Copy(self.Project) |
2654 self.NextCompiledProject = self.Copy(self.Project) |
2651 self.CurrentCompiledProject = None |
2655 self.CurrentCompiledProject = None |
2652 self.Buffering = False |
2656 self.Buffering = False |
2653 self.CurrentElementEditing = None |
2657 self.CurrentElementEditing = None |
2688 Return a copy of the project |
2692 Return a copy of the project |
2689 """ |
2693 """ |
2690 def Copy(self, model): |
2694 def Copy(self, model): |
2691 return cPickle.loads(cPickle.dumps(model)) |
2695 return cPickle.loads(cPickle.dumps(model)) |
2692 |
2696 |
|
2697 def CreateProjectBuffer(self, saved): |
|
2698 if self.ProjectBufferEnabled: |
|
2699 self.ProjectBuffer = UndoBuffer(self.Copy(self.Project), saved) |
|
2700 else: |
|
2701 self.ProjectBuffer = None |
|
2702 self.ProjectSaved = saved |
|
2703 |
|
2704 def IsProjectBufferEnabled(self): |
|
2705 return self.ProjectBufferEnabled |
|
2706 |
|
2707 def EnableProjectBuffer(self, enable): |
|
2708 self.ProjectBufferEnabled = enable |
|
2709 if self.Project is not None: |
|
2710 if enable: |
|
2711 current_saved = self.ProjectSaved |
|
2712 else: |
|
2713 current_saved = self.ProjectBuffer.IsCurrentSaved() |
|
2714 self.CreateProjectBuffer(current_saved) |
|
2715 |
2693 def BufferProject(self): |
2716 def BufferProject(self): |
2694 self.ProjectBuffer.Buffering(self.Copy(self.Project)) |
2717 if self.ProjectBuffer is not None: |
|
2718 self.ProjectBuffer.Buffering(self.Copy(self.Project)) |
|
2719 else: |
|
2720 self.ProjectSaved = False |
2695 |
2721 |
2696 def StartBuffering(self): |
2722 def StartBuffering(self): |
2697 self.ProjectBuffer.Buffering(self.Project) |
2723 if self.ProjectBuffer is not None: |
2698 self.Buffering = True |
2724 self.ProjectBuffer.Buffering(self.Project) |
|
2725 self.Buffering = True |
|
2726 else: |
|
2727 self.ProjectSaved = False |
2699 |
2728 |
2700 def EndBuffering(self): |
2729 def EndBuffering(self): |
2701 if self.Buffering: |
2730 if self.ProjectBuffer is not None and self.Buffering: |
2702 self.Project = self.Copy(self.Project) |
2731 self.Project = self.Copy(self.Project) |
2703 self.Buffering = False |
2732 self.Buffering = False |
2704 |
2733 |
|
2734 def ProjectSaved(self): |
|
2735 if self.ProjectBuffer is not None: |
|
2736 self.ProjectBuffer.CurrentSaved() |
|
2737 else: |
|
2738 self.ProjectSaved = True |
|
2739 |
2705 # Return if project is saved |
2740 # Return if project is saved |
2706 def ProjectIsSaved(self): |
2741 def ProjectIsSaved(self): |
2707 if self.ProjectBuffer is not None: |
2742 if self.ProjectBuffer is not None: |
2708 return self.ProjectBuffer.IsCurrentSaved() |
2743 return self.ProjectBuffer.IsCurrentSaved() |
2709 else: |
2744 else: |
2710 return True |
2745 return self.ProjectSaved |
2711 |
2746 |
2712 def LoadPrevious(self): |
2747 def LoadPrevious(self): |
2713 self.Project = self.Copy(self.ProjectBuffer.Previous()) |
2748 if self.ProjectBuffer is not None: |
|
2749 self.Project = self.Copy(self.ProjectBuffer.Previous()) |
2714 |
2750 |
2715 def LoadNext(self): |
2751 def LoadNext(self): |
2716 self.Project = self.Copy(self.ProjectBuffer.Next()) |
2752 if self.ProjectBuffer is not None: |
|
2753 self.Project = self.Copy(self.ProjectBuffer.Next()) |
2717 |
2754 |
2718 def GetBufferState(self): |
2755 def GetBufferState(self): |
2719 first = self.ProjectBuffer.IsFirst() |
2756 if self.ProjectBuffer is not None: |
2720 last = self.ProjectBuffer.IsLast() |
2757 first = self.ProjectBuffer.IsFirst() |
2721 return not first, not last |
2758 last = self.ProjectBuffer.IsLast() |
|
2759 return not first, not last |
|
2760 return False, False |