⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iconresourcefactory.java

📁 定要上载质量高而定要上载质量高而定要上载质量高而定要上载质量高而定要上载质量高而
💻 JAVA
字号:
/*
 * Created on Mar 1, 2005
 */
package org.flexdock.plaf.icons;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;

import org.flexdock.plaf.Configurator;
import org.flexdock.plaf.PropertySet;
import org.flexdock.plaf.XMLConstants;

/**
 * @author Christopher Butler
 *
 */
public class IconResourceFactory implements XMLConstants {
	public static final String ICON_RESOURCE_KEY = "icon-resource";
	public static final String ICON_MAP_KEY = "icon-map";
	
	public static final String ACTION_KEY = "action";
	
	public static final String DEFAULT = "default";
	public static final String DISABLED = "disabled";
	public static final String HOVER = "hover";
	public static final String ACTIVE = "active";
	public static final String ACTIVE_HOVER = "active.hover";
	public static final String ACTIVE_DISABLED = "active.disabled";
	public static final String PRESSED = "pressed";
	
	public static final String DEFAULT_SELECTED = "default.selected";
	public static final String HOVER_SELECTED = "hover.selected";
	public static final String DISABLED_SELECTED = "disabled.selected";
	public static final String ACTIVE_SELECTED = "active.selected";
	public static final String ACTIVE_SELECTED_HOVER = "active.armed.selected";
	public static final String ACTIVE_DISABLED_SELECTED = "active.disabled.selected";
	public static final String PRESSED_SELECTED = "pressed.selected";
	
	public static final String TOOLTIP = "tooltip";
	public static final String TOOLTIP_SELECTED = "tooltip.selected";
	
	private static final HashMap RESOURCE_CACHE = new HashMap();
	private static final HashMap RESOURCE_MAP_CACHE = new HashMap();
	private static final HashSet BAD_RESOURCE_NAMES = new HashSet();

	public static IconMap getIconMap(String name) {
		if(Configurator.isNull(name) || BAD_RESOURCE_NAMES.contains(name))
			return null;
		
		IconMap map = (IconMap)RESOURCE_MAP_CACHE.get(name);
		if(map==null) {
			map = loadIconMap(name);
			if(map==null) {
				synchronized(BAD_RESOURCE_NAMES) {
					BAD_RESOURCE_NAMES.add(name);
				}
			}
			else {
				synchronized(RESOURCE_MAP_CACHE) {
					RESOURCE_MAP_CACHE.put(name, map);		
				}
			}
		}
		return map;
	}
	
	public static IconResource getResource(String name) {
		if(Configurator.isNull(name))
			return null;
		
		IconResource icons = getCachedResource(name);
		if(icons==null) {
			icons = loadIcons(name);
			cacheResource(name, icons);
		}
		return icons;
	}
	
	private static IconResource getCachedResource(String name) {
		return (IconResource)RESOURCE_CACHE.get(name);
	}
	
	private static void cacheResources(IconMap map) {
		if(map!=null) {
			for(Iterator it=map.keySet().iterator(); it.hasNext();) {
				String key = (String)it.next();
				IconResource resource = map.getIcons(key);
				cacheResource(key, resource);
			}
		}
	}
	private static void cacheResource(String name, IconResource icons) {
		if(icons!=null) {
			synchronized(RESOURCE_CACHE) {
				RESOURCE_CACHE.put(name, icons);		
			}
		}
	}
	
	private static IconResource loadIcons(String name) {
		PropertySet properties = Configurator.getProperties(name, ICON_RESOURCE_KEY);
		return createResource(properties);
	}
	
	private static IconResource createResource(PropertySet properties) {
		IconResource icons = new IconResource();
		
		icons.setIcon(properties.getIcon(DEFAULT));
		icons.setIconHover(properties.getIcon(HOVER));
		icons.setIconDisabled(properties.getIcon(DISABLED));
		icons.setIconActive(properties.getIcon(ACTIVE));
		icons.setIconActiveHover(properties.getIcon(ACTIVE_HOVER));
		icons.setIconActiveDisabled(properties.getIcon(ACTIVE_DISABLED));
		icons.setIconPressed(properties.getIcon(PRESSED));

		icons.setIconSelected(properties.getIcon(DEFAULT_SELECTED));
		icons.setIconSelectedDisabled(properties.getIcon(DISABLED_SELECTED));
		icons.setIconSelectedHover(properties.getIcon(HOVER_SELECTED));
		icons.setIconSelectedActive(properties.getIcon(ACTIVE_SELECTED));
		icons.setIconSelectedActiveHover(properties.getIcon(ACTIVE_SELECTED_HOVER));
		icons.setIconSelectedActiveDisabled(properties.getIcon(ACTIVE_DISABLED_SELECTED));
		icons.setIconSelectedPressed(properties.getIcon(PRESSED_SELECTED));
		
		icons.setAction(properties.getAction(ACTION_KEY));
		
		icons.setTooltip(properties.getString(TOOLTIP));
		icons.setTooltipSelected(properties.getString(TOOLTIP_SELECTED));
		
		return icons;		
	}
	
	private static IconMap loadIconMap(String iconMapName) {
		PropertySet iconMapProperties = Configurator.getProperties(iconMapName, ICON_MAP_KEY);
		IconMap iconMap = new IconMap();
		
		ArrayList notCached = new ArrayList();
		for(Iterator it=iconMapProperties.keys(); it.hasNext();) {
			String fakeName = (String)it.next();
			String realName = iconMapProperties.getString(fakeName);
			
			// load all the cached icon resources
			IconResource iconResource = getCachedResource(realName);
			if(iconResource==null) {
				// track the non-cached icons
				notCached.add(fakeName);
			}
			else {
				iconMap.addIcons(fakeName, iconResource);
			}
		}
		// if all our resources were already cached, then we can return immediately
		if(notCached.size()==0)
			return iconMap;
		
		// otherwise, we need to load resources and put them in the cache.
		String[] fakeNames = (String[])notCached.toArray(new String[0]);
		String[] realNames = iconMapProperties.getStrings(fakeNames);
		// load the resources into memory
		HashMap resourceMap = loadIconResources(realNames);
		
		// now loop through and cache
		for(int i=0; i<fakeNames.length; i++) {
			String realName = iconMapProperties.getString(fakeNames[i]);
			IconResource iconResource = (IconResource)resourceMap.get(realName);
			// cache the resource for future use
			cacheResource(realName, iconResource);
			// add to the immediate icon map
			iconMap.addIcons(fakeNames[i], iconResource);
		}
		return iconMap;
	}
	
	
	
	private static HashMap loadIconResources(String[] iconNames) {
		PropertySet[] iconResources = Configurator.getProperties(iconNames, ICON_RESOURCE_KEY);
		HashMap map = new HashMap(iconResources.length);
		
		for(int i=0; i<iconResources.length; i++) {
			IconResource resource = createResource(iconResources[i]);
			map.put(iconResources[i].getName(), resource);
		}
		return map;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -