Add a basic ranking of system entries and show most relevant first
This commit is contained in:
parent
6e4f0ecabf
commit
f0387db468
38
window.cpp
38
window.cpp
@ -403,6 +403,27 @@ void Window::keyPressEvent(QKeyEvent *event)
|
|||||||
QWidget::keyPressEvent(event);
|
QWidget::keyPressEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Window::rankConfig(const EntryConfig &config, QString filter) const
|
||||||
|
{
|
||||||
|
if(config.command.startsWith(filter, Qt::CaseInsensitive))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else if(config.command.contains(filter, Qt::CaseInsensitive))
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if(config.name.startsWith(filter, Qt::CaseInsensitive))
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
else if(config.name.contains(filter, Qt::CaseInsensitive))
|
||||||
|
{
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
void Window::filterGridFor(QString filter)
|
void Window::filterGridFor(QString filter)
|
||||||
{
|
{
|
||||||
if(filter.length() > 0)
|
if(filter.length() > 0)
|
||||||
@ -422,15 +443,27 @@ void Window::filterGridFor(QString filter)
|
|||||||
}
|
}
|
||||||
if(!userEntryMatch)
|
if(!userEntryMatch)
|
||||||
{
|
{
|
||||||
|
QVector<RankedButton> rankedEntries;
|
||||||
int currow = 0;
|
int currow = 0;
|
||||||
int curcol = 0;
|
int curcol = 0;
|
||||||
int i = 1;
|
int i = 1;
|
||||||
const int MAX_COLS = this->settingsProvider->getMaxCols();
|
const int MAX_COLS = this->settingsProvider->getMaxCols();
|
||||||
for(EntryPushButton *button : this->systemEntryButtons)
|
for(EntryPushButton *button : this->systemEntryButtons)
|
||||||
{
|
{
|
||||||
if(button->getName().contains(filter, Qt::CaseInsensitive) ||
|
int ranking = rankConfig(button->getEntryConfig(), filter);
|
||||||
button->getCommand().contains(filter, Qt::CaseInsensitive))
|
if(ranking > -1)
|
||||||
{
|
{
|
||||||
|
RankedButton rb;
|
||||||
|
rb.button = button;
|
||||||
|
rb.ranking = ranking;
|
||||||
|
rankedEntries.append(rb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::sort(rankedEntries.begin(), rankedEntries.end(),
|
||||||
|
[](const RankedButton &a, const RankedButton &b) -> bool { return a.ranking < b.ranking; });
|
||||||
|
for(RankedButton &rankedButton : rankedEntries)
|
||||||
|
{
|
||||||
|
EntryPushButton *button = rankedButton.button;
|
||||||
button->setVisible(true);
|
button->setVisible(true);
|
||||||
if(i < 10)
|
if(i < 10)
|
||||||
{
|
{
|
||||||
@ -446,7 +479,6 @@ void Window::filterGridFor(QString filter)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
populateGrid(this->userEntryButtons);
|
populateGrid(this->userEntryButtons);
|
||||||
|
9
window.h
9
window.h
@ -37,6 +37,13 @@
|
|||||||
#include "calculationengine.h"
|
#include "calculationengine.h"
|
||||||
#include "settingsprovider.h"
|
#include "settingsprovider.h"
|
||||||
|
|
||||||
|
class RankedButton
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EntryPushButton *button = nullptr;
|
||||||
|
int ranking;
|
||||||
|
};
|
||||||
|
|
||||||
class Window : public QWidget
|
class Window : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -77,7 +84,7 @@ class Window : public QWidget
|
|||||||
QStringList generatePATHSuggestions(const QString &text);
|
QStringList generatePATHSuggestions(const QString &text);
|
||||||
void closeWindow();
|
void closeWindow();
|
||||||
std::pair<int, int> getNextFreeCell();
|
std::pair<int, int> getNextFreeCell();
|
||||||
|
int rankConfig(const EntryConfig &config, QString filter) const;
|
||||||
private slots:
|
private slots:
|
||||||
void lineEditReturnPressed();
|
void lineEditReturnPressed();
|
||||||
void showCalculationResultContextMenu(const QPoint &point);
|
void showCalculationResultContextMenu(const QPoint &point);
|
||||||
|
Loading…
Reference in New Issue
Block a user