changezoomlevelaction.java

来自「mywork是rcp开发的很好的例子」· Java 代码 · 共 136 行

JAVA
136
字号
package net.sf.freenote.action;

import net.sf.freenote.FreeNoteConstants;

import org.eclipse.gef.editparts.ZoomListener;
import org.eclipse.gef.editparts.ZoomManager;
import org.eclipse.gef.ui.actions.GEFActionConstants;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IPartService;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowPulldownDelegate;
import org.eclipse.ui.internal.WorkbenchWindow;

public class ChangeZoomLevelAction extends Action implements IWorkbenchWindowPulldownDelegate,ZoomListener {
	private ZoomManager zoomManager;
	private IPartService service;
	private IPartListener partListener;
	private Menu toolbarMenu;
	
	public ChangeZoomLevelAction(IPartService service) {
		super();
		this.service = service;
		setId(GEFActionConstants.ZOOM_TOOLBAR_WIDGET);
		setToolTipText("调整缩放级别");		
		service.addPartListener(partListener = new IPartListener() {
			public void partActivated(IWorkbenchPart part) {
				setZoomManager((ZoomManager) part.getAdapter(ZoomManager.class));
			}
			public void partBroughtToTop(IWorkbenchPart p) { }
			public void partClosed(IWorkbenchPart p) { }
			public void partDeactivated(IWorkbenchPart p) { }
			public void partOpened(IWorkbenchPart p) { }
		});		
	}

	public void setZoomManager(ZoomManager zm) {
		if (zoomManager == zm)
			return;
		if (zoomManager != null)
			zoomManager.removeZoomListener(this);

		zoomManager = zm;
		refresh(true);

		if (zoomManager != null)
			zoomManager.addZoomListener(this);
	}
	
	//显示缩放级别,为true重建菜单
	private void refresh(boolean repopulateMenu) {
		if(zoomManager != null){
			String zoom = zoomManager.getZoomAsText();
			this.setToolTipText("调整缩放级别:"+zoom);
		}
	}
	@Override
	public Menu getMenu(Control parent) {
		if (toolbarMenu == null) {
			toolbarMenu = new Menu(parent);
			fillMenu(toolbarMenu);
		}
		return toolbarMenu;
	}

	private void fillMenu(Menu menu) {
		String[] folders=zoomManager.getZoomLevelsAsText();
		for(String s:folders ){
			if(FreeNoteConstants.ZOOM_SEPARATOR.equals(s)){
				new MenuItem(menu,SWT.SEPARATOR);
				continue;
			}
			MenuItem choice = new MenuItem(menu,SWT.RADIO);
			choice.setText(s);
			choice.addSelectionListener(new SelectionAdapter(){
				@Override
				public void widgetSelected(SelectionEvent se) {
					String level=((MenuItem)(se.getSource())).getText();
					if (zoomManager != null)
						zoomManager.setZoomAsText(level);
					refresh(false);
				}});
		}
	}	
	
	@Override
	public void dispose() {
		if (partListener == null)
			return;
		service.removePartListener(partListener);
		if (zoomManager != null) {
			zoomManager.removeZoomListener(this);
			zoomManager = null;
		}
		if (toolbarMenu != null) {
			toolbarMenu.dispose();
			toolbarMenu = null;
		}
		partListener = null;
	}

	@Override
	public void init(IWorkbenchWindow window) {

	}

	@Override
	public void run(IAction action) {
	}

	@Override
	public void selectionChanged(IAction action, ISelection selection) {

	}

	@Override
	public void run() {
		WorkbenchWindow window=(WorkbenchWindow) service.getActivePart().getSite().getWorkbenchWindow();
		getMenu(window.getCoolBarManager().getControl()).setVisible(true);
	}

	@Override
	public void zoomChanged(double zoom) {
		refresh(false);
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?