/* -*- tab-width: 4 -*-
*
* Electric(tm) VLSI Design System
*
* File: RouteElement.java
*
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
*
* Electric(tm) is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* Electric(tm) is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Electric(tm); see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, Mass 02111-1307, USA.
*/
package com.sun.electric.tool.routing;
import java.io.Serializable;
import com.sun.electric.database.hierarchy.Cell;
import com.sun.electric.database.variable.ElectricObject;
import com.sun.electric.tool.user.Highlighter;
/**
* A Route describes a new connection to be made.
* A Route consists of RouteElements, which in
* one sense are either nodes are arcs. However,
* in another sense we can consider them to be actions,
* such as new node, new arc, or arc delete, or node delete.<p>
* Arc/node delete happens when an existing arc is replaced
* by two or more new arcs, or when an existing route
* needs to be uprooted in order to make room for new routes.
*
* Author: gainsley
*/
public abstract class RouteElement implements Serializable {
/**
* RouteElementAction is a type safe enum class for
* describing the action to be take by a RouteElement
* object.
*/
public static enum RouteElementAction { newNode, newArc, deleteNode, deleteArc, existingPortInst; };
/** the action to be taken */ private RouteElementAction action;
/** the Cell in which to take the action */ private Cell cell;
/** If action has been done */ private boolean done;
/** Whether or not to highlight */ private boolean showHighlight;
/**
* Private Constructor
* @param action the action this RouteElementAction will do.
*/
protected RouteElement(RouteElementAction action, Cell cell) {
this.action = action;
this.cell = cell;
this.showHighlight = true;
this.done = false;
}
// ---------------------------- Field Access Methods -------------------------
/** see if action has been done */
public boolean isDone() { return done; }
/** set done to true to indication action has been done */
public void setDone() { done = true; }
/** get RouteElementAction */
public RouteElementAction getAction() { return action; }
/** Return the cell in which this RouteElement will do it's action */
public Cell getCell() { return cell; }
/** Get show highlight property */
public boolean isShowHighlight() { return showHighlight; }
/** Set show highlight property */
public void setShowHighlight(boolean b) { showHighlight = b; }
// --------------------------- Abstract Methods -------------------------------
/** Return string decribing the RouteElement */
public abstract String toString();
/**
* Get connecting point of node for arc to connect to. If this was
* not specified earlier, this returns the center of the portInst.
* Note that this will return null for a newNode that has not yet been
* created, as it does not yet have a portInst.
* @return the connecting port for an arc, or null if none exists yet.
*/
/*
public Point2D getConnPoint() {
if (action == RouteElementAction.newNode) {
if (connPoint != null) return connPoint;
if (done) {
Rectangle2D bounds = getPortInst().getBounds();
return new Point2D.Double(bounds.getCenterX(), bounds.getCenterY());
}
}
if (action == RouteElementAction.existingPortInst) {
if (connPoint != null) return connPoint;
Rectangle2D bounds = getPortInst().getBounds();
return new Point2D.Double(bounds.getCenterX(), bounds.getCenterY());
}
return null;
}
*/
/**
* Perform the action specified by RouteElementAction <i>action</i>.
* Note that this method performs database editing, and should only
* be called from within a Job.
* @return the object created, or null if deleted or nothing done.
*/
public abstract ElectricObject doAction();
/**
* Adds RouteElement to highlights
*/
public abstract void addHighlightArea(Highlighter highlighter);
}