made identity list searchable by whatever is displayed

This commit is contained in:
csoler 2025-04-01 22:34:13 +02:00
parent 85f411463b
commit aa268c8745
4 changed files with 41 additions and 48 deletions

View file

@ -298,7 +298,7 @@ IdDialog::IdDialog(QWidget *parent)
connect(ui->idTreeWidget->header(), SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(headerContextMenuRequested(QPoint))); connect(ui->idTreeWidget->header(), SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(headerContextMenuRequested(QPoint)));
connect(ui->filterLineEdit, SIGNAL(textChanged(QString)), this, SLOT(filterChanged(QString))); connect(ui->filterLineEdit, SIGNAL(textChanged(QString)), this, SLOT(filterChanged(QString)));
connect(ui->ownOpinion_CB, SIGNAL(currentIndexChanged(int)), this, SLOT(modifyReputation())); //connect(ui->ownOpinion_CB, SIGNAL(currentIndexChanged(int)), this, SLOT(modifyReputation()));
connect(ui->inviteButton, SIGNAL(clicked()), this, SLOT(sendInvite())); connect(ui->inviteButton, SIGNAL(clicked()), this, SLOT(sendInvite()));
connect(ui->editButton, SIGNAL(clicked()), this, SLOT(editIdentity())); connect(ui->editButton, SIGNAL(clicked()), this, SLOT(editIdentity()));
@ -388,8 +388,8 @@ IdDialog::IdDialog(QWidget *parent)
ui->toolButton_New->setMenu(menu); ui->toolButton_New->setMenu(menu);
/* Add filter actions */ /* Add filter actions */
ui->filterLineEdit->addFilter(QIcon(), tr("Name"), RsIdentityListModel::COLUMN_THREAD_NAME, QString("%1 %2").arg(tr("Search"), tr("Search name"))); //ui->filterLineEdit->addFilter(QIcon(), tr("Name"), RsIdentityListModel::COLUMN_THREAD_NAME, QString("%1 %2").arg(tr("Search"), tr("Search name")));
ui->filterLineEdit->addFilter(QIcon(), tr("ID"), RsIdentityListModel::COLUMN_THREAD_ID, tr("Search ID")); //ui->filterLineEdit->addFilter(QIcon(), tr("ID"), RsIdentityListModel::COLUMN_THREAD_ID, tr("Search ID"));
/* Set initial section sizes */ /* Set initial section sizes */
QHeaderView * circlesheader = ui->treeWidget_membership->header () ; QHeaderView * circlesheader = ui->treeWidget_membership->header () ;
@ -1300,7 +1300,7 @@ void IdDialog::processSettings(bool load)
// load settings // load settings
// filterColumn // filterColumn
ui->filterLineEdit->setCurrentFilter(Settings->value("filterColumn", RsIdentityListModel::COLUMN_THREAD_NAME).toInt()); //ui->filterLineEdit->setCurrentFilter(Settings->value("filterColumn", RsIdentityListModel::COLUMN_THREAD_NAME).toInt());
// state of splitter // state of splitter
ui->mainSplitter->restoreState(Settings->value("splitter").toByteArray()); ui->mainSplitter->restoreState(Settings->value("splitter").toByteArray());
@ -1322,7 +1322,7 @@ void IdDialog::processSettings(bool load)
// save settings // save settings
// filterColumn // filterColumn
Settings->setValue("filterColumn", ui->filterLineEdit->currentFilter()); //Settings->setValue("filterColumn", ui->filterLineEdit->currentFilter());
// state of splitter // state of splitter
Settings->setValue("splitter", ui->mainSplitter->saveState()); Settings->setValue("splitter", ui->mainSplitter->saveState());
@ -2112,20 +2112,15 @@ void IdDialog::editIdentity()
void IdDialog::filterIds() void IdDialog::filterIds()
{ {
int filterColumn = ui->filterLineEdit->currentFilter();
QString text = ui->filterLineEdit->text(); QString text = ui->filterLineEdit->text();
RsIdentityListModel::FilterType ft; int8_t ft=0;
switch(filterColumn) if(!ui->idTreeWidget->isColumnHidden(RsIdentityListModel::COLUMN_THREAD_ID)) ft |= RsIdentityListModel::FILTER_TYPE_ID;
{ if(!ui->idTreeWidget->isColumnHidden(RsIdentityListModel::COLUMN_THREAD_NAME)) ft |= RsIdentityListModel::FILTER_TYPE_NAME;
case RsIdentityListModel::COLUMN_THREAD_ID: ft = RsIdentityListModel::FILTER_TYPE_ID; if(!ui->idTreeWidget->isColumnHidden(RsIdentityListModel::COLUMN_THREAD_OWNER_NAME)) ft |= RsIdentityListModel::FILTER_TYPE_OWNER_NAME;
break; if(!ui->idTreeWidget->isColumnHidden(RsIdentityListModel::COLUMN_THREAD_OWNER_ID)) ft |= RsIdentityListModel::FILTER_TYPE_OWNER_ID;
default:
case RsIdentityListModel::COLUMN_THREAD_NAME: ft = RsIdentityListModel::FILTER_TYPE_NAME;
break;
}
mIdListModel->setFilter(ft,{ text }); mIdListModel->setFilter(ft,{ text });
} }

