forked from qt-creator/qt-creator
ActionsFilter: Use Acceptor for LocatorFilterEntry
Change-Id: I433f9b44173efd0c66130bcf411cf0ec04816edb Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -168,15 +168,12 @@ QList<LocatorFilterEntry> ActionsFilter::matchesFor(QFutureInterface<LocatorFilt
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActionsFilter::accept(const LocatorFilterEntry &selection, QString *newText,
|
LocatorFilterEntry::Acceptor ActionsFilter::acceptor(const ActionFilterEntryData &data) const
|
||||||
int *selectionStart, int *selectionLength) const
|
|
||||||
{
|
{
|
||||||
static const int maxHistorySize = 30;
|
static const int maxHistorySize = 30;
|
||||||
Q_UNUSED(newText)
|
return [this, data] {
|
||||||
Q_UNUSED(selectionStart)
|
if (!data.action)
|
||||||
Q_UNUSED(selectionLength)
|
return AcceptResult();
|
||||||
auto data = selection.internalData.value<ActionFilterEntryData>();
|
|
||||||
if (data.action) {
|
|
||||||
m_lastTriggered.removeAll(data);
|
m_lastTriggered.removeAll(data);
|
||||||
m_lastTriggered.prepend(data);
|
m_lastTriggered.prepend(data);
|
||||||
QMetaObject::invokeMethod(data.action, [action = data.action] {
|
QMetaObject::invokeMethod(data.action, [action = data.action] {
|
||||||
@@ -185,7 +182,8 @@ void ActionsFilter::accept(const LocatorFilterEntry &selection, QString *newText
|
|||||||
}, Qt::QueuedConnection);
|
}, Qt::QueuedConnection);
|
||||||
if (m_lastTriggered.size() > maxHistorySize)
|
if (m_lastTriggered.size() > maxHistorySize)
|
||||||
m_lastTriggered.resize(maxHistorySize);
|
m_lastTriggered.resize(maxHistorySize);
|
||||||
}
|
return AcceptResult();
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
static QString actionText(QAction *action)
|
static QString actionText(QAction *action)
|
||||||
@@ -214,9 +212,9 @@ void ActionsFilter::collectEntriesForAction(QAction *action,
|
|||||||
collectEntriesForAction(menuAction, menuPath, processedMenus);
|
collectEntriesForAction(menuAction, menuPath, processedMenus);
|
||||||
}
|
}
|
||||||
} else if (!text.isEmpty()) {
|
} else if (!text.isEmpty()) {
|
||||||
const ActionFilterEntryData data{action, {}};
|
LocatorFilterEntry filterEntry;
|
||||||
LocatorFilterEntry filterEntry(this, text);
|
filterEntry.displayName = text;
|
||||||
filterEntry.internalData = QVariant::fromValue(data);
|
filterEntry.acceptor = acceptor({action, {}});
|
||||||
filterEntry.displayIcon = action->icon();
|
filterEntry.displayIcon = action->icon();
|
||||||
filterEntry.extraInfo = path.join(" > ");
|
filterEntry.extraInfo = path.join(" > ");
|
||||||
updateEntry(action, filterEntry);
|
updateEntry(action, filterEntry);
|
||||||
@@ -243,9 +241,9 @@ void ActionsFilter::collectEntriesForCommands()
|
|||||||
|
|
||||||
const QString identifier = command->id().toString();
|
const QString identifier = command->id().toString();
|
||||||
const QStringList path = identifier.split(QLatin1Char('.'));
|
const QStringList path = identifier.split(QLatin1Char('.'));
|
||||||
const ActionFilterEntryData data{};
|
LocatorFilterEntry filterEntry;
|
||||||
LocatorFilterEntry filterEntry(this, text);
|
filterEntry.displayName = text;
|
||||||
filterEntry.internalData = QVariant::fromValue(ActionFilterEntryData{action, command->id()});
|
filterEntry.acceptor = acceptor({action, command->id()});
|
||||||
filterEntry.displayIcon = action->icon();
|
filterEntry.displayIcon = action->icon();
|
||||||
filterEntry.displayExtra = command->keySequence().toString(QKeySequence::NativeText);
|
filterEntry.displayExtra = command->keySequence().toString(QKeySequence::NativeText);
|
||||||
if (path.size() >= 2)
|
if (path.size() >= 2)
|
||||||
@@ -263,9 +261,9 @@ void ActionsFilter::collectEntriesForLastTriggered()
|
|||||||
}
|
}
|
||||||
if (!data.action || !m_enabledActions.contains(data.action))
|
if (!data.action || !m_enabledActions.contains(data.action))
|
||||||
continue;
|
continue;
|
||||||
const QString text = actionText(data.action);
|
LocatorFilterEntry filterEntry;
|
||||||
LocatorFilterEntry filterEntry(this, text);
|
filterEntry.displayName = actionText(data.action);
|
||||||
filterEntry.internalData = QVariant::fromValue(data);
|
filterEntry.acceptor = acceptor(data);
|
||||||
filterEntry.displayIcon = data.action->icon();
|
filterEntry.displayIcon = data.action->icon();
|
||||||
updateEntry(data.action, filterEntry);
|
updateEntry(data.action, filterEntry);
|
||||||
}
|
}
|
||||||
|
@@ -36,13 +36,12 @@ public:
|
|||||||
|
|
||||||
QList<LocatorFilterEntry> matchesFor(QFutureInterface<LocatorFilterEntry> &future,
|
QList<LocatorFilterEntry> matchesFor(QFutureInterface<LocatorFilterEntry> &future,
|
||||||
const QString &entry) override;
|
const QString &entry) override;
|
||||||
void accept(const LocatorFilterEntry &selection, QString *newText,
|
|
||||||
int *selectionStart, int *selectionLength) const override;
|
|
||||||
void prepareSearch(const QString &entry) override;
|
void prepareSearch(const QString &entry) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void saveState(QJsonObject &object) const override;
|
void saveState(QJsonObject &object) const override;
|
||||||
void restoreState(const QJsonObject &object) override;
|
void restoreState(const QJsonObject &object) override;
|
||||||
|
LocatorFilterEntry::Acceptor acceptor(const ActionFilterEntryData &data) const;
|
||||||
void collectEntriesForAction(QAction *action,
|
void collectEntriesForAction(QAction *action,
|
||||||
const QStringList &path,
|
const QStringList &path,
|
||||||
QList<const QMenu *> &processedMenus);
|
QList<const QMenu *> &processedMenus);
|
||||||
|
Reference in New Issue
Block a user