/******************************************************************************* * 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.model; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor; import org.eclipse.ui.views.properties.IPropertyDescriptor; import org.eclipse.draw2d.PositionConstants; import org.eclipse.gef.examples.logicdesigner.LogicMessages; public class LogicDiagram extends LogicSubpart { static final long serialVersionUID = 1; public static String ID_ROUTER = "router"; //$NON-NLS-1$ public static Integer ROUTER_MANUAL = new Integer(0); public static Integer ROUTER_MANHATTAN = new Integer(1); public static Integer ROUTER_SHORTEST_PATH = new Integer(2); private static int count; private static Image LOGIC_ICON = createImage(LogicDiagram.class, "icons/circuit16.gif"); //$NON-NLS-1$ protected List children = new ArrayList(); protected LogicRuler leftRuler, topRuler; protected Integer connectionRouter = null; private boolean rulersVisibility = false; private boolean snapToGeometry = false; private boolean gridEnabled = false; private double zoom = 1.0; public LogicDiagram() { size.width = 100; size.height= 100; location.x = 20; location.y = 20; createRulers(); } public void addChild(LogicElement child){ addChild(child, -1); } public void addChild(LogicElement child, int index){ if (index >= 0) children.add(index,child); else children.add(child); fireChildAdded(CHILDREN, child, new Integer(index)); } protected void createRulers() { leftRuler = new LogicRuler(false); topRuler = new LogicRuler(true); } public List getChildren(){ return children; } public Integer getConnectionRouter(){ if(connectionRouter==null) connectionRouter = ROUTER_MANUAL; return connectionRouter; } public Image getIconImage() { return LOGIC_ICON; } public String getNewID() { return Integer.toString(count++); } public double getZoom() { return zoom; } /** * Returns <code>null</code> for this model. Returns * normal descriptors for all subclasses. * * @return Array of property descriptors. */ public IPropertyDescriptor[] getPropertyDescriptors() { if(getClass().equals(LogicDiagram.class)){ ComboBoxPropertyDescriptor cbd = new ComboBoxPropertyDescriptor( ID_ROUTER, LogicMessages.PropertyDescriptor_LogicDiagram_ConnectionRouter, new String[]{ LogicMessages.PropertyDescriptor_LogicDiagram_Manual, LogicMessages.PropertyDescriptor_LogicDiagram_Manhattan, LogicMessages.PropertyDescriptor_LogicDiagram_ShortestPath}); cbd.setLabelProvider(new ConnectionRouterLabelProvider()); return new IPropertyDescriptor[]{cbd}; } return super.getPropertyDescriptors(); } public Object getPropertyValue(Object propName) { if(propName.equals(ID_ROUTER)) return connectionRouter; return super.getPropertyValue(propName); } public LogicRuler getRuler(int orientation) { LogicRuler result = null; switch (orientation) { case PositionConstants.NORTH : result = topRuler; break; case PositionConstants.WEST : result = leftRuler; break; } return result; } public boolean getRulerVisibility() { return rulersVisibility; } public boolean isGridEnabled() { return gridEnabled; } public boolean isSnapToGeometryEnabled() { return snapToGeometry; } private void readObject(java.io.ObjectInputStream s) throws IOException, ClassNotFoundException { s.defaultReadObject(); } public void removeChild(LogicElement child){ children.remove(child); fireChildRemoved(CHILDREN, child); } public void setConnectionRouter(Integer router){ Integer oldConnectionRouter = connectionRouter; connectionRouter = router; firePropertyChange(ID_ROUTER, oldConnectionRouter, connectionRouter); } public void setPropertyValue(Object id, Object value){ if(ID_ROUTER.equals(id)) setConnectionRouter((Integer)value); else super.setPropertyValue(id,value); } public void setRulerVisibility(boolean newValue) { rulersVisibility = newValue; } public void setGridEnabled(boolean isEnabled) { gridEnabled = isEnabled; } public void setSnapToGeometry(boolean isEnabled) { snapToGeometry = isEnabled; } public void setZoom(double zoom) { this.zoom = zoom; } public String toString(){ return LogicMessages.LogicDiagram_LabelText; } private class ConnectionRouterLabelProvider extends org.eclipse.jface.viewers.LabelProvider{ public ConnectionRouterLabelProvider(){ super(); } public String getText(Object element){ if(element instanceof Integer){ Integer integer = (Integer)element; if(ROUTER_MANUAL.intValue()==integer.intValue()) return LogicMessages.PropertyDescriptor_LogicDiagram_Manual; if(ROUTER_MANHATTAN.intValue()==integer.intValue()) return LogicMessages.PropertyDescriptor_LogicDiagram_Manhattan; if(ROUTER_SHORTEST_PATH.intValue()==integer.intValue()) return LogicMessages.PropertyDescriptor_LogicDiagram_ShortestPath; } return super.getText(element); } } }