eric6/Sessions/SessionFile.py

Wed, 27 Jan 2021 18:29:25 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 27 Jan 2021 18:29:25 +0100
branch
jsonfiles
changeset 8012
ecf45f723038
parent 8009
29818ac4853c
child 8016
e484fc67677e
permissions
-rw-r--r--

Several corrections to the JSON file handlers.

8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de>
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a class representing the project debugger properties
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 JSON file.
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9 """
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import json
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import time
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from PyQt5.QtCore import QObject
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 from E5Gui import E5MessageBox
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from E5Gui.E5OverrideCursor import E5OverridenCursor
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 from E5Gui.E5Application import e5App
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 import Preferences
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 class SessionFile(QObject):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 Class representing the project debugger properties JSON file.
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 """
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 def __init__(self, isGlobal: bool, parent: QObject = None):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 """
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 Constructor
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30
8012
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
31 @param isGlobal flag indicating a file for a global session
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
32 @type bool
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 @param parent reference to the parent object
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 @type QObject (optional)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 """
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 super(SessionFile, self).__init__(parent)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 self.__isGlobal = isGlobal
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 def writeFile(self, filename: str) -> bool:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 """
8012
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
42 Public method to write the session data to a session JSON file.
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43
8012
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
44 @param filename name of the session file
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 @type str
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 @return flag indicating a successful write
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 @rtype bool
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 """
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 # get references to objects we need
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 project = e5App().getObject("Project")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 projectBrowser = e5App().getObject("ProjectBrowser")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 multiProject = e5App().getObject("MultiProject")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 vm = e5App().getObject("ViewManager")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 dbg = e5App().getObject("DebugUI")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 dbs = e5App().getObject("DebugServer")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 # prepare the session data dictionary
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 # step 0: header
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 sessionDict = {}
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 sessionDict["header"] = {}
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 if not self.__isGlobal:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 sessionDict["header"]["comment"] = (
8012
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
63 "eric session file for project {0}"
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
64 .format(project.getProjectName())
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
65 )
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 sessionDict["header"]["warning"] = (
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 "This file was generated automatically, do not edit."
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 # TODO: replace 'XMLTimestamp' by 'Timestamp'
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 if Preferences.getProject("XMLTimestamp") or self.__isGlobal:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 sessionDict["header"]["saved"] = (
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 time.strftime('%Y-%m-%d, %H:%M:%S')
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 # step 1: open multi project and project for global session
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 sessionDict["MultiProject"] = ""
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 sessionDict["Project"] = ""
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 if self.__isGlobal:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 if multiProject.isOpen():
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 sessionDict["MultiProject"] = (
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 multiProject.getMultiProjectFile()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 if project.isOpen():
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 sessionDict["Project"] = project.getProjectFile()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 # step 2: all open (project) filenames and the active editor
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 if vm.canSplit():
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 sessionDict["ViewManagerSplits"] = {
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 "Count": vm.splitCount(),
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 "Orientation": vm.getSplitOrientation(),
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 }
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 else:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 sessionDict["ViewManagerSplits"] = {
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 "Count": 0,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 "Orientation": 1,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 }
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 editorsDict = {} # remember editors by file name to detect clones
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 sessionDict["Editors"] = []
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 allOpenEditorLists = vm.getOpenEditorsForSession()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 for splitIndex, openEditorList in enumerate(allOpenEditorLists):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 for editorIndex, editor in enumerate(openEditorList):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 fileName = editor.getFileName()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 if self.__isGlobal or project.isProjectFile(fileName):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 if fileName in editorsDict:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 isClone = editorsDict[fileName].isClone(editor)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 else:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 isClone = False
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 editorsDict[fileName] = editor
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 editorDict = {
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 "Filename": fileName,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 "Cursor": editor.getCursorPosition(),
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 "Folds": editor.contractedFolds(),
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 "Zoom": editor.getZoom(),
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 "Clone": isClone,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 "Splitindex": splitIndex,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 "Editorindex": editorIndex,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 }
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 sessionDict["Editors"].append(editorDict)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 aw = vm.getActiveName()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 sessionDict["ActiveWindow"] = {}
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 if aw and (self.__isGlobal or project.isProjectFile(aw)):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 ed = vm.getOpenEditor(aw)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 sessionDict["ActiveWindow"] = {
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 "Filename": aw,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 "Cursor": ed.getCursorPosition(),
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 }
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 # step 3: breakpoints
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 allBreaks = Preferences.getProject("SessionAllBreakpoints")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 projectFiles = project.getSources(True)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 bpModel = dbs.getBreakPointModel()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 if self.__isGlobal or allBreaks:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 sessionDict["Breakpoints"] = bpModel.getAllBreakpoints()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 else:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 sessionDict["Breakpoints"] = [
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 bp
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 for bp in bpModel.getAllBreakpoints()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 if bp[0] in projectFiles
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 ]
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 # step 4: watch expressions
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 wpModel = dbs.getWatchPointModel()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 sessionDict["Watchpoints"] = wpModel.getAllWatchpoints()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 # step 5: debug info
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 if self.__isGlobal:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 if len(dbg.argvHistory):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 dbgCmdline = dbg.argvHistory[0]
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 else:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 dbgCmdline = ""
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 if len(dbg.wdHistory):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 dbgWd = dbg.wdHistory[0]
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 else:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 dbgWd = ""
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 if len(dbg.envHistory):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 dbgEnv = dbg.envHistory[0]
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 else:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 dbgEnv = ""
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 if len(dbg.multiprocessNoDebugHistory):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 dbgMultiprocessNoDebug = (
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 dbg.multiprocessNoDebugHistory[0]
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 else:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 dbgMultiprocessNoDebug = ""
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 sessionDict["DebugInfo"] = {
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 "VirtualEnv": dbg.lastUsedVenvName,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 "CommandLine": dbgCmdline,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 "WorkingDirectory": dbgWd,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 "Environment": dbgEnv,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 "ReportExceptions": dbg.exceptions,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 "Exceptions": dbg.excList,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 "IgnoredExceptions": dbg.excIgnoreList,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 "AutoClearShell": dbg.autoClearShell,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 "TracePython": dbg.tracePython,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 "AutoContinue": dbg.autoContinue,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 "EnableMultiprocess": dbg.enableMultiprocess,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 "MultiprocessNoDebug": dbgMultiprocessNoDebug
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 }
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 else:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 sessionDict["DebugInfo"] = {
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 "VirtualEnv": project.dbgVirtualEnv,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 "CommandLine": project.dbgCmdline,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 "WorkingDirectory": project.dbgWd,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 "Environment": project.dbgEnv,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 "ReportExceptions": project.dbgReportExceptions,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 "Exceptions": project.dbgExcList,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 "IgnoredExceptions": project.dbgExcIgnoreList,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 "AutoClearShell": project.dbgAutoClearShell,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 "TracePython": project.dbgTracePython,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 "AutoContinue": project.dbgAutoContinue,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 "EnableMultiprocess": project.dbgEnableMultiprocess,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 "MultiprocessNoDebug": project.dbgMultiprocessNoDebug,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 }
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 # step 6: bookmarks
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 bookmarksList = []
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 for fileName in editorsDict:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 if self.__isGlobal or project.isProjectFile(fileName):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 editor = editorsDict[fileName]
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 bookmarks = editor.getBookmarks()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 if bookmarks:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 bookmarksList.append({
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 "Filename": fileName,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 "Lines": bookmarks,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 })
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 sessionDict["Bookmarks"] = bookmarksList
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 # step 7: state of the various project browsers
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 browsersList = []
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 for browserName in projectBrowser.getProjectBrowserNames():
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 expandedItems = (
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 projectBrowser.getProjectBrowser(browserName)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 .getExpandedItemNames()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 if expandedItems:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 browsersList.append({
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 "Name": browserName,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 "ExpandedItems": expandedItems,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 })
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 sessionDict["ProjectBrowserStates"] = browsersList
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 try:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 jsonString = json.dumps(sessionDict, indent=2)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 with open(filename, "w") as f:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 f.write(jsonString)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 except (TypeError, EnvironmentError) as err:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 with E5OverridenCursor():
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 E5MessageBox.critical(
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 None,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 self.tr("Save Session"),
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 self.tr(
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 "<p>The session file <b>{0}</b> could not be"
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 " written.</p><p>Reason: {1}</p>"
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 ).format(filename, str(err))
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 return False
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 return True
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 def readFile(self, filename: str) -> bool:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 """
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 Public method to read the session data from a session JSON file.
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 @param filename name of the project file
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 @type str
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 @return flag indicating a successful read
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 @rtype bool
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 """
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 try:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 with open(filename, "r") as f:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 jsonString = f.read()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 sessionDict = json.loads(jsonString)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 except (EnvironmentError, json.JSONDecodeError) as err:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 E5MessageBox.critical(
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 None,
8012
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
259 self.tr("Read Session"),
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 self.tr(
8012
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
261 "<p>The session file <b>{0}</b> could not be read.</p>"
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
262 "<p>Reason: {1}</p>"
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 ).format(filename, str(err))
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 return False
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 # get references to objects we need
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 project = e5App().getObject("Project")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 projectBrowser = e5App().getObject("ProjectBrowser")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 multiProject = e5App().getObject("MultiProject")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 vm = e5App().getObject("ViewManager")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 dbg = e5App().getObject("DebugUI")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 dbs = e5App().getObject("DebugServer")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 # step 1: multi project and project
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 if sessionDict["MultiProject"]:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 multiProject.openMultiProject(sessionDict["MultiProject"], False)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 if sessionDict["Project"]:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 project.openProject(sessionDict["Project"], False)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 # step 2: (project) filenames and the active editor
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 vm.setSplitOrientation(sessionDict["ViewManagerSplits"]["Orientation"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 vm.setSplitCount(sessionDict["ViewManagerSplits"]["Count"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 editorsDict = {}
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 for editorDict in sessionDict["Editors"]:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 if editorDict["Clone"] and editorDict["Filename"] in editorsDict:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 editor = editorsDict[editorDict["Filename"]]
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 ed = vm.newEditorView(
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 editorDict["Filename"], editor, editor.getFileType(),
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 indexes=(editorDict["Splitindex"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 editorDict["Editorindex"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 else:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 ed = vm.openSourceFile(
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 editorDict["Filename"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 indexes=(editorDict["Splitindex"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 editorDict["Editorindex"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 editorsDict[editorDict["Filename"]] = ed
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 if ed is not None:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 ed.zoomTo(editorDict["Zoom"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 if editorDict["Folds"]:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 ed.recolor()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 ed.setContractedFolds(editorDict["Folds"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 ed.setCursorPosition(*editorDict["Cursor"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 # step 3: breakpoints
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 bpModel = dbs.getBreakPointModel()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 bpModel.addBreakPoints(sessionDict["Breakpoints"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 # step 4: watch expressions
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 wpModel = dbs.getWatchPointModel()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 wpModel.addWatchPoints(sessionDict["Watchpoints"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 # step 5: debug info
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 debugInfoDict = sessionDict["DebugInfo"]
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 dbg.lastUsedVenvName = debugInfoDict["VirtualEnv"]
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 dbg.setArgvHistory(debugInfoDict["CommandLine"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 dbg.setWdHistory(debugInfoDict["WorkingDirectory"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 dbg.setEnvHistory(debugInfoDict["Environment"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 dbg.setExceptionReporting(debugInfoDict["ReportExceptions"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 dbg.setExcList(debugInfoDict["Exceptions"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 dbg.setExcIgnoreList(debugInfoDict["IgnoredExceptions"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 dbg.setAutoClearShell(debugInfoDict["AutoClearShell"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 dbg.setTracePython(debugInfoDict["TracePython"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 dbg.setAutoContinue(debugInfoDict["AutoContinue"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 dbg.setEnableMultiprocess(debugInfoDict["EnableMultiprocess"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 dbg.setMultiprocessNoDebugHistory(debugInfoDict["MultiprocessNoDebug"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 if not self.__isGlobal:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 project.setDbgInfo(
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 debugInfoDict["VirtualEnv"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 debugInfoDict["CommandLine"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 debugInfoDict["WorkingDirectory"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 debugInfoDict["Environment"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 debugInfoDict["ReportExceptions"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 debugInfoDict["Exceptions"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 debugInfoDict["IgnoredExceptions"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 debugInfoDict["AutoClearShell"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 debugInfoDict["TracePython"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 debugInfoDict["AutoContinue"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 debugInfoDict["EnableMultiprocess"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 debugInfoDict["MultiprocessNoDebug"]
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 # step 6: bookmarks
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 for bookmark in sessionDict["Bookmarks"]:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 editor = vm.getOpenEditor(bookmark["Filename"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 if editor is not None:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 for lineno in bookmark["Lines"]:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 editor.toggleBookmark(lineno)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 # step 7: state of the various project browsers
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 for browserState in sessionDict["ProjectBrowserStates"]:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 browser = projectBrowser.getProjectBrowser(browserState["Name"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 if browser is not None:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 browser.expandItemsByName(browserState["ExpandedItems"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 # step 8: active window
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 vm.openFiles(sessionDict["ActiveWindow"]["Filename"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 ed = vm.getOpenEditor(sessionDict["ActiveWindow"]["Filename"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 if ed is not None:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 ed.setCursorPosition(*sessionDict["ActiveWindow"]["Cursor"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 ed.ensureCursorVisible()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 return True

eric ide

mercurial