> AccueilAide

Aide

Bienvenue sur la page d'aide.
Ici vous trouverez des informations relatives à Multiuso
qui pourraient ne pas être claires.
Si vous voulez que j'ajoute un sujet contactez moi à :
quentin.richert _at_ gmail.com

Sommaire

  1. Créer un plugin

Créer un plugin

Créer un plugin

Vous avez envie de coder un plugin pour Multiuso mais vous ne savez pas comment faire ?
Alors vous êtes tombé au bon endroit.

Tout d'abord vous devez savoir qu'il y a 4 types de plugins :


En action :


En dock widget :


En onglet :


Et enfin en widget :

La base commune

Les différents types de plugins ne sont pas si différents que ça :
- Pour les développer :
4 fichiers de "base" sont nécessaires.
Il y a premièrement le header d'une classe abstraite qui contient des fonctions virtuelles pures, inutile de détailler vous ne toucherez pas à ce fichier.
Le header ainsi que le constructeur d'une autre classe (qui hérite de la première). Cette autre classe ré-implémente les fonctions virtuelles pures de la première.
Et pour finir le header de Multiuso contenant des fonctions "static".
- Pour les distribuer :
L'arborescence sera la même partout, le plugin en lui-même accompagné par un dossier portant le même nom. Dans ce dossier se trouvera l'icône et un fichier de configuration (tout sera détaillé plus tard).

Entrons dans les détails

Commencez par choisir le type de votre plugin (action, dock widget, onglet ou widget), puis téléchargez l'archive correspondante :

Extractez les données puis lisez la partie qui correspond à votre choix.
Vous avez désormais un dossier contenant 4 éléments (plus la licence, "COPYING", que vous pouvez supprimer)...

Action

Vous n'avez (et ne devez) pas besoin de toucher à "BaseAction.h" (normalement "PluginAction.h" non plus mais bon).
Ouvrez "PluginAction.cpp" pour édition :

Ligne 24. m_nom = "Exemple"; → C'est le nom de l'action (= setText())

Ligne 25. m_icone = Multiuso::pluginsDirPath() + "Exemple/Exemple.png"; → C'est l'icône
		que prendra l'action dans le menu (= setIcon()).
		"Multiuso::pluginsDirPath()" renvoie le chemin du dossier des plugins.

Ligne 26. m_aide = "Exemple par Quelqu'un"; → Le tool tip (= setToolTip())

Ligne 27. m_informations = "Exemple sert à faire un exemple, non sérieux ?"; → C'est le
		status tip (= setStatusTip())

Ligne 28. m_menuParent = 4; → Le menu auquel appartient l'action :
		/*
		 * "Multiuso" → 1
		 * "Édition" → 2
		 * "Affichage" → 3
		 * "Autres fonctionnalités" → 4
		 * 	"Programmation" → 4.1
		 *	"Mini-Jeux" → 4.2
		 * "Aide" → 5
		 */
		 
Ligne 62. Q_EXPORT_PLUGIN2(Exemple, PluginAction) → Remplacez "Exemple" par le nom
		de votre plugin (sans espace)

La fonction la plus importante reste :

void PluginAction::ouvrir()

C'est celle-ci qui est exécutée lorsque l'utilisateur clique sur l'action.
Dans le code d'exemple on crée un dialogue et on l'ouvre (avec QDialog::exec()).
Bien sûr ce dialogue ne sert à rien, mais c'est un exemple.
Pourquoi ne pas créer une classe héritant de QDialog et l'ouvrir ici ? ;p

Dock Widget

Vous n'avez (et ne devez) pas besoin de toucher à "BaseDockWidget.h" (normalement "PluginDockWidget.h" non plus mais bon).
Ouvrez "PluginDockWidget.cpp" pour édition :

Ligne 24. m_nom = "Exemple"; → Le titre du dock (= setWindowTitle())

Ligne 25. m_icone = Multiuso::pluginsDirPath() + "Exemple/Exemple.png"; → C'est l'icône
		du dock (= setWindowIcon()).
		"Multiuso::pluginsDirPath()" renvoie le chemin du dossier des plugins.
		
Ligne 26. m_aireDockWidget = 3; L'aire du dock widget :
		/*
		 * 1 = Haut
		 * 2 = Bas
		 * 3 = Gauche
		 * 4 = Droite
		*/
		
Ligne 57. Q_EXPORT_PLUGIN2(Exemple, PluginDockWidget) → Remplacez "Exemple" par le nom
		de votre plugin (sans espace)

La fonction la plus importante reste :

QWidget *PluginDockWidget::contenuDockWidget()

