pluginhowto: update example code

Still not fully compilable
This commit is contained in:
hjk
2011-05-11 12:21:57 +02:00
parent d58f0e7c75
commit ad68bb2302
15 changed files with 137 additions and 146 deletions

View File

@@ -37,59 +37,62 @@
****************************************************************************/ ****************************************************************************/
#include "headerfilter.h" #include "headerfilter.h"
#include <projectexplorer/projectexplorer.h>
#include <extensionsystem/pluginmanager.h>
#include <find/searchresultwindow.h>
#include <projectexplorer/iprojectmanager.h> #include <projectexplorer/iprojectmanager.h>
#include <projectexplorer/project.h> #include <projectexplorer/project.h>
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/session.h> #include <projectexplorer/session.h>
#include <extensionsystem/pluginmanager.h>
#include <utils/filesearch.h>
#include<QFutureWatcher>
#include<QLabel>
#include <find/searchresultwindow.h>
#include <texteditor/basetexteditor.h> #include <texteditor/basetexteditor.h>
#include <utils/filesearch.h>
#include <QFutureWatcher>
#include <QLabel>
using namespace Core; using namespace Core;
using namespace Utils; using namespace Utils;
struct HeaderFilterData class HeaderFilterPrivate
{ {
HeaderFilterData() : m_projectPlugin(0), m_searchResultWindow(0){} public:
QFutureWatcher<FileSearchResult> watcher; HeaderFilterPrivate()
: m_projectPlugin(0), m_searchResultWindow(0)
{}
ProjectExplorer::ProjectExplorerPlugin* projectExplorer() ProjectExplorer::ProjectExplorerPlugin *projectExplorer()
{ {
if(m_projectPlugin) if (m_projectPlugin)
return m_projectPlugin; return m_projectPlugin;
ExtensionSystem::PluginManager* pm = ExtensionSystem::PluginManager::instance(); ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
m_projectPlugin = pm->getObject<ProjectExplorer::ProjectExplorerPlugin>(); m_projectPlugin = pm->getObject<ProjectExplorer::ProjectExplorerPlugin>();
return m_projectPlugin; return m_projectPlugin;
} }
// Method to search and return the search window // Method to search and return the search window
Find::SearchResultWindow *searchResultWindow()
Find::SearchResultWindow* searchResultWindow()
{ {
if(m_searchResultWindow) if (m_searchResultWindow)
return m_searchResultWindow; return m_searchResultWindow;
ExtensionSystem::PluginManager* pm = ExtensionSystem::PluginManager::instance(); ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
m_searchResultWindow = pm->getObject<Find::SearchResultWindow>(); m_searchResultWindow = pm->getObject<Find::SearchResultWindow>();
return m_searchResultWindow; return m_searchResultWindow;
} }
private: QFutureWatcher<FileSearchResult> watcher;
ProjectExplorer::ProjectExplorerPlugin* m_projectPlugin;
Find::SearchResultWindow *m_searchResultWindow;
private:
ProjectExplorer::ProjectExplorerPlugin *m_projectPlugin;
Find::SearchResultWindow *m_searchResultWindow;
}; };
HeaderFilter::HeaderFilter() HeaderFilter::HeaderFilter()
{ {
d = new HeaderFilterData; d = new HeaderFilterPrivate;
d->watcher.setPendingResultsLimit(1); d->watcher.setPendingResultsLimit(1);
// displayResult(int) is called when every a new // displayResult(int) is called when every a new
@@ -107,18 +110,24 @@ QString HeaderFilter::id() const
return "HeaderFilter"; return "HeaderFilter";
} }
QString HeaderFilter::name() const QString HeaderFilter::displayName() const
{ {
return tr("Header Filter"); return tr("Header Filter");
} }
bool HeaderFilter::canCancel() const
{
return false;
}
void HeaderFilter::cancel()
{
}
bool HeaderFilter::isEnabled() const bool HeaderFilter::isEnabled() const
{ {
QList<ProjectExplorer::Project*> projects = d->projectExplorer()->session()->projects(); QList<ProjectExplorer::Project *> projects = d->projectExplorer()->session()->projects();
if(projects.count()) return !projects.isEmpty();
return true;
return false;
} }
QKeySequence HeaderFilter::defaultShortcut() const QKeySequence HeaderFilter::defaultShortcut() const
@@ -128,31 +137,30 @@ QKeySequence HeaderFilter::defaultShortcut() const
QWidget *HeaderFilter::createConfigWidget() QWidget *HeaderFilter::createConfigWidget()
{ {
return (new QLabel("This is a header filter")); return new QLabel("This is a header filter");
} }
void HeaderFilter::findAll(const QString &text, Find::FindFlags findFlags)
void HeaderFilter::findAll(const QString &text,QTextDocument::FindFlags findFlags) {
{
// Fetch a list of all open projects // Fetch a list of all open projects
QList<ProjectExplorer::Project*> projects = d->projectExplorer()->session()->projects(); QList<ProjectExplorer::Project *> projects = d->projectExplorer()->session()->projects();
// Make a list of files in each project // Make a list of files in each project
QStringList files; QStringList files;
Q_FOREACH(ProjectExplorer::Project* project, projects) foreach (ProjectExplorer::Project *project, projects)
files += project->files(ProjectExplorer::Project::AllFiles); files += project->files(ProjectExplorer::Project::AllFiles);
// Remove duplicates // Remove duplicates
files.removeDuplicates(); files.removeDuplicates();
//------------------------------------------------------------ //------------------------------------------------------------
// Begin searching // Begin searching
QString includeline = "#include <" + text + ">"; QString includeline = "#include <" + text + '>';
Find::SearchResult *result = d->searchResultWindow()->startNewSearch(); Find::SearchResult *result = d->searchResultWindow()->startNewSearch();
d->watcher.setFuture(QFuture<FileSearchResult>()); d->watcher.setFuture(QFuture<FileSearchResult>());
//When result gets activated it invokes the openEditor function // When result gets activated it invokes the openEditor function
connect(result, SIGNAL(activated(Find::SearchResultItem)), connect(result, SIGNAL(activated(Find::SearchResultItem)),
this, SLOT(openEditor(Find::SearchResultItem))); this, SLOT(openEditor(Find::SearchResultItem)));

View File

@@ -48,12 +48,13 @@ class SearchResultWindow;
struct SearchResultItem; struct SearchResultItem;
} }
QT_BEGIN_NAMESPACE
class QKeySequence; class QKeySequence;
class QWidget; class QWidget;
QT_END_NAMESPACE
class HeaderFilterPrivate;
struct HeaderFilterData;
class HeaderFilter : public Find::IFindFilter class HeaderFilter : public Find::IFindFilter
{ {
Q_OBJECT Q_OBJECT
@@ -61,19 +62,22 @@ class HeaderFilter : public Find::IFindFilter
public: public:
HeaderFilter(); HeaderFilter();
~HeaderFilter(); ~HeaderFilter();
QString id() const; QString id() const;
QString name() const;
bool isEnabled() const; bool isEnabled() const;
QKeySequence defaultShortcut() const; QKeySequence defaultShortcut() const;
void findAll(const QString &txt,QTextDocument::FindFlags findFlags); void findAll(const QString &text, Find::FindFlags findFlags);
QWidget *createConfigWidget(); QWidget *createConfigWidget();
QString displayName() const;
bool canCancel() const;
void cancel();
protected slots: protected slots:
void displayResult(int index); void displayResult(int index);
void openEditor(const Find::SearchResultItem &item); void openEditor(const Find::SearchResultItem &item);
private: private:
HeaderFilterData *d; HeaderFilterPrivate *d;
}; };

