src/eric7/WebBrowser/Session/SessionManagerDialog.py

branch
eric7
changeset 9209
b99e7fd55fd3
parent 9186
0c28a1670e06
child 9221
bf71ee032bb4
equal deleted inserted replaced
9208:3fc8dfeb6ebe 9209:b99e7fd55fd3
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2017 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a dialog to manage sessions.
8 """
9
10 import datetime
11 import pathlib
12
13 from PyQt6.QtCore import pyqtSlot, Qt
14 from PyQt6.QtGui import QPalette
15 from PyQt6.QtWidgets import QDialog, QTreeWidgetItem
16
17 from .Ui_SessionManagerDialog import Ui_SessionManagerDialog
18
19 from WebBrowser.WebBrowserWindow import WebBrowserWindow
20
21
22 class SessionManagerDialog(QDialog, Ui_SessionManagerDialog):
23 """
24 Class implementing a dialog to manage sessions.
25 """
26 SessionFileRole = Qt.ItemDataRole.UserRole
27 BackupSessionRole = Qt.ItemDataRole.UserRole + 1
28 ActiveSessionRole = Qt.ItemDataRole.UserRole + 2
29 DefaultSessionRole = Qt.ItemDataRole.UserRole + 3
30
31 def __init__(self, parent=None):
32 """
33 Constructor
34
35 @param parent reference to the parent widget
36 @type QWidget
37 """
38 super().__init__(parent)
39 self.setupUi(self)
40 self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
41
42 self.newButton.clicked.connect(self.__newSession)
43 self.renameButton.clicked.connect(self.__renameSession)
44 self.cloneButton.clicked.connect(self.__cloneSession)
45 self.deleteButton.clicked.connect(self.__deleteSession)
46 self.switchButton.clicked.connect(self.__switchToSession)
47 self.sessionsList.currentItemChanged.connect(self.__updateButtons)
48
49 self.__refresh()
50 WebBrowserWindow.sessionManager().sessionsMetaDataChanged.connect(
51 self.__refresh)
52
53 @pyqtSlot()
54 def __refresh(self):
55 """
56 Private slot to refresh the list of sessions.
57 """
58 self.sessionsList.clear()
59
60 sessions = WebBrowserWindow.sessionManager().sessionMetaData(
61 includeBackups=True)
62 for session in sessions:
63 if pathlib.Path(session.filePath).exists():
64 itm = QTreeWidgetItem()
65 itm.setText(0, session.name)
66 itm.setText(1, datetime.datetime.fromtimestamp(
67 pathlib.Path(session.filePath).stat().st_mtime)
68 .isoformat(sep=" ", timespec="minutes"))
69 itm.setData(0, SessionManagerDialog.SessionFileRole,
70 session.filePath)
71 itm.setData(0, SessionManagerDialog.BackupSessionRole,
72 session.isBackup)
73 itm.setData(0, SessionManagerDialog.ActiveSessionRole,
74 session.isActive)
75 itm.setData(0, SessionManagerDialog.DefaultSessionRole,
76 session.isDefault)
77 self.__updateSessionItem(itm)
78 self.sessionsList.addTopLevelItem(itm)
79
80 self.__updateButtons()
81
82 def __updateButtons(self):
83 """
84 Private method to update the button state.
85 """
86 itm = self.sessionsList.currentItem()
87 if itm:
88 isBackup = itm.data(0, SessionManagerDialog.BackupSessionRole)
89 isActive = itm.data(0, SessionManagerDialog.ActiveSessionRole)
90 isDefault = itm.data(0, SessionManagerDialog.DefaultSessionRole)
91
92 self.renameButton.setEnabled(not isDefault and not isBackup)
93 self.cloneButton.setEnabled(not isBackup)
94 self.deleteButton.setEnabled(not isBackup and not isDefault and
95 not isActive)
96 self.switchButton.setEnabled(not isActive)
97 if isBackup:
98 self.switchButton.setText(self.tr("Restore"))
99 else:
100 self.switchButton.setText(self.tr("Switch To"))
101 else:
102 self.renameButton.setEnabled(False)
103 self.cloneButton.setEnabled(False)
104 self.deleteButton.setEnabled(False)
105 self.switchButton.setEnabled(False)
106 self.switchButton.setText(self.tr("Switch To"))
107
108 def __updateSessionItem(self, itm):
109 """
110 Private method to set various item properties.
111
112 @param itm reference to the item to be updated
113 @type QTreeWidgetItem
114 """
115 isBackup = itm.data(0, SessionManagerDialog.BackupSessionRole)
116 isActive = itm.data(0, SessionManagerDialog.ActiveSessionRole)
117 isDefault = itm.data(0, SessionManagerDialog.DefaultSessionRole)
118
119 font = itm.font(0)
120
121 if isBackup:
122 color = self.palette().color(QPalette.ColorGroup.Disabled,
123 QPalette.ColorRole.WindowText)
124 itm.setForeground(0, color)
125 itm.setForeground(1, color)
126
127 if isActive:
128 font.setBold(True)
129 itm.setFont(0, font)
130 itm.setFont(1, font)
131
132 if isDefault:
133 font.setItalic(True)
134 itm.setFont(0, font)
135 itm.setFont(1, font)
136
137 def showEvent(self, evt):
138 """
139 Protected method handling the dialog being shown.
140
141 @param evt reference to the event object
142 @type QShowEvent
143 """
144 super().showEvent(evt)
145 self.__resizeViewHeader()
146
147 def resizeEvent(self, evt):
148 """
149 Protected method handling the dialog being resized.
150
151 @param evt reference to the event object
152 @type QResizeEvent
153 """
154 super().resizeEvent(evt)
155 self.__resizeViewHeader()
156
157 def __resizeViewHeader(self):
158 """
159 Private method to resize the session column of the list.
160 """
161 headerWidth = self.sessionsList.header().width()
162 self.sessionsList.header().resizeSection(
163 0, int(headerWidth - headerWidth / 2.5))
164
165 @pyqtSlot()
166 def __newSession(self):
167 """
168 Private slot to create a new session.
169 """
170 WebBrowserWindow.sessionManager().newSession()
171
172 @pyqtSlot()
173 def __renameSession(self):
174 """
175 Private slot to rename the selected session.
176 """
177 itm = self.sessionsList.currentItem()
178 if itm is None:
179 return
180
181 filePath = itm.data(0, SessionManagerDialog.SessionFileRole)
182 if filePath:
183 WebBrowserWindow.sessionManager().renameSession(filePath)
184
185 @pyqtSlot()
186 def __cloneSession(self):
187 """
188 Private slot to clone the selected session.
189 """
190 itm = self.sessionsList.currentItem()
191 if itm is None:
192 return
193
194 filePath = itm.data(0, SessionManagerDialog.SessionFileRole)
195 if filePath:
196 WebBrowserWindow.sessionManager().cloneSession(filePath)
197
198 @pyqtSlot()
199 def __deleteSession(self):
200 """
201 Private slot to delete the selected session.
202 """
203 itm = self.sessionsList.currentItem()
204 if itm is None:
205 return
206
207 filePath = itm.data(0, SessionManagerDialog.SessionFileRole)
208 if filePath:
209 WebBrowserWindow.sessionManager().deleteSession(filePath)
210
211 @pyqtSlot()
212 def __switchToSession(self):
213 """
214 Private slot to switch to the selected session.
215 """
216 itm = self.sessionsList.currentItem()
217 if itm is None:
218 return
219
220 filePath = itm.data(0, SessionManagerDialog.SessionFileRole)
221 if filePath:
222 if itm.data(0, SessionManagerDialog.BackupSessionRole):
223 res = (
224 WebBrowserWindow.sessionManager().replaceSession(filePath)
225 )
226 else:
227 res = (
228 WebBrowserWindow.sessionManager().switchToSession(filePath)
229 )
230
231 if res:
232 self.close()

eric ide

mercurial