org.executequery.util.LookAndFeelLoader.java Source code

Java tutorial

Introduction

Here is the source code for org.executequery.util.LookAndFeelLoader.java

Source

/*
 * LookAndFeelLoader.java
 *
 * Copyright (C) 2002-2015 Takis Diakoumis
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 3
 * of the License, or any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 *
 */

package org.executequery.util;

import java.awt.event.KeyEvent;

import javax.swing.InputMap;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.KeyStroke;
import javax.swing.LookAndFeel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.plaf.metal.MetalLookAndFeel;
import javax.swing.text.DefaultEditorKit;

import org.apache.commons.lang.math.NumberUtils;
import org.executequery.ApplicationException;
import org.executequery.plaf.ExecuteQueryTheme;
import org.executequery.plaf.LookAndFeelType;
import org.underworldlabs.swing.plaf.UIUtils;
import org.underworldlabs.swing.plaf.base.CustomTextAreaUI;
import org.underworldlabs.swing.plaf.base.CustomTextPaneUI;
import org.underworldlabs.swing.plaf.bumpygradient.BumpyGradientLookAndFeel;
import org.underworldlabs.swing.plaf.smoothgradient.SmoothGradientLookAndFeel;

public final class LookAndFeelLoader {

    public LookAndFeelType loadLookAndFeel(String lookAndFeelType) {

        if (NumberUtils.isDigits(lookAndFeelType)) {

            // legacy numeric setting - default to EQ L&F

            return loadLookAndFeel(LookAndFeelType.EXECUTE_QUERY);
        }
        return loadLookAndFeel(LookAndFeelType.valueOf(lookAndFeelType));
    }

    public LookAndFeelType loadLookAndFeel(LookAndFeelType lookAndFeelType) {

        try {

            switch (lookAndFeelType) {
            case EXECUTE_QUERY:
                loadDefaultLookAndFeel();
                break;
            case EXECUTE_QUERY_DARK:
                loadDarkEQLookAndFeel();
                break;
            case SMOOTH_GRADIENT:
                UIManager.setLookAndFeel(new SmoothGradientLookAndFeel());
                break;
            case BUMPY_GRADIENT:
                BumpyGradientLookAndFeel.setCurrentTheme(new ExecuteQueryTheme());
                UIManager.setLookAndFeel(new BumpyGradientLookAndFeel());
                break;
            case EXECUTE_QUERY_THEME:
                loadDefaultLookAndFeelTheme();
                break;
            case METAL:
                loadDefaultMetalLookAndFeelTheme();
                break;
            case OCEAN:
                UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
                break;
            case MOTIF:
                UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
                break;
            case WINDOWS:
                UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
                break;
            case GTK:
                UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
                break;
            case PLUGIN:
                loadCustomLookAndFeel();
                break;
            case NATIVE:
                loadNativeLookAndFeel();
                break;
            case EXECUTE_QUERY_GRADIENT:
                loadDefault3DLookAndFeel();
                break;
            default:
                loadDefaultLookAndFeel();
                break;
            }

        } catch (UnsupportedLookAndFeelException | IllegalAccessException | InstantiationException
                | ClassNotFoundException e) {

            throw new ApplicationException(e);
        }

        if (!UIUtils.isNativeMacLookAndFeel()) {

            CustomTextAreaUI.initialize();
            CustomTextPaneUI.initialize();
        }

        applyMacSettings();
        return lookAndFeelType;
    }

    private void applyMacSettings() {

        if (UIUtils.isMac()) {

            String[] textComponents = { "TextField", "TextPane", "TextArea", "EditorPane", "PasswordField" };
            for (String textComponent : textComponents) {

                InputMap im = (InputMap) UIManager.get(textComponent + ".focusInputMap");
                im.put(KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.META_DOWN_MASK), DefaultEditorKit.copyAction);
                im.put(KeyStroke.getKeyStroke(KeyEvent.VK_V, KeyEvent.META_DOWN_MASK),
                        DefaultEditorKit.pasteAction);
                im.put(KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.META_DOWN_MASK), DefaultEditorKit.cutAction);
            }

