Close #23: Improve limiting to pattern in certificate tree view

CA certificates that don't match the search pattern, but have
matching childs are shown disabled with internal name.
This commit is contained in:
Christian Hohnstaedt 2018-04-21 23:24:52 +02:00
parent 4821a181e9
commit 331b79bd9d
3 changed files with 33 additions and 11 deletions

View File

@ -282,13 +282,15 @@ void db_base::deletePKI(QModelIndex idx)
void db_base::showItem(const QModelIndex &index)
{
showPki(static_cast<pki_base*>(index.internalPointer()));
pki_base *pki = static_cast<pki_base*>(index.internalPointer());
if (pki->isVisible() == 1)
showPki(pki);
}
void db_base::showItem(const QString name)
{
pki_base *pki = lookupPki<pki_base>(name.toULongLong());
if (pki)
if (pki && pki->isVisible() == 1)
showPki(pki);
}
@ -433,7 +435,8 @@ QVariant db_base::data(const QModelIndex &index, int role) const
switch (role) {
case Qt::EditRole:
case Qt::DisplayRole:
return item->column_data(hd);
if (hd->id == HD_internal_name || item->isVisible() == 1)
return item->column_data(hd);
case Qt::DecorationRole:
return item->getIcon(hd);
case Qt::TextAlignmentRole:
@ -443,7 +446,7 @@ QVariant db_base::data(const QModelIndex &index, int role) const
case Qt::BackgroundRole:
return item->bg_color(hd);
case Qt::UserRole:
return item->visible();
return item->isVisible();
}
return QVariant();
}
@ -479,14 +482,16 @@ QVariant db_base::headerData(int section, Qt::Orientation orientation,
Qt::ItemFlags db_base::flags(const QModelIndex &index) const
{
if (!index.isValid())
return Qt::ItemIsEnabled;
return Qt::NoItemFlags;
Qt::ItemFlags defaultFlags = QAbstractItemModel::flags(index);
defaultFlags |= Qt::ItemIsDragEnabled;
if (index.column() == 0)
return defaultFlags |= Qt::ItemIsEditable;
return defaultFlags;
Qt::ItemFlags flags = QAbstractItemModel::flags(index) |
Qt::ItemIsDragEnabled;
pki_base *item = static_cast<pki_base*>(index.internalPointer());
if (item->isVisible() == 2)
flags &= ~Qt::ItemIsEnabled;
else if (index.column() == 0)
flags |= Qt::ItemIsEditable;
return flags;
}
bool db_base::setData(const QModelIndex &index, const QVariant &value, int role)

View File

@ -53,6 +53,21 @@ bool pki_base::visible() const
comment.contains(limitPattern);
}
bool pki_base::childVisible() const
{
foreach(pki_base *child, childItems)
if (child->isVisible())
return true;
return false;
}
int pki_base::isVisible()
{
if (limitPattern.isEmpty())
return 1;
return visible() ? 1 : childVisible() ? 2 : 0;
}
QString pki_base::getMsg(msg_type msg) const
{
return tr("Internal error: Unexpected message: %1 %2")

View File

@ -153,6 +153,8 @@ class pki_base : public QObject
virtual QVariant column_data(dbheader *hd) const;
virtual QVariant getIcon(dbheader *hd) const;
virtual bool visible() const;
int isVisible();
bool childVisible() const;
/* SQL management methods */
QSqlError insertSql();