WebBrowser/Session/SessionManagerDialog.py

changeset 5782
60874802161b
child 5783
44a9f08de394
diff -r 79d06c98c5c9 -r 60874802161b WebBrowser/Session/SessionManagerDialog.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebBrowser/Session/SessionManagerDialog.py	Sun Jul 02 19:40:39 2017 +0200
@@ -0,0 +1,219 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to manage sessions.
+"""
+
+from PyQt5.QtCore import pyqtSlot, Qt, QFileInfo
+from PyQt5.QtGui import QPalette
+from PyQt5.QtWidgets import QDialog, QTreeWidgetItem
+
+from .Ui_SessionManagerDialog import Ui_SessionManagerDialog
+
+from WebBrowser.WebBrowserWindow import WebBrowserWindow
+
+
+class SessionManagerDialog(QDialog, Ui_SessionManagerDialog):
+    """
+    Class documentation goes here.
+    """
+    SessionFileRole = Qt.UserRole
+    BackupSessionRole = Qt.UserRole + 1
+    ActiveSessionRole = Qt.UserRole + 2
+    DefaultSessionRole = Qt.UserRole + 3
+    
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super(SessionManagerDialog, self).__init__(parent)
+        self.setupUi(self)
+        
+        self.newButton.clicked.connect(self.__newSession)
+        self.renameButton.clicked.connect(self.__renameSession)
+        self.cloneButton.clicked.connect(self.__cloneSession)
+        self.deleteButton.clicked.connect(self.__deleteSession)
+        self.switchButton.clicked.connect(self.__switchToSession)
+        self.sessionsList.currentItemChanged.connect(self.__updateButtons)
+        
+        self.__refresh()
+        WebBrowserWindow.sessionManager().sessionsMetaDataChanged.connect(
+            self.__refresh)
+    
+    @pyqtSlot()
+    def __refresh(self):
+        """
+        Private slot to refresh the list of sessions.
+        """
+        self.sessionsList.clear()
+        
+        sessions = WebBrowserWindow.sessionManager().sessionMetaData(
+            includeBackups=True)
+        for session in sessions:
+            itm = QTreeWidgetItem()
+            itm.setText(0, session.name)
+            itm.setText(1, QFileInfo(session.filePath).lastModified()
+                        .toString("yyyy-MM-dd hh:mm"))
+            itm.setData(0, SessionManagerDialog.SessionFileRole,
+                        session.filePath)
+            itm.setData(0, SessionManagerDialog.BackupSessionRole,
+                        session.isBackup)
+            itm.setData(0, SessionManagerDialog.ActiveSessionRole,
+                        session.isActive)
+            itm.setData(0, SessionManagerDialog.DefaultSessionRole,
+                        session.isDefault)
+            self.__updateSessionItem(itm)
+            self.sessionsList.addTopLevelItem(itm)
+        
+        self.__updateButtons()
+    
+    def __updateButtons(self):
+        """
+        Private method to update the button state.
+        """
+        itm = self.sessionsList.currentItem()
+        if itm:
+            isBackup = itm.data(0, SessionManagerDialog.BackupSessionRole)
+            isActive = itm.data(0, SessionManagerDialog.ActiveSessionRole)
+            isDefault = itm.data(0, SessionManagerDialog.DefaultSessionRole)
+            
+            self.renameButton.setEnabled(not isDefault and not isBackup)
+            self.cloneButton.setEnabled(not isBackup)
+            self.deleteButton.setEnabled(not isBackup and not isDefault and
+                                         not isActive)
+            self.switchButton.setEnabled(not isActive)
+            if isBackup:
+                self.switchButton.setText(self.tr("Restore"))
+            else:
+                self.switchButton.setText(self.tr("Switch To"))
+        else:
+            self.renameButton.setEnabled(False)
+            self.cloneButton.setEnabled(False)
+            self.deleteButton.setEnabled(False)
+            self.switchButton.setEnabled(False)
+            self.switchButton.setText(self.tr("Switch To"))
+    
+    def __updateSessionItem(self, itm):
+        """
+        Private method to set various item properties.
+        
+        @param itm reference to the item to be updated
+        @type QTreeWidgetItem
+        """
+        isBackup = itm.data(0, SessionManagerDialog.BackupSessionRole)
+        isActive = itm.data(0, SessionManagerDialog.ActiveSessionRole)
+        isDefault = itm.data(0, SessionManagerDialog.DefaultSessionRole)
+        
+        font = itm.font(0)
+        
+        if isBackup:
+            color = self.palette().color(QPalette.Disabled,
+                                         QPalette.WindowText)
+            itm.setForeground(0, color)
+            itm.setForeground(1, color)
+        
+        if isActive:
+            font.setBold(True)
+            itm.setFont(0, font)
+            itm.setFont(1, font)
+        
+        if isDefault:
+            font.setItalic(True)
+            itm.setFont(0, font)
+            itm.setFont(1, font)
+    
+    def showEvent(self, evt):
+        """
+        Protected method handling the dialog being shown.
+        
+        @param evt reference to the event object
+        @type QShowEvent
+        """
+        super(SessionManagerDialog, self).showEvent(evt)
+        self.__resizeViewHeader()
+    
+    def resizeEvent(self, evt):
+        """
+        Protected method handling the dialog being resized.
+        
+        @param evt reference to the event object
+        @type QResizeEvent
+        """
+        super(SessionManagerDialog, self).resizeEvent(evt)
+        self.__resizeViewHeader()
+    
+    def __resizeViewHeader(self):
+        """
+        Private method to resize the session column of the list.
+        """
+        headerWidth = self.sessionsList.header().width()
+        self.sessionsList.header().resizeSection(
+            0, headerWidth - headerWidth / 2.5)
+    
+    @pyqtSlot()
+    def __newSession(self):
+        """
+        Private slot to create a new session.
+        """
+        WebBrowserWindow.sessionManager().newSession()
+    
+    @pyqtSlot()
+    def __renameSession(self):
+        """
+        Private slot to rename the selected session.
+        """
+        itm = self.sessionsList.currentItem()
+        if itm is None:
+            return
+        
+        filePath = itm.data(0, SessionManagerDialog.SessionFileRole)
+        if filePath:
+            WebBrowserWindow.sessionManager().renameSession(filePath)
+    
+    @pyqtSlot()
+    def __cloneSession(self):
+        """
+        Private slot to clone the selected session.
+        """
+        itm = self.sessionsList.currentItem()
+        if itm is None:
+            return
+        
+        filePath = itm.data(0, SessionManagerDialog.SessionFileRole)
+        if filePath:
+            WebBrowserWindow.sessionManager().cloneSession(filePath)
+    
+    @pyqtSlot()
+    def __deleteSession(self):
+        """
+        Private slot to delete the selected session.
+        """
+        itm = self.sessionsList.currentItem()
+        if itm is None:
+            return
+        
+        filePath = itm.data(0, SessionManagerDialog.SessionFileRole)
+        if filePath:
+            WebBrowserWindow.sessionManager().deleteSession(filePath)
+    
+    @pyqtSlot()
+    def __switchToSession(self):
+        """
+        Private slot to switch to the selected session.
+        """
+        itm = self.sessionsList.currentItem()
+        if itm is None:
+            return
+        
+        filePath = itm.data(0, SessionManagerDialog.SessionFileRole)
+        if filePath:
+            if itm.data(0, SessionManagerDialog.BackupSessionRole):
+                WebBrowserWindow.sessionManager().replaceSession(filePath)
+            else:
+                WebBrowserWindow.sessionManager().switchToSession(filePath)

eric ide

mercurial