mirror of
https://github.com/LorenEteval/Furious.git
synced 2026-10-02 03:48:03 +03:00
Refactor: now sorting reorders underlying model directly
Signed-off-by: LorenEteval <loren.eteval@proton.me>
This commit is contained in:
committed by
Loren Eteval
parent
c9a1aea5ef
commit
26e8e2d4f1
@@ -869,6 +869,51 @@ class UserServersTableModel(QtCore.QAbstractTableModel):
|
||||
for index, item in enumerate(Storage.UserServers()):
|
||||
item.index = index
|
||||
|
||||
def sort(
|
||||
self,
|
||||
column: int,
|
||||
order: QtCore.Qt.SortOrder = QtCore.Qt.SortOrder.AscendingOrder,
|
||||
):
|
||||
if column < 0 or column >= self.columnCount():
|
||||
return
|
||||
|
||||
activatedIndex = Storage.UserActivatedItemIndex()
|
||||
|
||||
if 0 <= activatedIndex < len(Storage.UserServers()):
|
||||
activatedServerId = id(Storage.UserServers()[activatedIndex])
|
||||
else:
|
||||
activatedServerId = None
|
||||
|
||||
header = self.headers[column]
|
||||
|
||||
def keyFn(factory: ConfigFactory):
|
||||
data = header(factory)
|
||||
|
||||
if str(header) == 'Latency':
|
||||
return self.testResultSortValue(data, 'ms')
|
||||
|
||||
if str(header) == 'Speed':
|
||||
return self.testResultSortValue(data, ' MiB/s')
|
||||
|
||||
return data
|
||||
|
||||
self.layoutAboutToBeChanged.emit()
|
||||
|
||||
Storage.UserServers().sort(
|
||||
key=keyFn,
|
||||
reverse=order == QtCore.Qt.SortOrder.DescendingOrder,
|
||||
)
|
||||
self.refreshIndexes()
|
||||
|
||||
if activatedServerId is not None:
|
||||
for index, server in enumerate(Storage.UserServers()):
|
||||
if id(server) == activatedServerId:
|
||||
AppSettings.set('ActivatedItemIndex', str(index))
|
||||
|
||||
break
|
||||
|
||||
self.layoutChanged.emit()
|
||||
|
||||
|
||||
class UserServersSortFilterProxyModel(QtCore.QSortFilterProxyModel):
|
||||
def __init__(self, parent=None):
|
||||
@@ -878,10 +923,32 @@ class UserServersSortFilterProxyModel(QtCore.QSortFilterProxyModel):
|
||||
self.searchCaseSensitive = False
|
||||
self.searchUseRegex = True
|
||||
self.searchRegex = None
|
||||
self.sortSuspended = False
|
||||
|
||||
self.setSortRole(UserServersTableModel.SortRole)
|
||||
self.setDynamicSortFilter(True)
|
||||
|
||||
def sort(
|
||||
self,
|
||||
column: int,
|
||||
order: QtCore.Qt.SortOrder = QtCore.Qt.SortOrder.AscendingOrder,
|
||||
):
|
||||
if self.sortSuspended:
|
||||
super().sort(-1, order)
|
||||
|
||||
return
|
||||
|
||||
if column < 0:
|
||||
super().sort(column, order)
|
||||
|
||||
return
|
||||
|
||||
model = self.sourceModel()
|
||||
|
||||
if model is not None:
|
||||
model.sort(column, order)
|
||||
self.invalidate()
|
||||
|
||||
def setSearchPattern(
|
||||
self,
|
||||
pattern: str,
|
||||
@@ -934,6 +1001,20 @@ class UserServersSortFilterProxyModel(QtCore.QSortFilterProxyModel):
|
||||
|
||||
return self.searchRegex.search(searchableText) is not None
|
||||
|
||||
def headerData(
|
||||
self,
|
||||
section: int,
|
||||
orientation: QtCore.Qt.Orientation,
|
||||
role=QtCore.Qt.ItemDataRole.DisplayRole,
|
||||
):
|
||||
if (
|
||||
orientation == QtCore.Qt.Orientation.Vertical
|
||||
and role == QtCore.Qt.ItemDataRole.DisplayRole
|
||||
):
|
||||
return section + 1
|
||||
|
||||
return super().headerData(section, orientation, role)
|
||||
|
||||
|
||||
# ALL Headers VALUE
|
||||
_TRANSLATABLE_HEADERS = [
|
||||
@@ -1001,7 +1082,9 @@ class UserServersQTableWidget(Mixins.QTranslatable, AppQTableView):
|
||||
self.horizontalHeader().setCustomSectionResizeMode()
|
||||
self.horizontalHeader().restoreSectionSize()
|
||||
|
||||
self.proxyModel.sortSuspended = True
|
||||
self.setSortingEnabled(True)
|
||||
self.proxyModel.sortSuspended = False
|
||||
self.proxyModel.sort(-1)
|
||||
|
||||
# Selection
|
||||
@@ -1770,10 +1853,9 @@ class UserServersQTableWidget(Mixins.QTranslatable, AppQTableView):
|
||||
mbox.setWindowModality(QtCore.Qt.WindowModality.WindowModal)
|
||||
|
||||
mbox.isMulti = bool(len(indexes) > 1)
|
||||
mbox.possibleRemark = (
|
||||
f'{indexes[0] + 1} - '
|
||||
+ Storage.UserServers()[indexes[0]].getExtras('remark')
|
||||
)
|
||||
mbox.possibleRemark = f'{indexes[0] + 1} - ' + Storage.UserServers()[
|
||||
indexes[0]
|
||||
].getExtras('remark')
|
||||
mbox.setText(mbox.customText())
|
||||
mbox.finished.connect(functools.partial(handleResultCode, indexes))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user