/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.model.icons.impl; import java.awt.*; import org.eclipse.swt.graphics.Image; import org.jboss.tools.common.model.*; import org.jboss.tools.common.model.util.IconUtil; import org.jboss.tools.common.model.icons.*; import org.jboss.tools.common.meta.impl.*; public class ModifiersIcon implements ImageComponent { public static Image ABS, FIN, PBC, PLC, PTC, PVC, PBS, PLS, PTS, PVS; static { XIconList list = XModelMetaDataImpl.getInstance().getIconList(); ABS = list.getImage("modifiers.abstract"); //$NON-NLS-1$ FIN = list.getImage("modifiers.final"); //$NON-NLS-1$ PBC = list.getImage("modifiers.public"); //$NON-NLS-1$ PTC = list.getImage("modifiers.protected"); //$NON-NLS-1$ PLC = list.getImage("modifiers.package_local"); //$NON-NLS-1$ PVC = list.getImage("modifiers.private"); //$NON-NLS-1$ PBS = list.getImage("modifiers.public_static"); //$NON-NLS-1$ PTS = list.getImage("modifiers.protected_static"); //$NON-NLS-1$ PLS = list.getImage("modifiers.package_local_static"); //$NON-NLS-1$ PVS = list.getImage("modifiers.private_static"); //$NON-NLS-1$ } static Image add(Image front, Image back) { //TODO implement // if(front == null || back == null) return IconUtil.getEmptyIcon(new Point(16, 16)); // Point p = new Point(back.getIconWidth(), front.getIconHeight()); // return IconUtil.placeImages(p, back, new Point(0,0), // front, new Point(0,0), true); if(front != null) return front; return back; } public static Image[] MOD = new Image[] {PBC, PLC, PTC, PVC}; public static Image[] MOD_S = new Image[] {add(PBC, PBS), add(PLC, PLS), add(PTC, PTS), add(PVC, PVS)}; public static Image[] MOD_A = new Image[4]; public static Image[] MOD_F = new Image[4]; public static Image[] MOD_SA = new Image[4]; public static Image[] MOD_SF = new Image[4]; static { for (int i = 0; i < 4; i++) { MOD_A[i] = add(ABS, MOD[i]); MOD_F[i] = add(FIN, MOD[i]); MOD_SA[i] = add(ABS, MOD_S[i]); MOD_SF[i] = add(FIN, MOD_S[i]); } } public ModifiersIcon() {} public int getHash(XModelObject obj) { if(!isShowingModifiers(obj)) return 0; String mod = obj.getAttributeValue("modifiers"); //$NON-NLS-1$ return (mod == null) ? 0 : mod.hashCode(); } public Image getImage(XModelObject obj) { if(!isShowingModifiers(obj)) return null; String mod = obj.getAttributeValue("modifiers"); //$NON-NLS-1$ int access = (mod.indexOf("public") >= 0) ? 0 : //$NON-NLS-1$ (mod.indexOf("protected") >= 0) ? 2 : //$NON-NLS-1$ (mod.indexOf("private") >= 0) ? 3 : 1; //$NON-NLS-1$ boolean isStatic = (mod.indexOf("static") >= 0); //$NON-NLS-1$ int override = (mod.indexOf("final") >= 0) ? 1 : //$NON-NLS-1$ (mod.indexOf("abstract") >= 0) ? 2 : 0; //$NON-NLS-1$ return getModifiersIcon(access, isStatic, override); } private boolean isShowingModifiers(XModelObject obj) { XModelObject o = obj.getModel().getRoot("Preferences"); //$NON-NLS-1$ return (o == null) ? true : XModelObjectConstants.YES.equals(o.getAttributeValue("show modifiers")); //$NON-NLS-1$ } private Image getModifiersIcon(int access, boolean isStatic, int override) { return (isStatic) ? getStaticIcon(access, override) : getNonStaticIcon(access, override); } private Image getStaticIcon(int i, int override) { return (override == 1) ? MOD_SF[i] : (override == 2) ? MOD_SA[i] : MOD_S[i]; } private Image getNonStaticIcon(int i, int override) { return (override == 1) ? MOD_F[i] : (override == 2) ? MOD_A[i] : MOD[i]; } }