forked from qt-creator/qt-creator
Signed-off-by: Abhishek Patil <abhishek.patil@vcreatelogic.com> Merge-request: 145 Reviewed-by: con <qtc-committer@nokia.com>
206 lines
5.9 KiB
Plaintext
206 lines
5.9 KiB
Plaintext
/*!
|
|
\page pref-pane.html
|
|
\title 7. Adding Preferences Pane
|
|
Preferences dialog in Qt Creator is used to configure the Qt Creator settings. Since Qt Creator is just a plugin loader that
|
|
loads all the relevant plugins, the preferences dialog shows pages that configure plugins. You can get to it by clicking
|
|
Tools->Options.
|
|
|
|
\inlineimage qtc-options-7.png
|
|
|
|
|
|
Each plugin provides one or more options pages that get shown in the preferences dialog. In the following sub-sections
|
|
we will learn how to add our own pages to the dialog.
|
|
|
|
\section1 7.1 Core::IOptionsPage interface
|
|
|
|
The Core of Qt Creator exposes an interface called \bold{Core::IOptionsPage}. The interface is defined in
|
|
plugins/coreplugin/dialogs/ioptionspage.h.
|
|
|
|
\code
|
|
class CORE_EXPORT IOptionsPage : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
IOptionsPage( *parent = 0) : QObject(parent) {}
|
|
virtual ~IOptionsPage() {}
|
|
virtual QString id() const = 0;
|
|
virtual QString trName() const = 0;
|
|
virtual QString category() const = 0;
|
|
virtual QString trCategory() const = 0;
|
|
virtual QWidget *createPage(QWidget *parent) = 0;
|
|
virtual void apply() = 0;
|
|
virtual void finish() = 0;
|
|
};
|
|
\endcode
|
|
|
|
By implementing the above interface and exposing an instance of it, we will be able to register new pages with the
|
|
preferences dialog.
|
|
|
|
\section1 7.2 Preparing the options-page
|
|
Let's implement a plugin that shows an options page that lists out all the open and modified files.
|
|
|
|
\section2 Step 1: Implementing the "modified file" list widget
|
|
The modified file list widget is simply a \bold{QListWidget} that shows all the modified files from the project manager. The
|
|
class declaration is as follows
|
|
|
|
\code
|
|
#include <QListWidget>
|
|
class ModifiedFileListWidget: public QListWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
ModifiedFileListWidget(QWidget* parent=0);
|
|
~ModifiedFileListWidget();
|
|
};
|
|
\endcode
|
|
|
|
Within the constructor we populate the list widget with names of the modified pages
|
|
|
|
\code
|
|
#include <coreplugin/filemanager.h>
|
|
#include <coreplugin/icore.h>
|
|
#include <coreplugin/ifile.h>
|
|
|
|
ModifiedFileListWidget::ModifiedFileListWidget(QWidget* parent):QListWidget(parent)
|
|
{
|
|
// Show the list of modified pages
|
|
Core::FileManager* fm = Core::ICore::instance()->fileManager();
|
|
QList<Core::IFile*> files = fm->modifiedFiles();
|
|
|
|
for(int i=0; i<files.count();i++)
|
|
this->addItem(files.at(i)->fileName());
|
|
}
|
|
\endcode
|
|
|
|
The destructor does nothing.
|
|
|
|
\code
|
|
ModifiedFileListerPage::~ModifiedFileListerPage()
|
|
{
|
|
|
|
}
|
|
\endcode
|
|
|
|
\section2 Step 2: Implementing the Core::IOptionsPage interface
|
|
We implement the \bold {Core::IOptionsPage} interface in a class called \bold {ModifiedFileLister}. The class declaration
|
|
is as follows
|
|
|
|
\code
|
|
#include <coreplugin/dialogs/ioptionspage.h>
|
|
class ModifiedFileLister : public Core::IOptionsPage
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
ModifiedFileLister(QObject *parent = 0);
|
|
~ModifiedFileLister();
|
|
// IOptionsPage implementation
|
|
QString id() const;
|
|
QString trName() const;
|
|
QString category() const;
|
|
QString trCategory() const;
|
|
QWidget *createPage(QWidget *parent);
|
|
void apply();
|
|
void finish();
|
|
};
|
|
\endcode
|
|
|
|
The constructor and destructor are straightforward and easy to understand.
|
|
|
|
\code
|
|
ModifiedFileLister::ModifiedFileLister(QObject *parent): IOptionsPage(parent)
|
|
{
|
|
|
|
}
|
|
|
|
ModifiedFileLister::~ModifiedFileLister()
|
|
{
|
|
|
|
}
|
|
\endcode
|
|
|
|
The \bold{id()} method should be implemented to return a unique identifier for the options page provided by this class. The
|
|
string will be used internally to \underline{\bold{id}}entify the page.
|
|
|
|
\code
|
|
QString ModifiedFileLister::id() const
|
|
{
|
|
return "ModifiedFiles";
|
|
}
|
|
\endcode
|
|
|
|
The \bold {trName()} method should be implemented to return a translated string name that will be shown in the options
|
|
dialog.
|
|
|
|
\code
|
|
QString ModifiedFileLister::trName() const
|
|
{
|
|
return tr("Modified Files");
|
|
}
|
|
\endcode
|
|
|
|
The \bold{category()} and \bold{trCategory()} methods should be implemented to return the group under which we want to
|
|
show the page. The latter returns the translated version of the string returned by the former.
|
|
|
|
\code
|
|
QString ModifiedFileLister::category() const
|
|
{
|
|
return "Help";
|
|
}
|
|
|
|
QString ModifiedFileLister::trCategory() const
|
|
{
|
|
return tr("Help");
|
|
}
|
|
\endcode
|
|
|
|
The \bold{createPage()} method should be implemented to return a new instance of the page implemented in step 1.
|
|
|
|
\code
|
|
QWidget *ModifiedFileLister::createPage(QWidget *parent)
|
|
{
|
|
return new ModifiedFileListWidget(parent);
|
|
}
|
|
\endcode
|
|
|
|
The methods \bold {apply()} and \bold {finish()} can be implemented to accept the changes made by the user made on the
|
|
page. In our case we don't have any changes to accept, so we leave the methods empty.
|
|
|
|
\code
|
|
void ModifiedFileLister::apply()
|
|
{
|
|
// Do nothing
|
|
}
|
|
|
|
void ModifiedFileLister::finish()
|
|
{
|
|
// Do nothing
|
|
}
|
|
\endcode
|
|
|
|
\section2 Step 3: Implementing the modified-file-lister plugin
|
|
|
|
We implement the plugin class similar to the \bold {DoNothingPlugin} class described in Chapter 2. Hence, we only
|
|
describe the implementation of the initialize method of the \bold {ModifiedFileListerPlugin} class here.
|
|
|
|
\code
|
|
bool ModifiedFileListerPlugin::initialize(const QStringList& args, QString *errMsg)
|
|
{
|
|
Q_UNUSED(args);
|
|
Q_UNUSED(errMsg);
|
|
addAutoReleasedObject(new ModifiedFileLister);
|
|
return true;
|
|
}
|
|
\endcode
|
|
|
|
\section2 Step 4: Testing the plugin
|
|
Upon compiling the plugin and restarting Qt Creator, we can notice in the options dialog the newly added "Modified
|
|
Files" page.
|
|
|
|
|
|
\inlineimage qtc-testplugin-7.png
|
|
|
|
*/
|