subtransmodelpart.java
来自「eclipse开发笔记」· Java 代码 · 共 198 行
JAVA
198 行
package com.example.parts;
import java.beans.PropertyChangeEvent;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.ConnectionEditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;
import com.example.figures.SubTransModelFigure;
import com.example.model.FNode;
import com.example.model.FStepModel;
import com.example.model.FSubTransModel;
import com.example.policies.NodeEditPolicy;
import com.example.policies.SubTransLayoutEditPolicy;
/**
* TODO
* @2007-1-18
* @author xuli
*/
public class SubTransModelPart extends AbstractPart {
private SubTransModelFigure expandedFigure = new SubTransModelFigure();
private boolean ifCollapse = false;
public void performRequest(Request req) {
if (req.getType() == RequestConstants.REQ_OPEN){
openAction();
}
}
private void openAction(){
getSubject().setCollapsed(!getSubject().isCollapsed());
for(Iterator iter = ((FSubTransModel)this.getModel()).getChildren().iterator();iter.hasNext();){
FStepModel step = (FStepModel)iter.next();
if(getSubject().isCollapsed()){
step.getRoot().hide();
step.getRoot().hideAllChildVsb();
ifCollapse = true;
}else{
step.getRoot().show();
step.getRoot().showAllChildVsb();
ifCollapse = false;
}
}
for(Iterator iter = this.getChildren().iterator();iter.hasNext();){
StepPart step = (StepPart)iter.next();
step.refreshAll();
}
}
public boolean getState(){
return this.ifCollapse;
}
public IFigure getContentPane() {
if (!getSubject().isCollapsed())
return expandedFigure.getContainerFigure();
else
return null;
}
protected IFigure createFigure() {
if(expandedFigure == null){
return expandedFigure = new SubTransModelFigure();
}
return expandedFigure;
}
public IFigure getFigure() {
return expandedFigure;
}
protected void refreshVisuals() {
//super.refreshVisuals();
Dimension tsize = ((FSubTransModel) getModel()).getSize().getCopy();
if (!getSubject().isCollapsed()) {
expandedFigure.setName(((FNode) this.getModel()).getName() );
Dimension msize = this.calculateSize();
if(this.getChildren().size() > 1){
tsize.height = msize.height+17;
tsize.width = msize.width;
FSubTransModel model = (FSubTransModel)getModel();
model.setSize(tsize);
}else{
if(msize.width > tsize.width || msize.height > tsize.height){
tsize.height = msize.height+17;
FSubTransModel model = (FSubTransModel)getModel();
model.setSize(tsize);
}
}
Rectangle rectangle = new Rectangle(getSubject().getLocation(), ((FSubTransModel)getModel()).getSize());
getFigure().setBounds(rectangle);
} else {
expandedFigure.setName(((FNode) this.getModel()).getName());
tsize.height = 28;
Rectangle rectangle = new Rectangle(getSubject().getLocation(), tsize);
getFigure().setBounds(rectangle);
}
}
private Dimension calculateSize(){
int maxW = 0;
int maxH = 0;
List steps = this.getChildren();
if(steps != null && steps.size() > 0){
StepPart temp = null;
Dimension s = null;
Point l = null;
for(int i = 0; i < steps.size(); i ++){
temp = (StepPart)steps.get(i);
s = ((FStepModel)temp.getModel()).getSize();
l = ((FStepModel)temp.getModel()).getLocation();
if(l.x +s.width > maxW){
maxW = l.x + s.width + 50;
}
if(l.y + s.height > maxH){
maxH = l.y + s.height + 50;
}
}
}
return new Dimension(maxW,maxH);
}
protected void createEditPolicies() {
installEditPolicy(EditPolicy.LAYOUT_ROLE, new SubTransLayoutEditPolicy());
installEditPolicy(EditPolicy.COMPONENT_ROLE, new NodeEditPolicy());
}
protected List getModelChildren() {
return getSubject().getChildren();
}
public void propertyChange(PropertyChangeEvent evt) {
super.propertyChange(evt);
String pName = evt.getPropertyName();
if(pName.equals(FStepModel.PRO_FIGURE)){
this.refreshVisuals();
}
if(pName.equals(FStepModel.PRO_CHILD)){
this.refreshChildren(); // important!!!
this.refreshVisuals();
}
if (FSubTransModel.PROP_COLLAPSED.equals(evt.getPropertyName())) {
refreshVisuals();
refreshSourceConnections();
refreshTargetConnections();
}
}
protected FSubTransModel getSubject() {
return (FSubTransModel) getModel();
}
protected List getModelSourceConnections() {
return Collections.EMPTY_LIST;
}
protected List getModelTargetConnections() {
return Collections.EMPTY_LIST;
}
public ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart connection) {
// TODO Auto-generated method stub
return null;
}
public ConnectionAnchor getSourceConnectionAnchor(Request request) {
// TODO Auto-generated method stub
return null;
}
public ConnectionAnchor getTargetConnectionAnchor(ConnectionEditPart connection) {
// TODO Auto-generated method stub
return null;
}
public ConnectionAnchor getTargetConnectionAnchor(Request request) {
// TODO Auto-generated method stub
return null;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?