View file

@ -127,7 +127,7 @@
<enum>Qt::NoFocus</enum> <enum>Qt::NoFocus</enum>
</property> </property>
<property name="icon"> <property name="icon">
<iconset resource="../icons.qrc"> <iconset resource="../images.qrc">
<normaloff>:/icons/help_64.png</normaloff>:/icons/help_64.png</iconset> <normaloff>:/icons/help_64.png</normaloff>:/icons/help_64.png</iconset>
</property> </property>
<property name="checkable"> <property name="checkable">
@ -173,7 +173,11 @@
<number>1</number> <number>1</number>
</property> </property>
<item> <item>
<widget class="LineEditClear" name="filterLineEdit"/> <widget class="QLineEdit" name="filterLineEdit">
<property name="placeholderText">
<string>Search...</string>
</property>
</widget>
</item> </item>
<item> <item>
<widget class="QToolButton" name="toolButton_New"> <widget class="QToolButton" name="toolButton_New">
@ -1037,11 +1041,6 @@ border-image: url(:/images/closepressed.png)
</action> </action>
</widget> </widget>
<customwidgets> <customwidgets>
<customwidget>
<class>LineEditClear</class>
<extends>QLineEdit</extends>
<header>gui/common/LineEditClear.h</header>
</customwidget>
<customwidget> <customwidget>
<class>RSComboBox</class> <class>RSComboBox</class>
<extends>QComboBox</extends> <extends>QComboBox</extends>
@ -1063,8 +1062,8 @@ border-image: url(:/images/closepressed.png)
<tabstop>idTreeWidget</tabstop> <tabstop>idTreeWidget</tabstop>
</tabstops> </tabstops>
<resources> <resources>
<include location="../icons.qrc"/>
<include location="../images.qrc"/> <include location="../images.qrc"/>
<include location="../icons.qrc"/>
</resources> </resources>
<connections/> <connections/>
</ui> </ui>

View file

@ -367,29 +367,25 @@ QVariant RsIdentityListModel::data(const QModelIndex &index, int role) const
bool RsIdentityListModel::passesFilter(const EntryIndex& e,int /*column*/) const bool RsIdentityListModel::passesFilter(const EntryIndex& e,int /*column*/) const
{ {
QString s ; QString s ;
bool passes_strings = true ;
if(e.type == ENTRY_TYPE_IDENTITY && !mFilterStrings.empty()) if(mFilterStrings.empty() || e.type != ENTRY_TYPE_IDENTITY)
{ return true;
switch(mFilterType)
{
case FILTER_TYPE_ID: s = displayRole(e,COLUMN_THREAD_ID).toString();
break;
case FILTER_TYPE_NAME: s = displayRole(e,COLUMN_THREAD_NAME).toString(); auto passes_strings = [&](const QString& s) -> bool {
if(s.isNull()) bool res = true;
passes_strings = false;
break;
case FILTER_TYPE_NONE:
RS_ERR("None Type for Filter.");
};
}
if(!s.isNull())
for(auto iter(mFilterStrings.begin()); iter != mFilterStrings.end(); ++iter) for(auto iter(mFilterStrings.begin()); iter != mFilterStrings.end(); ++iter)
passes_strings = passes_strings && s.contains(*iter,Qt::CaseInsensitive); res = res && s.contains(*iter,Qt::CaseInsensitive);
return passes_strings; return res;
};
if((mFilterType & FilterType::FILTER_TYPE_ID) && passes_strings(displayRole(e,COLUMN_THREAD_ID ).toString())) return true;
if((mFilterType & FilterType::FILTER_TYPE_NAME) && passes_strings(displayRole(e,COLUMN_THREAD_NAME ).toString())) return true;
if((mFilterType & FilterType::FILTER_TYPE_OWNER_ID) && passes_strings(displayRole(e,COLUMN_THREAD_OWNER_ID ).toString())) return true;
if((mFilterType & FilterType::FILTER_TYPE_OWNER_NAME) && passes_strings(displayRole(e,COLUMN_THREAD_OWNER_NAME).toString())) return true;
return false;
} }
QVariant RsIdentityListModel::filterRole(const EntryIndex& e,int column) const QVariant RsIdentityListModel::filterRole(const EntryIndex& e,int column) const
@ -406,7 +402,7 @@ uint32_t RsIdentityListModel::updateFilterStatus(ForumModelIndex /*i*/,int /*col
} }
void RsIdentityListModel::setFilter(FilterType filter_type, const QStringList& strings) void RsIdentityListModel::setFilter(uint8_t filter_type, const QStringList& strings)
{ {
#ifdef DEBUG_MODEL #ifdef DEBUG_MODEL
std::cerr << "Setting filter to filter_type=" << int(filter_type) << " and strings to " ; std::cerr << "Setting filter to filter_type=" << int(filter_type) << " and strings to " ;

View file

@ -60,7 +60,9 @@ public:
enum FilterType{ FILTER_TYPE_NONE = 0x00, enum FilterType{ FILTER_TYPE_NONE = 0x00,
FILTER_TYPE_ID = 0x01, FILTER_TYPE_ID = 0x01,
FILTER_TYPE_NAME = 0x02 FILTER_TYPE_NAME = 0x02,
FILTER_TYPE_OWNER_NAME = 0x04,
FILTER_TYPE_OWNER_ID = 0x08
}; };
enum EntryType{ ENTRY_TYPE_TOP_LEVEL = 0x00, enum EntryType{ ENTRY_TYPE_TOP_LEVEL = 0x00,
@ -142,7 +144,7 @@ public:
RsGxsId getIdentity(const QModelIndex&) const; RsGxsId getIdentity(const QModelIndex&) const;
int getCategory(const QModelIndex&) const; int getCategory(const QModelIndex&) const;
void setFilter(FilterType filter_type, const QStringList& strings) ; void setFilter(uint8_t filter_type, const QStringList& strings) ;
void expandItem(const QModelIndex&) ; void expandItem(const QModelIndex&) ;
void collapseItem(const QModelIndex&) ; void collapseItem(const QModelIndex&) ;
@ -218,7 +220,7 @@ private:
uint32_t updateFilterStatus(ForumModelIndex i,int column,const QStringList& strings); uint32_t updateFilterStatus(ForumModelIndex i,int column,const QStringList& strings);
QStringList mFilterStrings; QStringList mFilterStrings;
FilterType mFilterType; uint8_t mFilterType;
rstime_t mLastInternalDataUpdate; rstime_t mLastInternalDataUpdate;
rstime_t mLastNodeUpdate;; rstime_t mLastNodeUpdate;;
@ -245,3 +247,4 @@ private:
mutable QTimer *mIdentityUpdateTimer; mutable QTimer *mIdentityUpdateTimer;
}; };