Tutoriel Eclipse RCP 4 pour débutants - Application e4 Workbench

View more Tutorials:

1- Introduction

This document is based on:
  • Eclipse 4.5 (MARS)

  • Eclipse e4 RCP  (RCP 4)

2- Les installations requises

2.1- Installation de WindowBuilder

Installez Plugin WindowBuilder,  il s'agit d'un  Plugin qui vous permet de concevoir l'interface d'application SWT par glisser-déplacer facilement.
Voir les instructions d'installation à : 

2.2- Installation de e4 Tools Developer Sources

Vous pouvez voir les instructions d'installation dans le lien ci-dessous :
  • TODO Link!

3- Créer un nouveau Java Workspace

Pour programmer l'applications de RCP, vous devez créer un nouvel  Java Workspace :
  • File/Switch Workspace/Other..
Saisissez :
  • F:\ECLIPSE_TUTORIAL\RCP

4- Créer Eclipse 4 RCP Project vide

Dans ce document, je vais vous donner des instruction de la création d'une application RCP dès le début (Ne pas suivez le modèle disponible), donc je vais créer une application d'Eclipse RCP vide
Sur Eclipse sélectionnez :
  • File/New/Other...
  1. Cochez la case sélectionnée sur le (1)
  2. Dans la zone (2) sélectionnez "Yes" pour créer RCP Project (Exécutant sur le Desktop), alors, il va créer RAP Project (Exécutant sur le Web)
Sélectionnez  "Eclipse 4 RCP Application"
Saisissez :
  • Java package name: org.o7planning.tutorial.rcp
Le pojet a été créé :
Exécutez l'application :
Cliquez sur le bouton droite sur  EclipseRCPTutorial.product et sélectionnez  Run As/Eclipse Application

5- Structure de l'application Eclipse 4 RCP vide

L'application d' Eclipse 4 RCP vide a été créée par  Eclipse , voyez sa structure. Ouvrez le fichier Application.e4xmi :
Modifiez le titre de l'application à "Eclipse E4 RCP Application" comme l'exemple ci-dessous.
Et redémarrez l'application  :

6- Handler et Command

RCP Framework  construit un grand nombre de Commands, par exemple quatre Commands avec l'ID suivante  : 
  1. org.eclipse.ui.file.exit
    • Commande pour quitter l'application
    org.eclipse.ui.file.open
    • La commande pour ouvrir un fichier.
    org.eclipse.ui.file.save
    • La commande save editor
  2. org.eclipse.ui.help.aboutAction
    • La commande qui s'ouvre la fenêtre About.

Vous pouvez voir une liste de la command qui a été construite de RCP Framework à :

Créez une nouvelle Command nommé  quiteCommand , appelée de sortir l'application qui a été construite par  RCP Framework.
De même manière, nous créons trois autres commandes :

Ouvrez le fichier sélectionné.
  • ID: org.eclipse.ui.file.open
  • Name: openCommand
Exécutez la commande d'enregistrement (save) le contenu sur l'Éditeur (Editor).
  • ID: org.eclipse.ui.file.save
  • Name: saveCommand
AboutCommand:
  • ID: org.eclipse.ui.help.aboutAction
  • Name: aboutCommand
Handler sont des classes  de traitement des commandes de Menu ou Toolbar . Lorsque vous cliquez sur  MenuItem ou  ToolItem, c'est-à-dire que vous appelez une commande, avant l'exécution de la Commande, Handler sera exécutée avant, vous pouvez annuler la commande qui est exécutée dans le Handler.

Handler sont des classes qui exécuterent la tâche écrite dans la méthode annotée par @ Execute.

Je vais créer quatre classes Handler :

AboutHandler.java
package org.o7planning.tutorial.rcp.handler;

import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Shell;

public class AboutHandler {
   
   @Execute
   public void execute(Shell shell) {
       MessageDialog.openInformation(shell, "About", "Eclipse 4 RCP Application");
   }
}
OpenHandler.java
package org.o7planning.tutorial.rcp.handler;

import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;

public class OpenHandler {

   @Execute
   public void execute(Shell shell){
       FileDialog dialog = new FileDialog(shell);
       dialog.open();
   }
}
QuitHandler.java
package org.o7planning.tutorial.rcp.handler;

import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.ui.workbench.IWorkbench;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Shell;


public class QuitHandler {
   @Execute
   public void execute(IWorkbench workbench, Shell shell){
       if (MessageDialog.openConfirm(shell, "Confirmation",
               "Do you want to exit?")) {
           workbench.close();
       }
   }
}
SaveHandler.java
package org.o7planning.tutorial.rcp.handler;

import org.eclipse.e4.core.di.annotations.CanExecute;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.ui.workbench.modeling.EPartService;

public class SaveHandler {

   @CanExecute
   public boolean canExecute(EPartService partService) {
       if (partService != null) {
           return !partService.getDirtyParts().isEmpty();
       }
       return false;
   }

   @Execute
   public void execute(EPartService partService) {
       partService.saveAll(false);
   }
}
Déclaration dess classes Handler  avec des applications.
Pour déclarer un Handler avec Application, vous devez déclarer l'ID, Handler class et Comand . 

Par exemple, l'utilisateur ferme l'application en cliquant sur menuItem Exit, ce menuItem associé à  quiteCommand, QuiteHandler est la classe de traitement cette commande (comme déclaré ci-dessus), la classe  QuiteHandler demande aux utilisateurs de vouloir fermer l'application ou non, si ou, la commande  quiteCommand  sera exécutée.
De même façon, déclarez les autres Handler.

7- Créer des Menus

Créez le menu principal (menu principal) :
Saisissez l'ID du menu principal, il doit être nommé : menu:org.eclipse.ui.main.menu
Créez trois sous-menus :
  • File, Function, Help
Créez des sous-menus du menu File
  • Open
  • Save
  • Exit
Réexécutez votre application :

8- Create Toolbar

Créez Main Toolbar, avec ID :
  • ID: toolbar:org.eclipse.ui.main.toolbar
Ajoutez deux Toolitem : open & save
Relancez votre application :

9- Part

SamplePart.java
/*******************************************************************************
 * Copyright (c) 2010 - 2013 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *     Lars Vogel <[email protected]> - Bug 419770
 *******************************************************************************/
package org.o7planning.tutorial.rcp.part;

import javax.annotation.PostConstruct;
import javax.inject.Inject;

import org.eclipse.e4.ui.di.Focus;
import org.eclipse.e4.ui.di.Persist;
import org.eclipse.e4.ui.model.application.ui.MDirtyable;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;

public class SamplePart {

    private Text txtInput;
    private TableViewer tableViewer;

    @Inject
    private MDirtyable dirty;

    @PostConstruct
    public void createComposite(Composite parent) {
        parent.setLayout(new GridLayout(1, false));

        txtInput = new Text(parent, SWT.BORDER);
        txtInput.setMessage("Enter text to mark part as dirty");
        txtInput.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent e) {
                dirty.setDirty(true);
            }
        });
        txtInput.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        tableViewer = new TableViewer(parent);

        tableViewer.add("Sample item 1");
        tableViewer.add("Sample item 2");
        tableViewer.add("Sample item 3");
        tableViewer.add("Sample item 4");
        tableViewer.add("Sample item 5");
        tableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
    }

    @Focus
    public void setFocus() {
        tableViewer.getTable().setFocus();
    }

    @Persist
    public void save() {
        dirty.setDirty(false);
    }
}
Ajoutez un nouveau  PerspectiveStack . Ceci est un stack  qui contient des perspectives.
Ajoutez une nouvelle perspective :

Réexécutez l'application  :

Les changements sur Part  pourraient faire le bouton  Save clair 

View more Tutorials: