forked from qt-creator/qt-creator
ExternalToolsFilter: Reimplement matchers()
Change-Id: I158558688f3013329a8970e29744527003070f7e Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
@@ -25,6 +25,65 @@ ExternalToolsFilter::ExternalToolsFilter()
|
|||||||
setPriority(Medium);
|
setPriority(Medium);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LocatorMatcherTasks ExternalToolsFilter::matchers()
|
||||||
|
{
|
||||||
|
using namespace Utils::Tasking;
|
||||||
|
|
||||||
|
TreeStorage<LocatorStorage> storage;
|
||||||
|
|
||||||
|
const auto onSetup = [storage] {
|
||||||
|
const QString input = storage->input();
|
||||||
|
|
||||||
|
LocatorFilterEntries bestEntries;
|
||||||
|
LocatorFilterEntries betterEntries;
|
||||||
|
LocatorFilterEntries goodEntries;
|
||||||
|
const Qt::CaseSensitivity entryCaseSensitivity = caseSensitivity(input);
|
||||||
|
const QMap<QString, ExternalTool *> externalToolsById = ExternalToolManager::toolsById();
|
||||||
|
for (ExternalTool *tool : externalToolsById) {
|
||||||
|
int index = tool->displayName().indexOf(input, 0, entryCaseSensitivity);
|
||||||
|
LocatorFilterEntry::HighlightInfo::DataType hDataType = LocatorFilterEntry::HighlightInfo::DisplayName;
|
||||||
|
if (index < 0) {
|
||||||
|
index = tool->description().indexOf(input, 0, entryCaseSensitivity);
|
||||||
|
hDataType = LocatorFilterEntry::HighlightInfo::ExtraInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index >= 0) {
|
||||||
|
LocatorFilterEntry filterEntry;
|
||||||
|
filterEntry.displayName = tool->displayName();
|
||||||
|
filterEntry.acceptor = [tool] {
|
||||||
|
auto runner = new ExternalToolRunner(tool);
|
||||||
|
if (runner->hasError())
|
||||||
|
MessageManager::writeFlashing(runner->errorString());
|
||||||
|
return AcceptResult();
|
||||||
|
};
|
||||||
|
filterEntry.extraInfo = tool->description();
|
||||||
|
filterEntry.highlightInfo = LocatorFilterEntry::HighlightInfo(index, input.length(), hDataType);
|
||||||
|
|
||||||
|
if (filterEntry.displayName.startsWith(input, entryCaseSensitivity))
|
||||||
|
bestEntries.append(filterEntry);
|
||||||
|
else if (filterEntry.displayName.contains(input, entryCaseSensitivity))
|
||||||
|
betterEntries.append(filterEntry);
|
||||||
|
else
|
||||||
|
goodEntries.append(filterEntry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LocatorFilterEntry configEntry;
|
||||||
|
configEntry.displayName = "Configure External Tool...";
|
||||||
|
configEntry.extraInfo = "Opens External Tool settings";
|
||||||
|
configEntry.acceptor = [] {
|
||||||
|
QMetaObject::invokeMethod(CorePlugin::instance(), [] {
|
||||||
|
ICore::showOptionsDialog(Constants::SETTINGS_ID_TOOLS);
|
||||||
|
}, Qt::QueuedConnection);
|
||||||
|
return AcceptResult();
|
||||||
|
};
|
||||||
|
|
||||||
|
storage->reportOutput(bestEntries + betterEntries + goodEntries
|
||||||
|
+ LocatorFilterEntries{configEntry});
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
return {{Sync(onSetup), storage}};
|
||||||
|
}
|
||||||
|
|
||||||
QList<LocatorFilterEntry> ExternalToolsFilter::matchesFor(QFutureInterface<LocatorFilterEntry> &,
|
QList<LocatorFilterEntry> ExternalToolsFilter::matchesFor(QFutureInterface<LocatorFilterEntry> &,
|
||||||
const QString &)
|
const QString &)
|
||||||
{
|
{
|
||||||
|
@@ -18,6 +18,8 @@ public:
|
|||||||
QList<LocatorFilterEntry> matchesFor(QFutureInterface<LocatorFilterEntry> &future,
|
QList<LocatorFilterEntry> matchesFor(QFutureInterface<LocatorFilterEntry> &future,
|
||||||
const QString &entry) override;
|
const QString &entry) override;
|
||||||
private:
|
private:
|
||||||
|
LocatorMatcherTasks matchers() final;
|
||||||
|
|
||||||
QList<LocatorFilterEntry> m_results;
|
QList<LocatorFilterEntry> m_results;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user