package hirondelle.stocks.util.ui;

import javax.swing.Icon;
import java.awt.Component;
import java.awt.Graphics;
import hirondelle.stocks.util.Args;

/**
* Represents a square icon having no graphical content.
*
* <P>Intended for use with <tt>Action</tt> and <tt>JMenuItem</tt>. 
* Alignment of text is poor when the same menu mixes menu items without an icon with 
* menu items having an icon. In such cases, items without an icon can use 
* an <tt>EmptyIcon</tt> to take up the proper amount of space, and allow 
* for alignment of all text in the menu.
*/
final class EmptyIcon implements Icon {

  /**
  * Convenience object for small icons, whose size matches the size of 
  * small icons in Sun's graphics repository.
  */
  static final EmptyIcon SIZE_16 = new EmptyIcon(16);

  /**
  * Convenience object for large icons, whose size matches the size of 
  * large icons in Sun's graphics repository.
  */
  static final EmptyIcon SIZE_24 = new EmptyIcon(24);
  
  /**
  * EmptyIcon objects are always square, having identical height and width.
  *
  * @param aSize length of any side of the icon in pixels, must 
  * be in the range 1..100 (inclusive).
  */
  EmptyIcon(int aSize) {
    Args.checkForRange(aSize, 1, 100);
    fSize = aSize;
  }

  /**
  * Return the icon size (width is same as height).
  */
  @Override public int getIconWidth() {
    return fSize;
  }

  /**
  * Return the icon size (width is same as height).
  */
  @Override public int getIconHeight() {
    return fSize;
  }

  /**
  * This implementation is empty, and paints nothing.
  */
  @Override public void paintIcon(Component c, Graphics g, int x, int y) {
    //empty
  }

  // PRIVATE
  private int fSize;
}