001    /*
002     * Copyright 2002-2007 the original author or authors.
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     * 
008     *      http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.springframework.richclient.command.config;
017    
018    import java.awt.Insets;
019    
020    import javax.swing.AbstractButton;
021    import javax.swing.JButton;
022    
023    import org.springframework.richclient.command.AbstractCommand;
024    import org.springframework.richclient.image.ShadowedIcon;
025    
026    /**
027     * Custom <code>CommandButtonConfigurer</code> for buttons on the toolbar.
028     * <p>
029     * Configurable Properties: <table border="1">
030     * <tr>
031     * <td><b>Property</b></td>
032     * <td><b>Default</b></td>
033     * <td><b>Purpose</b></td>
034     * </tr>
035     * <tr>
036     * <td><code>showText</code></td>
037     * <td>false</td>
038     * <td>determines whether text is shown</td>
039     * </tr>
040     * <tr>
041     * <td><code>textBelowIcon</code></td>
042     * <td>true</td>
043     * <td>indicates whether the text is shown below the icon (as is default in
044     * most applications)</td>
045     * </tr>
046     * <tr>
047     * <td><code>enableShadow</code></td>
048     * <td>false</td>
049     * <td>toggles shadow effect on rollover. If the icon already had a rollover
050     * icon attached, no shadow effect is applied</td>
051     * </tr>
052     * </table>
053     * 
054     * @author Keith Donald
055     * @author Peter De Bruycker
056     */
057    public class ToolBarCommandButtonConfigurer extends DefaultCommandButtonConfigurer {
058            private boolean showText = false;
059    
060            private boolean textBelowIcon = true;
061    
062            private boolean enableShadow = false;
063    
064            public boolean isEnableShadow() {
065                    return enableShadow;
066            }
067    
068            public void setEnableShadow(boolean enableShadow) {
069                    this.enableShadow = enableShadow;
070            }
071    
072            public void setTextBelowIcon(boolean textBelowIcon) {
073                    this.textBelowIcon = textBelowIcon;
074            }
075    
076            public boolean isTextBelowIcon() {
077                    return textBelowIcon;
078            }
079    
080            public void setShowText(boolean showText) {
081                    this.showText = showText;
082            }
083    
084            public boolean isShowText() {
085                    return showText;
086            }
087    
088            public void configure(AbstractButton button, AbstractCommand command, CommandFaceDescriptor faceDescriptor) {
089                    super.configure(button, command, faceDescriptor);
090    
091                    if (textBelowIcon) {
092                            button.setHorizontalTextPosition(JButton.CENTER);
093                            button.setVerticalTextPosition(JButton.BOTTOM);
094                    }
095    
096                    if (!showText) {
097                            if (button.getIcon() != null) {
098                                    button.setText(null);
099                            }
100                    }
101    
102                    if (enableShadow && button.getIcon() != null && button.getRolloverIcon() == null) {
103                            button.setRolloverEnabled(true);
104                            button.setRolloverIcon(new ShadowedIcon(button.getIcon()));
105                    }
106    
107                    button.setMargin(new Insets(2, 5, 2, 5));
108            }
109    }