[qt] Add support to search the address book
This commit is contained in:
parent
c991b304de
commit
c316fdffec
3 changed files with 49 additions and 19 deletions
|
@ -21,6 +21,41 @@
|
|||
#include <QMessageBox>
|
||||
#include <QSortFilterProxyModel>
|
||||
|
||||
class AddressBookSortFilterProxyModel final : public QSortFilterProxyModel
|
||||
{
|
||||
const QString m_type;
|
||||
|
||||
public:
|
||||
AddressBookSortFilterProxyModel(const QString& type, QObject* parent)
|
||||
: QSortFilterProxyModel(parent)
|
||||
, m_type(type)
|
||||
{
|
||||
setDynamicSortFilter(true);
|
||||
setFilterCaseSensitivity(Qt::CaseInsensitive);
|
||||
setSortCaseSensitivity(Qt::CaseInsensitive);
|
||||
}
|
||||
|
||||
protected:
|
||||
bool filterAcceptsRow(int row, const QModelIndex& parent) const
|
||||
{
|
||||
auto model = sourceModel();
|
||||
auto label = model->index(row, AddressTableModel::Label, parent);
|
||||
|
||||
if (model->data(label, AddressTableModel::TypeRole).toString() != m_type) {
|
||||
return false;
|
||||
}
|
||||
|
||||
auto address = model->index(row, AddressTableModel::Address, parent);
|
||||
|
||||
if (filterRegExp().indexIn(model->data(address).toString()) < 0 &&
|
||||
filterRegExp().indexIn(model->data(label).toString()) < 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
AddressBookPage::AddressBookPage(const PlatformStyle *platformStyle, Mode _mode, Tabs _tab, QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::AddressBookPage),
|
||||
|
@ -113,24 +148,12 @@ void AddressBookPage::setModel(AddressTableModel *_model)
|
|||
if(!_model)
|
||||
return;
|
||||
|
||||
proxyModel = new QSortFilterProxyModel(this);
|
||||
auto type = tab == ReceivingTab ? AddressTableModel::Receive : AddressTableModel::Send;
|
||||
proxyModel = new AddressBookSortFilterProxyModel(type, this);
|
||||
proxyModel->setSourceModel(_model);
|
||||
proxyModel->setDynamicSortFilter(true);
|
||||
proxyModel->setSortCaseSensitivity(Qt::CaseInsensitive);
|
||||
proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
|
||||
switch(tab)
|
||||
{
|
||||
case ReceivingTab:
|
||||
// Receive filter
|
||||
proxyModel->setFilterRole(AddressTableModel::TypeRole);
|
||||
proxyModel->setFilterFixedString(AddressTableModel::Receive);
|
||||
break;
|
||||
case SendingTab:
|
||||
// Send filter
|
||||
proxyModel->setFilterRole(AddressTableModel::TypeRole);
|
||||
proxyModel->setFilterFixedString(AddressTableModel::Send);
|
||||
break;
|
||||
}
|
||||
|
||||
connect(ui->searchLineEdit, SIGNAL(textChanged(QString)), proxyModel, SLOT(setFilterWildcard(QString)));
|
||||
|
||||
ui->tableView->setModel(proxyModel);
|
||||
ui->tableView->sortByColumn(0, Qt::AscendingOrder);
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
#include <QDialog>
|
||||
|
||||
class AddressBookSortFilterProxyModel;
|
||||
class AddressTableModel;
|
||||
class PlatformStyle;
|
||||
|
||||
|
@ -18,7 +19,6 @@ QT_BEGIN_NAMESPACE
|
|||
class QItemSelection;
|
||||
class QMenu;
|
||||
class QModelIndex;
|
||||
class QSortFilterProxyModel;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
/** Widget that shows a list of sending or receiving addresses.
|
||||
|
@ -53,7 +53,7 @@ private:
|
|||
Mode mode;
|
||||
Tabs tab;
|
||||
QString returnValue;
|
||||
QSortFilterProxyModel *proxyModel;
|
||||
AddressBookSortFilterProxyModel *proxyModel;
|
||||
QMenu *contextMenu;
|
||||
QAction *deleteAction; // to be able to explicitly disable it
|
||||
QString newAddressToSelect;
|
||||
|
|
|
@ -21,6 +21,13 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="searchLineEdit">
|
||||
<property name="placeholderText">
|
||||
<string>Enter address or label to search</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTableView" name="tableView">
|
||||
<property name="contextMenuPolicy">
|
||||
|
|
Loading…
Reference in a new issue