gef

/*******************************************************************************
 * Copyright (c) 2003, 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.rulers;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.gef.commands.Command;
import org.eclipse.gef.rulers.RulerChangeListener;
import org.eclipse.gef.rulers.RulerProvider;

import org.eclipse.gef.examples.logicdesigner.model.LogicGuide;
import org.eclipse.gef.examples.logicdesigner.model.LogicRuler;
import org.eclipse.gef.examples.logicdesigner.model.commands.CreateGuideCommand;
import org.eclipse.gef.examples.logicdesigner.model.commands.DeleteGuideCommand;
import org.eclipse.gef.examples.logicdesigner.model.commands.MoveGuideCommand;

/**
 * @author Pratik Shah
 */
public class LogicRulerProvider
	extends RulerProvider
{

private LogicRuler ruler;
private PropertyChangeListener rulerListener = new PropertyChangeListener() {
	public void propertyChange(PropertyChangeEvent evt) {
		if (evt.getPropertyName().equals(LogicRuler.PROPERTY_CHILDREN)) {
			LogicGuide guide = (LogicGuide)evt.getNewValue();
			if (getGuides().contains(guide)) {
				guide.addPropertyChangeListener(guideListener);
			} else {
				guide.removePropertyChangeListener(guideListener);
			}
			for (int i = 0; i < listeners.size(); i++) {
				((RulerChangeListener)listeners.get(i))
						.notifyGuideReparented(guide);
			}
		} else {
			for (int i = 0; i < listeners.size(); i++) {
				((RulerChangeListener)listeners.get(i))
						.notifyUnitsChanged(ruler.getUnit());
			}
		}
	}
};
private PropertyChangeListener guideListener = new PropertyChangeListener() {
	public void propertyChange(PropertyChangeEvent evt) {
		if (evt.getPropertyName().equals(LogicGuide.PROPERTY_CHILDREN)) {
			for (int i = 0; i < listeners.size(); i++) {
				((RulerChangeListener)listeners.get(i))
						.notifyPartAttachmentChanged(evt.getNewValue(), evt.getSource());
			}
		} else {
			for (int i = 0; i < listeners.size(); i++) {
				((RulerChangeListener)listeners.get(i))
						.notifyGuideMoved(evt.getSource());
			}
		}
	}
};

public LogicRulerProvider(LogicRuler ruler) {
	this.ruler = ruler;
	this.ruler.addPropertyChangeListener(rulerListener);
	List guides = getGuides();
	for (int i = 0; i < guides.size(); i++) {
		((LogicGuide)guides.get(i)).addPropertyChangeListener(guideListener);
	}
}

public List getAttachedModelObjects(Object guide) {
	return new ArrayList(((LogicGuide)guide).getParts());
}

public Command getCreateGuideCommand(int position) {
	return new CreateGuideCommand(ruler, position);
}

public Command getDeleteGuideCommand(Object guide) {
	return new DeleteGuideCommand((LogicGuide)guide, ruler);
}

public Command getMoveGuideCommand(Object guide, int pDelta) {
	return new MoveGuideCommand((LogicGuide)guide, pDelta);
}

public int[] getGuidePositions() {
	List guides = getGuides();
	int[] result = new int[guides.size()];
	for (int i = 0; i < guides.size(); i++) {
		result[i] = ((LogicGuide)guides.get(i)).getPosition();
	}
	return result;
}

public Object getRuler() {
	return ruler;
}

public int getUnit() {
	return ruler.getUnit();
}

public void setUnit(int newUnit) {
	ruler.setUnit(newUnit);
}

public int getGuidePosition(Object guide) {
	return ((LogicGuide)guide).getPosition();
}

public List getGuides() {
	return ruler.getGuides();
}

}



你可能感兴趣的:(eclipse,IBM)