eric6/Helpviewer/CookieJar/CookieModel.py

changeset 6942
2602857055c5
parent 6645
ad476851d7e0
diff -r f99d60d6b59b -r 2602857055c5 eric6/Helpviewer/CookieJar/CookieModel.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Helpviewer/CookieJar/CookieModel.py	Sun Apr 14 15:09:21 2019 +0200
@@ -0,0 +1,159 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2009 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the cookie model.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt5.QtCore import Qt, QAbstractTableModel, QSize, QModelIndex
+from PyQt5.QtGui import QFont, QFontMetrics
+
+
+class CookieModel(QAbstractTableModel):
+    """
+    Class implementing the cookie model.
+    """
+    def __init__(self, cookieJar, parent=None):
+        """
+        Constructor
+        
+        @param cookieJar reference to the cookie jar (CookieJar)
+        @param parent reference to the parent object (QObject)
+        """
+        super(CookieModel, self).__init__(parent)
+        
+        self.__headers = [
+            self.tr("Website"),
+            self.tr("Name"),
+            self.tr("Path"),
+            self.tr("Secure"),
+            self.tr("Expires"),
+            self.tr("Contents"),
+        ]
+        self.__cookieJar = cookieJar
+        self.__cookieJar.cookiesChanged.connect(self.__cookiesChanged)
+        self.__cookieJar.load()
+    
+    def headerData(self, section, orientation, role):
+        """
+        Public method to get header data from the model.
+        
+        @param section section number (integer)
+        @param orientation orientation (Qt.Orientation)
+        @param role role of the data to retrieve (integer)
+        @return requested data
+        """
+        if role == Qt.SizeHintRole:
+            fm = QFontMetrics(QFont())
+            height = fm.height() + fm.height() // 3
+            width = \
+                fm.width(self.headerData(section, orientation, Qt.DisplayRole))
+            return QSize(width, height)
+        
+        if orientation == Qt.Horizontal:
+            if role == Qt.DisplayRole:
+                try:
+                    return self.__headers[section]
+                except IndexError:
+                    return None
+            
+            return None
+        
+        return QAbstractTableModel.headerData(self, section, orientation, role)
+    
+    def data(self, index, role):
+        """
+        Public method to get data from the model.
+        
+        @param index index to get data for (QModelIndex)
+        @param role role of the data to retrieve (integer)
+        @return requested data
+        """
+        lst = []
+        if self.__cookieJar is not None:
+            lst = self.__cookieJar.cookies()
+        if index.row() < 0 or index.row() >= len(lst):
+            return None
+        
+        if role in (Qt.DisplayRole, Qt.EditRole):
+            cookie = lst[index.row()]
+            col = index.column()
+            if col == 0:
+                return cookie.domain()
+            elif col == 1:
+                return bytes(cookie.name()).decode()
+            elif col == 2:
+                return cookie.path()
+            elif col == 3:
+                return cookie.isSecure()
+            elif col == 4:
+                return cookie.expirationDate()
+            elif col == 5:
+                return cookie.value()
+            else:
+                return None
+        
+        return None
+    
+    def columnCount(self, parent=None):
+        """
+        Public method to get the number of columns of the model.
+        
+        @param parent parent index (QModelIndex)
+        @return number of columns (integer)
+        """
+        if parent is None:
+            parent = QModelIndex()
+        
+        if parent.isValid():
+            return 0
+        else:
+            return len(self.__headers)
+    
+    def rowCount(self, parent=None):
+        """
+        Public method to get the number of rows of the model.
+        
+        @param parent parent index (QModelIndex)
+        @return number of columns (integer)
+        """
+        if parent is None:
+            parent = QModelIndex()
+        
+        if parent.isValid() or self.__cookieJar is None:
+            return 0
+        else:
+            return len(self.__cookieJar.cookies())
+    
+    def removeRows(self, row, count, parent=None):
+        """
+        Public method to remove entries from the model.
+        
+        @param row start row (integer)
+        @param count number of rows to remove (integer)
+        @param parent parent index (QModelIndex)
+        @return flag indicating success (boolean)
+        """
+        if parent is None:
+            parent = QModelIndex()
+        
+        if parent.isValid() or self.__cookieJar is None:
+            return False
+        
+        lastRow = row + count - 1
+        lst = self.__cookieJar.cookies()
+        del lst[row:lastRow + 1]
+        self.__cookieJar.setCookies(lst)
+        
+        return True
+    
+    def __cookiesChanged(self):
+        """
+        Private slot handling changes of the cookies list in the cookie jar.
+        """
+        self.beginResetModel()
+        self.endResetModel()

eric ide

mercurial