S-JIS[2013-03-24] 変更履歴

Eclipse GEF Zoom

Eclipseプラグイン開発GEFのエディターの拡大縮小について。


概要

GEFには、エディター上に表示されている図形群を拡大・縮小する機能がある。


Tamenaga ToshirouさんのZoom とキーボード・ショートカットにコーディング方法がずばりそのまま載っている。

GraphicalEditorクラス:

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);
	}

ActionBarContributorクラス:

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

GEFへ戻る / Eclipseプラグインへ戻る / Eclipseへ戻る / 技術メモへ戻る
メールの送信先:ひしだま