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
 | 
						|
	
 | 
						|
    */
 |