eric7/E5XML/SessionWriter.py

branch
eric7
changeset 8351
7d13e08ddb3f
parent 8350
74a3b2a6a944
child 8352
879dc528461f
--- a/eric7/E5XML/SessionWriter.py	Fri May 21 20:14:48 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,281 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2004 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing the writer class for writing an XML session file.
-"""
-
-import time
-
-from E5Gui.E5Application import e5App
-
-from .XMLStreamWriterBase import XMLStreamWriterBase
-from .Config import sessionFileFormatVersion
-
-import Preferences
-
-
-class SessionWriter(XMLStreamWriterBase):
-    """
-    Class implementing the writer class for writing an XML session file.
-    """
-    def __init__(self, device, projectName):
-        """
-        Constructor
-        
-        @param device reference to the I/O device to write to
-        @type QIODevice
-        @param projectName name of the project or None for the
-            global session
-        @type str or None
-        """
-        XMLStreamWriterBase.__init__(self, device)
-        
-        self.name = projectName
-        self.project = e5App().getObject("Project")
-        self.projectBrowser = e5App().getObject("ProjectBrowser")
-        self.multiProject = e5App().getObject("MultiProject")
-        self.vm = e5App().getObject("ViewManager")
-        self.dbg = e5App().getObject("DebugUI")
-        self.dbs = e5App().getObject("DebugServer")
-        
-    def writeXML(self):
-        """
-        Public method to write the XML to the file.
-        """
-        isGlobal = self.name is None
-        
-        XMLStreamWriterBase.writeXML(self)
-        
-        self.writeDTD('<!DOCTYPE Session SYSTEM "Session-{0}.dtd">'.format(
-            sessionFileFormatVersion))
-        
-        # add some generation comments
-        if not isGlobal:
-            self.writeComment(
-                " eric session file for project {0} ".format(self.name))
-        self.writeComment(
-            " This file was generated automatically, do not edit. ")
-        if Preferences.getProject("TimestampFile") or isGlobal:
-            self.writeComment(
-                " Saved: {0} ".format(time.strftime('%Y-%m-%d, %H:%M:%S')))
-        
-        # add the main tag
-        self.writeStartElement("Session")
-        self.writeAttribute("version", sessionFileFormatVersion)
-        
-        # step 0: save open multi project and project for the global session
-        if isGlobal:
-            if self.multiProject.isOpen():
-                self.writeTextElement(
-                    "MultiProject", self.multiProject.getMultiProjectFile())
-            if self.project.isOpen():
-                self.writeTextElement("Project", self.project.getProjectFile())
-        
-        # step 1: save all open (project) filenames and the active window
-        if self.vm.canSplit():
-            self.writeEmptyElement("ViewManagerSplits")
-            self.writeAttribute("count", str(self.vm.splitCount()))
-            self.writeAttribute("orientation",
-                                str(self.vm.getSplitOrientation()))
-        
-        allOpenEditorLists = self.vm.getOpenEditorsForSession()
-        editorDict = {}     # remember editors by file name to detect clones
-        self.writeStartElement("Filenames")
-        for splitIndex, openEditorList in enumerate(allOpenEditorLists):
-            for editorIndex, editor in enumerate(openEditorList):
-                fileName = editor.getFileName()
-                if isGlobal or self.project.isProjectFile(fileName):
-                    line, index = editor.getCursorPosition()
-                    folds = ','.join(
-                        [str(i + 1) for i in editor.contractedFolds()])
-                    zoom = editor.getZoom()
-                    if fileName in editorDict:
-                        isClone = int(editorDict[fileName].isClone(editor))
-                    else:
-                        isClone = 0
-                        editorDict[fileName] = editor
-                    self.writeStartElement("Filename")
-                    self.writeAttribute("cline", str(line))
-                    self.writeAttribute("cindex", str(index))
-                    self.writeAttribute("folds", folds)
-                    self.writeAttribute("zoom", str(zoom))
-                    self.writeAttribute("cloned", str(isClone))
-                    self.writeAttribute("splitindex", str(splitIndex))
-                    self.writeAttribute("editorindex", str(editorIndex))
-                    self.writeCharacters(fileName)
-                    self.writeEndElement()
-        self.writeEndElement()
-        
-        aw = self.vm.getActiveName()
-        if aw and (isGlobal or self.project.isProjectFile(aw)):
-            ed = self.vm.getOpenEditor(aw)
-            line, index = ed.getCursorPosition()
-            self.writeStartElement("ActiveWindow")
-            self.writeAttribute("cline", str(line))
-            self.writeAttribute("cindex", str(index))
-            self.writeCharacters(aw)
-            self.writeEndElement()
-        
-        # step 2a: save all breakpoints
-        allBreaks = Preferences.getProject("SessionAllBreakpoints")
-        projectFiles = self.project.getSources(True)
-        bpModel = self.dbs.getBreakPointModel()
-        self.writeStartElement("Breakpoints")
-        for row in range(bpModel.rowCount()):
-            index = bpModel.index(row, 0)
-            fname, lineno, cond, temp, enabled, count = (
-                bpModel.getBreakPointByIndex(index)[:6]
-            )
-            if isGlobal or allBreaks or fname in projectFiles:
-                self.writeStartElement("Breakpoint")
-                self.writeTextElement("BpFilename", fname)
-                self.writeEmptyElement("Linenumber")
-                self.writeAttribute("value", str(lineno))
-                self.writeTextElement("Condition", str(cond))
-                self.writeEmptyElement("Temporary")
-                self.writeAttribute("value", str(temp))
-                self.writeEmptyElement("Enabled")
-                self.writeAttribute("value", str(enabled))
-                self.writeEmptyElement("Count")
-                self.writeAttribute("value", str(count))
-                self.writeEndElement()
-        self.writeEndElement()
-        
-        # step 2b: save all watch expressions
-        self.writeStartElement("Watchexpressions")
-        wpModel = self.dbs.getWatchPointModel()
-        for row in range(wpModel.rowCount()):
-            index = wpModel.index(row, 0)
-            cond, special, temp, enabled, count = (
-                wpModel.getWatchPointByIndex(index)[:5]
-            )
-            self.writeStartElement("Watchexpression")
-            self.writeTextElement("Condition", str(cond))
-            self.writeEmptyElement("Temporary")
-            self.writeAttribute("value", str(temp))
-            self.writeEmptyElement("Enabled")
-            self.writeAttribute("value", str(enabled))
-            self.writeEmptyElement("Count")
-            self.writeAttribute("value", str(count))
-            self.writeTextElement("Special", special)
-            self.writeEndElement()
-        self.writeEndElement()
-        
-        # step 3: save the debug info
-        self.writeStartElement("DebugInfo")
-        if isGlobal:
-            if len(self.dbg.argvHistory):
-                dbgCmdline = str(self.dbg.argvHistory[0])
-            else:
-                dbgCmdline = ""
-            if len(self.dbg.wdHistory):
-                dbgWd = self.dbg.wdHistory[0]
-            else:
-                dbgWd = ""
-            if len(self.dbg.envHistory):
-                dbgEnv = self.dbg.envHistory[0]
-            else:
-                dbgEnv = ""
-            if len(self.dbg.multiprocessNoDebugHistory):
-                dbgMultiprocessNoDebug = self.dbg.multiprocessNoDebugHistory[0]
-            else:
-                dbgMultiprocessNoDebug = ""
-            
-            self.writeTextElement("VirtualEnv", self.dbg.lastUsedVenvName)
-            self.writeTextElement("CommandLine", dbgCmdline)
-            self.writeTextElement("WorkingDirectory", dbgWd)
-            self.writeTextElement("Environment", dbgEnv)
-            self.writeEmptyElement("ReportExceptions")
-            self.writeAttribute("value", str(self.dbg.exceptions))
-            self.writeStartElement("Exceptions")
-            for exc in self.dbg.excList:
-                self.writeTextElement("Exception", exc)
-            self.writeEndElement()
-            self.writeStartElement("IgnoredExceptions")
-            for iexc in self.dbg.excIgnoreList:
-                self.writeTextElement("IgnoredException", iexc)
-            self.writeEndElement()
-            self.writeEmptyElement("AutoClearShell")
-            self.writeAttribute("value", str(self.dbg.autoClearShell))
-            self.writeEmptyElement("TracePython")
-            self.writeAttribute("value", str(self.dbg.tracePython))
-            self.writeEmptyElement("AutoContinue")
-            self.writeAttribute("value", str(self.dbg.autoContinue))
-            self.writeEmptyElement("EnableMultiprocess")
-            self.writeAttribute("value", str(self.dbg.enableMultiprocess))
-            self.writeTextElement("MultiprocessNoDebug",
-                                  dbgMultiprocessNoDebug)
-            self.writeEmptyElement("CovexcPattern")    # kept for compatibility
-            self.writeEmptyElement("GlobalConfigOverride")
-            self.writeAttribute(
-                "enable", str(self.dbg.overrideGlobalConfig["enable"]))
-            self.writeAttribute(
-                "redirect", str(self.dbg.overrideGlobalConfig["redirect"]))
-        else:
-            self.writeTextElement("VirtualEnv", self.project.dbgVirtualEnv)
-            self.writeTextElement("CommandLine", self.project.dbgCmdline)
-            self.writeTextElement("WorkingDirectory", self.project.dbgWd)
-            self.writeTextElement("Environment", self.project.dbgEnv)
-            self.writeEmptyElement("ReportExceptions")
-            self.writeAttribute("value", str(self.project.dbgReportExceptions))
-            self.writeStartElement("Exceptions")
-            for exc in self.project.dbgExcList:
-                self.writeTextElement("Exception", exc)
-            self.writeEndElement()
-            self.writeStartElement("IgnoredExceptions")
-            for iexc in self.project.dbgExcIgnoreList:
-                self.writeTextElement("IgnoredException", iexc)
-            self.writeEndElement()
-            self.writeEmptyElement("AutoClearShell")
-            self.writeAttribute("value", str(self.project.dbgAutoClearShell))
-            self.writeEmptyElement("TracePython")
-            self.writeAttribute("value", str(self.project.dbgTracePython))
-            self.writeEmptyElement("AutoContinue")
-            self.writeAttribute("value", str(self.project.dbgAutoContinue))
-            self.writeEmptyElement("EnableMultiprocess")
-            self.writeAttribute("value",
-                                str(self.project.dbgEnableMultiprocess))
-            self.writeTextElement("MultiprocessNoDebug",
-                                  self.project.dbgMultiprocessNoDebug)
-            self.writeEmptyElement("CovexcPattern")    # kept for compatibility
-            self.writeEmptyElement("GlobalConfigOverride")
-            self.writeAttribute(
-                "enable", str(self.project.dbgGlobalConfigOverride["enable"]))
-            self.writeAttribute(
-                "redirect",
-                str(self.project.dbgGlobalConfigOverride["redirect"]))
-        self.writeEndElement()
-        
-        # step 4: save bookmarks of all open (project) files
-        self.writeStartElement("Bookmarks")
-        for fileName in editorDict:
-            if isGlobal or self.project.isProjectFile(fileName):
-                editor = editorDict[fileName]
-                for bookmark in editor.getBookmarks():
-                    self.writeStartElement("Bookmark")
-                    self.writeTextElement("BmFilename", fileName)
-                    self.writeEmptyElement("Linenumber")
-                    self.writeAttribute("value", str(bookmark))
-                    self.writeEndElement()
-        self.writeEndElement()
-        
-        # step 5: save state of the various project browsers
-        if not isGlobal:
-            self.writeStartElement("ProjectBrowserStates")
-            for browserName in self.projectBrowser.getProjectBrowserNames():
-                self.writeStartElement("ProjectBrowserState")
-                self.writeAttribute("name", browserName)
-                # get the names of expanded files and directories
-                names = self.projectBrowser.getProjectBrowser(
-                    browserName).getExpandedItemNames()
-                for name in names:
-                    self.writeTextElement("ExpandedItemName", name)
-                self.writeEndElement()
-            self.writeEndElement()
-        
-        # add the main end tag
-        self.writeEndElement()
-        self.writeEndDocument()

eric ide

mercurial