WebBrowser/Session/SessionManagerDialog.py

changeset 5782
60874802161b
child 5783
44a9f08de394
equal deleted inserted replaced
5780:79d06c98c5c9 5782:60874802161b
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2017 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 documentation goes here.
22 """
23 SessionFileRole = Qt.UserRole
24 BackupSessionRole = Qt.UserRole + 1
25 ActiveSessionRole = Qt.UserRole + 2
26 DefaultSessionRole = Qt.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(SessionManagerDialog, self).__init__(parent)
36 self.setupUi(self)
37
38 self.newButton.clicked.connect(self.__newSession)
39 self.renameButton.clicked.connect(self.__renameSession)
40 self.cloneButton.clicked.connect(self.__cloneSession)
41 self.deleteButton.clicked.connect(self.__deleteSession)
42 self.switchButton.clicked.connect(self.__switchToSession)
43 self.sessionsList.currentItemChanged.connect(self.__updateButtons)
44
45 self.__refresh()
46 WebBrowserWindow.sessionManager().sessionsMetaDataChanged.connect(
47 self.__refresh)
48
49 @pyqtSlot()
50 def __refresh(self):
51 """
52 Private slot to refresh the list of sessions.
53 """
54 self.sessionsList.clear()
55
56 sessions = WebBrowserWindow.sessionManager().sessionMetaData(
57 includeBackups=True)
58 for session in sessions:
59 itm = QTreeWidgetItem()
60 itm.setText(0, session.name)
61 itm.setText(1, QFileInfo(session.filePath).lastModified()
62 .toString("yyyy-MM-dd hh:mm"))
63 itm.setData(0, SessionManagerDialog.SessionFileRole,
64 session.filePath)
65 itm.setData(0, SessionManagerDialog.BackupSessionRole,
66 session.isBackup)
67 itm.setData(0, SessionManagerDialog.ActiveSessionRole,
68 session.isActive)
69 itm.setData(0, SessionManagerDialog.DefaultSessionRole,
70 session.isDefault)
71 self.__updateSessionItem(itm)
72 self.sessionsList.addTopLevelItem(itm)
73
74 self.__updateButtons()
75
76 def __updateButtons(self):
77 """
78 Private method to update the button state.
79 """
80 itm = self.sessionsList.currentItem()
81 if itm:
82 isBackup = itm.data(0, SessionManagerDialog.BackupSessionRole)
83 isActive = itm.data(0, SessionManagerDialog.ActiveSessionRole)
84 isDefault = itm.data(0, SessionManagerDialog.DefaultSessionRole)
85
86 self.renameButton.setEnabled(not isDefault and not isBackup)
87 self.cloneButton.setEnabled(not isBackup)
88 self.deleteButton.setEnabled(not isBackup and not isDefault and
89 not isActive)
90 self.switchButton.setEnabled(not isActive)
91 if isBackup:
92 self.switchButton.setText(self.tr("Restore"))
93 else:
94 self.switchButton.setText(self.tr("Switch To"))
95 else:
96 self.renameButton.setEnabled(False)
97 self.cloneButton.setEnabled(False)
98 self.deleteButton.setEnabled(False)
99 self.switchButton.setEnabled(False)
100 self.switchButton.setText(self.tr("Switch To"))
101
102 def __updateSessionItem(self, itm):
103 """
104 Private method to set various item properties.
105
106 @param itm reference to the item to be updated
107 @type QTreeWidgetItem
108 """
109 isBackup = itm.data(0, SessionManagerDialog.BackupSessionRole)
110 isActive = itm.data(0, SessionManagerDialog.ActiveSessionRole)
111 isDefault = itm.data(0, SessionManagerDialog.DefaultSessionRole)
112
113 font = itm.font(0)
114
115 if isBackup:
116 color = self.palette().color(QPalette.Disabled,
117 QPalette.WindowText)
118 itm.setForeground(0, color)
119 itm.setForeground(1, color)
120
121 if isActive:
122 font.setBold(True)
123 itm.setFont(0, font)
124 itm.setFont(1, font)
125
126 if isDefault:
127 font.setItalic(True)
128 itm.setFont(0, font)
129 itm.setFont(1, font)
130
131 def showEvent(self, evt):
132 """
133 Protected method handling the dialog being shown.
134
135 @param evt reference to the event object
136 @type QShowEvent
137 """
138 super(SessionManagerDialog, self).showEvent(evt)
139 self.__resizeViewHeader()
140
141 def resizeEvent(self, evt):
142 """
143 Protected method handling the dialog being resized.
144
145 @param evt reference to the event object
146 @type QResizeEvent
147 """
148 super(SessionManagerDialog, self).resizeEvent(evt)
149 self.__resizeViewHeader()
150
151 def __resizeViewHeader(self):
152 """
153 Private method to resize the session column of the list.
154 """
155 headerWidth = self.sessionsList.header().width()
156 self.sessionsList.header().resizeSection(
157 0, headerWidth - headerWidth / 2.5)
158
159 @pyqtSlot()
160 def __newSession(self):
161 """
162 Private slot to create a new session.
163 """
164 WebBrowserWindow.sessionManager().newSession()
165
166 @pyqtSlot()
167 def __renameSession(self):
168 """
169 Private slot to rename the selected session.
170 """
171 itm = self.sessionsList.currentItem()
172 if itm is None:
173 return
174
175 filePath = itm.data(0, SessionManagerDialog.SessionFileRole)
176 if filePath:
177 WebBrowserWindow.sessionManager().renameSession(filePath)
178
179 @pyqtSlot()
180 def __cloneSession(self):
181 """
182 Private slot to clone the selected session.
183 """
184 itm = self.sessionsList.currentItem()
185 if itm is None:
186 return
187
188 filePath = itm.data(0, SessionManagerDialog.SessionFileRole)
189 if filePath:
190 WebBrowserWindow.sessionManager().cloneSession(filePath)
191
192 @pyqtSlot()
193 def __deleteSession(self):
194 """
195 Private slot to delete the selected session.
196 """
197 itm = self.sessionsList.currentItem()
198 if itm is None:
199 return
200
201 filePath = itm.data(0, SessionManagerDialog.SessionFileRole)
202 if filePath:
203 WebBrowserWindow.sessionManager().deleteSession(filePath)
204
205 @pyqtSlot()
206 def __switchToSession(self):
207 """
208 Private slot to switch to the selected session.
209 """
210 itm = self.sessionsList.currentItem()
211 if itm is None:
212 return
213
214 filePath = itm.data(0, SessionManagerDialog.SessionFileRole)
215 if filePath:
216 if itm.data(0, SessionManagerDialog.BackupSessionRole):
217 WebBrowserWindow.sessionManager().replaceSession(filePath)
218 else:
219 WebBrowserWindow.sessionManager().switchToSession(filePath)

eric ide

mercurial