qml: add initial generic listmodel filter QEFilterProxyModel
This commit is contained in:
@@ -78,7 +78,7 @@ Pane {
|
||||
Layout.preferredWidth: parent.width
|
||||
Layout.fillHeight: true
|
||||
clip: true
|
||||
model: Daemon.currentWallet.channelModel
|
||||
model: Daemon.currentWallet.channelModel.filterModel('is_backup', false)
|
||||
|
||||
delegate: ChannelDelegate {
|
||||
onClicked: {
|
||||
@@ -126,10 +126,9 @@ Pane {
|
||||
|
||||
FlatButton {
|
||||
Layout.fillWidth: true
|
||||
text: qsTr('Import channel backup')
|
||||
text: qsTr('Channel backups')
|
||||
onClicked: {
|
||||
var dialog = importChannelBackupDialog.createObject(root)
|
||||
dialog.open()
|
||||
app.stack.push(Qt.resolvedUrl('ChannelBackups.qml'))
|
||||
}
|
||||
icon.source: '../../icons/file.png'
|
||||
}
|
||||
|
||||
@@ -8,7 +8,8 @@ import threading
|
||||
import asyncio
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from PyQt5.QtCore import pyqtSlot, pyqtSignal, pyqtProperty, QObject, QUrl, QLocale, qInstallMessageHandler, QTimer
|
||||
from PyQt5.QtCore import (pyqtSlot, pyqtSignal, pyqtProperty, QObject, QUrl, QLocale,
|
||||
qInstallMessageHandler, QTimer, QSortFilterProxyModel)
|
||||
from PyQt5.QtGui import QGuiApplication, QFontDatabase
|
||||
from PyQt5.QtQml import qmlRegisterType, qmlRegisterUncreatableType, QQmlApplicationEngine
|
||||
|
||||
@@ -38,6 +39,7 @@ from .qelnpaymentdetails import QELnPaymentDetails
|
||||
from .qechanneldetails import QEChannelDetails
|
||||
from .qeswaphelper import QESwapHelper
|
||||
from .qewizard import QENewWalletWizard, QEServerConnectWizard
|
||||
from .qemodelfilter import QEFilterProxyModel
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from electrum.simple_config import SimpleConfig
|
||||
@@ -297,6 +299,8 @@ class ElectrumQmlApplication(QGuiApplication):
|
||||
qmlRegisterUncreatableType(QEAmount, 'org.electrum', 1, 0, 'Amount', 'Amount can only be used as property')
|
||||
qmlRegisterUncreatableType(QENewWalletWizard, 'org.electrum', 1, 0, 'NewWalletWizard', 'NewWalletWizard can only be used as property')
|
||||
qmlRegisterUncreatableType(QEServerConnectWizard, 'org.electrum', 1, 0, 'ServerConnectWizard', 'ServerConnectWizard can only be used as property')
|
||||
qmlRegisterUncreatableType(QEFilterProxyModel, 'org.electrum', 1, 0, 'FilterProxyModel', 'FilterProxyModel can only be used as property')
|
||||
qmlRegisterUncreatableType(QSortFilterProxyModel, 'org.electrum', 1, 0, 'QSortFilterProxyModel', 'QSortFilterProxyModel can only be used as property')
|
||||
|
||||
self.engine = QQmlApplicationEngine(parent=self)
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ from electrum.util import Satoshis
|
||||
|
||||
from .qetypes import QEAmount
|
||||
from .util import QtEventListener, qt_event_listener
|
||||
from .qemodelfilter import QEFilterProxyModel
|
||||
|
||||
class QEChannelListModel(QAbstractListModel, QtEventListener):
|
||||
_logger = get_logger(__name__)
|
||||
@@ -165,3 +166,11 @@ class QEChannelListModel(QAbstractListModel, QtEventListener):
|
||||
self.countChanged.emit()
|
||||
return
|
||||
i = i + 1
|
||||
|
||||
@pyqtSlot(str, 'QVariant', result=QEFilterProxyModel)
|
||||
def filterModel(self, role, match):
|
||||
self._filterModel = QEFilterProxyModel(self, self)
|
||||
self._filterModel.setFilterRole(QEChannelListModel._ROLE_RMAP[role])
|
||||
self._filterModel.setFilterValue(match)
|
||||
return self._filterModel
|
||||
|
||||
|
||||
27
electrum/gui/qml/qemodelfilter.py
Normal file
27
electrum/gui/qml/qemodelfilter.py
Normal file
@@ -0,0 +1,27 @@
|
||||
from PyQt5.QtCore import QSortFilterProxyModel
|
||||
|
||||
from electrum.logging import get_logger
|
||||
|
||||
class QEFilterProxyModel(QSortFilterProxyModel):
|
||||
_logger = get_logger(__name__)
|
||||
|
||||
_filter_value = None
|
||||
|
||||
def __init__(self, parent_model, parent=None):
|
||||
super().__init__(parent)
|
||||
self.setSourceModel(parent_model)
|
||||
|
||||
def isCustomFilter(self):
|
||||
return self._filter_value is not None
|
||||
|
||||
def setFilterValue(self, filter_value):
|
||||
self._filter_value = filter_value
|
||||
|
||||
def filterAcceptsRow(self, s_row, s_parent):
|
||||
if not self.isCustomFilter:
|
||||
return super().filterAcceptsRow(s_row, s_parent)
|
||||
|
||||
parent_model = self.sourceModel()
|
||||
d = parent_model.data(parent_model.index(s_row, 0, s_parent), self.filterRole())
|
||||
# self._logger.debug(f'DATA in FilterProxy is {repr(d)}')
|
||||
return True if self._filter_value is None else d == self._filter_value
|
||||
Reference in New Issue
Block a user