📄 attributeaction.java
字号:
/*******************************************************************************
* $Header: /cvsroot/EOS6/work_dir/niegy/com.primeton.studio.gef.ui/src/com/primeton/studio/gef/ui/action/AttributeAction.java,v 1.3 2006/12/30 02:45:04 niegy Exp $
* $Revision: 1.3 $
* $Date: 2006/12/30 02:45:04 $
*
*==============================================================================
*
* Copyright (c) 2001-2006 Primeton Technologies, Ltd.
* All rights reserved.
*
* Created on 2006-11-27
*******************************************************************************/
package com.primeton.studio.gef.ui.action;
import java.util.Iterator;
import java.util.List;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.requests.CreateRequest;
import org.eclipse.gef.requests.CreationFactory;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorPart;
import com.primeton.studio.gef.core.NodeElement;
import com.primeton.studio.gef.core.TNodeType;
import com.primeton.studio.gef.ui.Constants;
import com.primeton.studio.gef.ui.commands.ChildNodeCreateCommand;
import com.primeton.studio.gef.ui.commands.NodeCreateCommand;
import com.primeton.studio.gef.ui.editor.AbstractGraphicalEditor;
import com.primeton.studio.gef.ui.parts.ExtenderReader;
/**
* TODO 此处填写 class 信息
*
* @author niegy (mailto:niegy@primeton.com)
*/
/*
* 修改历史
* $Log: AttributeAction.java,v $
* Revision 1.3 2006/12/30 02:45:04 niegy
* 重构代码
*
* Revision 1.2 2006/12/08 07:04:32 niegy
* 重构代码
*
* Revision 1.1 2006/12/05 05:18:59 niegy
* 修改模型,增加连线的扩展点
*
*/
public class AttributeAction extends CopyNodeAction {
private AbstractGraphicalEditor editor;
protected TNodeType nodeType = null;
protected NodeElement child = null;
protected NodeElement parent = null;
/**
* @param editor
*/
public AttributeAction(IEditorPart editor,String title) {
super(editor);
// TODO Auto-generated constructor stub
this.editor = (AbstractGraphicalEditor)editor;
nodeType = TNodeType.ATTRICOLUMN_LITERAL;
setText(title);
}
/* (non-Javadoc)
* @see org.eclipse.gef.ui.actions.WorkbenchPartAction#calculateEnabled()
*/
protected boolean calculateEnabled() {
// TODO Auto-generated method stub
boolean flag = ((selecteds != null) && (selecteds.size() == 1));
boolean isTable = false;
if(flag){
NodeElement nodeElement = (NodeElement)selecteds.get(0);
if(nodeElement.getNodeType()==TNodeType.TABLE_LITERAL){
isTable = true;
parent = nodeElement;
child = null;
}
}
return (flag && isTable);
}
/* (non-Javadoc)
* @see org.eclipse.gef.ui.actions.WorkbenchPartAction#init()
*/
protected void init() {
// TODO Auto-generated method stub
setId(Constants.ATTRIBUTE);
}
/* (non-Javadoc)
* @see com.primeton.studio.gef.ui.action.CopyNodeAction#run()
*/
public void run() {
// TODO Auto-generated method stub
Command comm = createCommand();
editor.getCommandStack().execute(comm);
NodeElement nodeElement = ((ChildNodeCreateCommand)comm).getCreateNode();
EditPartViewer viewer = editor.getGraphicalViewer();
EditPart editpart = (EditPart)viewer.getContents();
selectEditPart(nodeElement,editpart);
}
private Command createCommand(){
Command com = null;
List list = ExtenderReader.getInstance().getPaletteEntryList(editor.getPluginId());
for (Iterator iter = list.iterator(); iter.hasNext();) {
try{
List element = (List) iter.next();
String name = (String)element.get(1);
NodeElement targetObj = (NodeElement)element.get(2);
if(targetObj.getNodeType()==nodeType){
CreateRequest request = new CreateRequest(targetObj);
CreationFactory factory = ExtenderReader.getInstance().createModelCreationFactory(editor.getPluginId(),targetObj);
request.setFactory(factory);
com = new ChildNodeCreateCommand(
parent,child,
request,null);
break;
}
}
catch(Exception e){
e.printStackTrace();
}
}
return com;
}
/**
* 使符合条件的图元处于选中的状态
* @param editPart EditPart
*/
private void selectEditPart(NodeElement nodeElement,EditPart editpart) {
if(editpart.getModel().equals(nodeElement)){
selectEditPart(editpart);
return;
}
List list = editpart.getChildren();
for (Iterator iter = list.iterator(); iter.hasNext();) {
EditPart element = (EditPart) iter.next();
if(element.getModel().equals(nodeElement)){
selectEditPart(element);
return;
}
selectEditPart(nodeElement,element);
}
}
private void selectEditPart(EditPart element){
EditPartViewer viewer = editor.getGraphicalViewer();
editor.locateToEditPart(element);
viewer.select(element);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -