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);
|
||||
}
|
||||
|
||||
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> &,
|
||||
const QString &)
|
||||
{
|
||||
|
@@ -18,6 +18,8 @@ public:
|
||||
QList<LocatorFilterEntry> matchesFor(QFutureInterface<LocatorFilterEntry> &future,
|
||||
const QString &entry) override;
|
||||
private:
|
||||
LocatorMatcherTasks matchers() final;
|
||||
|
||||
QList<LocatorFilterEntry> m_results;
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user