eric6/WebBrowser/History/HistoryModel.py

changeset 6942
2602857055c5
parent 6645
ad476851d7e0
child 7229
53054eb5b15a
equal deleted inserted replaced
6941:f99d60d6b59b 6942:2602857055c5
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2009 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the history model.
8 """
9
10 from __future__ import unicode_literals
11
12 from PyQt5.QtCore import Qt, QAbstractTableModel, QModelIndex, QUrl
13
14 import WebBrowser.WebBrowserWindow
15
16
17 class HistoryModel(QAbstractTableModel):
18 """
19 Class implementing the history model.
20 """
21 DateRole = Qt.UserRole + 1
22 DateTimeRole = Qt.UserRole + 2
23 UrlRole = Qt.UserRole + 3
24 UrlStringRole = Qt.UserRole + 4
25 TitleRole = Qt.UserRole + 5
26 VisitCountRole = Qt.UserRole + 6
27 MaxRole = VisitCountRole
28
29 def __init__(self, historyManager, parent=None):
30 """
31 Constructor
32
33 @param historyManager reference to the history manager object
34 (HistoryManager)
35 @param parent reference to the parent object (QObject)
36 """
37 super(HistoryModel, self).__init__(parent)
38
39 self.__historyManager = historyManager
40
41 self.__headers = [
42 self.tr("Title"),
43 self.tr("Address"),
44 self.tr("Visit Count")
45 ]
46
47 self.__historyManager.historyReset.connect(self.historyReset)
48 self.__historyManager.entryRemoved.connect(self.historyReset)
49 self.__historyManager.entryAdded.connect(self.entryAdded)
50 self.__historyManager.entryUpdated.connect(self.entryUpdated)
51
52 def historyReset(self):
53 """
54 Public slot to reset the model.
55 """
56 self.beginResetModel()
57 self.endResetModel()
58
59 def entryAdded(self):
60 """
61 Public slot to handle the addition of a history entry.
62 """
63 self.beginInsertRows(QModelIndex(), 0, 0)
64 self.endInsertRows()
65
66 def entryUpdated(self, row):
67 """
68 Public slot to handle the update of a history entry.
69
70 @param row row number of the updated entry (integer)
71 """
72 idx = self.index(row, 0)
73 self.dataChanged.emit(idx, idx)
74
75 def headerData(self, section, orientation, role=Qt.DisplayRole):
76 """
77 Public method to get the header data.
78
79 @param section section number (integer)
80 @param orientation header orientation (Qt.Orientation)
81 @param role data role (integer)
82 @return header data
83 """
84 if orientation == Qt.Horizontal and role == Qt.DisplayRole:
85 try:
86 return self.__headers[section]
87 except IndexError:
88 pass
89 return QAbstractTableModel.headerData(self, section, orientation, role)
90
91 def data(self, index, role=Qt.DisplayRole):
92 """
93 Public method to get data from the model.
94
95 @param index index of history entry to get data for (QModelIndex)
96 @param role data role (integer)
97 @return history entry data
98 """
99 lst = self.__historyManager.history()
100 if index.row() < 0 or index.row() > len(lst):
101 return None
102
103 itm = lst[index.row()]
104 if role == self.DateTimeRole:
105 return itm.dateTime
106 elif role == self.DateRole:
107 return itm.dateTime.date()
108 elif role == self.UrlRole:
109 return QUrl(itm.url)
110 elif role == self.UrlStringRole:
111 return itm.url
112 elif role == self.TitleRole:
113 return itm.userTitle()
114 elif role == self.VisitCountRole:
115 return itm.visitCount
116 elif role in [Qt.DisplayRole, Qt.EditRole]:
117 if index.column() == 0:
118 return itm.userTitle()
119 elif index.column() == 1:
120 return itm.url
121 elif index.column() == 2:
122 return itm.visitCount
123 elif role == Qt.DecorationRole:
124 if index.column() == 0:
125 return WebBrowser.WebBrowserWindow.WebBrowserWindow.icon(
126 QUrl(itm.url))
127
128 return None
129
130 def columnCount(self, parent=None):
131 """
132 Public method to get the number of columns.
133
134 @param parent index of parent (QModelIndex)
135 @return number of columns (integer)
136 """
137 if parent is None:
138 parent = QModelIndex()
139
140 if parent.isValid():
141 return 0
142 else:
143 return len(self.__headers)
144
145 def rowCount(self, parent=None):
146 """
147 Public method to determine the number of rows.
148
149 @param parent index of parent (QModelIndex)
150 @return number of rows (integer)
151 """
152 if parent is None:
153 parent = QModelIndex()
154
155 if parent.isValid():
156 return 0
157 else:
158 return len(self.__historyManager.history())
159
160 def removeRows(self, row, count, parent=None):
161 """
162 Public method to remove history entries from the model.
163
164 @param row row of the first history entry to remove (integer)
165 @param count number of history entries to remove (integer)
166 @param parent index of the parent entry (QModelIndex)
167 @return flag indicating successful removal (boolean)
168 """
169 if parent is None:
170 parent = QModelIndex()
171
172 if parent.isValid():
173 return False
174
175 lastRow = row + count - 1
176 self.beginRemoveRows(parent, row, lastRow)
177 lst = self.__historyManager.history()[:]
178 for index in range(lastRow, row - 1, -1):
179 del lst[index]
180 self.__historyManager.historyReset.disconnect(self.historyReset)
181 self.__historyManager.setHistory(lst)
182 self.__historyManager.historyReset.connect(self.historyReset)
183 self.endRemoveRows()
184 return True

eric ide

mercurial