Eclipseのプラグイン開発のGEFのエディターの拡大縮小について。
|
GEFには、エディター上に表示されている図形群を拡大・縮小する機能がある。
Tamenaga ToshirouさんのZoom とキーボード・ショートカットにコーディング方法がずばりそのまま載っている。
import java.util.Arrays; import java.util.List; import org.eclipse.gef.MouseWheelHandler; import org.eclipse.gef.MouseWheelZoomHandler; import org.eclipse.gef.editparts.ScalableRootEditPart; import org.eclipse.gef.editparts.ZoomManager; import org.eclipse.gef.ui.actions.ActionRegistry; import org.eclipse.gef.ui.actions.ZoomInAction; import org.eclipse.gef.ui.actions.ZoomOutAction; import org.eclipse.gef.ui.parts.GraphicalViewerKeyHandler;
public class MyEditor extends GraphicalEditorWithFlyoutPalette {
〜
@Override
protected void configureGraphicalViewer() {
super.configureGraphicalViewer();
GraphicalViewer viewer = getGraphicalViewer();
viewer.setEditPartFactory(new MyEditPartFactory());
ActionRegistry registry = getActionRegistry();
{ // zoom
ScalableRootEditPart rootEditPart = new ScalableRootEditPart();
viewer.setRootEditPart(rootEditPart);
ZoomManager manager = rootEditPart.getZoomManager();
registry.registerAction(new ZoomInAction(manager));
registry.registerAction(new ZoomOutAction(manager));
// 可能なスケール(拡大縮小率)のリスト
double[] zoomLevels = { 0.1, 0.2, 0.25, 0.5, 0.75, 1.0, 1.5, 2.0, 3.0 };
manager.setZoomLevels(zoomLevels);
List<String> zoomContributions = Arrays.asList(ZoomManager.FIT_ALL, ZoomManager.FIT_HEIGHT, ZoomManager.FIT_WIDTH);
manager.setZoomLevelContributions(zoomContributions);
// マウスホイールによるズームハンドラー
viewer.setProperty(MouseWheelHandler.KeyGenerator.getKey(SWT.NONE), MouseWheelZoomHandler.SINGLETON);
}
〜
{ // key
KeyHandler handler = new GraphicalViewerKeyHandler(viewer);
viewer.setKeyHandler(handler);
handler.put(KeyStroke.getPressed(SWT.F2, 0), registry.getAction(GEFActionConstants.DIRECT_EDIT));
handler.put(KeyStroke.getPressed('+', SWT.KEYPAD_ADD, 0), registry.getAction(GEFActionConstants.ZOOM_IN));
handler.put(KeyStroke.getPressed('-', SWT.KEYPAD_SUBTRACT, 0), registry.getAction(GEFActionConstants.ZOOM_OUT));
}
}
@Override
public Object getAdapter(@SuppressWarnings("rawtypes") Class adapter) {
if (adapter == IPropertySheetPage.class) {
return new TabbedPropertySheetPage(this);
}
if (adapter == ZoomManager.class) {
return ((ScalableRootEditPart) getGraphicalViewer().getRootEditPart()).getZoomManager();
}
return super.getAdapter(adapter);
}
import org.eclipse.gef.ui.actions.GEFActionConstants; import org.eclipse.gef.ui.actions.ZoomComboContributionItem; import org.eclipse.gef.ui.actions.ZoomInRetargetAction; import org.eclipse.gef.ui.actions.ZoomOutRetargetAction; import org.eclipse.jface.action.Separator;
public class MyActionBarContributor extends ActionBarContributor {
@Override
protected void buildActions() {
addRetargetAction(new DeleteRetargetAction());
addRetargetAction(new UndoRetargetAction());
addRetargetAction(new RedoRetargetAction());
addRetargetAction(new ZoomInRetargetAction());
addRetargetAction(new ZoomOutRetargetAction());
}
@Override
public void contributeToToolBar(IToolBarManager toolBarManager) {
toolBarManager.add(getAction(ActionFactory.DELETE.getId()));
toolBarManager.add(getAction(ActionFactory.UNDO.getId()));
toolBarManager.add(getAction(ActionFactory.REDO.getId()));
toolBarManager.add(new Separator());
toolBarManager.add(getAction(GEFActionConstants.ZOOM_IN)); // 拡大アイコン
toolBarManager.add(getAction(GEFActionConstants.ZOOM_OUT)); // 縮小アイコン
toolBarManager.add(new ZoomComboContributionItem(getPage())); // スケール(拡大縮小率)一覧のコンボボックス
}