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())); // スケール(拡大縮小率)一覧のコンボボックス
}