Le widget retourné par celle-ci est le widget contenu dans le dock (c'est un pointeur).
Dans le code d'exemple on retourne un widget contenant un QLabel. Pourquoi ne pas créer une classe héritant de QWidget et renvoyer un pointeur d'un objet de ce type ici ? ;p

Onglet

Vous n'avez (et ne devez) pas besoin de toucher à "BaseOnglet.h" (normalement "PluginOnglet.h" non plus mais bon).
Ouvrez "PluginOnglet.cpp" pour édition :

Ligne 24. m_nom = "Exemple"; → Le titre de l'onglet (= setTebText())

Ligne 25. m_icone = Multiuso::pluginsDirPath() + "Exemple/Exemple.png"; → C'est l'icône
		de l'onglet (= setTabIcon()). Cette icône est exclusivement utilisée
		dans le "Gestionnaire de plugins".
		"Multiuso::pluginsDirPath()" renvoie le chemin du dossier des plugins.
		
Ligne 51. Q_EXPORT_PLUGIN2(Exemple, PluginOnglet) → Remplacez "Exemple" par le nom
		de votre plugin (sans espace)

La fonction la plus importante reste :

QWidget *PluginOnglet::contenuTab()

Le widget retourné par celle-ci est le widget contenu dans le tab (c'est un pointeur).
Dans le code d'exemple on retourne un widget contenant un QLabel. Pourquoi ne pas créer une classe héritant de QWidget et renvoyer un pointeur d'un objet de ce type ici ? ;p

Widget

Vous n'avez (et ne devez) pas besoin de toucher à "BaseWidget.h" (normalement "PluginWidget.h" non plus mais bon).
Ouvrez "PluginOnglet.cpp" pour édition :

Ligne 24. m_nom = "Exemple"; → Le titre de la sub window (= setWindowTitle())

Ligne 25. m_icone = Multiuso::pluginsDirPath() + "Exemple/Exemple.png"; → C'est l'icône
		de la sub window (= setWindowIcon()).
		"Multiuso::pluginsDirPath()" renvoie le chemin du dossier des plugins.
		
Ligne 51. Q_EXPORT_PLUGIN2(Exemple, PluginWidget) → Remplacez "Exemple" par le nom
		de votre plugin (sans espace)

La fonction la plus importante reste :

QWidget *PluginWidget::contenuSubWindow()

Le widget retourné par celle-ci est le widget contenu dans la sub window (c'est un pointeur).
Dans le code d'exemple on retourne un widget contenant un QLabel. Pourquoi ne pas créer une classe héritant de QWidget et renvoyer un pointeur d'un objet de ce type ici ? ;p

La compilation

Premièrement ouvrez une console (celle de Qt sous Windows) puis faites :

cd chemin/Vers/Votre/Projet/De/Plugin

Lancez maintenant :

qmake -project

Ou sous GNU/Linux :

qmake -project

Ouvrez le *.pro généré pour édition :

TEMPLATE = lib     → Remplacer app par lib
CONFIG += plugin   → Ajouter cette ligne
TARGET = Exemple   → Mettez le nom du plugin (ce que vous avez mis dans Q_EXPORT_PLUGIN2())

Finissez le travail en faisant :

qmake
mingw32-make

Ou sous GNU/Linux :

qmake
make

L'architecture du projet

Vous savez maintenant comment créer le plugin en lui-même, mais il vous manque un point important : comment organiser le projet.
Multiuso ne peut pas deviner comment votre projet est constitué, c'est donc à vous de vous adapter à Multiuso.

- Le plugin
- Le dossier de votre plugin
----- L'icône
----- Le *.ini
----- Tous les autres fichiers

Par exemple si votre plugin se nomme "MyPlugin" :

- MyPlugin.so        → Ou MyPlugin.dll sous Windows...
- MyPlugin           → Dossier
----- icon.png       → L'icône du plugin, peu importe le nom mais il faut qu'il y en ait une 
----- MyPlugin.ini   → *.ini, même sous Mac OS
----- open.png       → Autre fichier facultatif propre au plugin
----- save.png       → idem...

Vous avez le droit d'inclure les fichiers "facultatifs" dans le plugin (je pense aux *.qrc).
Vous aurez également remarqué que le nom de base du plugin, du fichier de configuration et celui du dossier sont les mêmes.

Le *.ini

Un fichier très important qu'est ce *.ini, il détermine le type du plugin, voici son contenu :

[General]
type=1

Le type du plugin change selon la valeur de "type" :

1 = Action
2 = DockWidget
3 = Onglet
4 = Widget

Vous pouvez bien sûr ajouter d'autres valeurs à ce *.ini du moment que "type" est présent et qu'il porte une valeur de 1 à 4.