selectsameaction.java
来自「mywork是rcp开发的很好的例子」· Java 代码 · 共 67 行
JAVA
67 行
package net.sf.freenote.action;
import java.util.ArrayList;
import java.util.List;
import net.sf.freenote.FreeNoteConstants;
import net.sf.freenote.parts.ShapeEditPart;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.gef.ui.actions.SelectionAction;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ui.IWorkbenchPart;
/**
* 选择Model类型相同的形体
* @author levin
* @since 2008-2-23 下午01:22:43
*/
public class SelectSameAction extends SelectionAction {
public SelectSameAction(IWorkbenchPart part) {
super(part);
setText("Select Same");
setToolTipText("批量选择类型相同的形体");
setId(FreeNoteConstants.SELECT_SAME);
}
@Override
protected boolean calculateEnabled() {
//选中一个时
if(getSelectedObjects().size() == 1)
return true;
return false;
}
@Override
public void run() {
GraphicalViewer viewer = (GraphicalViewer)getWorkbenchPart().getAdapter(GraphicalViewer.class);
if (viewer != null){
//取第一个形体的类型
Class clazz=((EditPart)getSelectedObjects().get(0)).getModel().getClass();
List<AbstractGraphicalEditPart> list=new ArrayList<AbstractGraphicalEditPart>();
visit((AbstractGraphicalEditPart) viewer.getContents(),list,clazz);
viewer.setSelection(new StructuredSelection(list));
}
}
//递归判断是否为指定类型的editpart
private void visit(AbstractGraphicalEditPart parent, List<AbstractGraphicalEditPart> list, Class clazz) {
for(Object o: parent.getChildren()){
visit((AbstractGraphicalEditPart) o,list,clazz);
}
//遍历连线
for(Object o: parent.getSourceConnections()){
visit((AbstractGraphicalEditPart) o,list,clazz);
}
for(Object o: parent.getTargetConnections()){
visit((AbstractGraphicalEditPart) o,list,clazz);
}
if(parent.getModel().getClass() == clazz)
list.add(parent);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?