            if (UIUtils.isNativeMacLookAndFeel()) {

                UIManager.put("Table.gridColor", UIUtils.getDefaultBorderColour());
            }

        }

    }

    private void loadCustomLookAndFeel() {

        PluginLookAndFeelManager pluginManager = new PluginLookAndFeelManager();
        try {

            pluginManager.loadLookAndFeel();

        } catch (Exception e) {

            throw new ApplicationException(e);
        }

        if (!pluginManager.isInstalled()) {

            loadDefaultLookAndFeel();
        }

    }

    /**
     * Sets the default metal look and feel theme on Metal.
     */
    private void loadDefaultMetalLookAndFeelTheme() {

        try {

            MetalLookAndFeel.setCurrentTheme(new javax.swing.plaf.metal.DefaultMetalTheme());
            UIManager.setLookAndFeel(new MetalLookAndFeel());

        } catch (UnsupportedLookAndFeelException e) {

            throw new ApplicationException(e);
        }

    }

    /**
     * Sets the default look and feel theme on Metal.
     */
    private void loadDefaultLookAndFeelTheme() {

        try {

            MetalLookAndFeel.setCurrentTheme(new ExecuteQueryTheme());
            UIManager.setLookAndFeel(new MetalLookAndFeel());

        } catch (UnsupportedLookAndFeelException e) {

            throw new ApplicationException(e);
        }

    }

    /**
     * Sets the default 'Execute Query' look and feel.
     */
    private void loadDefaultLookAndFeel() {

        try {

            LookAndFeel laf = new org.underworldlabs.swing.plaf.UnderworldLabsFlatLookAndFeel();
            UIManager.setLookAndFeel(laf);

            /*
                        List<String> values = new ArrayList<String>();
                        UIDefaults defaults = (UIDefaults) laf.getDefaults();
                        Enumeration<Object> i = defaults.keys();
                        while (i.hasMoreElements()) { 
                
            Object key = i.nextElement();
            Object value = defaults.get(key);
                
            values.add(key + " :: " + value);
                
            /*
            if (value instanceof ColorUIResource) {
                
                ColorUIResource color = (ColorUIResource) value;                    
                values.add("\"" + key + "\", new ColorUIResource(" + 
                        color.getRed() + "," +
                        color.getGreen() + "," +
                        color.getBlue() +
                        "),");
            }
            * /
                        }
                
                        Collections.sort(values);
                        for (String value : values) {
            System.out.println(value);
                        }
                        */

        } catch (UnsupportedLookAndFeelException e) {

            throw new ApplicationException(e);
        }

    }

    private void loadDarkEQLookAndFeel() {

        try {

            LookAndFeel laf = new org.underworldlabs.swing.plaf.UnderworldLabsDarkFlatLookAndFeel();
            UIManager.setLookAndFeel(laf);

        } catch (UnsupportedLookAndFeelException e) {

            throw new ApplicationException(e);
        }

    }

    /**
     * Sets the default OLD 'Execute Query' look and feel.
     */
    public void loadDefault3DLookAndFeel() {

        try {
            org.underworldlabs.swing.plaf.UnderworldLabsLookAndFeel metal = new org.underworldlabs.swing.plaf.UnderworldLabsLookAndFeel();

            UIManager.setLookAndFeel(metal);

        } catch (UnsupportedLookAndFeelException e) {

            throw new ApplicationException(e);
        }

    }

    public void loadNativeLookAndFeel() {
        try {

            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

        } catch (Exception e) {

            throw new ApplicationException(e);
        }
    }

    public void loadCrossPlatformLookAndFeel() {
        try {

            UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

        } catch (Exception e) {

            throw new ApplicationException(e);
        }
    }

    public void decorateDialogsAndFrames(boolean decorateDialogs, boolean decorateFrames) {

        JDialog.setDefaultLookAndFeelDecorated(decorateDialogs);
        JFrame.setDefaultLookAndFeelDecorated(decorateFrames);
    }

}