/*
* 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-2002 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.openide.explorer.propertysheet;
import java.awt.Image;
import java.awt.Graphics;
import java.awt.Transparency;
import java.awt.GraphicsEnvironment;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.beans.PropertyVetoException;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import javax.swing.ImageIcon;
import org.openide.awt.Toolbar;
import org.openide.awt.ToolbarButton;
import org.openide.awt.ToolbarToggleButton;
import org.openide.util.NbBundle;
import org.openide.util.Utilities;
/**
* Toolbar panel for the PropertySheet.
* @author David Strupl
*/
class PropertySheetToolbar extends javax.swing.JPanel
implements ActionListener, PropertyChangeListener {
/** References back the "parent" property sheet. */
private PropertySheet mySheet;
/** Set of buttons. */
private ToolbarToggleButton bNoSort, bAlphaSort, bTypeSort, bDisplayWritableOnly;
private ToolbarButton customizer;
/** Show help on the active property sheet tab (Node.PropertySet) if applicable.
* Does not show node- nor property-level help.
* @see "#20794"
*/
private ToolbarButton help;
/** When firing back to the PropertySheet we should not react to changes -
* - this should prevent the loop.
*/
private boolean ignorePropertyChange = false;
/** Creates new PropertySheetToolbar */
public PropertySheetToolbar(PropertySheet p) {
mySheet = p;
mySheet.addPropertyChangeListener(this);
// Toolbar
setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
add(bNoSort = new ToolbarToggleButton(new ImageIcon(Utilities.loadImage(
"org/openide/resources/propertysheet/unsorted.gif")))); // NOI18N
bNoSort.getAccessibleContext().setAccessibleName(getString("ACS_CTL_NoSort"));
bNoSort.setToolTipText(getString("CTL_NoSort"));
bNoSort.setSelected(true);
bNoSort.addActionListener(this);
add(bAlphaSort = new ToolbarToggleButton(new ImageIcon(Utilities.loadImage(
"org/openide/resources/propertysheet/sortedByNames.gif")))); // NOI18N
bAlphaSort.getAccessibleContext().setAccessibleName(getString("ACS_CTL_AlphaSort"));
bAlphaSort.setToolTipText(getString("CTL_AlphaSort"));
bAlphaSort.addActionListener(this);
add(bTypeSort = new ToolbarToggleButton(new ImageIcon(Utilities.loadImage(
"org/openide/resources/propertysheet/sortedByTypes.gif")))); // NOI18N
bTypeSort.getAccessibleContext().setAccessibleName(getString("ACS_CTL_TypeSort"));
bTypeSort.setToolTipText(getString("CTL_TypeSort"));
bTypeSort.addActionListener(this);
setSortingMode(mySheet.getSortingMode());
Toolbar.Separator ts = new Toolbar.Separator();
add(ts);
ts.updateUI();
bDisplayWritableOnly = new ToolbarToggleButton(
new ImageIcon(Utilities.loadImage(
"org/openide/resources/propertysheet/showWritableOnly.gif")), // NOI18N
mySheet.getDisplayWritableOnly()
);
bDisplayWritableOnly.getAccessibleContext().setAccessibleName(getString("ACS_CTL_VisibleWritableOnly"));
bDisplayWritableOnly.setToolTipText(getString("CTL_VisibleWritableOnly"));
bDisplayWritableOnly.addActionListener(this);
add(bDisplayWritableOnly);
ts = new Toolbar.Separator();
add(ts);
ts.updateUI();
add(customizer = new ToolbarButton(new ImageIcon(Utilities.loadImage(
"org/openide/resources/propertysheet/customize.gif")))); // NOI18N
customizer.getAccessibleContext().setAccessibleName(getString("ACS_CTL_Customize"));
customizer.setToolTipText(getString("CTL_Customize"));
customizer.setEnabled(false);
customizer.addActionListener(this);
ts = new Toolbar.Separator();
add(ts);
ts.updateUI();
add(help = new ToolbarButton(new ImageIcon(Utilities.loadImage(
"org/openide/resources/propertysheet/propertySheetHelp.gif")))); // NOI18N
help.getAccessibleContext().setAccessibleName(getString("ACS_CTL_Help"));
help.setToolTipText(getString("CTL_Help"));
help.setEnabled(false);
help.addActionListener(this);
}
/** Implements <code>ActionListener</code> interface.
* Listens all toolbar buttons. */
public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
if(source == bNoSort) {
setSortingMode(PropertySheet.UNSORTED);
} else if(source == bAlphaSort) {
setSortingMode(PropertySheet.SORTED_BY_NAMES);
} else if(source == bTypeSort) {
setSortingMode(PropertySheet.SORTED_BY_TYPES);
} else if(source == customizer) {
mySheet.invokeCustomization();
} else if (source == help) {
mySheet.invokeHelp();
} else if(source == bDisplayWritableOnly) {
ignorePropertyChange = true;
try {
mySheet.setDisplayWritableOnly(bDisplayWritableOnly.isSelected());
} finally {
ignorePropertyChange = false;
}
}
}
/** This setter calls it's counterpart in the master PropertySheet instance.
*/
private void setSortingMode(int sortingMode) {
ignorePropertyChange = true;
try {
mySheet.setSortingMode(sortingMode);
} catch (PropertyVetoException pve) {
PropertyDialogManager.notify(pve);
} finally {
ignorePropertyChange = false;
bNoSort.setSelected (sortingMode == PropertySheet.UNSORTED);
bAlphaSort.setSelected (sortingMode == PropertySheet.SORTED_BY_NAMES);
bTypeSort.setSelected (sortingMode == PropertySheet.SORTED_BY_TYPES);
}
}
/**
* This method gets called when a bound property is changed.
* @param evt A PropertyChangeEvent object describing the event source
* and the property that has changed.
*/
public void propertyChange(PropertyChangeEvent evt) {
if (ignorePropertyChange) {
return;
}
if (evt.getPropertyName() == null) {
return;
}
if (evt.getPropertyName().equals(PropertySheet.PROPERTY_SORTING_MODE)) {
setSortingMode(((Integer)evt.getNewValue()).intValue());
}
if (evt.getPropertyName().equals(PropertySheet.PROPERTY_DISPLAY_WRITABLE_ONLY)) {
bDisplayWritableOnly.setSelected (((Boolean)evt.getNewValue()).booleanValue());
}
if (evt.getPropertyName().equals(PropertySheet.PROP_HAS_CUSTOMIZER)) {
customizer.setEnabled(((Boolean)evt.getNewValue()).booleanValue());
}
if (evt.getPropertyName().equals(PropertySheet.PROP_PAGE_HELP_ID)) {
help.setEnabled(mySheet.getPageHelpID() != null);
}
}
/** Forces the icon to use BufferedImage */
private static void toBufferedImage(ImageIcon icon) {
Image img = createImage();
Graphics g = img.getGraphics();
g.drawImage(icon.getImage(), 0, 0, null);
g.dispose();
icon.setImage(img);
}
/** Creates BufferedImage 16x16 and Transparency.BITMASK */
private static BufferedImage createImage() {
ColorModel model = GraphicsEnvironment.getLocalGraphicsEnvironment().
getDefaultScreenDevice().getDefaultConfiguration().getColorModel(Transparency.BITMASK);
BufferedImage buffImage = new BufferedImage(model,
model.createCompatibleWritableRaster(16, 16), model.isAlphaPremultiplied(), null);
return buffImage;
}
private static String getString(String key) {
return NbBundle.getBundle(PropertySheetToolbar.class).getString(key);
}
}