All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openide.explorer.propertysheet.IconPanel Maven / Gradle / Ivy

Go to download

The NetBeans Platform is a generic base for desktop applications. It provides the services common to almost all large desktop applications: window management, menus, settings and storage, an update manager, and file access. Get a head start by reusing these standard components, allowing you to concentrate fully on your application's business logic.

The newest version!
/*
 *                 Sun Public License Notice
 * 
 * The contents of this file are subject to the Sun Public License
 * Version 1.0 (the "License"). You may not use this file except in
 * compliance with the License. A copy of the License is available at
 * http://www.sun.com/
 * 
 * The Original Code is NetBeans. The Initial Developer of the Original
 * Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun
 * Microsystems, Inc. All Rights Reserved.
 */
/*
 * IconValuePanel.java
 *
 * Created on 16 October 2003, 09:06
 */

package org.openide.explorer.propertysheet;

import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.event.FocusListener;
import java.beans.FeatureDescriptor;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import org.openide.util.Utilities;

/** A panel which embeds and displays an inplace editor and which can 
 * show property marking for components that are not JLabels but should
 * show an icon either because of hinting or because the state is 
 * PropertyEnv.STATE_INVALID.
 *
 * @author  Tim Boudreau
 */
class IconPanel extends JComponent implements InplaceEditor {
    
    private InplaceEditor inplaceEditor;
    private Icon icon;
    private boolean needLayout=true;
    private PropertyEnv env=null;
    private Component comp;
    /** Creates a new instance of IconValuePanel */
    public IconPanel() {
        setOpaque(true);
    }
    
    /**
     * Setter for property inplaceEditor.
     * @param inplaceEditor New value of property inplaceEditor.
     */
    public void setInplaceEditor(InplaceEditor inplaceEditor) {
        this.inplaceEditor = inplaceEditor;
        setComponent(inplaceEditor.getComponent());
    }
    
    public InplaceEditor getInplaceEditor() {
        return inplaceEditor;
    }
    
    public void setEnabled(boolean val) {
        if (comp != null) {
            //Can be called from setUI in superclass constructor
            comp.setEnabled(val);
        }
        super.setEnabled(val);
    }
    
    public void setBackground(Color c) {
        if (comp != null) {
            //Can be called from setUI in superclass constructor
            comp.setBackground(c);
        }
        super.setBackground(c);
    }
    
    public void setForeground(Color c) {
        if (comp != null) {
            //Can be called from setUI in superclass constructor
            comp.setForeground(c);
        }
        super.setForeground(c);
    }
    
    
    public void setFont(Font f) {
        if (comp != null) {
            comp.setFont(f);
        }
        super.setFont(f);
    }    
    
    /** Set the inner component that will actually display the property */
    private void setComponent(Component c) {
        if (comp != null) {
            remove(comp);
        }
        if (c != null) {
            add (c);
        }
        comp = c;
        needLayout = true;
    }
    
    /** Set the icon that will be used. */
    public void setIcon(Icon i) {
        this.icon = i;
        needLayout = true;
    }
    
    /** Overridden to paint the icon */
    public void paintComponent(Graphics g) {
        if (needLayout) {
            doLayout();
        }
        if (icon != null) {
            Color c = g.getColor();
            try {
                g.setColor(getBackground());
                int right = comp != null ? comp.getLocation().x + 
                    icon.getIconWidth() : icon.getIconWidth() + 2;
                g.fillRect(0, 0, right, getHeight());
                Insets ins = getInsets();
                int x = ins.left;
                int y = ins.top + Math.max((getHeight() / 2) 
                    - (icon.getIconHeight() / 2),0);
                icon.paintIcon(this, g, x, y);
            } finally {
                g.setColor(c);
            }
        }
        super.paintComponent(g);
    }
    
    /** Proxies the embedded inplace editor */
    public void addActionListener(java.awt.event.ActionListener al) {
        inplaceEditor.addActionListener(al);
    }
    
    /** Proxies the embedded inplace editor */
    public void clear() {
        inplaceEditor.clear();
        setIcon(null);
        setComponent(null);
        env = null;
    }
    
    /** Proxies the embedded inplace editor */
    public void connect(java.beans.PropertyEditor pe, PropertyEnv env) {
        inplaceEditor.connect(pe, env);
        this.env = env;
        updateIcon();
    }
    
