Group.java :  » UML » umlet » com » umlet » element » base » Java Open Source

Java Open Source » UML » umlet 
umlet » com » umlet » element » base » Group.java
// The UMLet source code is distributed under the terms of the GPL; see license.txt
//Class by A.Mueller Oct.05

package com.umlet.element.base;

import com.umlet.control.AddEntity;
import com.umlet.control.Command;
import com.umlet.control.Constants;
import com.umlet.control.Controller;
import com.umlet.control.MoveLinePoint;
import com.umlet.control.Selector;
import com.umlet.control.StickingPolygon;
import com.umlet.control.Umlet;
import com.umlet.control.UniversalListener;
import com.umlet.element.base.detail.RelationLinePoint;

import java.util.Iterator;
import java.util.Vector;
import java.util.Enumeration;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;


public class Group extends Entity
{
  private Vector<Entity> entities;

  //after adding all elements to a group the function adjustSize has to be called!
  public Group()
  {
    super();
    this.entities = new Vector<Entity>();
  }

  /**
   * Erstellt einen neue Gruppe
   *
   */
  public void groupSelected()
  {
    Vector<Entity> ents = Selector.getInstance().getSelectedEntities();
    if(ents.isEmpty())
      return;
    
    for (Iterator<Entity> it = ents.iterator(); it.hasNext();)
      this.addMember(it.next());

    adjustSize();
    Selector.getInstance().deselectAll();
    Selector.getInstance().selectXXX(this);
    Controller.getInstance().executeCommandWithoutUndo(
        new AddEntity(this, this.getLocation().x, this
            .getLocation().y));
  }

  public void ungroup()
  {
    for (int i = 0; i < entities.size(); i++)
    {
      entities.get(i).setGroup(null);
      entities.get(i).addMouseListener(UniversalListener.getInstance());
      entities.get(i).addMouseMotionListener(UniversalListener.getInstance());
    }

    Umlet.getInstance().getPanel().remove(this);
  }

  public Vector<Entity> getMembers()
  {
    return entities;
  }
  
  public void addMember(Entity member)
  {
    this.entities.add(member);
    member.setGroup(this);
    member.removeMouseListener(
        UniversalListener.getInstance());
    member.removeMouseMotionListener(
        UniversalListener.getInstance());
  }

  public void paint(Graphics g)
  {
    if (this.isSelected())
    {
      Graphics2D g2 = (Graphics2D) g;
      Constants.getFRC(g2);
      g2.setColor(java.awt.Color.green);
      g2.setStroke(Constants.getStroke(1, 1));
      g2.drawRect(0, 0, this.getWidth() - 1, this.getHeight() - 1);
      g2.setStroke(Constants.getStroke(0, 1));
    }
  }

  public void adjustSize()
  {
    if (entities.isEmpty())
      return;
    Enumeration e = entities.elements();
    int maxX = 0;
    int maxY = 0;
    int minX = 0;
    int minY = 0;
    boolean first = true;
    while (e.hasMoreElements())
    {
      Entity temp = (Entity) e.nextElement();
      if(!first) 
      {
        maxX = Math.max(temp.getX() + temp.getWidth(), maxX);
        maxY = Math.max(temp.getY() + temp.getHeight(), maxY);
        minX = Math.min(temp.getX(), minX);
        minY = Math.min(temp.getY(), minY);
      }
      else
      {
        first = false;
        maxX = temp.getX() + temp.getWidth();
        maxY = temp.getY() + temp.getHeight();
        minX = temp.getX();
        minY =temp.getY();
      }
    }
    this.setLocation(minX, minY);
    this.setSize((maxX - minX), (maxY - minY));
  }
  
  @Override
  public StickingPolygon getStickingBorder()
  {
    return null;
  }

  @Override
  public Entity CloneFromMe()
  {
    Selector.getInstance().deselectAll();
    Group temp = new Group();
    
    for (Entity e : this.entities)
    {
      Entity clone = e.CloneFromMe();
      Command cmd;
      int MAIN_UNIT = Umlet.getInstance().getMainUnit();
      if (e.getParent() == Umlet.getInstance().getPalettePanel()) {
        Point viewp = Umlet.getInstance().getScrollPaneMain()
            .getViewport().getViewPosition();
        cmd = new AddEntity(clone, 
            viewp.x - (viewp.x % MAIN_UNIT)  + e.getX() - this.getX() + MAIN_UNIT * 2, 
            viewp.y - (viewp.y % MAIN_UNIT)  + e.getY() - this.getY() + MAIN_UNIT * 2);
      } else {
        cmd = new AddEntity(clone, e.getX() + MAIN_UNIT * 2, e.getY()
            + MAIN_UNIT * 2);
      }

      clone.setState(e.getState());
      Controller.getInstance().executeCommandWithoutUndo(cmd);
      temp.addMember(clone);
      
    }
    temp.adjustSize();    
    return temp;
  }
  
  public int getPossibleResizeDirections() { //LME: deny resizing of groups
      return 0;
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.