summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cpptoolsplugin.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-06-09 15:56:45 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2009-06-09 15:56:45 +0200
commitc44584b7ca8fdf9d37d1b27637ca1259f3f2c517 (patch)
tree08194c55d0f554539afab4e78329d4cf60b27bda /src/plugins/cpptools/cpptoolsplugin.cpp
parent31522c55994cf738ba2f8f152b349ff2ae149270 (diff)
downloadqt-creator-c44584b7ca8fdf9d37d1b27637ca1259f3f2c517.tar.gz
Search the function calls
Diffstat (limited to 'src/plugins/cpptools/cpptoolsplugin.cpp')
-rw-r--r--src/plugins/cpptools/cpptoolsplugin.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp
index 62d77eb27d..dc8e6a6600 100644
--- a/src/plugins/cpptools/cpptoolsplugin.cpp
+++ b/src/plugins/cpptools/cpptoolsplugin.cpp
@@ -127,6 +127,61 @@ void FindClassDeclarations::openEditor(const QString &fileName, int line, int co
TextEditor::BaseTextEditor::openEditorAt(fileName, line, column);
}
+//////
+FindFunctionCalls::FindFunctionCalls(CppModelManager *modelManager)
+ : _modelManager(modelManager),
+ _resultWindow(ExtensionSystem::PluginManager::instance()->getObject<Find::SearchResultWindow>())
+{
+ m_watcher.setPendingResultsLimit(1);
+ connect(&m_watcher, SIGNAL(resultReadyAt(int)), this, SLOT(displayResult(int)));
+ connect(&m_watcher, SIGNAL(finished()), this, SLOT(searchFinished()));
+}
+
+void FindFunctionCalls::findAll(const QString &text, QTextDocument::FindFlags findFlags)
+{
+ _resultWindow->clearContents();
+ _resultWindow->popup(true);
+
+ Core::ProgressManager *progressManager = Core::ICore::instance()->progressManager();
+
+ SemanticSearchFactory::Ptr factory(new SearchFunctionCallFactory(text, findFlags));
+
+ QFuture<Core::Utils::FileSearchResult> result = semanticSearch(_modelManager, factory);
+
+ m_watcher.setFuture(result);
+
+ Core::FutureProgress *progress = progressManager->addTask(result, tr("Search functions"),
+ CppTools::Constants::TASK_INDEX,
+ Core::ProgressManager::CloseOnSuccess);
+
+ connect(progress, SIGNAL(clicked()), _resultWindow, SLOT(popup()));
+}
+
+void FindFunctionCalls::displayResult(int index)
+{
+ Core::Utils::FileSearchResult result = m_watcher.future().resultAt(index);
+ Find::ResultWindowItem *item = _resultWindow->addResult(result.fileName,
+ result.lineNumber,
+ result.matchingLine,
+ result.matchStart,
+ result.matchLength);
+ if (item)
+ connect(item, SIGNAL(activated(const QString&,int,int)),
+ this, SLOT(openEditor(const QString&,int,int)));
+}
+
+void FindFunctionCalls::searchFinished()
+{
+ emit changed();
+}
+
+void FindFunctionCalls::openEditor(const QString &fileName, int line, int column)
+{
+ TextEditor::BaseTextEditor::openEditorAt(fileName, line, column);
+}
+
+
+
CppToolsPlugin::CppToolsPlugin() :
m_context(-1),
m_modelManager(0),
@@ -167,6 +222,7 @@ bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error)
addAutoReleasedObject(new CppFileSettingsPage(m_fileSettings));
addAutoReleasedObject(new FindClassDeclarations(m_modelManager));
+ addAutoReleasedObject(new FindFunctionCalls(m_modelManager));
// Menus
Core::ActionContainer *mtools = am->actionContainer(Core::Constants::M_TOOLS);