/**
   * Writes the attributes to a StorableInput. FigureAttributes store the following types directly:
   * Color, Boolean, String, Int. Other attribute types have to implement the Storable interface or
   * they have to be wrapped by an object that implements Storable.
   *
   * @see Storable
   * @see #write
   */
  public void write(StorableOutput dw) {
    dw.writeString("attributes");

    dw.writeInt(fMap.size()); // number of attributes
    Enumeration k = fMap.keys();
    while (k.hasMoreElements()) {
      String s = (String) k.nextElement();
      Object v = fMap.get(s);

      dw.writeString(s);

      if (v instanceof String) {
        dw.writeString("String");
        dw.writeString((String) v);
      } else if (v instanceof Color) {
        writeColor(dw, "Color", (Color) v);
      } else if (v instanceof Boolean) {
        dw.writeString("Boolean");
        if (((Boolean) v).booleanValue()) {
          dw.writeString("TRUE");
        } else {
          dw.writeString("FALSE");
        }
      } else if (v instanceof Integer) {
        dw.writeString("Int");
        dw.writeInt(((Integer) v).intValue());
      } else if (v instanceof Storable) {
        dw.writeString("Storable");
        dw.writeStorable((Storable) v);
      } else if (v instanceof javax.swing.JPopupMenu) {
        dw.writeString(Figure.POPUP_MENU);
      } else {
        System.err.println("Unknown attribute: " + v);
        dw.writeString("UNKNOWN");
      }
    }
  }
 /**
  * Removes a vector of figures.
  *
  * @see #remove
  */
 public void removeAll(Vector figures) {
   Enumeration k = figures.elements();
   while (k.hasMoreElements()) remove((Figure) k.nextElement());
 }
 /**
  * Adds a vector of figures.
  *
  * @see #add
  */
 public void addAll(Vector newFigures) {
   Enumeration k = newFigures.elements();
   while (k.hasMoreElements()) add((Figure) k.nextElement());
 }
 public String getMap() {
   String areas = "";
   Enumeration k = fFigures.elements();
   while (k.hasMoreElements()) areas += ((Storable) k.nextElement()).getMap();
   return areas;
 }
 /** Writes the contained figures to the StorableOutput. */
 public void write(StorableOutput dw) {
   super.write(dw);
   dw.writeInt(fFigures.size());
   Enumeration k = fFigures.elements();
   while (k.hasMoreElements()) dw.writeStorable((Storable) k.nextElement());
 }
 /**
  * Returns the next element of the enumeration. Calls to this method will enumerate successive
  * elements.
  *
  * @exception NoSuchElementException If no more elements exist.
  */
 public Figure nextFigure() {
   return (Figure) fEnumeration.nextElement();
 }
 /**
  * Returns the next element of the enumeration. Calls to this method will enumerate successive
  * elements.
  *
  * @exception NoSuchElementException If no more elements exist.
  */
 public Object nextElement() {
   return fEnumeration.nextElement();
 }
 /** Returns true if the enumeration contains more elements; false if its empty. */
 public boolean hasMoreElements() {
   return fEnumeration.hasMoreElements();
 }