Qt Creator Plugin HOWTO documentation first and second cut

Signed-off-by: Abhishek Patil <abhishek.patil@vcreatelogic.com>

Merge-request: 145
Reviewed-by: con <qtc-committer@nokia.com>
This commit is contained in:
Abhishek Patil
2010-06-21 15:27:59 +02:00
committed by con
parent cdbe93285b
commit abcb9358c2
155 changed files with 7841 additions and 0 deletions

View File

@@ -0,0 +1,11 @@
<plugin name="ProgressBar" version="0.0.1">
<vendor>FooCompanyInc</vendor>
<copyright></copyright>
<license></license>
<description>{{PLUGIN_DESCRIPTION}}</description>
<url>http://www.foocompany.com</url>
<dependencyList>
<dependency name="Core"/>
<dependency name="Find"/>
</dependencyList>
</plugin>

View File

@@ -0,0 +1,188 @@
#include "headerfilterprogress.h"
#include <coreplugin/progressmanager/progressmanager.h>
#include <coreplugin/editormanager/editormanager.h>
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/iprojectmanager.h>
#include <extensionsystem/pluginmanager.h>
#include <texteditor/basetexteditor.h>
#include <find/searchresultwindow.h>
#include <projectexplorer/project.h>
#include <projectexplorer/session.h>
#include <find/textfindconstants.h>
#include <utils/stylehelper.h>
#include <utils/filesearch.h>
#include <coreplugin/icore.h>
#include <QtGui/QComboBox>
#include <QtGui/QCheckBox>
#include<QFutureWatcher>
#include<QStringListModel>
#include<QLabel>
#include<QFont>
#include<QMessageBox>
#include<QGridLayout>
using namespace Core;
using namespace Utils;
using namespace TextEditor;
struct HeaderFilterProgressData
{
HeaderFilterProgressData() : projectPlugin(0), m_searchResultWindow(0){}
QFutureWatcher<FileSearchResult> watcher;
QLabel* resultLabel;
ProjectExplorer::ProjectExplorerPlugin* projectExplorer()
{
if(projectPlugin)
return projectPlugin;
ExtensionSystem::PluginManager* pm = ExtensionSystem::PluginManager::instance();
projectPlugin = pm->getObject<ProjectExplorer::ProjectExplorerPlugin>();
return projectPlugin;
}
// Method to search and return the search window
Find::SearchResultWindow* searchResultWindow()
{
if(m_searchResultWindow)
return m_searchResultWindow;
ExtensionSystem::PluginManager* pm = ExtensionSystem::PluginManager::instance();
m_searchResultWindow = pm->getObject<Find::SearchResultWindow>();
return m_searchResultWindow;
}
private:
ProjectExplorer::ProjectExplorerPlugin* projectPlugin;
Find::SearchResultWindow* m_searchResultWindow;
};
HeaderFilterProgress::HeaderFilterProgress()
{
d = new HeaderFilterProgressData;
d->watcher.setPendingResultsLimit(1);
d->resultLabel = 0 ;
// displayResult(int) is called when every a new
// search result is generated
connect(&d->watcher, SIGNAL(resultReadyAt(int)),this, SLOT(displayResult(int)));
}
HeaderFilterProgress::~HeaderFilterProgress()
{
delete d;
}
QString HeaderFilterProgress::id() const
{
return "HeaderFilter";
}
QString HeaderFilterProgress::name() const
{
return tr("Header Filter");
}
bool HeaderFilterProgress::isEnabled() const
{
QList<ProjectExplorer::Project*> projects = d->projectExplorer()->session()->projects();
if(projects.count())
return true;
return false;
}
QKeySequence HeaderFilterProgress::defaultShortcut() const
{
return QKeySequence();
}
void HeaderFilterProgress::findAll(const QString &text,QTextDocument::FindFlags findFlags)
{
// Fetch a list of all open projects
QList<ProjectExplorer::Project*> projects = d->projectExplorer()->session()->projects();
// Make a list of files in each project
QStringList files;
Q_FOREACH(ProjectExplorer::Project* project, projects)
files += project->files(ProjectExplorer::Project::AllFiles);
// Remove duplicates
files.removeDuplicates();
//------------------------------------------------------------
// Begin searching
QString includeline = "#include <" + text + ">";
Find::SearchResult* result = d->searchResultWindow()->startNewSearch();
d->watcher.setFuture(QFuture<FileSearchResult>());
//When result gets activated it invokes the openEditor function
connect(result, SIGNAL(activated(Find::SearchResultItem)),
this, SLOT(openEditor(Find::SearchResultItem)));
d->searchResultWindow()->popup(true);
// Let the watcher monitor the search results
d->watcher.setFuture(Utils::findInFiles(includeline, files, findFlags));
//Creates the Progres bar
Core::FutureProgress* progress =
Core::ICore::instance()->progressManager()->addTask(d->watcher.future(),
"MySearch",
Find::Constants::TASK_SEARCH,
Core::ProgressManager::KeepOnFinish
);
progress->setWidget(createProgressWidget());
connect(progress, SIGNAL(clicked()), d->searchResultWindow(), SLOT(popup()));
}
QWidget* HeaderFilterProgress::createProgressWidget()
{
d->resultLabel = new QLabel;
d->resultLabel->setAlignment(Qt::AlignCenter);
QFont f = d->resultLabel->font();
f.setBold(true);
f.setPointSizeF(StyleHelper::sidebarFontSize());
d->resultLabel->setFont(f);
d->resultLabel->setPalette(StyleHelper::sidebarFontPalette(d->resultLabel->palette()));
d->resultLabel->setText(tr("%1 found").arg(d->searchResultWindow()->numberOfResults()));
return d->resultLabel;
}
QWidget* HeaderFilterProgress::createConfigWidget()
{
return (new QLabel("This is a header filter"));
}
void HeaderFilterProgress::displayResult(int index)
{
FileSearchResult result = d->watcher.future().resultAt(index);
d->searchResultWindow()->addResult(result.fileName,
result.lineNumber,
result.matchingLine,
result.matchStart,
result.matchLength);
if (d->resultLabel)
d->resultLabel->setText(tr("%1 found").arg(d->searchResultWindow()->numberOfResults()));
}
void HeaderFilterProgress::openEditor(const Find::SearchResultItem &item)
{
TextEditor::BaseTextEditor::openEditorAt(item.fileName, item.lineNumber, item.index);
}

