From e7be27d6a54d82f92c5af488db578d0305536149 Mon Sep 17 00:00:00 2001 From: Douglas Caskey Date: Wed, 4 Nov 2020 21:54:49 -0500 Subject: [PATCH] Fix issue #347 This fixes the crashing when accessing the context menuu in the tree widget. Also adds a clear button in the find search field. --- .../seamlymepreferencesconfigurationpage.cpp | 2 +- src/app/seamlyme/dialogs/dialogmdatabase.cpp | 451 +++++++++--------- src/app/seamlyme/dialogs/dialogmdatabase.h | 105 ++-- src/app/seamlyme/dialogs/dialogmdatabase.ui | 11 +- src/app/seamlyme/mapplication.cpp | 4 +- src/app/seamlyme/mapplication.h | 2 +- src/app/seamlyme/tmainwindow.cpp | 2 +- src/app/seamlyme/tmainwindow.ui | 23 +- src/libs/vmisc/vseamlymesettings.cpp | 4 +- src/libs/vmisc/vseamlymesettings.h | 4 +- 10 files changed, 304 insertions(+), 304 deletions(-) diff --git a/src/app/seamlyme/dialogs/configpages/seamlymepreferencesconfigurationpage.cpp b/src/app/seamlyme/dialogs/configpages/seamlymepreferencesconfigurationpage.cpp index 337f2dafe4c8..7591f2290bd3 100644 --- a/src/app/seamlyme/dialogs/configpages/seamlymepreferencesconfigurationpage.cpp +++ b/src/app/seamlyme/dialogs/configpages/seamlymepreferencesconfigurationpage.cpp @@ -163,7 +163,7 @@ void SeamlyMePreferencesConfigurationPage::Apply() // Part about measurments will not be updated automatically qApp->RetranslateTables(); - qApp->RetranslateGroups(); + qApp->retranslateGroups(); } if (m_defGradationChanged) diff --git a/src/app/seamlyme/dialogs/dialogmdatabase.cpp b/src/app/seamlyme/dialogs/dialogmdatabase.cpp index b36686dc89f2..81e0790f082a 100644 --- a/src/app/seamlyme/dialogs/dialogmdatabase.cpp +++ b/src/app/seamlyme/dialogs/dialogmdatabase.cpp @@ -2,7 +2,7 @@ * * * Copyright (C) 2017 Seamly, LLC * * * - * https://github.com/fashionfreedom/seamly2d * + * https://github.com/fashionfreedom/seamly2d * * * *************************************************************************** ** @@ -61,76 +61,88 @@ //--------------------------------------------------------------------------------------------------------------------- MeasurementDatabaseDialog::MeasurementDatabaseDialog(const QStringList &list, QWidget *parent) - :QDialog(parent), - ui(new Ui::DialogMDataBase), - selectMode(true), - measurements(list), - newMeasurements(), - groupA(nullptr), - groupB(nullptr), - groupC(nullptr), - groupD(nullptr), - groupE(nullptr), - groupF(nullptr), - groupG(nullptr), - groupH(nullptr), - groupI(nullptr), - groupJ(nullptr), - groupK(nullptr), - groupL(nullptr), - groupM(nullptr), - groupN(nullptr), - groupO(nullptr), - groupP(nullptr), - groupQ(nullptr) + : QDialog(parent) + , ui(new Ui::DialogMDataBase) + , selectMode(true) + , measurements(list) + , newMeasurements() + , groupA(nullptr) + , groupB(nullptr) + , groupC(nullptr) + , groupD(nullptr) + , groupE(nullptr) + , groupF(nullptr) + , groupG(nullptr) + , groupH(nullptr) + , groupI(nullptr) + , groupJ(nullptr) + , groupK(nullptr) + , groupL(nullptr) + , groupM(nullptr) + , groupN(nullptr) + , groupO(nullptr) + , groupP(nullptr) + , groupQ(nullptr) { ui->setupUi(this); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + +#if defined(Q_OS_MAC) + setWindowFlags(Qt::Window); +#endif + initDataBase(); ui->treeWidget->installEventFilter(this); - connect(ui->lineEditFind, &QLineEdit::textChanged, this, &MeasurementDatabaseDialog::filter); - connect(ui->treeWidget, &QTreeWidget::itemChanged, this, &MeasurementDatabaseDialog::UpdateChecks); - connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MeasurementDatabaseDialog::ShowDescription); - connect(ui->treeWidget, &QTreeWidget::customContextMenuRequested, this, &MeasurementDatabaseDialog::TreeMenu); + connect(ui->lineEditFind, &QLineEdit::textChanged, this, &MeasurementDatabaseDialog::filterGroups); + connect(ui->treeWidget, &QTreeWidget::itemChanged, this, &MeasurementDatabaseDialog::updateChecks); + connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MeasurementDatabaseDialog::showDescription); + connect(ui->treeWidget, &QTreeWidget::customContextMenuRequested, this, &MeasurementDatabaseDialog::treeContextMenu); readSettings(); } //--------------------------------------------------------------------------------------------------------------------- MeasurementDatabaseDialog::MeasurementDatabaseDialog(QWidget *parent) - :QDialog(parent), - ui(new Ui::DialogMDataBase), - selectMode(false), - measurements(), - newMeasurements(), - groupA(nullptr), - groupB(nullptr), - groupC(nullptr), - groupD(nullptr), - groupE(nullptr), - groupF(nullptr), - groupG(nullptr), - groupH(nullptr), - groupI(nullptr), - groupJ(nullptr), - groupK(nullptr), - groupL(nullptr), - groupM(nullptr), - groupN(nullptr), - groupO(nullptr), - groupP(nullptr), - groupQ(nullptr) + : QDialog(parent) + , ui(new Ui::DialogMDataBase) + , selectMode(false) + , measurements() + , newMeasurements() + , groupA(nullptr) + , groupB(nullptr) + , groupC(nullptr) + , groupD(nullptr) + , groupE(nullptr) + , groupF(nullptr) + , groupG(nullptr) + , groupH(nullptr) + , groupI(nullptr) + , groupJ(nullptr) + , groupK(nullptr) + , groupL(nullptr) + , groupM(nullptr) + , groupN(nullptr) + , groupO(nullptr) + , groupP(nullptr) + , groupQ(nullptr) { ui->setupUi(this); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + +#if defined(Q_OS_MAC) + setWindowFlags(Qt::Window); +#endif + initDataBase(); ui->treeWidget->installEventFilter(this); - connect(ui->lineEditFind, &QLineEdit::textChanged, this, &MeasurementDatabaseDialog::filter); - connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MeasurementDatabaseDialog::ShowDescription); - connect(ui->treeWidget, &QTreeWidget::customContextMenuRequested, this, &MeasurementDatabaseDialog::TreeMenu); - connect(ui->treeWidget, &QTreeWidget::itemActivated, this, &MeasurementDatabaseDialog::ShowDescription); + connect(ui->lineEditFind, &QLineEdit::textChanged, this, &MeasurementDatabaseDialog::filterGroups); + connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MeasurementDatabaseDialog::showDescription); + connect(ui->treeWidget, &QTreeWidget::customContextMenuRequested, this, &MeasurementDatabaseDialog::treeContextMenu); + connect(ui->treeWidget, &QTreeWidget::itemActivated, this, &MeasurementDatabaseDialog::showDescription); readSettings(); } @@ -149,7 +161,7 @@ QStringList MeasurementDatabaseDialog::getNewMeasurementNames() const } //--------------------------------------------------------------------------------------------------------------------- -void MeasurementDatabaseDialog::RetranslateGroups() +void MeasurementDatabaseDialog::retranslateGroups() { retranslateGroup(groupA, groupAText, ListGroupA()); retranslateGroup(groupB, groupBText, ListGroupB()); @@ -169,15 +181,15 @@ void MeasurementDatabaseDialog::RetranslateGroups() retranslateGroup(groupP, groupPText, ListGroupP()); retranslateGroup(groupQ, groupQText, ListGroupQ()); - ShowDescription(ui->treeWidget->currentItem(), 0); + showDescription(ui->treeWidget->currentItem(), 0); } //--------------------------------------------------------------------------------------------------------------------- -QString MeasurementDatabaseDialog::imgTag(const QString &number) +QString MeasurementDatabaseDialog::imageUrl(const QString &number) { QString imgUrl(""); // In case of error const QString filePath = QString("://diagrams/%1.svg").arg(MapDiagrams(qApp->TrVars(), number)); - if (QFileInfo(filePath).exists()) + if (QFileInfo::exists(filePath)) { // Load your SVG QSvgRenderer renderer; @@ -239,14 +251,14 @@ bool MeasurementDatabaseDialog::eventFilter(QObject *target, QEvent *event) { const QModelIndex model = ui->treeWidget->indexAbove(ui->treeWidget->currentIndex()); QTreeWidgetItem *item = ui->treeWidget->itemAbove(ui->treeWidget->currentItem()); - ShowDescription(item, model.column()); + showDescription(item, model.column()); break; } case Qt::Key_Down: { const QModelIndex model = ui->treeWidget->indexBelow(ui->treeWidget->currentIndex()); QTreeWidgetItem *item = ui->treeWidget->itemBelow(ui->treeWidget->currentItem()); - ShowDescription(item, model.column()); + showDescription(item, model.column()); break; } default: @@ -257,7 +269,7 @@ bool MeasurementDatabaseDialog::eventFilter(QObject *target, QEvent *event) } //--------------------------------------------------------------------------------------------------------------------- -void MeasurementDatabaseDialog::UpdateChecks(QTreeWidgetItem *item, int column) +void MeasurementDatabaseDialog::updateChecks(QTreeWidgetItem *item, int column) { bool diff = false; if (column != 0 && column != -1) @@ -268,12 +280,12 @@ void MeasurementDatabaseDialog::UpdateChecks(QTreeWidgetItem *item, int column) if (item->childCount() != 0 && item->checkState(0) != Qt::PartiallyChecked && column != -1) { bool flag = false; // Check if we could change atleast one children - Qt::CheckState checkState = item->checkState(0); + Qt::CheckState state = item->checkState(0); for (int i = 0; i < item->childCount(); ++i) { - if (not measurements.contains(item->child(i)->data(0, Qt::UserRole).toString())) + if (!measurements.contains(item->child(i)->data(0, Qt::UserRole).toString())) { - item->child(i)->setCheckState(0, checkState); + item->child(i)->setCheckState(0, state); flag = true; } @@ -287,16 +299,16 @@ void MeasurementDatabaseDialog::UpdateChecks(QTreeWidgetItem *item, int column) { QString itemName = item->data(0, Qt::UserRole).toString(); - Qt::CheckState checkState = item->checkState(0); + Qt::CheckState state = item->checkState(0); - if (checkState == Qt::CheckState::Unchecked) + if (state == Qt::CheckState::Unchecked) { newMeasurements.removeOne(itemName); } - else if (checkState == Qt::CheckState::Checked && - not measurements.contains(itemName) && - not newMeasurements.contains(itemName) && - not itemName.isEmpty()) + else if (state == Qt::CheckState::Checked && + !measurements.contains(itemName) && + !newMeasurements.contains(itemName) && + !itemName.isEmpty()) { newMeasurements.append(itemName); } @@ -323,26 +335,14 @@ void MeasurementDatabaseDialog::UpdateChecks(QTreeWidgetItem *item, int column) parent->setCheckState(0, item->checkState(0)); } - UpdateChecks(parent, -1); + updateChecks(parent, -1); } } //--------------------------------------------------------------------------------------------------------------------- -void MeasurementDatabaseDialog::ShowDescription(QTreeWidgetItem *item, int column) +void MeasurementDatabaseDialog::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; @@ -356,21 +356,21 @@ void MeasurementDatabaseDialog::ShowDescription(QTreeWidgetItem *item, int colum "normal\"> %1
%2. %3