    private void updateIcon() {
        if (env != null) {
            Icon ic=null;
            FeatureDescriptor fd = env.getFeatureDescriptor();
            if (env.getState() == env.STATE_INVALID) {
                ic = new ImageIcon( Utilities.loadImage (
                    "org/openide/resources/propertysheet/invalid.gif")); //NOI18N
            } else if (fd != null) {
                ic = (Icon) fd.getValue("valueIcon"); //NOI18N
            }
            setIcon(ic);
            needLayout=true;
        }
    }
    
    public void setOpaque (boolean val) {
        if (getInplaceEditor() != null) {
            getInplaceEditor().getComponent().setOpaque(true);
        }
    }
    
    /** Proxies the embedded inplace editor */
    public javax.swing.JComponent getComponent() {
        return this;
    }
    
    /** Proxies the embedded inplace editor */
    public javax.swing.KeyStroke[] getKeyStrokes() {
        return inplaceEditor.getKeyStrokes();
    }
    
    /** Proxies the embedded inplace editor */
    public java.beans.PropertyEditor getPropertyEditor() {
        return inplaceEditor.getPropertyEditor();
    }
    
    /** Proxies the embedded inplace editor */
    public PropertyModel getPropertyModel() {
        return inplaceEditor.getPropertyModel();
    }
    
    /** Proxies the embedded inplace editor */
    public Object getValue() {
        return inplaceEditor.getValue();
    }
    
    /** Proxies the embedded inplace editor */
    public boolean isKnownComponent(java.awt.Component c) {
        return (c == this || inplaceEditor.isKnownComponent(c));
    }
    
    /** Proxies the embedded inplace editor */
    public void removeActionListener(java.awt.event.ActionListener al) {
        inplaceEditor.removeActionListener(al);
    }
    
    /** Proxies the embedded inplace editor */
    public void reset() {
        inplaceEditor.reset();
        updateIcon();
    }
    
    /** Proxies the embedded inplace editor */
    public void setPropertyModel(PropertyModel pm) {
        inplaceEditor.setPropertyModel(pm);
    }
    
    /** Proxies the embedded inplace editor */
    public void setValue(Object o) {
        inplaceEditor.setValue(o);
    }
    
    /** Proxies the embedded inplace editor */
    public boolean supportsTextEntry() {
        return inplaceEditor.supportsTextEntry();
    }
    
    public void requestFocus() {
        comp.requestFocus();
    }
    
    public boolean requestFocusInWindow() {
        return comp.requestFocusInWindow();
    }
    
    public void addFocusListener(FocusListener fl) {
        if (comp != null) {
            comp.addFocusListener(fl);
        } else {
            super.addFocusListener(fl);
        }
    }
    
    public void removeFocusListener(FocusListener fl) {
        if (comp != null) {
            comp.removeFocusListener(fl);
        } else {
            super.removeFocusListener(fl);
        }
    }
    
    public void layout() {
        Insets ins = getInsets();
        //use a minimum size so typical icons won't cause resizing of the
        //component
        int iconWidth = Math.max(icon.getIconWidth() +
            PropUtils.getTextMargin(), 18);
        
        int x = icon == null ? ins.left : ins.left + iconWidth;
        int y = ins.top;
        synchronized (getTreeLock()) {
            Component c = comp;
            if (c == null) {
                return;
            }
            c.setBounds (x, y, getWidth() - (x + ins.right), getHeight() - ins.bottom);
            if (c instanceof Container) {
                ((Container) c).doLayout();
            }
        }
    }

    public Dimension getPreferredSize() {
        Insets ins = getInsets();
        Component c = comp;
        Dimension result = new Dimension(0,0);
        if (icon != null) {
            result.width = icon.getIconWidth() + PropUtils.getTextMargin();
            result.height = icon.getIconHeight();
        }
        if (c != null) {
            Dimension ps = c.getPreferredSize();
            result.width += ps.width;
            result.height = Math.max(ps.height,result.height);
        }
        result.width += ins.left + ins.right;
        result.height += ins.top + ins.bottom;
        return result;
    }
    
    public Dimension getMinimumSize() {
        return getPreferredSize();
    }
    
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy