changecoloraction.java

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

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

import net.sf.freenote.FreeNoteConstants;
import net.sf.freenote.commands.ModelPropertyCommand;
import net.sf.freenote.parts.ConnectionEditPart;
import net.sf.freenote.parts.ShapeEditPart;

import org.eclipse.gef.commands.CompoundCommand;
import org.eclipse.gef.ui.actions.SelectionAction;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.ColorDialog;
import org.eclipse.ui.IWorkbenchPart;

/**
 * 改变Figure前景色或背景色的action
 * @author levin
 * @since 2008-1-20 下午08:27:45
 */
public class ChangeColorAction extends SelectionAction {
	//前景色 ForeColor,背景色 BackColor
	private String colorProperty;
	
	public ChangeColorAction(IWorkbenchPart part,String colorProperty) {
		super(part);
		this.colorProperty=colorProperty;
		setText(colorProperty.equals(FreeNoteConstants.BACKCOLOR)?"改变背景色...":"改变前景色...");
		setToolTipText("(批量)改变选中形体的颜色");
		setId(FreeNoteConstants.CHANGE_COLOR+"."+colorProperty);
	}

	@Override
	protected boolean calculateEnabled() {
		//不为空,且有ShapeEditPart
		if(getSelectedObjects().isEmpty())
			return false;
		for(Object o:getSelectedObjects())
			if(o instanceof ShapeEditPart || o instanceof ConnectionEditPart)
				return true;
		return false;
	}

	@Override
	public void run() {
		//取第一个形体的颜色值传给colordialog
		RGB value= null;
		if(getSelectedObjects().get(0) instanceof ShapeEditPart)
			value=(RGB) ((ShapeEditPart)getSelectedObjects().get(0)).getCastedModel().getPropertyValue(colorProperty);
		if(getSelectedObjects().get(0) instanceof ConnectionEditPart)
			value=(RGB) ((ConnectionEditPart)getSelectedObjects().get(0)).getCastedModel().getPropertyValue(colorProperty);
		ColorDialog dialog=new ColorDialog(this.getWorkbenchPart().getSite().getShell());
		if(value != null)
			dialog.setRGB(value);
		value=dialog.open();
		//给所有形体设颜色
		if(value != null){
			CompoundCommand cc=new CompoundCommand();
			for(Object part:getSelectedObjects()){
				if(part instanceof ShapeEditPart){
					cc.add(new ModelPropertyCommand(((ShapeEditPart)part).getCastedModel(),clone(value),colorProperty));
				}
				if(part instanceof ConnectionEditPart){
					cc.add(new ModelPropertyCommand(((ConnectionEditPart)part).getCastedModel(),clone(value),colorProperty));
				}
			}
			this.getCommandStack().execute(cc);
		}
	}
	//克隆一下,以免xmlstream生成同一实例的引用
	private RGB clone(RGB rgb){
		return new RGB(rgb.red,rgb.green,rgb.blue);
	}
}

⌨️ 快捷键说明

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