Tutorial: GEF (Graphical Editing Framework) [Part 5]
Par Jean Charles MAMMANA, mardi 29 mai 2007 à 13:37 :: Programmation :: #13 :: rss
Cette fois on va ajouter quelques petites choses simples tel que le zoom sur notre graph, puis on va associer les touches du clavier aux actions créés précédemment.
Le zoom est une action comme le delete et l'undo/redo. Il va donc falloir ajouter l'action a notre toolbar.
Cela dit, le zoom est une action sur le graph lui même et non pas sur le modèle comme pour nos actions précédentes. C'est donc dans MyGraphicalEditor que vont être apporté les modifications.
On commence par la.
Allons dans la méthode configureGraphicalViewer voir comment dire qu'on souhaite utiliser un editpart intégrant les fonctions de zoom, comment l'ajouter a notre graph, puis comment créer nos actions de Zoom (plus et moins).
Il ne nous reste plus qu'a ajouter notre action dans notre toolbar.
Et voila le travail. :)

Tous les habitués du clavier aiment utiliser les raccourcis clavier. Nous allons donc penser a eux en mappant la touche + et - pour le zoom ainsi que la touche del pour la suppression.
Très simple :
Il suffit de créer un "keyHandler", de lui ajouter les associations qu'on souhaite utiliser avec leurs actions respective, puis on fini par ajouter ce keyhandler a notre viewer.
Lancez l'appli et testez les raccourcis claviers.
Vous pouvez telecharger le projet ICI
Cela dit, le zoom est une action sur le graph lui même et non pas sur le modèle comme pour nos actions précédentes. C'est donc dans MyGraphicalEditor que vont être apporté les modifications.
On commence par la.
Allons dans la méthode configureGraphicalViewer voir comment dire qu'on souhaite utiliser un editpart intégrant les fonctions de zoom, comment l'ajouter a notre graph, puis comment créer nos actions de Zoom (plus et moins).
public class MyGraphicalEditor extends GraphicalEditor {
(...)
protected void configureGraphicalViewer() {
double[] zoomLevels;
ArrayList<String> zoomContributions;
(...)
ScalableRootEditPart rootEditPart = new ScalableRootEditPart();
viewer.setRootEditPart(rootEditPart);
ZoomManager manager = rootEditPart.getZoomManager();
getActionRegistry().registerAction(new ZoomInAction(manager));
getActionRegistry().registerAction(new ZoomOutAction(manager));
// La liste des zooms possible. 1 = 100%
zoomLevels = new double[] {0.25, 0.5, 0.75, 1.0, 1.5, 2.0, 2.5, 3.0, 4.0, 5.0, 10.0, 20.0};
manager.setZoomLevels(zoomLevels);
// On ajoute certains zooms prédéfinis
zoomContributions = new ArrayList<String>();
zoomContributions.add(ZoomManager.FIT_ALL);
zoomContributions.add(ZoomManager.FIT_HEIGHT);
zoomContributions.add(ZoomManager.FIT_WIDTH);
manager.setZoomLevelContributions(zoomContributions);
}
public Object getAdapter(Class type) {
if (type == ZoomManager.class)
return ((ScalableRootEditPart) getGraphicalViewer().getRootEditPart()).getZoomManager();
else
return super.getAdapter(type);
}
}
(...)
protected void configureGraphicalViewer() {
double[] zoomLevels;
ArrayList<String> zoomContributions;
(...)
ScalableRootEditPart rootEditPart = new ScalableRootEditPart();
viewer.setRootEditPart(rootEditPart);
ZoomManager manager = rootEditPart.getZoomManager();
getActionRegistry().registerAction(new ZoomInAction(manager));
getActionRegistry().registerAction(new ZoomOutAction(manager));
// La liste des zooms possible. 1 = 100%
zoomLevels = new double[] {0.25, 0.5, 0.75, 1.0, 1.5, 2.0, 2.5, 3.0, 4.0, 5.0, 10.0, 20.0};
manager.setZoomLevels(zoomLevels);
// On ajoute certains zooms prédéfinis
zoomContributions = new ArrayList<String>();
zoomContributions.add(ZoomManager.FIT_ALL);
zoomContributions.add(ZoomManager.FIT_HEIGHT);
zoomContributions.add(ZoomManager.FIT_WIDTH);
manager.setZoomLevelContributions(zoomContributions);
}
public Object getAdapter(Class type) {
if (type == ZoomManager.class)
return ((ScalableRootEditPart) getGraphicalViewer().getRootEditPart()).getZoomManager();
else
return super.getAdapter(type);
}
}
Il ne nous reste plus qu'a ajouter notre action dans notre toolbar.
public class MyGraphicalEditorActionBarContributor extends ActionBarContributor {
@Override
protected void buildActions() {
(...)
addRetargetAction(new ZoomInRetargetAction());
addRetargetAction(new ZoomOutRetargetAction());
}
(...)
public void contributeToToolBar(IToolBarManager toolBarManager) {
(...)
toolBarManager.add(new Separator());
toolBarManager.add(getAction(GEFActionConstants.ZOOM_IN));
toolBarManager.add(getAction(GEFActionConstants.ZOOM_OUT));
toolBarManager.add(new ZoomComboContributionItem(getPage()));
}
}
@Override
protected void buildActions() {
(...)
addRetargetAction(new ZoomInRetargetAction());
addRetargetAction(new ZoomOutRetargetAction());
}
(...)
public void contributeToToolBar(IToolBarManager toolBarManager) {
(...)
toolBarManager.add(new Separator());
toolBarManager.add(getAction(GEFActionConstants.ZOOM_IN));
toolBarManager.add(getAction(GEFActionConstants.ZOOM_OUT));
toolBarManager.add(new ZoomComboContributionItem(getPage()));
}
}
Et voila le travail. :)