" "

%4

") - .arg(imgTag(number)) - .arg(number) - .arg(trv->GuiText(name)) - .arg(trv->Description(name)); + .arg(imageUrl(number)) + .arg(number) + .arg(trv->GuiText(name)) + .arg(trv->Description(name)); ui->textEdit->setHtml(text); } //--------------------------------------------------------------------------------------------------------------------- -void MeasurementDatabaseDialog::TreeMenu(const QPoint &pos) +void MeasurementDatabaseDialog::treeContextMenu(const QPoint &pos) { // Because item also will be selected need to show description const QModelIndex model = ui->treeWidget->currentIndex(); QTreeWidgetItem *item = ui->treeWidget->currentItem(); - ShowDescription(item, model.column()); + showDescription(item, model.column()); QAction *actionCollapseAll = new QAction(tr("Collapse All"), this); connect(actionCollapseAll, &QAction::triggered, ui->treeWidget, &QTreeWidget::collapseAll); @@ -385,22 +385,22 @@ void MeasurementDatabaseDialog::TreeMenu(const QPoint &pos) if (selectMode) { QString actionName; - GlobalCheckState() == Qt::Checked ? actionName = tr("Check all") : actionName = tr("Uncheck all"); + globalCheckState() == Qt::Checked ? actionName = tr("Check all") : actionName = tr("Uncheck all"); - QAction *actionRecheck = new QAction(actionName, this); - connect(actionRecheck, &QAction::triggered, this, &MeasurementDatabaseDialog::Recheck); + QAction *actionRecheckState = new QAction(actionName, this); + connect(actionRecheckState, &QAction::triggered, this, &MeasurementDatabaseDialog::recheckState); - menu.addAction(actionRecheck); + menu.addAction(actionRecheckState); } menu.exec(ui->treeWidget->mapToGlobal(pos)); } //--------------------------------------------------------------------------------------------------------------------- -void MeasurementDatabaseDialog::Recheck() +void MeasurementDatabaseDialog::recheckState() { if (selectMode) { - const Qt::CheckState check = GlobalCheckState(); + const Qt::CheckState check = globalCheckState(); changeCheckState(groupA, check); changeCheckState(groupB, check); @@ -423,169 +423,156 @@ void MeasurementDatabaseDialog::Recheck() } //--------------------------------------------------------------------------------------------------------------------- -void MeasurementDatabaseDialog::initDataBase(const QStringList &newList) +void MeasurementDatabaseDialog::initDataBase(const QStringList &list) { - initGroup(&groupA, groupAText, ListGroupA(), newList); - initGroup(&groupB, groupBText, ListGroupB(), newList); - initGroup(&groupC, groupCText, ListGroupC(), newList); - initGroup(&groupD, groupDText, ListGroupD(), newList); - initGroup(&groupE, groupEText, ListGroupE(), newList); - initGroup(&groupF, groupFText, ListGroupF(), newList); - initGroup(&groupG, groupGText, ListGroupG(), newList); - initGroup(&groupH, groupHText, ListGroupH(), newList); - initGroup(&groupI, groupIText, ListGroupI(), newList); - initGroup(&groupJ, groupJText, ListGroupJ(), newList); - initGroup(&groupK, groupKText, ListGroupK(), newList); - initGroup(&groupL, groupLText, ListGroupL(), newList); - initGroup(&groupM, groupMText, ListGroupM(), newList); - initGroup(&groupN, groupNText, ListGroupN(), newList); - initGroup(&groupO, groupOText, ListGroupO(), newList); - initGroup(&groupP, groupPText, ListGroupP(), newList); - initGroup(&groupQ, groupQText, ListGroupQ(), newList); -} - + initGroup(&groupA, groupAText, ListGroupA(), list); + initGroup(&groupB, groupBText, ListGroupB(), list); + initGroup(&groupC, groupCText, ListGroupC(), list); + initGroup(&groupD, groupDText, ListGroupD(), list); + initGroup(&groupE, groupEText, ListGroupE(), list); + initGroup(&groupF, groupFText, ListGroupF(), list); + initGroup(&groupG, groupGText, ListGroupG(), list); + initGroup(&groupH, groupHText, ListGroupH(), list); + initGroup(&groupI, groupIText, ListGroupI(), list); + initGroup(&groupJ, groupJText, ListGroupJ(), list); + initGroup(&groupK, groupKText, ListGroupK(), list); + initGroup(&groupL, groupLText, ListGroupL(), list); + initGroup(&groupM, groupMText, ListGroupM(), list); + initGroup(&groupN, groupNText, ListGroupN(), list); + initGroup(&groupO, groupOText, ListGroupO(), list); + initGroup(&groupP, groupPText, ListGroupP(), list); + initGroup(&groupQ, groupQText, ListGroupQ(), list); +} + //--------------------------------------------------------------------------------------------------------------------- -void MeasurementDatabaseDialog::initGroup(QTreeWidgetItem **group, const QString &groupName, const QStringList &groupList, - const QStringList &newList) -{ - *group = AddGroup(groupName); +void MeasurementDatabaseDialog::initGroup(QTreeWidgetItem **group, const QString &groupName, + const QStringList &groupList, const QStringList &measurementList) +{ + *group = addMeasurementGroup(groupName); for (int i=0; i < groupList.size(); ++i) - { - addMeasurement(*group, groupList.at(i), newList); - } -} - + { + addMeasurement(*group, groupList.at(i), measurementList); + } +} + //--------------------------------------------------------------------------------------------------------------------- -QTreeWidgetItem *MeasurementDatabaseDialog::AddGroup(const QString &groupName) -{ +QTreeWidgetItem *MeasurementDatabaseDialog::addMeasurementGroup(const QString &groupName) +{ QTreeWidgetItem *group = new QTreeWidgetItem(ui->treeWidget); group->setText(0, groupName); group->setToolTip(0, groupName); - group->setExpanded(true); - if (selectMode) - { + group->setExpanded(true); + if (selectMode) + { group->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled); group->setCheckState(0, Qt::Unchecked); group->setBackground(0, QBrush(Qt::lightGray)); - } - return group; -} - + } + return group; +} + //--------------------------------------------------------------------------------------------------------------------- -void MeasurementDatabaseDialog::addMeasurement(QTreeWidgetItem *group, const QString &name, const QStringList &newList) -{ - SCASSERT(group != nullptr) - - QTreeWidgetItem *m = new QTreeWidgetItem(group); - - if (selectMode) - { +void MeasurementDatabaseDialog::addMeasurement(QTreeWidgetItem *group, const QString &name, const QStringList &list) +{ + SCASSERT(group != nullptr) + + QTreeWidgetItem *item = new QTreeWidgetItem(group); + + if (selectMode) + { if (measurements.contains(name)) - { - m->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); - m->setCheckState(0, Qt::Checked); - m->setBackground(0, QBrush(Qt::yellow)); + { + item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + item->setCheckState(0, Qt::Checked); + item->setBackground(0, QBrush(QColor(231, 231, 0, 127))); } - else if (newList.contains(name)) + else if (list.contains(name)) { - m->setCheckState(0, Qt::Checked); + item->setCheckState(0, Qt::Checked); } else - { - m->setCheckState(0, Qt::Unchecked); + { + item->setCheckState(0, Qt::Unchecked); } - - UpdateChecks(m, 0); - } - + + updateChecks(item, 0); + } + const QString text = qApp->TrVars()->MNumber(name) + ". " + qApp->TrVars()->MToUser(name); - m->setText(0, text); - m->setToolTip(0, text); - m->setData(0, Qt::UserRole, name); -} - + item->setText(0, text); + item->setToolTip(0, text); + item->setData(0, Qt::UserRole, name); +} + //--------------------------------------------------------------------------------------------------------------------- void MeasurementDatabaseDialog::readSettings() -{ - restoreGeometry(qApp->SeamlyMeSettings()->GetDataBaseGeometry()); -} - +{ + restoreGeometry(qApp->SeamlyMeSettings()->getDataBaseGeometry()); +} + //--------------------------------------------------------------------------------------------------------------------- void MeasurementDatabaseDialog::writeSettings() -{ - qApp->SeamlyMeSettings()->SetDataBaseGeometry(saveGeometry()); -} +{ + qApp->SeamlyMeSettings()->setDataBaseGeometry(saveGeometry()); +} //--------------------------------------------------------------------------------------------------------------------- -void MeasurementDatabaseDialog::filter(const QString term) +void MeasurementDatabaseDialog::filterGroups(const QString searchString) { + filterGroup(groupA, searchString); + filterGroup(groupB, searchString); + filterGroup(groupC, searchString); + filterGroup(groupD, searchString); + filterGroup(groupE, searchString); + filterGroup(groupF, searchString); + filterGroup(groupG, searchString); + filterGroup(groupH, searchString); + filterGroup(groupI, searchString); + filterGroup(groupJ, searchString); + filterGroup(groupK, searchString); + filterGroup(groupL, searchString); + filterGroup(groupM, searchString); + filterGroup(groupN, searchString); + filterGroup(groupO, searchString); + filterGroup(groupP, searchString); + filterGroup(groupQ, searchString); + + const QList selected = ui->treeWidget->selectedItems(); + selected.isEmpty() ? showDescription(nullptr, -1) : showDescription(selected.first(), 0); +} - delete groupA; - delete groupB; - delete groupC; - delete groupD; - delete groupE; - delete groupF; - delete groupG; - delete groupH; - delete groupI; - delete groupJ; - delete groupK; - delete groupL; - delete groupM; - delete groupN; - delete groupO; - delete groupP; - delete groupQ; - - groupA = nullptr; - groupB = nullptr; - groupC = nullptr; - groupD = nullptr; - groupE = nullptr; - groupF = nullptr; - groupG = nullptr; - groupH = nullptr; - groupI = nullptr; - groupJ = nullptr; - groupK = nullptr; - groupL = nullptr; - groupM = nullptr; - groupN = nullptr; - groupO = nullptr; - groupP = nullptr; - groupQ = nullptr; - - if (term.isEmpty()) +void MeasurementDatabaseDialog::filterGroup(QTreeWidgetItem *group, const QString &searchString) +{ + SCASSERT(group != nullptr) + + bool isMatch = false; + for (int i=0; i < group->childCount(); ++i) { - initDataBase(newMeasurements); - return; + QTreeWidgetItem *item = group->child(i); + //const QString description = QTextDocumentFragment::fromHtml(ItemFullDescription(item, false)) + // .toPlainText(); + + //const bool isHidden = !item->text(0).contains(searchString, Qt::CaseInsensitive) + // && !description.contains(searchString, Qt::CaseInsensitive); + + const bool isHidden = !item->text(0).contains(searchString, Qt::CaseInsensitive); + + item->setHidden(isHidden); + if (!isHidden) + { + isMatch = true; + } } - if (ListGroupA().filter(term).count() > 0) { initGroup(&groupA, groupAText, ListGroupA().filter(term), newMeasurements); } - if (ListGroupB().filter(term).count() > 0) { initGroup(&groupB, groupBText, ListGroupB().filter(term), newMeasurements); } - if (ListGroupC().filter(term).count() > 0) { initGroup(&groupC, groupCText, ListGroupC().filter(term), newMeasurements); } - if (ListGroupD().filter(term).count() > 0) { initGroup(&groupD, groupDText, ListGroupD().filter(term), newMeasurements); } - if (ListGroupE().filter(term).count() > 0) { initGroup(&groupE, groupEText, ListGroupE().filter(term), newMeasurements); } - if (ListGroupF().filter(term).count() > 0) { initGroup(&groupF, groupFText, ListGroupF().filter(term), newMeasurements); } - if (ListGroupG().filter(term).count() > 0) { initGroup(&groupG, groupGText, ListGroupG().filter(term), newMeasurements); } - if (ListGroupH().filter(term).count() > 0) { initGroup(&groupH, groupHText, ListGroupH().filter(term), newMeasurements); } - if (ListGroupI().filter(term).count() > 0) { initGroup(&groupI, groupIText, ListGroupI().filter(term), newMeasurements); } - if (ListGroupJ().filter(term).count() > 0) { initGroup(&groupJ, groupJText, ListGroupJ().filter(term), newMeasurements); } - if (ListGroupK().filter(term).count() > 0) { initGroup(&groupK, groupKText, ListGroupK().filter(term), newMeasurements); } - if (ListGroupL().filter(term).count() > 0) { initGroup(&groupL, groupLText, ListGroupL().filter(term), newMeasurements); } - if (ListGroupM().filter(term).count() > 0) { initGroup(&groupM, groupMText, ListGroupM().filter(term), newMeasurements); } - if (ListGroupN().filter(term).count() > 0) { initGroup(&groupN, groupNText, ListGroupN().filter(term), newMeasurements); } - if (ListGroupO().filter(term).count() > 0) { initGroup(&groupO, groupOText, ListGroupO().filter(term), newMeasurements); } - if (ListGroupP().filter(term).count() > 0) { initGroup(&groupP, groupPText, ListGroupP().filter(term), newMeasurements); } - if (ListGroupQ().filter(term).count() > 0) { initGroup(&groupQ, groupQText, ListGroupQ().filter(term), newMeasurements); } + group->setHidden(!group->text(0).contains(searchString, Qt::CaseInsensitive) && !isMatch); } //--------------------------------------------------------------------------------------------------------------------- -void MeasurementDatabaseDialog::retranslateGroup(QTreeWidgetItem *group, const QString &groupText, const QStringList &list) +void MeasurementDatabaseDialog::retranslateGroup(QTreeWidgetItem *group, const QString &groupName, + const QStringList &list) { - group->setText(0, groupText); - group->setToolTip(0, groupText); + group->setText(0, groupName); + group->setToolTip(0, groupName); for (int i=0; iTrVars()->MNumber(name) + ". " + qApp->TrVars()->MToUser(name); - QTreeWidgetItem *m = group->child(index); - m->setText(0, text); - m->setToolTip(0, text); + QTreeWidgetItem *item = group->child(index); + item->setText(0, text); + item->setToolTip(0, text); } //--------------------------------------------------------------------------------------------------------------------- -void MeasurementDatabaseDialog::changeCheckState(QTreeWidgetItem *group, Qt::CheckState check) +void MeasurementDatabaseDialog::changeCheckState(QTreeWidgetItem *group, Qt::CheckState state) { SCASSERT(group != nullptr) - group->setCheckState(0, check); + group->setCheckState(0, state); } //--------------------------------------------------------------------------------------------------------------------- -Qt::CheckState MeasurementDatabaseDialog::GlobalCheckState() const +Qt::CheckState MeasurementDatabaseDialog::globalCheckState() const { SCASSERT(groupA != nullptr) SCASSERT(groupB != nullptr) diff --git a/src/app/seamlyme/dialogs/dialogmdatabase.h b/src/app/seamlyme/dialogs/dialogmdatabase.h index c8041d527279..2491e64de8ed 100644 --- a/src/app/seamlyme/dialogs/dialogmdatabase.h +++ b/src/app/seamlyme/dialogs/dialogmdatabase.h @@ -2,7 +2,7 @@ * * * Copyright (C) 2017 Seamly, LLC * * * - * https://github.com/fashionfreedom/seamly2d * + * https://github.com/fashionfreedom/seamly2d * * * *************************************************************************** ** @@ -66,31 +66,31 @@ class MeasurementDatabaseDialog : public QDialog Q_OBJECT public: - explicit MeasurementDatabaseDialog(const QStringList &measurements, QWidget *parent = nullptr); - explicit MeasurementDatabaseDialog(QWidget *parent = nullptr); - virtual ~MeasurementDatabaseDialog() Q_DECL_OVERRIDE; + explicit MeasurementDatabaseDialog(const QStringList &measurements, QWidget *parent = nullptr); + explicit MeasurementDatabaseDialog(QWidget *parent = nullptr); + virtual ~MeasurementDatabaseDialog() Q_DECL_OVERRIDE; - void RetranslateGroups(); + void retranslateGroups(); - QStringList getNewMeasurementNames() const; - static QString imgTag(const QString &number); + QStringList getNewMeasurementNames() const; + static QString imageUrl(const QString &number); protected: - virtual void changeEvent(QEvent* event) Q_DECL_OVERRIDE; - virtual bool eventFilter(QObject *target, QEvent *event) Q_DECL_OVERRIDE; + virtual void changeEvent(QEvent* event) Q_DECL_OVERRIDE; + virtual bool eventFilter(QObject *target, QEvent *event) Q_DECL_OVERRIDE; private slots: - void UpdateChecks(QTreeWidgetItem *item, int column); - void ShowDescription(QTreeWidgetItem *item, int column); - void TreeMenu(const QPoint &pos); - void Recheck(); + void updateChecks(QTreeWidgetItem *item, int column); + void showDescription(QTreeWidgetItem *item, int column); + void treeContextMenu(const QPoint &pos); + void recheckState(); private: Q_DISABLE_COPY(MeasurementDatabaseDialog) Ui::DialogMDataBase *ui; - bool selectMode; - QStringList measurements; - QStringList newMeasurements; + bool selectMode; + QStringList measurements; + QStringList newMeasurements; const QString groupAText = "A. " + MeasurementDatabaseDialog::tr("Direct Height", "Measurement section"); const QString groupBText = "B. " + MeasurementDatabaseDialog::tr("Direct Width", "Measurement section"); @@ -110,41 +110,44 @@ private slots: const QString groupPText = "P. " + MeasurementDatabaseDialog::tr("Historical & Specialty", "Measurement section"); const QString groupQText = "Q. " + MeasurementDatabaseDialog::tr("Patternmaking measurements", "Measurement section"); - QTreeWidgetItem *groupA; - QTreeWidgetItem *groupB; - QTreeWidgetItem *groupC; - QTreeWidgetItem *groupD; - QTreeWidgetItem *groupE; - QTreeWidgetItem *groupF; - QTreeWidgetItem *groupG; - QTreeWidgetItem *groupH; - QTreeWidgetItem *groupI; - QTreeWidgetItem *groupJ; - QTreeWidgetItem *groupK; - QTreeWidgetItem *groupL; - QTreeWidgetItem *groupM; - QTreeWidgetItem *groupN; - QTreeWidgetItem *groupO; - QTreeWidgetItem *groupP; - QTreeWidgetItem *groupQ; - - void initDataBase(const QStringList &measurements = QStringList()); - void initGroup(QTreeWidgetItem **group, const QString &groupName, const QStringList &groupList, - const QStringList &newMeasurements = QStringList()); - - Q_REQUIRED_RESULT QTreeWidgetItem *AddGroup(const QString &text); - - void addMeasurement(QTreeWidgetItem *group, const QString &groupName, const QStringList &newMeasurements); - - void readSettings(); - void writeSettings(); - void filter(const QString term); - - void retranslateGroup(QTreeWidgetItem *group, const QString &groupText, const QStringList &measurements); - void retranslateMeasurement(QTreeWidgetItem *group, int index, const QString &name); - - void changeCheckState(QTreeWidgetItem *group, Qt::CheckState check); - Qt::CheckState GlobalCheckState() const; + QTreeWidgetItem *groupA; + QTreeWidgetItem *groupB; + QTreeWidgetItem *groupC; + QTreeWidgetItem *groupD; + QTreeWidgetItem *groupE; + QTreeWidgetItem *groupF; + QTreeWidgetItem *groupG; + QTreeWidgetItem *groupH; + QTreeWidgetItem *groupI; + QTreeWidgetItem *groupJ; + QTreeWidgetItem *groupK; + QTreeWidgetItem *groupL; + QTreeWidgetItem *groupM; + QTreeWidgetItem *groupN; + QTreeWidgetItem *groupO; + QTreeWidgetItem *groupP; + QTreeWidgetItem *groupQ; + + void initDataBase(const QStringList &measurements = QStringList()); + void initGroup(QTreeWidgetItem **group, const QString &groupName, const QStringList &groupList, + const QStringList &measurementList = QStringList()); + + Q_REQUIRED_RESULT QTreeWidgetItem *addMeasurementGroup(const QString &text); + + void addMeasurement(QTreeWidgetItem *group, const QString &groupName, + const QStringList &newMeasurements); + + void readSettings(); + void writeSettings(); + void filterGroups(const QString searchString); + void filterGroup(QTreeWidgetItem *group, const QString &searchString); + + void retranslateGroup(QTreeWidgetItem *group, const QString &groupName, + const QStringList &measurements); + void retranslateMeasurement(QTreeWidgetItem *group, int index, const QString &name); + + void changeCheckState(QTreeWidgetItem *group, Qt::CheckState state); + Qt::CheckState globalCheckState() const; }; #endif // DIALOGMDATABASE_H diff --git a/src/app/seamlyme/dialogs/dialogmdatabase.ui b/src/app/seamlyme/dialogs/dialogmdatabase.ui index 68f5f966741e..b06ba0bb86b4 100644 --- a/src/app/seamlyme/dialogs/dialogmdatabase.ui +++ b/src/app/seamlyme/dialogs/dialogmdatabase.ui @@ -13,8 +13,14 @@ 550 + + + 750 + 550 + + - Measurement data base + ME Database - Add known measurement @@ -45,6 +51,9 @@ Search + + true + diff --git a/src/app/seamlyme/mapplication.cpp b/src/app/seamlyme/mapplication.cpp index 2491ed0caa0c..304e2f8089ed 100644 --- a/src/app/seamlyme/mapplication.cpp +++ b/src/app/seamlyme/mapplication.cpp @@ -554,11 +554,11 @@ void MApplication::ShowDataBase() } //--------------------------------------------------------------------------------------------------------------------- -void MApplication::RetranslateGroups() +void MApplication::retranslateGroups() { if (not dataBase.isNull()) { - dataBase->RetranslateGroups(); + dataBase->retranslateGroups(); } } diff --git a/src/app/seamlyme/mapplication.h b/src/app/seamlyme/mapplication.h index f0f924679026..d56026b1ae60 100644 --- a/src/app/seamlyme/mapplication.h +++ b/src/app/seamlyme/mapplication.h @@ -95,7 +95,7 @@ class MApplication : public VAbstractApplication QString diagramsPath() const; void ShowDataBase(); - void RetranslateGroups(); + void retranslateGroups(); void RetranslateTables(); void ParseCommandLine(const SocketConnection &connection, const QStringList &arguments); diff --git a/src/app/seamlyme/tmainwindow.cpp b/src/app/seamlyme/tmainwindow.cpp index 55a160f87dd8..22be312ee296 100644 --- a/src/app/seamlyme/tmainwindow.cpp +++ b/src/app/seamlyme/tmainwindow.cpp @@ -1577,7 +1577,7 @@ void TMainWindow::ShowMDiagram(const QString &name) { ui->labelDiagram->setText(QString("

%1

" "

%2. %3

") - .arg(MeasurementDatabaseDialog::imgTag(number)).arg(number).arg(trv->GuiText(name))); + .arg(MeasurementDatabaseDialog::imageUrl(number)).arg(number).arg(trv->GuiText(name))); } // This part is very ugly, can't find better way to resize dockWidget. ui->labelDiagram->adjustSize(); diff --git a/src/app/seamlyme/tmainwindow.ui b/src/app/seamlyme/tmainwindow.ui index dd7c6bcec1ac..a3781d5d00b6 100644 --- a/src/app/seamlyme/tmainwindow.ui +++ b/src/app/seamlyme/tmainwindow.ui @@ -272,8 +272,8 @@
- - ../../libs/vtools/dialogs/support../../libs/vtools/dialogs/support + + :/icon/32x32/move_down.png:/icon/32x32/move_down.png @@ -366,8 +366,8 @@ ... - - .. + + :/icon/32x32/move_top.png:/icon/32x32/move_top.png @@ -383,8 +383,8 @@ ... - - .. + + :/icon/32x32/move_up.png:/icon/32x32/move_up.png @@ -400,8 +400,8 @@ ... - - .. + + :/icon/32x32/move_down.png:/icon/32x32/move_down.png @@ -417,8 +417,8 @@ ... - - .. + + :/icon/32x32/move_bottom.png:/icon/32x32/move_bottom.png @@ -850,7 +850,7 @@ 0 0 835 - 19 + 21 @@ -1209,6 +1209,7 @@ + diff --git a/src/libs/vmisc/vseamlymesettings.cpp b/src/libs/vmisc/vseamlymesettings.cpp index b0c2e23478bf..258c210db935 100644 --- a/src/libs/vmisc/vseamlymesettings.cpp +++ b/src/libs/vmisc/vseamlymesettings.cpp @@ -69,13 +69,13 @@ VSeamlyMeSettings::VSeamlyMeSettings(Format format, Scope scope, const QString & } //--------------------------------------------------------------------------------------------------------------------- -QByteArray VSeamlyMeSettings::GetDataBaseGeometry() const +QByteArray VSeamlyMeSettings::getDataBaseGeometry() const { return value(settingDataBaseGeometry).toByteArray(); } //--------------------------------------------------------------------------------------------------------------------- -void VSeamlyMeSettings::SetDataBaseGeometry(const QByteArray &value) +void VSeamlyMeSettings::setDataBaseGeometry(const QByteArray &value) { setValue(settingDataBaseGeometry, value); } diff --git a/src/libs/vmisc/vseamlymesettings.h b/src/libs/vmisc/vseamlymesettings.h index 0a5bacd32489..e50decc726af 100644 --- a/src/libs/vmisc/vseamlymesettings.h +++ b/src/libs/vmisc/vseamlymesettings.h @@ -69,8 +69,8 @@ class VSeamlyMeSettings : public VCommonSettings VSeamlyMeSettings(Format format, Scope scope, const QString &organization, const QString &application = QString(), QObject *parent = nullptr); - QByteArray GetDataBaseGeometry() const; - void SetDataBaseGeometry(const QByteArray &value); + QByteArray getDataBaseGeometry() const; + void setDataBaseGeometry(const QByteArray &value); void SetDefHeight(int value); int GetDefHeight() const;