View File

@@ -0,0 +1,45 @@
#ifndef HEADERFILTERPROGRESS_H
#define HEADERFILTERPROGRESS_H
#include <find/ifindfilter.h>
#include <utils/filesearch.h>
#include <QtGui/QComboBox>
namespace Find {
class SearchResultWindow;
struct SearchResultItem;
}
class QKeySequence;
class QWidget;
struct HeaderFilterProgressData;
class HeaderFilterProgress : public Find::IFindFilter
{
Q_OBJECT
public:
HeaderFilterProgress();
~HeaderFilterProgress();
QString id() const;
QString name() const;
bool isEnabled() const;
QKeySequence defaultShortcut() const;
void findAll(const QString &txt,QTextDocument::FindFlags findFlags);
QWidget* createConfigWidget();
QWidget* createProgressWidget();
protected slots:
void displayResult(int index);
void openEditor(const Find::SearchResultItem &item);
private:
HeaderFilterProgressData* d;
};
#endif // HEADERFILTERPROGRESS_H

View File

@@ -0,0 +1,28 @@
QTC_SOURCE = C:/Work/QtCreator
QTC_BUILD = C:/Work/QtCreator/build
DEFINES += FIND_LIBRARY
TEMPLATE = lib
TARGET = ProgressBar
IDE_SOURCE_TREE = $$QTC_SOURCE
IDE_BUILD_TREE = $$QTC_BUILD
PROVIDER = FooCompanyInc
include($$QTC_SOURCE/src/libs/extensionsystem/extensionsystem.pri)
include($$QTC_SOURCE/src/qtcreatorplugin.pri)
include($$QTC_SOURCE/src/plugins/coreplugin/coreplugin.pri)
include($$QTC_SOURCE/src/libs/utils/utils.pri)
include($$QTC_SOURCE/src/plugins/projectexplorer/projectexplorer.pri)
include($$QTC_SOURCE/src/plugins/find/find.pri)
LIBS += -L$$IDE_PLUGIN_PATH/Nokia
HEADERS = progressbarplugin.h \
headerfilterprogress.h
SOURCES = progressbarplugin.cpp \
headerfilteprogress.cpp
OTHER_FILES = ProgressBar.pluginspec

View File

@@ -0,0 +1,36 @@
#include "progressbarplugin.h"
#include "headerfilterprogress.h"
#include <QtPlugin>
#include <QStringList>
ProgressBarPlugin::ProgressBarPlugin()
{
// Do nothing
}
ProgressBarPlugin::~ProgressBarPlugin()
{
// Do notning
}
void ProgressBarPlugin::extensionsInitialized()
{
// Do nothing
}
bool ProgressBarPlugin::initialize(const QStringList& args, QString *errMsg)
{
Q_UNUSED(args);
Q_UNUSED(errMsg);
addAutoReleasedObject( new HeaderFilterProgress);
return true;
}
void ProgressBarPlugin::shutdown()
{
// Do nothing
}
Q_EXPORT_PLUGIN(ProgressBarPlugin)

View File

@@ -0,0 +1,20 @@
#ifndef PROGRESSBAR_PLUGIN_H
#define PROGRESSBAR_PLUGIN_H
#include <extensionsystem/iplugin.h>
class ProgressBarPlugin : public ExtensionSystem::IPlugin
{
Q_OBJECT
public:
ProgressBarPlugin();
~ProgressBarPlugin();
void extensionsInitialized();
bool initialize(const QStringList & arguments, QString* errorString);
void shutdown();
};
#endif // PROGRESSBAR_PLUGIN_H