forked from qt-creator/qt-creator
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:
11
doc/examples/progressbar/ProgressBar.pluginspec
Normal file
11
doc/examples/progressbar/ProgressBar.pluginspec
Normal 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>
|
||||
188
doc/examples/progressbar/headerfilteprogress.cpp
Normal file
188
doc/examples/progressbar/headerfilteprogress.cpp
Normal 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);
|
||||
}
|
||||
|
||||
|
||||
45
doc/examples/progressbar/headerfilterprogress.h
Normal file
45
doc/examples/progressbar/headerfilterprogress.h
Normal 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
|
||||
28
doc/examples/progressbar/progressbar.pro
Normal file
28
doc/examples/progressbar/progressbar.pro
Normal 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
|
||||
|
||||
36
doc/examples/progressbar/progressbarplugin.cpp
Normal file
36
doc/examples/progressbar/progressbarplugin.cpp
Normal 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)
|
||||
20
doc/examples/progressbar/progressbarplugin.h
Normal file
20
doc/examples/progressbar/progressbarplugin.h
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user