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