ui: Fixed issues in search field

* Fixed crashes when pressing return and only ? or ?? was entered
* Fixed "Find Symbol" after "Find Text" will remove the ?
* Do fulltext search when no match was found for the entered text
* Select current matches when using "Find Symbol"

bug id = 251
This commit is contained in:
Eberhard Graether
2016-12-01 11:21:32 +01:00
parent 6a23e483c8
commit 6e0eb89cd0
2 changed files with 48 additions and 5 deletions
+6 -2
View File
@@ -407,6 +407,12 @@ std::shared_ptr<TokenLocationCollection> PersistentStorage::getFullTextSearchLoc
{
TRACE();
std::shared_ptr<TokenLocationCollection> collection = std::make_shared<TokenLocationCollection>();
if (!searchTerm.size())
{
return collection;
}
if (m_fullTextSearchIndex.fileCount() == 0)
{
MessageStatus("Building fulltext search index", false, true).dispatch();
@@ -418,8 +424,6 @@ std::shared_ptr<TokenLocationCollection> PersistentStorage::getFullTextSearchLoc
false, true
).dispatch();
std::shared_ptr<TokenLocationCollection> collection = std::make_shared<TokenLocationCollection>();
std::vector<FullTextSearchResult> hits = m_fullTextSearchIndex.searchForTerm(searchTerm);
int termLength = searchTerm.length();
+42 -3
View File
@@ -34,6 +34,27 @@ void QtSmartSearchBox::search()
{
editTextToElement();
// Do a fulltext search if no autocompletion match was selected for this match
if (m_matches.size() == 1)
{
SearchMatch& match = m_matches.front();
if (match.searchType == SearchMatch::SEARCH_NONE && match.name.size())
{
QString text = QString::fromStdString(match.name);
if (!text.startsWith(SearchMatch::FULLTEXT_SEARCH_CHARACTER))
{
text = QChar(SearchMatch::FULLTEXT_SEARCH_CHARACTER) + text;
}
clearMatches();
updateElements();
setEditText(text);
fullTextSearch();
return;
}
}
std::vector<SearchMatch> matches = utility::toVector(m_matches);
MessageSearch(matches).dispatch();
@@ -42,11 +63,20 @@ void QtSmartSearchBox::search()
void QtSmartSearchBox::fullTextSearch()
{
std::string term = text().toStdString().substr(1);
bool caseSensitive = false;
if (!term.size())
{
return;
}
bool caseSensitive = false;
if (term.at(0) == SearchMatch::FULLTEXT_SEARCH_CHARACTER)
{
term = term.substr(1);
if (!term.size())
{
return;
}
caseSensitive = true;
}
@@ -122,8 +152,17 @@ void QtSmartSearchBox::setMatches(const std::vector<SearchMatch>& matches)
void QtSmartSearchBox::setFocus()
{
QLineEdit::setFocus(Qt::ShortcutFocusReason);
selectAllElementsWith(true);
layoutElements();
if (text().size() == 1 && text().startsWith(SearchMatch::FULLTEXT_SEARCH_CHARACTER))
{
setEditText("");
}
else
{
editTextToElement();
selectAllElementsWith(true);
layoutElements();
}
}
void QtSmartSearchBox::findFulltext()