Project

General

Profile

Ajouter un menu à votre application

Un module peut ajouter des options de menu à l'application. Il peut soit ajouter un menu supplémentaire soit ajouter des options de menu aux menus existants.

Un menu au sens JTheque est une classe implémentant l'interface org.jtheque.core.managers.feature.Menu, cette interface contient deux méthodes :

  • List<Feature> getSubFeatures(CoreFeature feature) : Retourne toutes les options de menu à ajouter au menu système feature.
  • List<Feature> getMainFeatures() : Retourne tous les menus à ajouter à l'application.

Il est néanmoins plus simple d'étendre la classe abstraite AbstractMenu.

Premièrement, pour ajouter des options de menu aux menus existants, il faut implémenter les méthodes suivantes :

  • List<Feature> getFileMenuSubFeatures() : Retourne les options de menu à ajouter au menu fichier.
  • List<Feature> getEditMenuSubFeatures() : Retourne les options de menu à ajouter au menu éditeur.
  • List<Feature> getAdvancedMenuSubFeatures() : Retourne les options de menu à ajouter au menu Avancé.
  • List<Feature> getHelpMenuSubFeatures() : Retourne les options de menu à ajouter au menu Aide.

Ensuite, pour ajouter des menus entier, il vous faut implémenter la méthode List<Feature> getMenuMainFeatures() qui doit retourner la liste des menus à ajouter à l'application.

La classe AbstractMenu fournit toute une série de méthodes utilitaires pour créer des Feature.

Premièrement, il n'est pas utile de créer un nouvelle List, il suffit d'utiliser la méthode features qui prend un nombre quelconque d'arguments de type Feature et qui en fait une List<Feature>.

Voici les méthodes qui sont disponibles pour créer des features :

  • List<Feature> features(Feature... features) : Retourne simplement une liste contenant tous les Feature passés en paramètres.
  • Feature createMainFeature(int position, String key, Feature... features) : Crée un menu de premier niveau avec la position spécifié, la clé i18n et les sous-menus indiqués.
  • Feature createSubFeature(int position, String action, String imagesBaseName, String image) : Crée une option de menu avec la position spécifié, le nom de l'action, le chemin de base pour l'image et le nom de l'image
  • Feature createSubFeature(int position, Action action, String imagesBaseName, String image) : Crée une option de menu avec la position spécifié, l'action, le chemin de base pour l'image et le nom de l'image
  • Feature createSubFeature(int position, String action) : Crée une option de menu avec la position spécifié et le nom de l'action
  • Feature createSubFeature(int position, Action action) : Crée une option de menu avec la position spécifié et l'action
  • Feature createSubFeature(int position, String key, Feature... features) : Crée un sous menu avec un certain nom d'options de menu

Toutes ces méthodes sont disponibles dans une version "Separated", cela va juste ajouter un séparateur avant l'option de menu.

Si vous indiquez juste le nom de l'action, elle va être recherché dans le contexte Spring.

Il existe encore quelques méthodes utilitaires pour créer des actions basiques :

  • Action createCloseViewAction(String key, IView view) : Crée une action qui va fermer la vue passée en paramètre.
  • Action createCloseViewAction(String key, String view) : Crée une action qui va fermer la vue avec le nom passé en paramètre. La vue va être recherchée dans le contexte Spring avec son nom.
  • Action createDisplayViewAction(String key, IView view) : Crée une action qui va afficher la vue passée en paramètre.
  • Action createDisplayViewAction(String key, String view) : Crée une action qui va afficher la vue avec le nom passé en paramètre. La vue va être recherchée dans le contexte Spring avec son nom.

Voici un exemple avec le menu du Core :

public final class CoreMenu extends AbstractMenu {
    @Override
    protected List<Feature> getFileMenuSubFeatures(){
        return features(
                createSeparatedSubFeature(200, "menu.backup",
                        createSubFeature(1, new AcBackupToJTD()),
                        createSubFeature(2, new AcBackupToXML())),
                createSubFeature(201, "menu.restore",
                        createSubFeature(1, new AcRestoreFromJTD()),
                        createSubFeature(2, new AcRestoreFromXML())),
                createSeparatedSubFeature(1000, new ExitAction())
        );
    }

    @Override
    protected List<Feature> getEditMenuSubFeatures(){
        return features(
                createSubFeature(1, new UndoAction()),
                createSubFeature(2, new RedoAction())
        );
    }

    @Override
    protected List<Feature> getAdvancedMenuSubFeatures(){
        return features(
                createSeparatedSubFeature(500, createDisplayViewAction("config.actions.display", "configView"), Core.IMAGES_BASE_NAME, "options"),
                createSeparatedSubFeature(750, createDisplayViewAction("modules.actions.manage", "moduleView"), Core.IMAGES_BASE_NAME, "update")
        );
    }

    @Override
    protected List<Feature> getHelpMenuSubFeatures(){
        return features(
                createSeparatedSubFeature(1, new AcOpenHelp(), Core.IMAGES_BASE_NAME, "help"),
                createSeparatedSubFeature(2, new AcInformOfABug(), Core.IMAGES_BASE_NAME, "mail"),
                createSeparatedSubFeature(4, new AcProposeImprovement(), Core.IMAGES_BASE_NAME, "idea"),
                createSeparatedSubFeature(6, createDisplayViewAction("messages.actions.display", "messageView")),
                createSeparatedSubFeature(25, createDisplayViewAction("log.view.actions.display", "logView")),
                createSeparatedSubFeature(150, new DisplayAboutViewAction(), Core.IMAGES_BASE_NAME, "about")
        );
    }
}