Package org.knopflerfish.bundle.desktop.swing

Source Code of org.knopflerfish.bundle.desktop.swing.BundleImageIcon

/*
* Copyright (c) 2003-2010, KNOPFLERFISH project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following
* conditions are met:
*
* - Redistributions of source code must retain the above copyright
*   notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above
*   copyright notice, this list of conditions and the following
*   disclaimer in the documentation and/or other materials
*   provided with the distribution.
*
* - Neither the name of the KNOPFLERFISH project nor the names of its
*   contributors may be used to endorse or promote products derived
*   from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/

package org.knopflerfish.bundle.desktop.swing;

import java.awt.Color;
import java.awt.Component;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.net.URL;

import javax.swing.Icon;
import javax.swing.ImageIcon;

import org.osgi.framework.Bundle;

public class BundleImageIcon extends ImageIcon {

  static ImageIcon activeIcon       = null;
  static ImageIcon installedIcon    = null;
  static ImageIcon resolvedIcon     = null;
  static ImageIcon startingIcon     = null;
  static ImageIcon stoppingIcon     = null;
  static ImageIcon uninstalledIcon  = null;

  Bundle bundle;

  /**
   * Image icon for a bundle. The paint method will draw different
   * overlays based on the bundles state.
   *
   * @param bundle The bundle that this icon represents.
   * @param url URL to icon image, should be 32x32. If the icon image
   *            has another size it will be scaled to 32x32.
   */
  public BundleImageIcon(Bundle bundle,
                         URL url)
  {
    super(url);

    this.bundle = bundle;


    // Force image to load;  so that we can check the size
    loadImage(getImage());
    if (32<getIconWidth() || 32<getIconHeight()) {
      // Image too large; scale it down to 32x32.
      setImage(getScaledImage(getImage(), 32, 32));
    }

    if(activeIcon == null) {
      activeIcon      =
        // Activator.desktop.startIcon;
        new ImageIcon(getClass().getResource("/player_play_14x14.png"));

      installedIcon   = null;
      //        new ImageIcon(getClass().getResource("/overlay_installed.gif"));

      resolvedIcon = null;
      //        new ImageIcon(getClass().getResource("/overlay_resolved.gif"));

      startingIcon    = null;
      //        new ImageIcon(getClass().getResource("/overlay_starting.gif"));

      stoppingIcon    = null;
      //        new ImageIcon(getClass().getResource("/overlay_stopping.gif"));

      uninstalledIcon = null;
      //        new ImageIcon(getClass().getResource("/overlay_uninstalled.gif"));

    }
  }

  public void paintIcon(Component c,
                        Graphics g,
                        int x,
                        int y) {
    super.paintIcon(c, g, x, y);

    Icon overlay = null;

    switch(bundle.getState()) {
    case Bundle.ACTIVE:
      overlay = activeIcon;
      break;
    case Bundle.INSTALLED:
      overlay = installedIcon;
      break;
    case Bundle.RESOLVED:
      overlay = resolvedIcon;
      break;
    case Bundle.STARTING:
      overlay = startingIcon;
      break;
    case Bundle.STOPPING:
      overlay = stoppingIcon;
      break;
    case Bundle.UNINSTALLED:
      overlay = uninstalledIcon;
      break;
    default:
    }

    if(overlay != null) {
      int x1 = x + (getIconWidth() - overlay.getIconWidth());
      int y1 = y + (getIconHeight() - overlay.getIconHeight());

      int w = overlay.getIconWidth();
      int h = overlay.getIconHeight();

      g.setColor(Color.white);
      g.fill3DRect(x1-1, y1-1, w+2, h+2, true);
      overlay.paintIcon(c, g, x1, y1);
    }
  }

  /**
   * Resizes an image using a Graphics2D object backed by a BufferedImage.
   *
   * @param srcImg - source image to scale
   * @param w - desired width
   * @param h - desired height
   * @return - the new resized image
   */
  private static Image getScaledImage(Image srcImg, int w, int h) {
    BufferedImage resizedImg = new BufferedImage(w, h,
                                                 BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2 = resizedImg.createGraphics();
    g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                        RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g2.drawImage(srcImg, 0, 0, w, h, null);
    g2.dispose();
    return resizedImg;
  }

}
TOP

Related Classes of org.knopflerfish.bundle.desktop.swing.BundleImageIcon

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.