From e8d667e083fb0843077b82313f1805352015b0bd Mon Sep 17 00:00:00 2001 From: Victor Zarubkin Date: Sun, 18 Mar 2018 03:13:16 +0300 Subject: [PATCH] #0 [UI] Adjusted search boxes in Hierarchy widget and Blocks Descriptors Widget --- profiler_gui/blocks_tree_widget.cpp | 54 +++++++++++++--- profiler_gui/blocks_tree_widget.h | 1 + profiler_gui/descriptors_tree_widget.cpp | 81 +++++++++++++++++++++--- profiler_gui/descriptors_tree_widget.h | 6 ++ 4 files changed, 123 insertions(+), 19 deletions(-) diff --git a/profiler_gui/blocks_tree_widget.cpp b/profiler_gui/blocks_tree_widget.cpp index 259069e..362ef1f 100644 --- a/profiler_gui/blocks_tree_widget.cpp +++ b/profiler_gui/blocks_tree_widget.cpp @@ -1088,7 +1088,7 @@ void BlocksTreeWidget::saveSettings() HierarchyWidget::HierarchyWidget(QWidget* _parent) : Parent(_parent) , m_tree(new BlocksTreeWidget(this)) , m_searchBox(new QLineEdit(this)) - , m_foundNumber(new QLabel("Found 0 matches", this)) + , m_foundNumber(new QLabel("0 matches", this)) , m_searchButton(nullptr) , m_bCaseSensitiveSearch(false) { @@ -1096,6 +1096,8 @@ HierarchyWidget::HierarchyWidget(QWidget* _parent) : Parent(_parent) m_searchBox->setFixedWidth(300); m_searchBox->setContentsMargins(5, 0, 0, 0); + m_searchBox->setClearButtonEnabled(true); + m_searchBox->setPlaceholderText("Search by name"); auto menu = new QMenu(this); m_searchButton = menu->menuAction(); @@ -1133,8 +1135,9 @@ HierarchyWidget::HierarchyWidget(QWidget* _parent) : Parent(_parent) auto searchbox = new QHBoxLayout(); searchbox->setContentsMargins(0, 0, 5, 0); searchbox->addWidget(tb); + searchbox->addSpacing(5); + searchbox->addWidget(m_foundNumber); searchbox->addStretch(100); - searchbox->addWidget(m_foundNumber, Qt::AlignRight); auto lay = new QVBoxLayout(this); lay->setContentsMargins(1, 1, 1, 1); @@ -1142,9 +1145,13 @@ HierarchyWidget::HierarchyWidget(QWidget* _parent) : Parent(_parent) lay->addWidget(m_tree); connect(m_searchBox, &QLineEdit::returnPressed, this, &This::onSeachBoxReturnPressed); + connect(m_searchBox, &QLineEdit::textChanged, this, &This::onSearchBoxTextChanged); + connect(&EASY_GLOBALS.events, &profiler_gui::GlobalSignals::allDataGoingToBeDeleted, [this] { clear(true); }); + + m_foundNumber->hide(); } HierarchyWidget::~HierarchyWidget() @@ -1202,7 +1209,8 @@ BlocksTreeWidget* HierarchyWidget::tree() void HierarchyWidget::clear(bool _global) { m_tree->clearSilent(_global); - m_foundNumber->setText(QString("Found 0 matches")); + m_foundNumber->setText(QString("0 matches")); + m_foundNumber->hide(); } void HierarchyWidget::onSeachBoxReturnPressed() @@ -1213,24 +1221,52 @@ void HierarchyWidget::onSeachBoxReturnPressed() findPrev(true); } +void HierarchyWidget::onSearchBoxTextChanged(const QString& _text) +{ + if (_text.isEmpty()) + m_foundNumber->hide(); +} + void HierarchyWidget::findNext(bool) { - auto matches = m_tree->findNext(m_searchBox->text(), m_bCaseSensitiveSearch ? Qt::MatchCaseSensitive : Qt::MatchFlags()); + auto text = m_searchBox->text(); + if (text.isEmpty()) + { + if (m_foundNumber->isVisible()) + m_foundNumber->hide(); + return; + } + + auto matches = m_tree->findNext(text, m_bCaseSensitiveSearch ? Qt::MatchCaseSensitive : Qt::MatchFlags()); if (matches == 1) - m_foundNumber->setText(QString("Found 1 match")); + m_foundNumber->setText(QString("1 match")); else - m_foundNumber->setText(QString("Found %1 matches").arg(matches)); + m_foundNumber->setText(QString("%1 matches").arg(matches)); + + if (!m_foundNumber->isVisible()) + m_foundNumber->show(); } void HierarchyWidget::findPrev(bool) { - auto matches = m_tree->findPrev(m_searchBox->text(), m_bCaseSensitiveSearch ? Qt::MatchCaseSensitive : Qt::MatchFlags()); + auto text = m_searchBox->text(); + if (text.isEmpty()) + { + if (m_foundNumber->isVisible()) + m_foundNumber->hide(); + return; + } + + auto matches = m_tree->findPrev(text, m_bCaseSensitiveSearch ? Qt::MatchCaseSensitive : Qt::MatchFlags()); if (matches == 1) - m_foundNumber->setText(QString("Found 1 match")); + m_foundNumber->setText(QString("1 match")); else - m_foundNumber->setText(QString("Found %1 matches").arg(matches)); + m_foundNumber->setText(QString("%1 matches").arg(matches)); + + if (!m_foundNumber->isVisible()) + m_foundNumber->show(); } void HierarchyWidget::findNextFromMenu(bool _checked) diff --git a/profiler_gui/blocks_tree_widget.h b/profiler_gui/blocks_tree_widget.h index eb208b3..04bab71 100644 --- a/profiler_gui/blocks_tree_widget.h +++ b/profiler_gui/blocks_tree_widget.h @@ -202,6 +202,7 @@ private slots: // Private slots void onSeachBoxReturnPressed(); + void onSearchBoxTextChanged(const QString& _text); void findNext(bool); void findPrev(bool); void findNextFromMenu(bool); diff --git a/profiler_gui/descriptors_tree_widget.cpp b/profiler_gui/descriptors_tree_widget.cpp index d6e303f..663b3b4 100644 --- a/profiler_gui/descriptors_tree_widget.cpp +++ b/profiler_gui/descriptors_tree_widget.cpp @@ -284,6 +284,7 @@ DescriptorsTreeWidget::~DescriptorsTreeWidget() void DescriptorsTreeWidget::setSearchColumn(int column) { m_searchColumn = column; + emit searchColumnChanged(column); } int DescriptorsTreeWidget::searchColumn() const @@ -754,7 +755,7 @@ BlockDescriptorsWidget::BlockDescriptorsWidget(QWidget* _parent) : Parent(_paren , m_tree(new DescriptorsTreeWidget(this)) , m_values(new ArbitraryValuesWidget(this)) , m_searchBox(new QLineEdit(this)) - , m_foundNumber(new QLabel("Found 0 matches", this)) + , m_foundNumber(new QLabel("0 matches", this)) , m_searchButton(nullptr) , m_bCaseSensitiveSearch(false) { @@ -767,6 +768,8 @@ BlockDescriptorsWidget::BlockDescriptorsWidget(QWidget* _parent) : Parent(_paren m_searchBox->setFixedWidth(300); m_searchBox->setContentsMargins(5, 0, 0, 0); + m_searchBox->setClearButtonEnabled(true); + m_searchBox->setPlaceholderText("Search"); auto tb = new QToolBar(this); tb->setIconSize(applicationIconsSize()); @@ -831,8 +834,9 @@ BlockDescriptorsWidget::BlockDescriptorsWidget(QWidget* _parent) : Parent(_paren auto searchbox = new QHBoxLayout(); searchbox->setContentsMargins(0, 0, 5, 0); searchbox->addWidget(tb); + searchbox->addSpacing(5); + searchbox->addWidget(m_foundNumber); searchbox->addStretch(100); - searchbox->addWidget(m_foundNumber, Qt::AlignRight); auto lay = new QVBoxLayout(this); lay->setContentsMargins(1, 1, 1, 1); @@ -840,12 +844,19 @@ BlockDescriptorsWidget::BlockDescriptorsWidget(QWidget* _parent) : Parent(_paren lay->addWidget(m_splitter); connect(m_searchBox, &QLineEdit::returnPressed, this, &This::onSeachBoxReturnPressed); + connect(m_searchBox, &QLineEdit::textChanged, this, &This::onSearchBoxTextChanged); + + connect(m_tree, &DescriptorsTreeWidget::searchColumnChanged, this, &This::onSearchColumnChanged); + connect(&EASY_GLOBALS.events, &::profiler_gui::GlobalSignals::connectionChanged, refreshButton, &QAction::setEnabled); connect(&EASY_GLOBALS.events, &profiler_gui::GlobalSignals::allDataGoingToBeDeleted, this, &This::clear); connect(&EASY_GLOBALS.events, &profiler_gui::GlobalSignals::fileOpened, this, &This::build); loadSettings(); caseSensitiveSwitch->setChecked(m_bCaseSensitiveSearch); + + onSearchColumnChanged(m_tree->searchColumn()); + m_foundNumber->hide(); } BlockDescriptorsWidget::~BlockDescriptorsWidget() @@ -904,7 +915,8 @@ void BlockDescriptorsWidget::contextMenuEvent(QContextMenuEvent* _event) void BlockDescriptorsWidget::build() { m_tree->clearSilent(false); - m_foundNumber->setText(QString("Found 0 matches")); + m_foundNumber->setText(QString("0 matches")); + m_foundNumber->hide(); m_tree->build(); m_values->rebuild(); } @@ -912,7 +924,8 @@ void BlockDescriptorsWidget::build() void BlockDescriptorsWidget::clear() { m_tree->clearSilent(true); - m_foundNumber->setText(QString("Found 0 matches")); + m_foundNumber->setText(QString("0 matches")); + m_foundNumber->hide(); m_values->clear(); } @@ -929,6 +942,32 @@ void BlockDescriptorsWidget::onSeachBoxReturnPressed() findPrev(true); } +void BlockDescriptorsWidget::onSearchBoxTextChanged(const QString& _text) +{ + if (_text.isEmpty()) + m_foundNumber->hide(); +} + +void BlockDescriptorsWidget::onSearchColumnChanged(int column) +{ + switch (column) + { + case DESC_COL_NAME: + m_searchBox->setPlaceholderText("Search by name"); + break; + + case DESC_COL_FILE_LINE: + m_searchBox->setPlaceholderText("Search by filename"); + break; + + default: + m_searchBox->setPlaceholderText("Search"); + break; + } + + onSeachBoxReturnPressed(); +} + void BlockDescriptorsWidget::onSearchColumnChange(bool) { auto action = qobject_cast(sender()); @@ -938,22 +977,44 @@ void BlockDescriptorsWidget::onSearchColumnChange(bool) void BlockDescriptorsWidget::findNext(bool) { - auto matches = m_tree->findNext(m_searchBox->text(), m_bCaseSensitiveSearch ? Qt::MatchCaseSensitive : Qt::MatchFlags()); + auto text = m_searchBox->text(); + if (text.isEmpty()) + { + if (m_foundNumber->isVisible()) + m_foundNumber->hide(); + return; + } + + auto matches = m_tree->findNext(text, m_bCaseSensitiveSearch ? Qt::MatchCaseSensitive : Qt::MatchFlags()); if (matches == 1) - m_foundNumber->setText(QString("Found 1 match")); + m_foundNumber->setText(QString("1 match")); else - m_foundNumber->setText(QString("Found %1 matches").arg(matches)); + m_foundNumber->setText(QString("%1 matches").arg(matches)); + + if (!m_foundNumber->isVisible()) + m_foundNumber->show(); } void BlockDescriptorsWidget::findPrev(bool) { - auto matches = m_tree->findPrev(m_searchBox->text(), m_bCaseSensitiveSearch ? Qt::MatchCaseSensitive : Qt::MatchFlags()); + auto text = m_searchBox->text(); + if (text.isEmpty()) + { + if (m_foundNumber->isVisible()) + m_foundNumber->hide(); + return; + } + + auto matches = m_tree->findPrev(text, m_bCaseSensitiveSearch ? Qt::MatchCaseSensitive : Qt::MatchFlags()); if (matches == 1) - m_foundNumber->setText(QString("Found 1 match")); + m_foundNumber->setText(QString("1 match")); else - m_foundNumber->setText(QString("Found %1 matches").arg(matches)); + m_foundNumber->setText(QString("%1 matches").arg(matches)); + + if (!m_foundNumber->isVisible()) + m_foundNumber->show(); } void BlockDescriptorsWidget::findNextFromMenu(bool _checked) diff --git a/profiler_gui/descriptors_tree_widget.h b/profiler_gui/descriptors_tree_widget.h index 7691232..ffe0bc8 100644 --- a/profiler_gui/descriptors_tree_widget.h +++ b/profiler_gui/descriptors_tree_widget.h @@ -152,6 +152,10 @@ public: void setSearchColumn(int column); int searchColumn() const; +signals: + + void searchColumnChanged(int column); + public slots: void clearSilent(bool _global = false); @@ -221,6 +225,8 @@ private slots: void findNextFromMenu(bool); void findPrevFromMenu(bool); void onSearchColumnChange(bool); + void onSearchBoxTextChanged(const QString& _text); + void onSearchColumnChanged(int column); private: