8 """ |
8 """ |
9 |
9 |
10 |
10 |
11 import sys |
11 import sys |
12 |
12 |
13 from PyQt5.QtCore import pyqtSignal, Qt, QMimeData, QUrl, QModelIndex, \ |
13 from PyQt5.QtCore import ( |
14 QSortFilterProxyModel, QAbstractProxyModel |
14 pyqtSignal, Qt, QMimeData, QUrl, QModelIndex, QSortFilterProxyModel, |
|
15 QAbstractProxyModel |
|
16 ) |
15 from PyQt5.QtWidgets import QMenu |
17 from PyQt5.QtWidgets import QMenu |
16 |
18 |
17 from E5Gui.E5ModelMenu import E5ModelMenu |
19 from E5Gui.E5ModelMenu import E5ModelMenu |
18 from E5Gui import E5MessageBox |
20 from E5Gui import E5MessageBox |
19 |
21 |
80 return 0 |
82 return 0 |
81 |
83 |
82 if not parent.isValid(): |
84 if not parent.isValid(): |
83 folders = self.sourceModel().rowCount() |
85 folders = self.sourceModel().rowCount() |
84 bumpedItems = self.bumpedRows() |
86 bumpedItems = self.bumpedRows() |
85 if bumpedItems <= self.MOVEDROWS and \ |
87 if ( |
86 bumpedItems == self.sourceModel().rowCount( |
88 bumpedItems <= self.MOVEDROWS and |
87 self.sourceModel().index(0, 0)): |
89 bumpedItems == self.sourceModel().rowCount( |
|
90 self.sourceModel().index(0, 0)) |
|
91 ): |
88 folders -= 1 |
92 folders -= 1 |
89 return bumpedItems + folders |
93 return bumpedItems + folders |
90 |
94 |
91 if parent.internalId() == sys.maxsize: |
95 if parent.internalId() == sys.maxsize: |
92 if parent.row() < self.bumpedRows(): |
96 if parent.row() < self.bumpedRows(): |
124 bumpedItems = self.bumpedRows() |
128 bumpedItems = self.bumpedRows() |
125 if proxyIndex.row() < bumpedItems: |
129 if proxyIndex.row() < bumpedItems: |
126 return self.__treeModel.index( |
130 return self.__treeModel.index( |
127 proxyIndex.row(), proxyIndex.column(), |
131 proxyIndex.row(), proxyIndex.column(), |
128 self.__treeModel.index(0, 0)) |
132 self.__treeModel.index(0, 0)) |
129 if bumpedItems <= self.MOVEDROWS and \ |
133 if ( |
130 bumpedItems == self.sourceModel().rowCount( |
134 bumpedItems <= self.MOVEDROWS and |
131 self.__treeModel.index(0, 0)): |
135 bumpedItems == self.sourceModel().rowCount( |
|
136 self.__treeModel.index(0, 0)) |
|
137 ): |
132 bumpedItems -= 1 |
138 bumpedItems -= 1 |
133 return self.__treeModel.index(proxyIndex.row() - bumpedItems, |
139 return self.__treeModel.index(proxyIndex.row() - bumpedItems, |
134 proxyIndex.column()) |
140 proxyIndex.column()) |
135 |
141 |
136 historyIndex = self.__treeModel.sourceModel()\ |
142 historyIndex = self.__treeModel.sourceModel().index( |
137 .index(proxyIndex.internalId(), proxyIndex.column()) |
143 proxyIndex.internalId(), proxyIndex.column()) |
138 treeIndex = self.__treeModel.mapFromSource(historyIndex) |
144 treeIndex = self.__treeModel.mapFromSource(historyIndex) |
139 return treeIndex |
145 return treeIndex |
140 |
146 |
141 def index(self, row, column, parent=None): |
147 def index(self, row, column, parent=None): |
142 """ |
148 """ |
148 @return requested index (QModelIndex) |
154 @return requested index (QModelIndex) |
149 """ |
155 """ |
150 if parent is None: |
156 if parent is None: |
151 parent = QModelIndex() |
157 parent = QModelIndex() |
152 |
158 |
153 if row < 0 or \ |
159 if ( |
154 column < 0 or \ |
160 row < 0 or |
155 column >= self.columnCount(parent) or \ |
161 column < 0 or |
156 parent.column() > 0: |
162 column >= self.columnCount(parent) or |
|
163 parent.column() > 0 |
|
164 ): |
157 return QModelIndex() |
165 return QModelIndex() |
158 |
166 |
159 if not parent.isValid(): |
167 if not parent.isValid(): |
160 return self.createIndex(row, column, sys.maxsize) |
168 return self.createIndex(row, column, sys.maxsize) |
161 |
169 |
188 treeIndex = self.__treeModel.mapFromSource(historyIndex) |
196 treeIndex = self.__treeModel.mapFromSource(historyIndex) |
189 treeIndexParent = treeIndex.parent() |
197 treeIndexParent = treeIndex.parent() |
190 |
198 |
191 sourceRow = self.sourceModel().mapToSource(treeIndexParent).row() |
199 sourceRow = self.sourceModel().mapToSource(treeIndexParent).row() |
192 bumpedItems = self.bumpedRows() |
200 bumpedItems = self.bumpedRows() |
193 if bumpedItems <= self.MOVEDROWS and \ |
201 if ( |
194 bumpedItems == self.sourceModel().rowCount( |
202 bumpedItems <= self.MOVEDROWS and |
195 self.sourceModel().index(0, 0)): |
203 bumpedItems == self.sourceModel().rowCount( |
|
204 self.sourceModel().index(0, 0)) |
|
205 ): |
196 bumpedItems -= 1 |
206 bumpedItems -= 1 |
197 |
207 |
198 return self.createIndex(bumpedItems + treeIndexParent.row(), |
208 return self.createIndex(bumpedItems + treeIndexParent.row(), |
199 treeIndexParent.column(), |
209 treeIndexParent.column(), |
200 sourceRow) |
210 sourceRow) |
239 @param left index of left item (QModelIndex) |
249 @param left index of left item (QModelIndex) |
240 @param right index of right item (QModelIndex) |
250 @param right index of right item (QModelIndex) |
241 @return true, if left is less than right (boolean) |
251 @return true, if left is less than right (boolean) |
242 """ |
252 """ |
243 from .HistoryFilterModel import HistoryFilterModel |
253 from .HistoryFilterModel import HistoryFilterModel |
244 frequency_L = \ |
254 frequency_L = self.sourceModel().data( |
245 self.sourceModel().data(left, HistoryFilterModel.FrequencyRole) |
255 left, HistoryFilterModel.FrequencyRole) |
246 dateTime_L = \ |
256 dateTime_L = self.sourceModel().data( |
247 self.sourceModel().data(left, HistoryModel.DateTimeRole) |
257 left, HistoryModel.DateTimeRole) |
248 frequency_R = \ |
258 frequency_R = self.sourceModel().data( |
249 self.sourceModel().data(right, HistoryFilterModel.FrequencyRole) |
259 right, HistoryFilterModel.FrequencyRole) |
250 dateTime_R = \ |
260 dateTime_R = self.sourceModel().data( |
251 self.sourceModel().data(right, HistoryModel.DateTimeRole) |
261 right, HistoryModel.DateTimeRole) |
252 |
262 |
253 # Sort results in descending frequency-derived score. If frequencies |
263 # Sort results in descending frequency-derived score. If frequencies |
254 # are equal, sort on most recently viewed |
264 # are equal, sort on most recently viewed |
255 if frequency_R == frequency_L: |
265 if frequency_R == frequency_L: |
256 return dateTime_R < dateTime_L |
266 return dateTime_R < dateTime_L |