View File

@@ -1,5 +1,7 @@
QTC_SOURCE = C:/Work/QtCreator #QTC_SOURCE = C:/Work/QtCreator
QTC_BUILD = C:/Work/QtCreator/build #QTC_BUILD = C:/Work/QtCreator/build
QTC_SOURCE = ../../../..
QTC_BUILD = ../../../..
DEFINES += FIND_LIBRARY DEFINES += FIND_LIBRARY
TEMPLATE = lib TEMPLATE = lib

View File

@@ -47,20 +47,15 @@ CustomProjectPlugin::CustomProjectPlugin()
// Do nothing // Do nothing
} }
CustomProjectPlugin::~CustomProjectPlugin()
{
// Do notning
}
void CustomProjectPlugin::extensionsInitialized() void CustomProjectPlugin::extensionsInitialized()
{ {
// Do nothing // Do nothing
} }
bool CustomProjectPlugin::initialize(const QStringList& args, QString *errMsg) bool CustomProjectPlugin::initialize(const QStringList &args, QString *errorMessage)
{ {
Q_UNUSED(args); Q_UNUSED(args);
Q_UNUSED(errMsg); Q_UNUSED(errorMessage);
addAutoReleasedObject(new CustomProjectWizard); addAutoReleasedObject(new CustomProjectWizard);

View File

@@ -45,10 +45,9 @@ class CustomProjectPlugin : public ExtensionSystem::IPlugin
{ {
public: public:
CustomProjectPlugin(); CustomProjectPlugin();
~CustomProjectPlugin();
void extensionsInitialized(); void extensionsInitialized();
bool initialize(const QStringList & arguments, QString * errorString); bool initialize(const QStringList &arguments, QString *errorString);
void shutdown(); void shutdown();
}; };

View File

@@ -1,5 +1,7 @@
QTC_SOURCE = C:/Work/QtCreator #QTC_SOURCE = C:/Work/QtCreator
QTC_BUILD = C:/Work/QtCreator/build #QTC_BUILD = C:/Work/QtCreator/build
QTC_SOURCE = ../../../../..
QTC_BUILD = ../../../../..
TEMPLATE = lib TEMPLATE = lib
TARGET = CustomProject TARGET = CustomProject
IDE_SOURCE_TREE = $$QTC_SOURCE IDE_SOURCE_TREE = $$QTC_SOURCE

View File

@@ -46,10 +46,6 @@ CustomProjectWizard::CustomProjectWizard()
{ {
} }
CustomProjectWizard::~CustomProjectWizard()
{
}
Core::IWizard::Kind CustomProjectWizard::kind() const Core::IWizard::Kind CustomProjectWizard::kind() const
{ {
return IWizard::ProjectWizard; return IWizard::ProjectWizard;
@@ -65,9 +61,9 @@ QString CustomProjectWizard::description() const
return "A custom project"; return "A custom project";
} }
QString CustomProjectWizard::name() const QString CustomProjectWizard::displayName() const
{ {
return "CustomProject"; return tr("CustomProject");
} }
QString CustomProjectWizard::category() const QString CustomProjectWizard::category() const
@@ -80,10 +76,9 @@ QString CustomProjectWizard::trCategory() const
return tr("FooCompanyInc"); return tr("FooCompanyInc");
} }
QStringList CustomProjectWizard::runWizard(const QString &path, QWidget *parent) void CustomProjectWizard::runWizard(const QString &path, QWidget *parent)
{ {
Q_UNUSED(path); Q_UNUSED(path);
Q_UNUSED(parent); Q_UNUSED(parent);
QMessageBox::information(parent, "Custom Wizard Dialog", "Hi there!"); QMessageBox::information(parent, "Custom Wizard Dialog", "Hi there!");
return QStringList();
} }