Tous les habitués du clavier aiment utiliser les raccourcis clavier. Nous allons donc penser a eux en mappant la touche + et - pour le zoom ainsi que la touche del pour la suppression.
Très simple :
Il suffit de créer un "keyHandler", de lui ajouter les associations qu'on souhaite utiliser avec leurs actions respective, puis on fini par ajouter ce keyhandler a notre viewer.
public class MyGraphicalEditor extends GraphicalEditor {
(...)
protected void configureGraphicalViewer() {
(...)
KeyHandler keyHandler = new KeyHandler();
keyHandler.put(
KeyStroke.getPressed(SWT.DEL, 127, 0),
getActionRegistry().getAction(ActionFactory.DELETE.getId()));
keyHandler.put(
KeyStroke.getPressed('+', SWT.KEYPAD_ADD, 0),
getActionRegistry().getAction(GEFActionConstants.ZOOM_IN));
keyHandler.put(
KeyStroke.getPressed('-', SWT.KEYPAD_SUBTRACT, 0),
getActionRegistry().getAction(GEFActionConstants.ZOOM_OUT));
// On peut meme zoomer avec la molette de la souris.
viewer.setProperty(
MouseWheelHandler.KeyGenerator.getKey(SWT.NONE),
MouseWheelZoomHandler.SINGLETON);
viewer.setKeyHandler(keyHandler);
}
(...)
}
(...)
protected void configureGraphicalViewer() {
(...)
KeyHandler keyHandler = new KeyHandler();
keyHandler.put(
KeyStroke.getPressed(SWT.DEL, 127, 0),
getActionRegistry().getAction(ActionFactory.DELETE.getId()));
keyHandler.put(
KeyStroke.getPressed('+', SWT.KEYPAD_ADD, 0),
getActionRegistry().getAction(GEFActionConstants.ZOOM_IN));
keyHandler.put(
KeyStroke.getPressed('-', SWT.KEYPAD_SUBTRACT, 0),
getActionRegistry().getAction(GEFActionConstants.ZOOM_OUT));
// On peut meme zoomer avec la molette de la souris.
viewer.setProperty(
MouseWheelHandler.KeyGenerator.getKey(SWT.NONE),
MouseWheelZoomHandler.SINGLETON);
viewer.setKeyHandler(keyHandler);
}
(...)
}
Lancez l'appli et testez les raccourcis claviers.
Vous pouvez telecharger le projet ICI

Commentaires
1. Le mercredi 30 mai 2007 à 16:08, par Eclipse newbie
2. Le mercredi 30 mai 2007 à 17:30, par Psykokwak
Ajouter un commentaire