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

bibliothek.gui.dock.util.laf.Nimbus6u10 Maven / Gradle / Ivy

/*
 * Bibliothek - DockingFrames
 * Library built on Java/Swing, allows the user to "drag and drop"
 * panels containing any Swing-Component the developer likes to add.
 * 
 * Copyright (C) 2007 Benjamin Sigg
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 * 
 * Benjamin Sigg
 * [email protected]
 * CH - Switzerland
 */
package bibliothek.gui.dock.util.laf;

import java.awt.Color;
import java.awt.EventQueue;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.HashMap;
import java.util.Map;

import javax.swing.UIManager;

/**
 * Access to the colors of the Nimbus LookAndFeel.
 * @author Benjamin Sigg
 */
public class Nimbus6u10 extends AbstractLookAndFeelColors{
    private Map translations = new HashMap();
    
    private Listener listener = new Listener();
    
    /**
     * Creates a new object.
     */
    public Nimbus6u10(){
        translations.put( TITLE_BACKGROUND, "menu" );
        translations.put( TITLE_FOREGROUND, "menuText" );
        translations.put( TITLE_SELECTION_BACKGROUND, "nimbusSelection" );
        translations.put( TITLE_SELECTION_FOREGROUND, "menu" );
        translations.put( SELECTION, "nimbusSelectionBackground" );
        
        translations.put( PANEL_BACKGROUND, "control" );
        translations.put( PANEL_FOREGROUND, "text" );
        
        translations.put( CONTROL_SHADOW, "controlDkShadow" );
        translations.put( WINDOW_BORDER, "windowBorder" );
    }
    
    /**
     * Tells this {@link Nimbus6u10} that the color colorKey
     * should be read from the {@link UIManager} using lafKey 
     * as key.
     * @param colorKey name of a color
     * @param lafKey key used by the {@link UIManager}
     */
    public void put( String colorKey, String lafKey ){
    	translations.put( colorKey, lafKey );
    }
    
    public Color getColor( String key ) {
        key = translations.get( key );
        if( key == null )
            return null;
        
        Color color = UIManager.getColor( key );
        
        if( color == null )
            return null;
        
        return new Color( color.getRGB() );
    }
    
    public void bind() {
        UIManager.addPropertyChangeListener( listener );
        
        EventQueue.invokeLater( new Runnable(){
           public void run() {
               // since Nimbus changes its colors *after* its initialization,
               // we need to wait as well.
               fireColorsChanged();
           } 
        });
    }
    
    public void unbind() {
        UIManager.removePropertyChangeListener( listener );
    }
    
    /**
     * A listener for the {@link UIManager}, gets informed when a color
     * changes.
     * @author Benjamin Sigg
     */
    private class Listener implements PropertyChangeListener{
        public void propertyChange( PropertyChangeEvent evt ) {            
            String name = evt.getPropertyName();
            update( name );
        }
        
        public void update( String name ){
            for( Map.Entry entry : translations.entrySet() ){
                if( entry.getValue().equals( name )){
                    // there are derived colors which might change as well...
                    // just fire an event that "colors changed", no details required. But
                	// we have to wait until Nimbus finished the update.
                    EventQueue.invokeLater( new Runnable(){
                        public void run() {
                            fireColorsChanged();     
                        }
                    });
                    return;
                }       
            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy