001    package org.springframework.richclient.util;
002    
003    import java.awt.Font;
004    
005    import javax.swing.JLabel;
006    import javax.swing.SwingUtilities;
007    import javax.swing.UIManager;
008    import javax.swing.plaf.FontUIResource;
009    
010    import org.springframework.richclient.application.Application;
011    import org.springframework.richclient.application.ApplicationWindow;
012    import org.springframework.richclient.command.ActionCommand;
013    
014    import com.jgoodies.forms.layout.Sizes;
015    
016    public class AdjustFontSizeCommand extends ActionCommand {
017        private double fontAdjustment = +1.0d;
018    
019        public double getFontAdjustment() {
020            return this.fontAdjustment;
021        }
022    
023        public void setFontAdjustment(final double fontAdjustment) {
024            this.fontAdjustment = fontAdjustment;
025        }
026    
027        protected void adjustFont(final double adjustAmount) {
028            System.out.println(Sizes.getUnitConverter().dialogUnitYAsPixel(10, new JLabel()));
029            final Object[] objs = UIManager.getLookAndFeel().getDefaults().keySet().toArray();
030            for (int i = 0; i < objs.length; i++) {
031                if (objs[i].toString().toUpperCase().indexOf("FONT") != -1) {
032                    final Font font = UIManager.getFont(objs[i]);
033                    UIManager.put(objs[i], new FontUIResource(font.deriveFont((float)(font.getSize() + adjustAmount))));
034                }
035            }        
036            System.out.println(Sizes.getUnitConverter().dialogUnitYAsPixel(10, new JLabel()));
037            ApplicationWindow[] applicationWindows = Application.instance().getWindowManager().getWindows();
038            for (int i = 0; i < applicationWindows.length; i++) {
039                ApplicationWindow window = applicationWindows[i];
040                SwingUtilities.updateComponentTreeUI(window.getControl());
041                window.getControl().repaint();
042            }        
043        }
044    
045        protected void doExecuteCommand() {
046            final double fontAdjustment;
047    
048            final Object fontAdjustmentParam = getParameter("fontAdjustment");
049            if (fontAdjustmentParam != null) {
050                if (fontAdjustmentParam instanceof Number) {
051                    fontAdjustment = ((Number)fontAdjustmentParam).doubleValue();
052                }
053                else {
054                    fontAdjustment = Double.parseDouble(fontAdjustmentParam.toString());
055                }
056            }
057            else {
058                fontAdjustment = getFontAdjustment();
059            }
060    
061            adjustFont(fontAdjustment);
062        }
063    }