diff -r c1792dfc8c7e -r 340c0b9caeca plugins/python/python.py --- a/plugins/python/python.py Tue Dec 20 23:37:06 2011 +0100 +++ b/plugins/python/python.py Wed Dec 21 19:42:49 2011 +0100 @@ -3,7 +3,7 @@ import modules from plugger import PlugTemplate, opjimg from PLCControler import UndoBuffer -from PythonEditor import PythonEditorFrame +from PythonEditor import PythonEditor from xml.dom import minidom from xmlclass import * @@ -13,6 +13,8 @@ class PythonCodeTemplate: + EditorType = PythonEditor + def __init__(self): self.PluginMethods.insert(0, @@ -24,9 +26,7 @@ filepath = self.PythonFileName() - self.Buffering = False self.PythonCode = PythonClasses["Python"]() - self.PythonBuffer = UndoBuffer(self.Copy(self.PythonCode), False) if os.path.isfile(filepath): xmlfile = open(filepath, 'r') tree = minidom.parse(xmlfile) @@ -35,8 +35,9 @@ for child in tree.childNodes: if child.nodeType == tree.ELEMENT_NODE and child.nodeName == "Python": self.PythonCode.loadXMLTree(child, ["xmlns", "xmlns:xsi", "xsi:schemaLocation"]) - self.PythonBuffer = UndoBuffer(self.Copy(self.PythonCode), True) + self.CreatePythonBuffer(True) else: + self.CreatePythonBuffer(False) self.OnPlugSave() def PluginPath(self): @@ -57,31 +58,8 @@ def GetPythonCode(self): return self.PythonCode.gettext() - _View = None - def _OpenView(self): - if not self._View: - open_pyeditor = True - has_permissions = self.GetPlugRoot().CheckProjectPathPerm() - if not has_permissions: - dialog = wx.MessageDialog(self.GetPlugRoot().AppFrame, - _("You don't have write permissions.\nOpen PythonEditor anyway ?"), - _("Open PythonEditor"), - wx.YES_NO|wx.ICON_QUESTION) - open_pyeditor = dialog.ShowModal() == wx.ID_YES - dialog.Destroy() - if open_pyeditor: - def _onclose(): - self._View = None - if has_permissions: - def _onsave(): - self.GetPlugRoot().SaveProject() - else: - def _onsave(): - pass - self._View = PythonEditorFrame(self.GetPlugRoot().AppFrame, self) - self._View._onclose = _onclose - self._View._onsave = _onsave - self._View.Show() + def PlugTestModified(self): + return self.ChangesToSave or not self.PythonIsSaved() def OnPlugSave(self): filepath = self.PythonFileName() @@ -96,7 +74,7 @@ xmlfile.write(text.encode("utf-8")) xmlfile.close() - self.PythonBuffer.CurrentSaved() + self.MarkPythonAsSaved() return True #------------------------------------------------------------------------------- @@ -109,32 +87,37 @@ def Copy(self, model): return cPickle.loads(cPickle.dumps(model)) + def CreatePythonBuffer(self, saved): + self.Buffering = False + self.PythonBuffer = UndoBuffer(cPickle.dumps(self.PythonCode), saved) + def BufferPython(self): - self.PythonBuffer.Buffering(self.Copy(self.PythonCode)) + self.PythonBuffer.Buffering(cPickle.dumps(self.PythonCode)) def StartBuffering(self): - self.PythonBuffer.Buffering(self.PythonCode) self.Buffering = True def EndBuffering(self): if self.Buffering: - self.PythonCode = self.Copy(self.PythonCode) + self.PythonBuffer.Buffering(cPickle.dumps(self.PythonCode)) self.Buffering = False - def PythonCodeIsSaved(self): - if self.PythonBuffer: - return self.PythonBuffer.IsCurrentSaved() - else: - return True - + def MarkPythonAsSaved(self): + self.EndBuffering() + self.PythonBuffer.CurrentSaved() + + def PythonIsSaved(self): + return self.PythonBuffer.IsCurrentSaved() and not self.Buffering + def LoadPrevious(self): - self.PythonCode = self.Copy(self.PythonBuffer.Previous()) + self.EndBuffering() + self.PythonCode = cPickle.loads(self.PythonBuffer.Previous()) def LoadNext(self): - self.PythonCode = self.Copy(self.PythonBuffer.Next()) + self.PythonCode = cPickle.loads(self.PythonBuffer.Next()) def GetBufferState(self): - first = self.PythonBuffer.IsFirst() + first = self.PythonBuffer.IsFirst() and not self.Buffering last = self.PythonBuffer.IsLast() return not first, not last