PLCControler.py
changeset 349 96cc6179b918
parent 310 ccb47adebe80
child 351 160ff73c0ac7
equal deleted inserted replaced
348:09fdd7616a86 349:96cc6179b918
   175         self.Reset()
   175         self.Reset()
   176     
   176     
   177     # Reset PLCControler internal variables
   177     # Reset PLCControler internal variables
   178     def Reset(self):
   178     def Reset(self):
   179         self.Project = None
   179         self.Project = None
       
   180         self.ProjectBufferEnabled = False
   180         self.ProjectBuffer = None
   181         self.ProjectBuffer = None
       
   182         self.ProjectSaved = False
   181         self.Buffering = False
   183         self.Buffering = False
   182         self.FilePath = ""
   184         self.FilePath = ""
   183         self.FileName = ""
   185         self.FileName = ""
   184         self.ProgramChunks = []
   186         self.ProgramChunks = []
   185         self.NextCompiledProject = None
   187         self.NextCompiledProject = None
   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     
   263         return self.ProgramFilePath
   265         return self.ProgramFilePath
   264     
   266     
   265     # Return file name and point out if file is up to date
   267     # Return file name and point out if file is up to date
   266     def GetFilename(self):
   268     def GetFilename(self):
   267         if self.Project is not None:
   269         if self.Project is not None:
   268             if self.ProjectBuffer.IsCurrentSaved():
   270             if self.ProjectIsSaved():
   269                 return self.FileName
   271                 return self.FileName
   270             else:
   272             else:
   271                 return "~%s~"%self.FileName
   273                 return "~%s~"%self.FileName
   272         return ""
   274         return ""
   273     
   275     
   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
  2673                 xmlfile = open(filepath,"w")
  2677                 xmlfile = open(filepath,"w")
  2674             else:
  2678             else:
  2675                 xmlfile = open(self.FilePath,"w")
  2679                 xmlfile = open(self.FilePath,"w")
  2676             xmlfile.write(text)
  2680             xmlfile.write(text)
  2677             xmlfile.close()
  2681             xmlfile.close()
  2678             self.ProjectBuffer.CurrentSaved()
  2682             self.ProjectSaved()
  2679             if filepath:
  2683             if filepath:
  2680                 self.SetFilePath(filepath)
  2684                 self.SetFilePath(filepath)
  2681             return True
  2685             return True
  2682 
  2686 
  2683 #-------------------------------------------------------------------------------
  2687 #-------------------------------------------------------------------------------
  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