eric7/WebBrowser/Session/SessionManagerDialog.py

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

eric ide

mercurial