package net.ms.designer.editors.componentdetail.models;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;
import net.ms.designer.editors.componentdetail.models.Element;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.requests.ChangeBoundsRequest;
public class LogicGuide implements Serializable
{
public static final String PROPERTY_CHILDREN = "subparts changed"; //$NON-NLS-1$
public static final String PROPERTY_POSITION = "position changed"; //$NON-NLS-1$
static final long serialVersionUID = 1;
protected PropertyChangeSupport listeners = new PropertyChangeSupport(this);
private Map map;
private int position;
private boolean horizontal;
public LogicGuide()
{
// empty constructor
}
public LogicGuide(boolean isHorizontal)
{
setHorizontal(isHorizontal);
}
public void addPropertyChangeListener(PropertyChangeListener listener)
{
listeners.addPropertyChangeListener(listener);
}
public void attachPart(Element part, int alignment)
{
if (getMap().containsKey(part) && getAlignment(part) == alignment)
return;
getMap().put(part, new Integer(alignment));
LogicGuide parent = isHorizontal() ? part.getHorizontalGuide() : part
.getVerticalGuide();
if (parent != null && parent != this)
{
parent.detachPart(part);
}
if (isHorizontal())
{
part.setHorizontalGuide(this);
}
else
{
part.setVerticalGuide(this);
}
listeners.firePropertyChange(PROPERTY_CHILDREN, null, part);
}
public void detachPart(Element part)
{
if (getMap().containsKey(part))
{
getMap().remove(part);
if (isHorizontal())
{
part.setHorizontalGuide(null);
}
else
{
part.setVerticalGuide(null);
}
listeners.firePropertyChange(PROPERTY_CHILDREN, null, part);
}
}
public int getAlignment(Element part)
{
if (getMap().get(part) != null)
return ((Integer) getMap().get(part)).intValue();
return -2;
}
public Map getMap()
{
if (map == null)
{
map = new Hashtable();
}
return map;
}
public Set getParts()
{
return getMap().keySet();
}
public int getPosition()
{
return position;
}
public boolean isHorizontal()
{
return horizontal;
}
public void removePropertyChangeListener(PropertyChangeListener listener)
{
listeners.removePropertyChangeListener(listener);
}
public void setHorizontal(boolean isHorizontal)
{
horizontal = isHorizontal;
}
public void setPosition(int offset)
{
if (position != offset)
{
int oldValue = position;
position = offset;
listeners.firePropertyChange(PROPERTY_POSITION, new Integer(oldValue), new Integer(position));
}
}
}