View File

@@ -45,15 +45,14 @@ class CustomProjectWizard : public Core::IWizard
{ {
public: public:
CustomProjectWizard(); CustomProjectWizard();
~CustomProjectWizard();
Core::IWizard::Kind kind() const; Core::IWizard::Kind kind() const;
QIcon icon() const; QIcon icon() const;
QString description() const; QString description() const;
QString name() const; QString displayName() const;
QString category() const; QString category() const;
QString trCategory() const; QString trCategory() const;
QStringList runWizard(const QString &path, QWidget *parent); void runWizard(const QString &path, QWidget *parent);
}; };
#endif // CUSTOMPROJECTWIZARD_H #endif // CUSTOMPROJECTWIZARD_H

View File

@@ -38,7 +38,9 @@
#include "itemmodelwizardplugin.h" #include "itemmodelwizardplugin.h"
#include "modelclasswizard.h" #include "modelclasswizard.h"
#include <QApplication> #include <QApplication>
#include <QIcon>
#include <QtPlugin> #include <QtPlugin>
#include <QStringList> #include <QStringList>
@@ -57,10 +59,10 @@ void ItemModelWizardPlugin::extensionsInitialized()
// Do nothing // Do nothing
} }
bool ItemModelWizardPlugin::initialize(const QStringList& args, QString *errMsg) bool ItemModelWizardPlugin::initialize(const QStringList &args, QString *errorMessage)
{ {
Q_UNUSED(args); Q_UNUSED(args);
Q_UNUSED(errMsg); Q_UNUSED(errorMessage);
Core::BaseFileWizardParameters params; Core::BaseFileWizardParameters params;
params.setKind(Core::IWizard::ClassWizard); params.setKind(Core::IWizard::ClassWizard);
params.setIcon(qApp->windowIcon()); params.setIcon(qApp->windowIcon());

View File

@@ -48,7 +48,7 @@ public:
~ItemModelWizardPlugin(); ~ItemModelWizardPlugin();
void extensionsInitialized(); void extensionsInitialized();
bool initialize(const QStringList & arguments, QString * errorString); bool initialize(const QStringList &arguments, QString *errorString);
void shutdown(); void shutdown();
}; };

View File

@@ -1,5 +1,7 @@
QTC_SOURCE = C:/Work/QtCreator #QTC_SOURCE = C:/Work/QtCreator
QTC_BUILD = C:/Work/QtCreator/build #QTC_BUILD = C:/Work/QtCreator/build
QTC_SOURCE = ../../../../..
QTC_BUILD = ../../../../..
TEMPLATE = lib TEMPLATE = lib
TARGET = ItemModelWizard TARGET = ItemModelWizard
IDE_SOURCE_TREE = $$QTC_SOURCE IDE_SOURCE_TREE = $$QTC_SOURCE

View File

@@ -39,32 +39,27 @@
#include "modelclasswizard.h" #include "modelclasswizard.h"
#include "modelnamepage.h" #include "modelnamepage.h"
#include <QFile>
#include <QFileInfo>
#include <cppeditor/cppeditor.h> #include <cppeditor/cppeditor.h>
#include <cppeditor/cppeditorconstants.h> #include <cppeditor/cppeditorconstants.h>
#include <coreplugin/basefilewizard.h> #include <coreplugin/basefilewizard.h>
ModelClassWizard::ModelClassWizard(const Core::BaseFileWizardParameters &parameters,QObject *parent) #include <QFile>
: Core::BaseFileWizard(parameters, parent) #include <QFileInfo>
ModelClassWizard::ModelClassWizard(const Core::BaseFileWizardParameters &parameters, QObject *parent)
: Core::BaseFileWizard(parameters, parent)
{ {
} }
ModelClassWizard::~ModelClassWizard() QWizard *ModelClassWizard::createWizardDialog(QWidget *parent,
{ const QString &defaultPath, const WizardPageList &extensionPages) const
}
QWizard * ModelClassWizard::createWizardDialog(
QWidget *parent,
const QString &defaultPath,
const WizardPageList &extensionPages) const
{ {
// Create a wizard // Create a wizard
QWizard* wizard = new QWizard(parent); QWizard *wizard = new QWizard(parent);
wizard->setWindowTitle("Model Class Wizard"); wizard->setWindowTitle(tr("Model Class Wizard"));
// Make our page as first page // Make our page as first page
ModelNamePage* page = new ModelNamePage(wizard); ModelNamePage *page = new ModelNamePage(wizard);
int pageId = wizard->addPage(page); int pageId = wizard->addPage(page);
wizard->setProperty("_PageId_", pageId); wizard->setProperty("_PageId_", pageId);
page->setPath(defaultPath); page->setPath(defaultPath);
@@ -75,32 +70,29 @@ QWizard * ModelClassWizard::createWizardDialog(
return wizard; return wizard;
} }
QString ModelClassWizard::readFile(const QString& fileName, const QMap<QString,QString>& QString ModelClassWizard::readFile(const QString& fileName,
replacementMap) const const QMap<QString,QString> & replacementMap) const
{ {
QFile file(fileName); QFile file(fileName);
file.open(QFile::ReadOnly); file.open(QFile::ReadOnly);
QString retStr = file.readAll(); QString result = file.readAll();
QMap<QString,QString>::const_iterator it = replacementMap.begin(); QMap<QString,QString>::const_iterator it = replacementMap.begin();
QMap<QString,QString>::const_iterator end = replacementMap.end(); QMap<QString,QString>::const_iterator end = replacementMap.end();
while(it != end) for (; it != end; ++it)
{ result.replace(it.key(), it.value());
retStr.replace(it.key(), it.value()); return result;
++it;
}
return retStr;
} }
Core::GeneratedFiles ModelClassWizard::generateFiles( Core::GeneratedFiles ModelClassWizard::generateFiles
const QWizard *w,QString *errorMessage) const (const QWizard *wizard, QString *errorMessage) const
{ {
Q_UNUSED(errorMessage); Q_UNUSED(errorMessage);
Core::GeneratedFiles ret; Core::GeneratedFiles ret;
int pageId = w->property("_PageId_").toInt(); int pageId = wizard->property("_PageId_").toInt();
ModelNamePage* page = qobject_cast<ModelNamePage*>(w->page(pageId)); ModelNamePage *page = qobject_cast<ModelNamePage*>(wizard->page(pageId));
if(!page) if (!page)
return ret; return ret;
ModelClassParameters params = page->parameters(); ModelClassParameters params = page->parameters();
QMap<QString,QString> replacementMap; QMap<QString,QString> replacementMap;
@@ -110,28 +102,25 @@ Core::GeneratedFiles ModelClassWizard::generateFiles(
replacementMap["{{CLASS_NAME}}"] = params.className; replacementMap["{{CLASS_NAME}}"] = params.className;
replacementMap["{{CLASS_HEADER}}"] = QFileInfo(params.headerFile).fileName(); replacementMap["{{CLASS_HEADER}}"] = QFileInfo(params.headerFile).fileName();
Core::GeneratedFile headerFile(params.path + "/" + params.headerFile); Core::GeneratedFile headerFile(params.path + '/' + params.headerFile);
headerFile.setEditorKind(CppEditor::Constants::CPPEDITOR_KIND); headerFile.setEditorKind(CppEditor::Constants::CPPEDITOR_KIND);
Core::GeneratedFile sourceFile(params.path + "/" + params.sourceFile); Core::GeneratedFile sourceFile(params.path + '/' + params.sourceFile);
sourceFile.setEditorKind(CppEditor::Constants::CPPEDITOR_KIND); sourceFile.setEditorKind(CppEditor::Constants::CPPEDITOR_KIND);
if(params.baseClass == "QAbstractItemModel") if (params.baseClass == "QAbstractItemModel") {
{ headerFile.setContents(readFile(":/CustomProject/ItemModelHeader", replacementMap));
headerFile.setContents(readFile(":/CustomProject/ItemModelHeader", replacementMap) ); sourceFile.setContents(readFile(":/CustomProject/ItemModelSource", replacementMap));
sourceFile.setContents(readFile(":/CustomProject/ItemModelSource", replacementMap) );
} }
else if(params.baseClass == "QAbstractTableModel") else if (params.baseClass == "QAbstractTableModel") {
{ headerFile.setContents(readFile(":/CustomProject/TableModelHeader", replacementMap));
headerFile.setContents(readFile(":/CustomProject/TableModelHeader", replacementMap) ); sourceFile.setContents(readFile(":/CustomProject/TableModelSource", replacementMap));
sourceFile.setContents(readFile(":/CustomProject/TableModelSource", replacementMap) );
} }
else if(params.baseClass == "QAbstractListModel") else if (params.baseClass == "QAbstractListModel") {
{ headerFile.setContents(readFile(":/CustomProject/ListModelHeader", replacementMap));
headerFile.setContents(readFile(":/CustomProject/ListModelHeader", replacementMap) ); sourceFile.setContents(readFile(":/CustomProject/ListModelSource", replacementMap));
sourceFile.setContents(readFile(":/CustomProject/ListModelSource", replacementMap) );
} }
ret << headerFile << sourceFile; ret << headerFile << sourceFile;

View File

@@ -41,6 +41,7 @@
#include <coreplugin/basefilewizard.h> #include <coreplugin/basefilewizard.h>
#include <QMap>
class ModelClassWizard : public Core::BaseFileWizard class ModelClassWizard : public Core::BaseFileWizard
{ {
@@ -48,17 +49,15 @@ class ModelClassWizard : public Core::BaseFileWizard
public: public:
explicit ModelClassWizard(const Core::BaseFileWizardParameters &parameters, QObject *parent = 0); explicit ModelClassWizard(const Core::BaseFileWizardParameters &parameters, QObject *parent = 0);
~ModelClassWizard();
QWizard *createWizardDialog(QWidget *parent, QWizard *createWizardDialog(QWidget *parent, const QString &defaultPath,
const QString &defaultPath, const WizardPageList &extensionPages) const;
const WizardPageList &extensionPages) const;
Core::GeneratedFiles generateFiles(const QWizard *w, QString *errorMessage) const; Core::GeneratedFiles generateFiles(const QWizard *w, QString *errorMessage) const;
private: private:
QString readFile(const QString& fileName, QString readFile(const QString &fileName,
const QMap<QString,QString>& replacementMap) const; const QMap<QString, QString> &replacementMap) const;
}; };
#endif // MODELCLASSWIZARD_H #endif // MODELCLASSWIZARD_H

View File

@@ -37,30 +37,24 @@
****************************************************************************/ ****************************************************************************/
#include "modelnamepage.h" #include "modelnamepage.h"
#include "ui_modelnamepage.h"
ModelNamePage::ModelNamePage(QWidget *parent) : ModelNamePage::ModelNamePage(QWidget *parent)
QWizardPage(parent) : QWizardPage(parent)
{ {
setTitle("Enter model class information"); setTitle("Enter model class information");
setSubTitle("The header and source file names will be derived from the class name"); setSubTitle("The header and source file names will be derived from the class name");
ui.setupUi(this); ui.setupUi(this);
} }
ModelNamePage::~ModelNamePage() void ModelNamePage::setPath(const QString &path)
{
}
void ModelNamePage::setPath(const QString& path)
{ {
this->path = path; this->path = path;
} }
void ModelNamePage::on_txtModelClass_textEdited(const QString& txt) void ModelNamePage::on_txtModelClass_textEdited(const QString &text)
{ {
ui.txtHeaderFile->setText(txt + ".h"); ui.txtHeaderFile->setText(text + ".h");
ui.txtImplFile->setText(txt + ".cpp"); ui.txtImplFile->setText(text + ".cpp");
} }
ModelClassParameters ModelNamePage::parameters() const ModelClassParameters ModelNamePage::parameters() const

View File

@@ -39,30 +39,31 @@
#ifndef MODELNAMEPAGE_H #ifndef MODELNAMEPAGE_H
#define MODELNAMEPAGE_H #define MODELNAMEPAGE_H
#include <QWizardPage> #include "ui_modelnamepage.h"
#include "ui_ModelNamePage.h"
struct ModelClassParameters
{
QString className;
QString headerFile;
QString sourceFile;
QString baseClass;
QString path;
};
class ModelNamePage : public QWizardPage #include <QWizardPage>
struct ModelClassParameters
{
QString className;
QString headerFile;
QString sourceFile;
QString baseClass;
QString path;
};
class ModelNamePage : public QWizardPage
{ {
Q_OBJECT Q_OBJECT
public: public:
ModelNamePage(QWidget *parent = 0); ModelNamePage(QWidget *parent = 0);
~ModelNamePage();
void setPath(const QString& path); void setPath(const QString &path);
ModelClassParameters parameters() const; ModelClassParameters parameters() const;
private slots: private slots:
void on_txtModelClass_textEdited(const QString& txt); void on_txtModelClass_textEdited(const QString &text);
private: private:
Ui::ModelNamePage ui; Ui::ModelNamePage ui;