diff --git a/ChangeLog.txt b/ChangeLog.txt index ad476471f..e4aca2eab 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -39,6 +39,7 @@ - New internal variable RotationElArc. - [#794] Better control over scale value. - [#392] Improve feature: Show progress bar while opening pattern file. +- [#732] Tape app. Improve Database dialog. # Version 0.5.1 - [#683] Tool Seam allowance's dialog is off screen on small resolutions. diff --git a/src/app/tape/dialogs/dialogmdatabase.cpp b/src/app/tape/dialogs/dialogmdatabase.cpp index 58faa2e7d..d15624724 100644 --- a/src/app/tape/dialogs/dialogmdatabase.cpp +++ b/src/app/tape/dialogs/dialogmdatabase.cpp @@ -68,6 +68,7 @@ DialogMDataBase::DialogMDataBase(const QStringList &list, QWidget *parent) connect(ui->treeWidget, &QTreeWidget::itemChanged, this, &DialogMDataBase::UpdateChecks); connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &DialogMDataBase::ShowDescription); connect(ui->treeWidget, &QTreeWidget::customContextMenuRequested, this, &DialogMDataBase::TreeMenu); + connect(ui->lineEditSearch, &QLineEdit::textChanged, this, &DialogMDataBase::FilterMeasurements); ReadSettings(); } @@ -105,6 +106,7 @@ DialogMDataBase::DialogMDataBase(QWidget *parent) connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &DialogMDataBase::ShowDescription); connect(ui->treeWidget, &QTreeWidget::customContextMenuRequested, this, &DialogMDataBase::TreeMenu); connect(ui->treeWidget, &QTreeWidget::itemActivated, this, &DialogMDataBase::ShowDescription); + connect(ui->lineEditSearch, &QLineEdit::textChanged, this, &DialogMDataBase::FilterMeasurements); ReadSettings(); } @@ -307,19 +309,7 @@ void DialogMDataBase::UpdateChecks(QTreeWidgetItem *item, int column) //--------------------------------------------------------------------------------------------------------------------- void DialogMDataBase::ShowDescription(QTreeWidgetItem *item, int column) { - if (column != 0 && column != -1) - { - ui->textEdit->clear(); - return; - } - - if (item == nullptr) - { - ui->textEdit->clear(); - return; - } - - if (item->childCount() != 0) + if ((column != 0 && column != -1) || item == nullptr || item->childCount() != 0) { ui->textEdit->clear(); return; @@ -399,6 +389,31 @@ void DialogMDataBase::Recheck() } } +//--------------------------------------------------------------------------------------------------------------------- +void DialogMDataBase::FilterMeasurements(const QString &search) +{ + FilterGroup(groupA, search); + FilterGroup(groupB, search); + FilterGroup(groupC, search); + FilterGroup(groupD, search); + FilterGroup(groupE, search); + FilterGroup(groupF, search); + FilterGroup(groupG, search); + FilterGroup(groupH, search); + FilterGroup(groupI, search); + FilterGroup(groupJ, search); + FilterGroup(groupK, search); + FilterGroup(groupL, search); + FilterGroup(groupM, search); + FilterGroup(groupN, search); + FilterGroup(groupO, search); + FilterGroup(groupP, search); + FilterGroup(groupQ, search); + + const QList list = ui->treeWidget->selectedItems(); + list.isEmpty() ? ShowDescription(nullptr, -1) : ShowDescription(list.first(), 0); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogMDataBase::InitDataBase(const QStringList &list) { @@ -432,6 +447,29 @@ void DialogMDataBase::InitGroup(QTreeWidgetItem **group, const QString &groupNam } } +//--------------------------------------------------------------------------------------------------------------------- +void DialogMDataBase::FilterGroup(QTreeWidgetItem *group, const QString &search) +{ + SCASSERT(group != nullptr) + + bool match = false; + for (int i=0; i < group->childCount(); ++i) + { + QTreeWidgetItem *childItem = group->child(i); + const bool hidden = (not childItem->isSelected() + && not childItem->text(0).contains(search, Qt::CaseInsensitive)) + || (childItem->isSelected() && not ui->textEdit->toPlainText().contains(search, Qt::CaseInsensitive) + && not childItem->text(0).contains(search, Qt::CaseInsensitive)); + childItem->setHidden(hidden); + if (not hidden) + { + match = true; + } + } + + group->setHidden(not group->text(0).contains(search, Qt::CaseInsensitive) && not match); +} + //--------------------------------------------------------------------------------------------------------------------- QTreeWidgetItem *DialogMDataBase::AddGroup(const QString &text) { diff --git a/src/app/tape/dialogs/dialogmdatabase.h b/src/app/tape/dialogs/dialogmdatabase.h index f15ed3b88..d9ff31ded 100644 --- a/src/app/tape/dialogs/dialogmdatabase.h +++ b/src/app/tape/dialogs/dialogmdatabase.h @@ -62,6 +62,7 @@ private slots: void ShowDescription(QTreeWidgetItem *item, int column); void TreeMenu(const QPoint &pos); void Recheck(); + void FilterMeasurements(const QString &search); private: Q_DISABLE_COPY(DialogMDataBase) @@ -90,6 +91,7 @@ private: void InitDataBase(const QStringList &list = QStringList()); void InitGroup(QTreeWidgetItem **group, const QString &groupName, const QStringList &mList, const QStringList &list = QStringList()); + void FilterGroup(QTreeWidgetItem *group, const QString &search); Q_REQUIRED_RESULT QTreeWidgetItem *AddGroup(const QString &text); diff --git a/src/app/tape/dialogs/dialogmdatabase.ui b/src/app/tape/dialogs/dialogmdatabase.ui index 9fba5a0d3..de2d4c6e2 100644 --- a/src/app/tape/dialogs/dialogmdatabase.ui +++ b/src/app/tape/dialogs/dialogmdatabase.ui @@ -24,8 +24,35 @@ true + + + + + + Search: + + + + + + + Search + + + true + + + + + + + + 0 + 1 + + Qt::Horizontal @@ -64,9 +91,15 @@ 0 + + false + true + + Select measurement +