Package org.eclipse.gef.examples.logicdesigner.edit

Source Code of org.eclipse.gef.examples.logicdesigner.edit.LogicTreeContainerEditPolicy

/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.gef.examples.logicdesigner.edit;

import java.util.List;

import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Rectangle;

import org.eclipse.gef.EditPart;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.CompoundCommand;
import org.eclipse.gef.commands.UnexecutableCommand;
import org.eclipse.gef.editpolicies.TreeContainerEditPolicy;
import org.eclipse.gef.requests.ChangeBoundsRequest;
import org.eclipse.gef.requests.CreateRequest;

import org.eclipse.gef.examples.logicdesigner.model.LogicDiagram;
import org.eclipse.gef.examples.logicdesigner.model.LogicSubpart;
import org.eclipse.gef.examples.logicdesigner.model.commands.CreateCommand;
import org.eclipse.gef.examples.logicdesigner.model.commands.ReorderPartCommand;

public class LogicTreeContainerEditPolicy
  extends TreeContainerEditPolicy
{
 
protected Command createCreateCommand(LogicSubpart child, Rectangle r,
             int index, String label){
  CreateCommand cmd = new CreateCommand();
  Rectangle rect;
  if(r == null){
    rect = new Rectangle();
    rect.setSize(new Dimension(-1,-1));
  } else {
    rect = r;
  }
  cmd.setLocation(rect);
  cmd.setParent((LogicDiagram)getHost().getModel());
  cmd.setChild(child);
  cmd.setLabel(label);
  if(index >= 0)
    cmd.setIndex(index);
  return cmd;
}

protected Command getAddCommand(ChangeBoundsRequest request){
  CompoundCommand command = new CompoundCommand();
  command.setDebugLabel("Add in LogicTreeContainerEditPolicy");//$NON-NLS-1$
  List editparts = request.getEditParts();
  int index = findIndexOfTreeItemAt(request.getLocation());
 
  for(int i = 0; i < editparts.size(); i++){
    EditPart child = (EditPart)editparts.get(i);
    if(isAncestor(child,getHost()))
      command.add(UnexecutableCommand.INSTANCE);
    else {
      LogicSubpart childModel = (LogicSubpart)child.getModel();
      command.add(createCreateCommand(
            childModel,
            new Rectangle(new org.eclipse.draw2d.geometry.Point(),
              childModel.getSize()),
            index, "Reparent LogicSubpart"));//$NON-NLS-1$
    }
  }
  return command;
}

protected Command getCreateCommand(CreateRequest request){
  LogicSubpart child = (LogicSubpart)request.getNewObject();
  int index = findIndexOfTreeItemAt(request.getLocation());
  return createCreateCommand(child, null, index, "Create LogicSubpart");//$NON-NLS-1$
}

protected Command getMoveChildrenCommand(ChangeBoundsRequest request){
  CompoundCommand command = new CompoundCommand();
  List editparts = request.getEditParts();
  List children = getHost().getChildren();
  int newIndex = findIndexOfTreeItemAt(request.getLocation());
   
  for(int i = 0; i < editparts.size(); i++){
    EditPart child = (EditPart)editparts.get(i);
    int tempIndex = newIndex;
    int oldIndex = children.indexOf(child);
    if(oldIndex == tempIndex || oldIndex + 1 == tempIndex){
      command.add(UnexecutableCommand.INSTANCE);
      return command;
    } else if(oldIndex <= tempIndex){
      tempIndex--;
    }
    command.add(new ReorderPartCommand(
          (LogicSubpart)child.getModel(),
          (LogicDiagram)getHost().getModel(),
          tempIndex));
  }
  return command;
}

protected boolean isAncestor(EditPart source, EditPart target){
  if(source == target)
    return true;
  if(target.getParent() != null)
    return isAncestor(source, target.getParent());
  return false;
}

}
TOP

Related Classes of org.eclipse.gef.examples.logicdesigner.edit.LogicTreeContainerEditPolicy

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.