diff --git a/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp b/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp index 16354946e4aaefd8b85723417bb39649d0f0ea83..577c6cf70f67009c8c87cd06a37b50f521d67904 100644 --- a/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp +++ b/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp @@ -45,6 +45,8 @@ using namespace Utils; CMakeLocatorFilter::CMakeLocatorFilter() { + setId("Build CMake target"); + setDisplayName(tr("Build CMake target")); setShortcutString(QLatin1String("cm")); ProjectExplorer::SessionManager *sm = ProjectExplorer::ProjectExplorerPlugin::instance()->session(); diff --git a/src/plugins/cmakeprojectmanager/cmakelocatorfilter.h b/src/plugins/cmakeprojectmanager/cmakelocatorfilter.h index bc99a1c4fb3d4c484e6f74eb6da7894cac56138f..f790b3e500e8766f0d9527340b56e0374b8c83bc 100644 --- a/src/plugins/cmakeprojectmanager/cmakelocatorfilter.h +++ b/src/plugins/cmakeprojectmanager/cmakelocatorfilter.h @@ -45,10 +45,6 @@ public: CMakeLocatorFilter(); ~CMakeLocatorFilter(); - QString displayName() const { return tr("Build CMake target"); } - QString id() const { return QLatin1String("Build CMake target"); } - Priority priority() const { return Medium; } - QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry); void accept(Locator::FilterEntry selection) const; void refresh(QFutureInterface<void> &future); diff --git a/src/plugins/coreplugin/dialogs/settingsdialog.cpp b/src/plugins/coreplugin/dialogs/settingsdialog.cpp index 9274613aabba35feb802c1fc977adcd233f18c07..e138e915647005345acee3e1968d638eb44f4c0e 100644 --- a/src/plugins/coreplugin/dialogs/settingsdialog.cpp +++ b/src/plugins/coreplugin/dialogs/settingsdialog.cpp @@ -270,9 +270,9 @@ public: // Helpers to sort by category. id bool optionsPageLessThan(const IOptionsPage *p1, const IOptionsPage *p2) { - if (const int cc = p1->category().toString().compare(p2->category().toString())) - return cc < 0; - return p1->id().toString().compare(p2->id().toString()) < 0; + if (p1->category() != p2->category()) + return p1->category().alphabeticallyBefore(p2->category()); + return p1->id().alphabeticallyBefore(p2->id()); } static inline QList<Core::IOptionsPage*> sortedOptionsPages() diff --git a/src/plugins/coreplugin/id.cpp b/src/plugins/coreplugin/id.cpp index b947cb8229b1a9f2915b38d017fb78caad574998..8cfc02ddfdab375206b4917d44b3aa53e57b8f49 100644 --- a/src/plugins/coreplugin/id.cpp +++ b/src/plugins/coreplugin/id.cpp @@ -323,4 +323,9 @@ CORE_EXPORT const char *nameForId(int id) return stringFromId.value(id).str; } +bool Id::alphabeticallyBefore(Id other) const +{ + return toString().compare(other.toString(), Qt::CaseInsensitive) < 0; +} + } // namespace Core diff --git a/src/plugins/coreplugin/id.h b/src/plugins/coreplugin/id.h index d2d3e93456e378651952eea80d58f33e554a0816..98b1b8eb9a6ad15458efd2611eaa0999d39b9c6e 100644 --- a/src/plugins/coreplugin/id.h +++ b/src/plugins/coreplugin/id.h @@ -64,6 +64,7 @@ public: bool operator!=(const char *name) const { return !operator==(name); } bool operator<(Id id) const { return m_id < id.m_id; } bool operator>(Id id) const { return m_id > id.m_id; } + bool alphabeticallyBefore(Id other) const; int uniqueIdentifier() const { return m_id; } static Id fromUniqueIdentifier(int uid) { return Id(uid); } static Id fromString(const QString &str); // FIXME: avoid. diff --git a/src/plugins/cpptools/cppclassesfilter.cpp b/src/plugins/cpptools/cppclassesfilter.cpp index bef718bd8bc22cb7d025bcd4fe32a8383e148607..e354552689228db8cf7400c4e8a883e50ea98531 100644 --- a/src/plugins/cpptools/cppclassesfilter.cpp +++ b/src/plugins/cpptools/cppclassesfilter.cpp @@ -35,8 +35,10 @@ using namespace CppTools::Internal; CppClassesFilter::CppClassesFilter(CppModelManager *manager) : CppLocatorFilter(manager) { + setId("Classes"); setShortcutString(QLatin1String("c")); setIncludedByDefault(false); + setDisplayName(tr("C++ Classes")); search.setSymbolsToSearchFor(SymbolSearcher::Classes); search.setSeparateScope(true); diff --git a/src/plugins/cpptools/cppclassesfilter.h b/src/plugins/cpptools/cppclassesfilter.h index 95b66be69f24408ee65535d74bdfbdf68190a7b0..64474e70e4a00756dcb70ed3b1dd235d656a1547 100644 --- a/src/plugins/cpptools/cppclassesfilter.h +++ b/src/plugins/cpptools/cppclassesfilter.h @@ -42,10 +42,6 @@ class CPPTOOLS_EXPORT CppClassesFilter : public Internal::CppLocatorFilter public: CppClassesFilter(Internal::CppModelManager *manager); ~CppClassesFilter(); - - QString displayName() const { return tr("C++ Classes"); } - QString id() const { return QLatin1String("Classes"); } - Priority priority() const { return Medium; } }; } // namespace CppTools diff --git a/src/plugins/cpptools/cppcurrentdocumentfilter.cpp b/src/plugins/cpptools/cppcurrentdocumentfilter.cpp index bfcce051ec10138078e477612b523a057a33b662..26a5ba6ce17a630ec4f451ff8b52d9b1e658707f 100644 --- a/src/plugins/cpptools/cppcurrentdocumentfilter.cpp +++ b/src/plugins/cpptools/cppcurrentdocumentfilter.cpp @@ -40,6 +40,8 @@ using namespace CPlusPlus; CppCurrentDocumentFilter::CppCurrentDocumentFilter(CppModelManager *manager, Core::EditorManager *editorManager) : m_modelManager(manager) { + setId("Methods in current Document"); + setDisplayName(tr("C++ Methods in Current Document")); setShortcutString(QString(QLatin1Char('.'))); setIncludedByDefault(false); diff --git a/src/plugins/cpptools/cppcurrentdocumentfilter.h b/src/plugins/cpptools/cppcurrentdocumentfilter.h index 6e87ac265a401e7f44de7d559c0d8428c690a9f0..9bfde7a3c9bae3bcb6800dbcb5a472fa5e3ed803 100644 --- a/src/plugins/cpptools/cppcurrentdocumentfilter.h +++ b/src/plugins/cpptools/cppcurrentdocumentfilter.h @@ -50,9 +50,6 @@ public: CppCurrentDocumentFilter(CppModelManager *manager, Core::EditorManager *editorManager); ~CppCurrentDocumentFilter() {} - QString displayName() const { return tr("C++ Methods in Current Document"); } - QString id() const { return QLatin1String("Methods in current Document"); } - Priority priority() const { return Medium; } QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry); void accept(Locator::FilterEntry selection) const; void refresh(QFutureInterface<void> &future); diff --git a/src/plugins/cpptools/cppfunctionsfilter.cpp b/src/plugins/cpptools/cppfunctionsfilter.cpp index 138a1ed65f960397aacb6bbad2d62eb6fb4f1c53..5e41fc800017baf30462832913149aedbb7c5c2c 100644 --- a/src/plugins/cpptools/cppfunctionsfilter.cpp +++ b/src/plugins/cpptools/cppfunctionsfilter.cpp @@ -34,6 +34,8 @@ using namespace CppTools::Internal; CppFunctionsFilter::CppFunctionsFilter(CppModelManager *manager) : CppLocatorFilter(manager) { + setId("Methods"); + setDisplayName(tr("C++ Methods and Functions")); setShortcutString(QString(QLatin1Char('m'))); setIncludedByDefault(false); diff --git a/src/plugins/cpptools/cppfunctionsfilter.h b/src/plugins/cpptools/cppfunctionsfilter.h index 4d04edcf220f2196d93ec0fee36b1de76483de08..85418d4d3c9a14099415a5b308dbb8b429e3bfba 100644 --- a/src/plugins/cpptools/cppfunctionsfilter.h +++ b/src/plugins/cpptools/cppfunctionsfilter.h @@ -42,10 +42,6 @@ class CppFunctionsFilter : public CppLocatorFilter public: CppFunctionsFilter(CppModelManager *manager); ~CppFunctionsFilter(); - - QString displayName() const { return tr("C++ Methods and Functions"); } - QString id() const { return QLatin1String("Methods"); } - Priority priority() const { return Medium; } }; } // namespace Internal diff --git a/src/plugins/cpptools/cpplocatorfilter.cpp b/src/plugins/cpptools/cpplocatorfilter.cpp index 99a0e3659168a5e97cb22a467e3ab46244088ff6..57b81681ebe761a8fca5e442666b20e05292c090 100644 --- a/src/plugins/cpptools/cpplocatorfilter.cpp +++ b/src/plugins/cpptools/cpplocatorfilter.cpp @@ -43,6 +43,8 @@ CppLocatorFilter::CppLocatorFilter(CppModelManager *manager) : m_manager(manager), m_forceNewSearchList(true) { + setId("Classes and Methods"); + setDisplayName(tr("C++ Classes and Methods")); setShortcutString(QString(QLatin1Char(':'))); setIncludedByDefault(false); diff --git a/src/plugins/cpptools/cpplocatorfilter.h b/src/plugins/cpptools/cpplocatorfilter.h index ff7a8ae8c3721eb855fc562b1269a486a84d6df3..da20e875c6dc4ac22c9909c36d807d993c2ea333 100644 --- a/src/plugins/cpptools/cpplocatorfilter.h +++ b/src/plugins/cpptools/cpplocatorfilter.h @@ -41,13 +41,11 @@ class CppModelManager; class CppLocatorFilter : public Locator::ILocatorFilter { Q_OBJECT + public: CppLocatorFilter(CppModelManager *manager); ~CppLocatorFilter(); - QString displayName() const { return tr("C++ Classes and Methods"); } - QString id() const { return QLatin1String("Classes and Methods"); } - Priority priority() const { return Medium; } QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry); void accept(Locator::FilterEntry selection) const; void refresh(QFutureInterface<void> &future); diff --git a/src/plugins/help/helpindexfilter.cpp b/src/plugins/help/helpindexfilter.cpp index b179df0a0421a10d54f055f3f630b6735bc87477..9fc64e44b8fc2f2c175edf66057123d816e4d3f4 100644 --- a/src/plugins/help/helpindexfilter.cpp +++ b/src/plugins/help/helpindexfilter.cpp @@ -46,8 +46,11 @@ Q_DECLARE_METATYPE(ILocatorFilter*) HelpIndexFilter::HelpIndexFilter() { + setId("HelpIndexFilter"); + setDisplayName(tr("Help Index")); setIncludedByDefault(false); setShortcutString(QString(QLatin1Char('?'))); + m_icon = QIcon(QLatin1String(":/help/images/bookmark.png")); } @@ -55,21 +58,6 @@ HelpIndexFilter::~HelpIndexFilter() { } -QString HelpIndexFilter::displayName() const -{ - return tr("Help Index"); -} - -QString HelpIndexFilter::id() const -{ - return QLatin1String("HelpIndexFilter"); -} - -ILocatorFilter::Priority HelpIndexFilter::priority() const -{ - return Medium; -} - QList<FilterEntry> HelpIndexFilter::matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry) { QStringList keywords; diff --git a/src/plugins/help/helpindexfilter.h b/src/plugins/help/helpindexfilter.h index 5abf7f2e67e43f565512ed95b253482f175aab07..80cb7b7f89531edda35ff4c3b9b8e6a34a931797 100644 --- a/src/plugins/help/helpindexfilter.h +++ b/src/plugins/help/helpindexfilter.h @@ -46,9 +46,6 @@ public: ~HelpIndexFilter(); // ILocatorFilter - QString displayName() const; - QString id() const; - Priority priority() const; QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry); void accept(Locator::FilterEntry selection) const; void refresh(QFutureInterface<void> &future); diff --git a/src/plugins/help/remotehelpfilter.cpp b/src/plugins/help/remotehelpfilter.cpp index aa6cad21e202afc9ff2ddef9e8009423c8a3421f..12adf8b87fd00660a2b103b740c40440acc789c7 100644 --- a/src/plugins/help/remotehelpfilter.cpp +++ b/src/plugins/help/remotehelpfilter.cpp @@ -80,8 +80,11 @@ void RemoteFilterOptions::updateRemoveButton() RemoteHelpFilter::RemoteHelpFilter() { + setId("RemoteHelpFilter"); + setDisplayName(tr("Web Search")); setIncludedByDefault(false); setShortcutString(QLatin1String("r")); + m_remoteUrls.append(QLatin1String("http://www.bing.com/search?q=%1")); m_remoteUrls.append(QLatin1String("http://www.google.com/search?q=%1")); m_remoteUrls.append(QLatin1String("http://search.yahoo.com/search?p=%1")); @@ -93,21 +96,6 @@ RemoteHelpFilter::~RemoteHelpFilter() { } -QString RemoteHelpFilter::displayName() const -{ - return tr("Web Search"); -} - -QString RemoteHelpFilter::id() const -{ - return QLatin1String("RemoteHelpFilter"); -} - -Locator::ILocatorFilter::Priority RemoteHelpFilter::priority() const -{ - return Medium; -} - QList<Locator::FilterEntry> RemoteHelpFilter::matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &pattern) { QList<Locator::FilterEntry> entries; diff --git a/src/plugins/help/remotehelpfilter.h b/src/plugins/help/remotehelpfilter.h index c76e4f12cbf0c14fb64a8e88026bb028ffc0b530..5cfe13ab92f54f425f2c8d395f503e49edc7059f 100644 --- a/src/plugins/help/remotehelpfilter.h +++ b/src/plugins/help/remotehelpfilter.h @@ -47,9 +47,6 @@ public: ~RemoteHelpFilter(); // ILocatorFilter - QString displayName() const; - QString id() const; - Priority priority() const; QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry); void accept(Locator::FilterEntry selection) const; void refresh(QFutureInterface<void> &future); diff --git a/src/plugins/locator/commandlocator.cpp b/src/plugins/locator/commandlocator.cpp index 639a9995a418c3a6388fa74264a43c78291076d9..04f5d606f69eb9e878528cdeed33e18ead79de75 100644 --- a/src/plugins/locator/commandlocator.cpp +++ b/src/plugins/locator/commandlocator.cpp @@ -31,6 +31,7 @@ #include <coreplugin/actionmanager/command.h> #include <coreplugin/icore.h> +#include <coreplugin/id.h> #include <utils/qtcassert.h> @@ -38,14 +39,8 @@ namespace Locator { -struct CommandLocatorPrivate { - CommandLocatorPrivate(const QString &prefix, - const QString &displayName) : - m_prefix(prefix), m_displayName(displayName) {} - - const QString m_prefix; - const QString m_displayName; - +struct CommandLocatorPrivate +{ QList<Core::Command *> commands; }; @@ -54,8 +49,10 @@ CommandLocator::CommandLocator(const QString &prefix, const QString &shortCutString, QObject *parent) : Locator::ILocatorFilter(parent), - d(new CommandLocatorPrivate(prefix, displayName)) + d(new CommandLocatorPrivate) { + setId(Core::Id::fromString(prefix)); + setDisplayName(displayName); setShortcutString(shortCutString); } @@ -69,21 +66,6 @@ void CommandLocator::appendCommand(Core::Command *cmd) d->commands.push_back(cmd); } -QString CommandLocator::displayName() const -{ - return d->m_displayName; -} - -QString CommandLocator::id() const -{ - return d->m_prefix; -} - -ILocatorFilter::Priority CommandLocator::priority() const -{ - return Medium; -} - QList<Locator::FilterEntry> CommandLocator::matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry) { QList<FilterEntry> filters; diff --git a/src/plugins/locator/commandlocator.h b/src/plugins/locator/commandlocator.h index 53e0d3ce181aa5a79cfc4949a241011a3e77717a..556bdd8244b5ed34648c03ea3cdb526bcff2544a 100644 --- a/src/plugins/locator/commandlocator.h +++ b/src/plugins/locator/commandlocator.h @@ -32,15 +32,8 @@ #include "locator_global.h" #include "ilocatorfilter.h" -#include <QList> -QT_BEGIN_NAMESPACE -class QAction; -QT_END_NAMESPACE - -namespace Core { - class Command; -} +namespace Core { class Command; } namespace Locator { /* Command locators: Provides completion for a set of @@ -57,27 +50,18 @@ public: const QString &displayName, const QString &shortCutString, QObject *parent = 0); - virtual ~CommandLocator(); + ~CommandLocator(); void appendCommand(Core::Command *cmd); - virtual QString displayName() const; - virtual QString id() const; - virtual Priority priority() const; - virtual QList<FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry); - virtual void accept(FilterEntry selection) const; - virtual void refresh(QFutureInterface<void> &future); + QList<FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry); + void accept(FilterEntry selection) const; + void refresh(QFutureInterface<void> &future); private: CommandLocatorPrivate *d; }; -inline CommandLocator &operator<<(CommandLocator &locator, Core::Command *cmd) -{ - locator.appendCommand(cmd); - return locator; -} - } // namespace Locator #endif // COMMANDLOCATOR_H diff --git a/src/plugins/locator/directoryfilter.cpp b/src/plugins/locator/directoryfilter.cpp index 13db0e9dc8c28a8e9ebddefe18b59d327b401632..8674cd62eddb167a7264d5ba4017de67832684e5 100644 --- a/src/plugins/locator/directoryfilter.cpp +++ b/src/plugins/locator/directoryfilter.cpp @@ -43,11 +43,16 @@ using namespace Locator::Internal; DirectoryFilter::DirectoryFilter() : m_name(tr("Generic Directory Filter")), - m_filters(QStringList() << QLatin1String("*.h") << QLatin1String("*.cpp") - << QLatin1String("*.ui") << QLatin1String("*.qrc")), m_dialog(0) { + setId(Core::Id::fromString(m_name)); setIncludedByDefault(true); + setDisplayName(m_name); + + m_filters.append(QLatin1String("*.h")); + m_filters.append(QLatin1String("*.cpp")); + m_filters.append(QLatin1String("*.ui")); + m_filters.append(QLatin1String("*.qrc")); } QByteArray DirectoryFilter::saveState() const diff --git a/src/plugins/locator/directoryfilter.h b/src/plugins/locator/directoryfilter.h index 932898f10c6e86b485be73640ae3fba0a618ade4..4379daa4cefffb2b58bb66d35a73354f5946df45 100644 --- a/src/plugins/locator/directoryfilter.h +++ b/src/plugins/locator/directoryfilter.h @@ -48,9 +48,6 @@ class DirectoryFilter : public BaseFileFilter public: DirectoryFilter(); - QString displayName() const { return m_name; } - QString id() const { return m_name; } - Locator::ILocatorFilter::Priority priority() const { return Locator::ILocatorFilter::Medium; } QByteArray saveState() const; bool restoreState(const QByteArray &state); bool openConfigDialog(QWidget *parent, bool &needsRefresh); diff --git a/src/plugins/locator/executefilter.cpp b/src/plugins/locator/executefilter.cpp index cd717ab686dd1e0559a542bbe76e1cae01027d65..42c6e6fdc96858f5d281dbc336835501fa8a490f 100644 --- a/src/plugins/locator/executefilter.cpp +++ b/src/plugins/locator/executefilter.cpp @@ -41,6 +41,8 @@ using namespace Locator::Internal; ExecuteFilter::ExecuteFilter() { + setId("Execute custom commands"); + setDisplayName(tr("Execute Custom Commands")); setShortcutString(QString(QLatin1Char('!'))); setIncludedByDefault(false); diff --git a/src/plugins/locator/executefilter.h b/src/plugins/locator/executefilter.h index 13d86d5cf2096872f72e049603dde982887f0137..9fee14a06d61fc69622b7cc2729c63aca7df244d 100644 --- a/src/plugins/locator/executefilter.h +++ b/src/plugins/locator/executefilter.h @@ -53,9 +53,6 @@ class ExecuteFilter : public Locator::ILocatorFilter public: ExecuteFilter(); - QString displayName() const { return tr("Execute Custom Commands"); } - QString id() const { return QLatin1String("Execute custom commands"); } - Locator::ILocatorFilter::Priority priority() const { return Locator::ILocatorFilter::Medium; } QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry); void accept(Locator::FilterEntry selection) const; diff --git a/src/plugins/locator/filesystemfilter.cpp b/src/plugins/locator/filesystemfilter.cpp index 4a6381e730be529b842c0808254fbc77e0749c0f..f0da71dd8919058eb4d4776f65e9ad39972d4c34 100644 --- a/src/plugins/locator/filesystemfilter.cpp +++ b/src/plugins/locator/filesystemfilter.cpp @@ -41,6 +41,8 @@ using namespace Locator::Internal; FileSystemFilter::FileSystemFilter(EditorManager *editorManager, LocatorWidget *locatorWidget) : m_editorManager(editorManager), m_locatorWidget(locatorWidget), m_includeHidden(true) { + setId("Files in file system"); + setDisplayName(tr("Files in File System")); setShortcutString(QString(QLatin1Char('f'))); setIncludedByDefault(false); } diff --git a/src/plugins/locator/filesystemfilter.h b/src/plugins/locator/filesystemfilter.h index 40db89aaa92d7d4010c72f742507146f7a250b00..74ce98ada6a43bb64197477e26c4e436c540b5b2 100644 --- a/src/plugins/locator/filesystemfilter.h +++ b/src/plugins/locator/filesystemfilter.h @@ -38,9 +38,7 @@ #include <QByteArray> #include <QFutureInterface> -namespace Core { - class EditorManager; -} +namespace Core { class EditorManager; } namespace Locator { namespace Internal { @@ -53,9 +51,6 @@ class FileSystemFilter : public Locator::ILocatorFilter public: FileSystemFilter(Core::EditorManager *editorManager, LocatorWidget *locatorWidget); - QString displayName() const { return tr("Files in File System"); } - QString id() const { return QLatin1String("Files in file system"); } - Locator::ILocatorFilter::Priority priority() const { return Locator::ILocatorFilter::Medium; } QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry); void accept(Locator::FilterEntry selection) const; QByteArray saveState() const; diff --git a/src/plugins/locator/ilocatorfilter.cpp b/src/plugins/locator/ilocatorfilter.cpp index 445a3a6b679b19b7724723bea4273c92d24f64ad..2a664ac927457f2b78c8b022ae58dfc50e1319a6 100644 --- a/src/plugins/locator/ilocatorfilter.cpp +++ b/src/plugins/locator/ilocatorfilter.cpp @@ -40,9 +40,11 @@ using namespace Locator; ILocatorFilter::ILocatorFilter(QObject *parent): QObject(parent), + m_priority(Medium), m_includedByDefault(false), m_hidden(false), - m_enabled(true) + m_enabled(true), + m_isConfigurable(true) { } @@ -114,9 +116,25 @@ bool ILocatorFilter::openConfigDialog(QWidget *parent, bool &needsRefresh) return false; } +QString ILocatorFilter::trimWildcards(const QString &str) +{ + if (str.isEmpty()) + return str; + int first = 0, last = str.size()-1; + const QChar asterisk = QLatin1Char('*'); + const QChar question = QLatin1Char('?'); + while (first < str.size() && (str.at(first) == asterisk || str.at(first) == question)) + ++first; + while (last >= 0 && (str.at(last) == asterisk || str.at(last) == question)) + --last; + if (first > last) + return QString(); + return str.mid(first, last-first+1); +} + bool ILocatorFilter::isConfigurable() const { - return true; + return m_isConfigurable; } bool ILocatorFilter::isIncludedByDefault() const @@ -144,7 +162,42 @@ bool ILocatorFilter::isEnabled() const return m_enabled; } +Core::Id ILocatorFilter::id() const +{ + return m_id; +} + +QString ILocatorFilter::displayName() const +{ + return m_displayName; +} + +ILocatorFilter::Priority ILocatorFilter::priority() const +{ + return m_priority; +} + void ILocatorFilter::setEnabled(bool enabled) { m_enabled = enabled; } + +void ILocatorFilter::setId(Core::Id id) +{ + m_id = id; +} + +void ILocatorFilter::setPriority(Priority priority) +{ + m_priority = priority; +} + +void ILocatorFilter::setDisplayName(const QString &displayString) +{ + m_displayName = displayString; +} + +void ILocatorFilter::setConfigurable(bool configurable) +{ + m_isConfigurable = configurable; +} diff --git a/src/plugins/locator/ilocatorfilter.h b/src/plugins/locator/ilocatorfilter.h index 2c2336ca0f0927ee1ed12648bd5b7865307b8100..a588ed24955eef1b15050f55ac2cdf0f68d895fe 100644 --- a/src/plugins/locator/ilocatorfilter.h +++ b/src/plugins/locator/ilocatorfilter.h @@ -32,6 +32,8 @@ #include "locator_global.h" +#include <coreplugin/id.h> + #include <QVariant> #include <QFutureInterface> #include <QIcon> @@ -88,14 +90,14 @@ public: ILocatorFilter(QObject *parent = 0); virtual ~ILocatorFilter() {} - /* Visible name. */ - virtual QString displayName() const = 0; + /* Internal Id. */ + Core::Id id() const; - /* Internal name. */ - virtual QString id() const = 0; + /* Visible name. */ + QString displayName() const; /* Selection list order in case of multiple active filters (high goes on top). */ - virtual Priority priority() const = 0; + Priority priority() const; /* String to type to use this filter exclusively. */ QString shortcutString() const; @@ -124,7 +126,7 @@ public: /* If there is a configure dialog available for this filter. The default * implementation returns true. */ - virtual bool isConfigurable() const; + bool isConfigurable() const; /* Is this filter used also when the shortcutString is not used? */ bool isIncludedByDefault() const; @@ -135,20 +137,7 @@ public: /* Returns whether the filter should be enabled and used in menus. */ bool isEnabled() const; - static QString trimWildcards(const QString &str) { - if (str.isEmpty()) - return str; - int first = 0, last = str.size()-1; - const QChar asterisk = QLatin1Char('*'); - const QChar question = QLatin1Char('?'); - while (first < str.size() && (str.at(first) == asterisk || str.at(first) == question)) - ++first; - while (last >= 0 && (str.at(last) == asterisk || str.at(last) == question)) - --last; - if (first > last) - return QString(); - return str.mid(first, last-first+1); - } + static QString trimWildcards(const QString &str); public slots: /* Enable or disable the filter. */ @@ -158,12 +147,20 @@ protected: void setShortcutString(const QString &shortcut); void setIncludedByDefault(bool includedByDefault); void setHidden(bool hidden); + void setId(Core::Id id); + void setPriority(Priority priority); + void setDisplayName(const QString &displayString); + void setConfigurable(bool configurable); private: + Core::Id m_id; QString m_shortcut; + Priority m_priority; + QString m_displayName; bool m_includedByDefault; bool m_hidden; bool m_enabled; + bool m_isConfigurable; }; } // namespace Locator diff --git a/src/plugins/locator/locatorfiltersfilter.cpp b/src/plugins/locator/locatorfiltersfilter.cpp index 37304657422075acd7fd6596fbf5a087dd044c09..364ef5376ecce4080f5c2e0731ef0f31ff09d4cf 100644 --- a/src/plugins/locator/locatorfiltersfilter.cpp +++ b/src/plugins/locator/locatorfiltersfilter.cpp @@ -44,23 +44,12 @@ LocatorFiltersFilter::LocatorFiltersFilter(LocatorPlugin *plugin, m_locatorWidget(locatorWidget), m_icon(QIcon(QLatin1String(Core::Constants::ICON_NEXT))) { + setId("FiltersFilter"); + setDisplayName(tr("Available filters")); setIncludedByDefault(true); setHidden(true); -} - -QString LocatorFiltersFilter::displayName() const -{ - return tr("Available filters"); -} - -QString LocatorFiltersFilter::id() const -{ - return QLatin1String("FiltersFilter"); -} - -ILocatorFilter::Priority LocatorFiltersFilter::priority() const -{ - return High; + setPriority(High); + setConfigurable(false); } QList<FilterEntry> LocatorFiltersFilter::matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry) @@ -104,8 +93,3 @@ void LocatorFiltersFilter::refresh(QFutureInterface<void> &future) Q_UNUSED(future) // Nothing to refresh } - -bool LocatorFiltersFilter::isConfigurable() const -{ - return false; -} diff --git a/src/plugins/locator/locatorfiltersfilter.h b/src/plugins/locator/locatorfiltersfilter.h index df704452588c4c97daf7ff29aebffe79bd1d8ed5..b456774ce61acb08dab083693cdb2bf400df77a4 100644 --- a/src/plugins/locator/locatorfiltersfilter.h +++ b/src/plugins/locator/locatorfiltersfilter.h @@ -53,13 +53,9 @@ public: LocatorWidget *locatorWidget); // ILocatorFilter - QString displayName() const; - QString id() const; - Priority priority() const; QList<FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry); void accept(FilterEntry selection) const; void refresh(QFutureInterface<void> &future); - bool isConfigurable() const; private: LocatorPlugin *m_plugin; diff --git a/src/plugins/locator/locatorplugin.cpp b/src/plugins/locator/locatorplugin.cpp index 5366f3ad5f8b5262024a97275a9246ce8ce05d8f..871d6ff02f159d144a917ff61201e3710ac21b7d 100644 --- a/src/plugins/locator/locatorplugin.cpp +++ b/src/plugins/locator/locatorplugin.cpp @@ -74,9 +74,7 @@ namespace { return true; if (first->priority() > second->priority()) return false; - if (first->id().compare(second->id(), Qt::CaseInsensitive) < 0) - return true; - return false; + return first->id().alphabeticallyBefore(second->id()); } } @@ -200,7 +198,7 @@ void LocatorPlugin::saveSettings() s->setValue(QLatin1String("RefreshInterval"), refreshInterval()); foreach (ILocatorFilter *filter, m_filters) { if (!m_customFilters.contains(filter)) - s->setValue(filter->id(), filter->saveState()); + s->setValue(filter->id().toString(), filter->saveState()); } s->beginGroup(QLatin1String("CustomFilters")); int i = 0; diff --git a/src/plugins/locator/locatorplugin.h b/src/plugins/locator/locatorplugin.h index 4d066080d4eae458f2d5441a1bb132d83a05564f..3465311ed0aacaa78dae609e7ddde645b98f038b 100644 --- a/src/plugins/locator/locatorplugin.h +++ b/src/plugins/locator/locatorplugin.h @@ -108,8 +108,8 @@ void LocatorPlugin::loadSettingsHelper(S *settings) m_refreshTimer.setInterval(settings->value(QLatin1String("RefreshInterval"), 60).toInt() * 60000); foreach (ILocatorFilter *filter, m_filters) { - if (settings->contains(filter->id())) { - const QByteArray state = settings->value(filter->id()).toByteArray(); + if (settings->contains(filter->id().toString())) { + const QByteArray state = settings->value(filter->id().toString()).toByteArray(); if (!state.isEmpty()) filter->restoreState(state); } diff --git a/src/plugins/locator/locatorwidget.cpp b/src/plugins/locator/locatorwidget.cpp index 27c7d92159611652724fcc98b341c9b5cdd92336..ee44f43b30b4d2f5cac6bce851a61a782a72faa9 100644 --- a/src/plugins/locator/locatorwidget.cpp +++ b/src/plugins/locator/locatorwidget.cpp @@ -317,37 +317,36 @@ void LocatorWidget::updateFilterList() m_filterMenu->clear(); // update actions and menu - QMap<QString, QAction *> actionCopy = m_filterActionMap; + QMap<Id, QAction *> actionCopy = m_filterActionMap; m_filterActionMap.clear(); // register new actions, update existent foreach (ILocatorFilter *filter, m_locatorPlugin->filters()) { if (filter->shortcutString().isEmpty() || filter->isHidden()) continue; - Core::Id locatorId = Core::Id::fromString(QLatin1String("Locator.") + filter->id()); + Id filterId = filter->id(); + Id locatorId = filterId.withPrefix("Locator."); QAction *action = 0; - Core::Command *cmd = 0; - if (!actionCopy.contains(filter->id())) { + Command *cmd = 0; + if (!actionCopy.contains(filterId)) { // register new action action = new QAction(filter->displayName(), this); - cmd = Core::ActionManager::registerAction(action, locatorId, - Core::Context(Core::Constants::C_GLOBAL)); - cmd->setAttribute(Core::Command::CA_UpdateText); + cmd = ActionManager::registerAction(action, locatorId, + Context(Core::Constants::C_GLOBAL)); + cmd->setAttribute(Command::CA_UpdateText); connect(action, SIGNAL(triggered()), this, SLOT(filterSelected())); action->setData(qVariantFromValue(filter)); } else { - action = actionCopy.take(filter->id()); - action->setText(filter->displayName()); - cmd = Core::ActionManager::command(locatorId); + action = actionCopy.take(filterId); + action->setText(filterId.toString()); + cmd = ActionManager::command(locatorId); } - m_filterActionMap.insert(filter->id(), action); + m_filterActionMap.insert(filterId, action); m_filterMenu->addAction(cmd->action()); } // unregister actions that are deleted now - foreach (const QString &id, actionCopy.keys()) { - Core::ActionManager::unregisterAction(actionCopy.value(id), - Core::Id::fromString(QLatin1String("Locator.") + id)); - } + foreach (const Id id, actionCopy.keys()) + ActionManager::unregisterAction(actionCopy.value(id), id.withPrefix("Locator.")); qDeleteAll(actionCopy); m_filterMenu->addSeparator(); diff --git a/src/plugins/locator/locatorwidget.h b/src/plugins/locator/locatorwidget.h index 228e7700de1ea3d6f53e5bafd5b934783cd23217..6a6fdf2813626fc9119f728e88d959c371aaa2ca 100644 --- a/src/plugins/locator/locatorwidget.h +++ b/src/plugins/locator/locatorwidget.h @@ -95,7 +95,7 @@ private: Utils::FilterLineEdit *m_fileLineEdit; QTimer *m_showPopupTimer; QFutureWatcher<FilterEntry> *m_entriesWatcher; - QMap<QString, QAction *> m_filterActionMap; + QMap<Core::Id, QAction *> m_filterActionMap; bool m_updateRequested; bool m_acceptRequested; bool m_possibleToolTipRequest; diff --git a/src/plugins/locator/opendocumentsfilter.cpp b/src/plugins/locator/opendocumentsfilter.cpp index b69259f6b20e8c2d64b9dadc9ab8facc8cf48586..9f454593ead77777439c9939aaa2414f22135e55 100644 --- a/src/plugins/locator/opendocumentsfilter.cpp +++ b/src/plugins/locator/opendocumentsfilter.cpp @@ -44,12 +44,15 @@ using namespace Utils; OpenDocumentsFilter::OpenDocumentsFilter(EditorManager *editorManager) : m_editorManager(editorManager) { + setId("Open documents"); + setDisplayName(tr("Open Documents")); + setShortcutString(QString(QLatin1Char('o'))); + setIncludedByDefault(true); + connect(m_editorManager, SIGNAL(editorOpened(Core::IEditor*)), this, SLOT(refreshInternally())); connect(m_editorManager, SIGNAL(editorsClosed(QList<Core::IEditor*>)), this, SLOT(refreshInternally())); - setShortcutString(QString(QLatin1Char('o'))); - setIncludedByDefault(true); } QList<FilterEntry> OpenDocumentsFilter::matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry_) diff --git a/src/plugins/locator/opendocumentsfilter.h b/src/plugins/locator/opendocumentsfilter.h index f04c64d10f75fb46b70d2d109ef48879d4adadbe..152a5346977ab38a5fcc4117f68af9f82913e38f 100644 --- a/src/plugins/locator/opendocumentsfilter.h +++ b/src/plugins/locator/opendocumentsfilter.h @@ -52,9 +52,6 @@ class OpenDocumentsFilter : public Locator::ILocatorFilter public: explicit OpenDocumentsFilter(Core::EditorManager *editorManager); - QString displayName() const { return tr("Open Documents"); } - QString id() const { return QLatin1String("Open documents"); } - Locator::ILocatorFilter::Priority priority() const { return Locator::ILocatorFilter::Medium; } QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry); void accept(Locator::FilterEntry selection) const; void refresh(QFutureInterface<void> &future); diff --git a/src/plugins/macros/macrolocatorfilter.cpp b/src/plugins/macros/macrolocatorfilter.cpp index e5755f34a7dbb417029553aa7627609ea9765e87..2a24f08716be8224c0b7e1a3d865b8f9e23f86c5 100644 --- a/src/plugins/macros/macrolocatorfilter.cpp +++ b/src/plugins/macros/macrolocatorfilter.cpp @@ -43,6 +43,8 @@ using namespace Macros::Internal; MacroLocatorFilter::MacroLocatorFilter(): m_icon(QPixmap(QLatin1String(":/macros/images/macro.png"))) { + setId("Macros"); + setDisplayName(tr("Macros")); setShortcutString(QLatin1String("rm")); } diff --git a/src/plugins/macros/macrolocatorfilter.h b/src/plugins/macros/macrolocatorfilter.h index 2a9804625a0b1b8d11edb09b001e2146dccc462e..aeb1094b694a35b1eba2babab260bf5e4bfdb3f3 100644 --- a/src/plugins/macros/macrolocatorfilter.h +++ b/src/plugins/macros/macrolocatorfilter.h @@ -48,10 +48,6 @@ public: MacroLocatorFilter(); ~MacroLocatorFilter(); - QString displayName() const { return tr("Macros"); } - QString id() const { return QLatin1String("Macros"); } - Priority priority() const { return Medium; } - QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry); void accept(Locator::FilterEntry selection) const; void refresh(QFutureInterface<void> &future); diff --git a/src/plugins/projectexplorer/allprojectsfilter.cpp b/src/plugins/projectexplorer/allprojectsfilter.cpp index e30e05d6f8e5f45da183b7f27c0ccb567aa8434f..01c2ff02bab78e641c5edb9c9fe6066744b4d60a 100644 --- a/src/plugins/projectexplorer/allprojectsfilter.cpp +++ b/src/plugins/projectexplorer/allprojectsfilter.cpp @@ -42,10 +42,14 @@ using namespace ProjectExplorer::Internal; AllProjectsFilter::AllProjectsFilter(ProjectExplorerPlugin *pe) : m_projectExplorer(pe), m_filesUpToDate(false) { - connect(m_projectExplorer, SIGNAL(fileListChanged()), - this, SLOT(markFilesAsOutOfDate())); + setId("Files in any project"); + setDisplayName(tr("Files in Any Project")); setShortcutString(QString(QLatin1Char('a'))); + setPriority(Low); setIncludedByDefault(true); + + connect(m_projectExplorer, SIGNAL(fileListChanged()), + this, SLOT(markFilesAsOutOfDate())); } void AllProjectsFilter::markFilesAsOutOfDate() diff --git a/src/plugins/projectexplorer/allprojectsfilter.h b/src/plugins/projectexplorer/allprojectsfilter.h index d17e28b9dbe98fdf458751fe0db220cc5741317b..05b07533123d1a803458a379c750d8e1fe35b01d 100644 --- a/src/plugins/projectexplorer/allprojectsfilter.h +++ b/src/plugins/projectexplorer/allprojectsfilter.h @@ -47,9 +47,6 @@ class AllProjectsFilter : public Locator::BaseFileFilter public: explicit AllProjectsFilter(ProjectExplorerPlugin *pe); - QString displayName() const { return tr("Files in Any Project"); } - QString id() const { return QLatin1String("Files in any project"); } - Locator::ILocatorFilter::Priority priority() const { return Locator::ILocatorFilter::Low; } void refresh(QFutureInterface<void> &future); protected: diff --git a/src/plugins/projectexplorer/currentprojectfilter.cpp b/src/plugins/projectexplorer/currentprojectfilter.cpp index ab74f3481485a34d9ef2876d0f00762e049f4309..d817a716cb17ad554b53c40abc248da86d1e6fe1 100644 --- a/src/plugins/projectexplorer/currentprojectfilter.cpp +++ b/src/plugins/projectexplorer/currentprojectfilter.cpp @@ -41,12 +41,14 @@ using namespace ProjectExplorer::Internal; CurrentProjectFilter::CurrentProjectFilter(ProjectExplorerPlugin *pe) : BaseFileFilter(), m_projectExplorer(pe), m_project(0), m_filesUpToDate(false) { - m_projectExplorer = pe; + setId("Files in current project"); + setDisplayName(tr("Files in Current Project")); + setPriority(Low); + setShortcutString(QString(QLatin1Char('p'))); + setIncludedByDefault(false); connect(m_projectExplorer, SIGNAL(currentProjectChanged(ProjectExplorer::Project*)), this, SLOT(currentProjectChanged(ProjectExplorer::Project*))); - setShortcutString(QString(QLatin1Char('p'))); - setIncludedByDefault(false); } void CurrentProjectFilter::markFilesAsOutOfDate() diff --git a/src/plugins/projectexplorer/currentprojectfilter.h b/src/plugins/projectexplorer/currentprojectfilter.h index a358e16bcb542d1c0bbcb56216751401189f1ce5..c0dc262e6e813260d7892119f6e7d7ec705f142c 100644 --- a/src/plugins/projectexplorer/currentprojectfilter.h +++ b/src/plugins/projectexplorer/currentprojectfilter.h @@ -47,9 +47,6 @@ class CurrentProjectFilter : public Locator::BaseFileFilter public: CurrentProjectFilter(ProjectExplorerPlugin *pe); - QString displayName() const { return tr("Files in Current Project"); } - QString id() const { return QLatin1String("Files in current project"); } - Locator::ILocatorFilter::Priority priority() const { return Locator::ILocatorFilter::Low; } void refresh(QFutureInterface<void> &future); protected: @@ -60,7 +57,6 @@ private slots: void markFilesAsOutOfDate(); private: - ProjectExplorerPlugin *m_projectExplorer; Project *m_project; bool m_filesUpToDate; diff --git a/src/plugins/qmljstools/qmljsfunctionfilter.cpp b/src/plugins/qmljstools/qmljsfunctionfilter.cpp index 97dc5478d8ba4ff542cc578712e9fdbd5c3c41f9..c7689cd9354cb3c177085d18dca9881b83b973ee 100644 --- a/src/plugins/qmljstools/qmljsfunctionfilter.cpp +++ b/src/plugins/qmljstools/qmljsfunctionfilter.cpp @@ -43,6 +43,8 @@ FunctionFilter::FunctionFilter(LocatorData *data, QObject *parent) : Locator::ILocatorFilter(parent) , m_data(data) { + setId("Functions"); + setDisplayName(tr("QML Methods and Functions")); setShortcutString(QString(QLatin1Char('m'))); setIncludedByDefault(false); } diff --git a/src/plugins/qmljstools/qmljsfunctionfilter.h b/src/plugins/qmljstools/qmljsfunctionfilter.h index 55c9bb3a2c25a64d8d23be0ce843a0b01b840215..2f89cd64962855cc69c59d28cc19dd0b2f413de1 100644 --- a/src/plugins/qmljstools/qmljsfunctionfilter.h +++ b/src/plugins/qmljstools/qmljsfunctionfilter.h @@ -40,13 +40,11 @@ class LocatorData; class FunctionFilter : public Locator::ILocatorFilter { Q_OBJECT + public: explicit FunctionFilter(LocatorData *data, QObject *parent = 0); ~FunctionFilter(); - QString displayName() const { return tr("QML Methods and Functions"); } - QString id() const { return QLatin1String("Functions"); } - Priority priority() const { return Medium; } QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry); void accept(Locator::FilterEntry selection) const; void refresh(QFutureInterface<void> &future); diff --git a/src/plugins/texteditor/linenumberfilter.cpp b/src/plugins/texteditor/linenumberfilter.cpp index 79e06e5bdd95895de65aca4e58480c0935ffbe64..3b356e7633e97cde5f921745098bf0233f938638 100644 --- a/src/plugins/texteditor/linenumberfilter.cpp +++ b/src/plugins/texteditor/linenumberfilter.cpp @@ -44,6 +44,9 @@ using namespace TextEditor::Internal; LineNumberFilter::LineNumberFilter(QObject *parent) : ILocatorFilter(parent) { + setId("Line in current document"); + setDisplayName(tr("Line in Current Document")); + setPriority(High); setShortcutString(QString(QLatin1Char('l'))); setIncludedByDefault(true); } diff --git a/src/plugins/texteditor/linenumberfilter.h b/src/plugins/texteditor/linenumberfilter.h index 5d4a9a6a22f6dff98713a2f25377b79e0ed0bbc0..b137876548271d84207ca27fda876937f10a0ebb 100644 --- a/src/plugins/texteditor/linenumberfilter.h +++ b/src/plugins/texteditor/linenumberfilter.h @@ -49,9 +49,6 @@ class LineNumberFilter : public Locator::ILocatorFilter public: explicit LineNumberFilter(QObject *parent = 0); - QString displayName() const { return tr("Line in Current Document"); } - QString id() const { return QLatin1String("Line in current document"); } - Locator::ILocatorFilter::Priority priority() const { return Locator::ILocatorFilter::High; } QList<Locator::FilterEntry> matchesFor(QFutureInterface<Locator::FilterEntry> &future, const QString &entry); void accept(Locator::FilterEntry selection) const; void refresh(QFutureInterface<void> &) {}