devstory

Le Tutoriel Eclipse RCP 4 pour débutant - Application e4 Workbench

  1. Les installations requises
  2. Créer un nouveau Java Workspace
  3. Créer Eclipse 4 RCP Project vide
  4. Structure de l'application Eclipse 4 RCP vide
  5. Handler et Command
  6. Créer des Menus
  7. Tạo Toolbar
  8. Part

1. Les installations requises

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 à :
Installing e4 Tools Developer Sources:
  • Installer e4 Tools Developer Resources pour Eclipse

2. 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

3. 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...
  • Cochez la case sélectionnée sur le (1)
  • Dans la zone (2) sélectionnez "Yes" pour créer RCPProject (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

4. 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 :

5. Handler et Command

RCP Framework construit un grand nombre de Commands, par exemple quatre Commands avec l'ID suivante :
  • 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
  • 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 Handleravec 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.

6. 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 :

7. Tạo Toolbar

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

8. 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 <lars.Vogel@gmail.com> - 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 stackqui contient des perspectives.
Ajoutez une nouvelle perspective :

Réexécutez l'application :

Les changements sur Part pourraient faire le bouton Save clair