/******************************************************************************* * Copyright (c) 2015, 2015 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are 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: * Bruno Medeiros - initial API and implementation *******************************************************************************/ package melnorme.util.swt.jface.resources; import static melnorme.utilbox.core.Assert.AssertNamespace.assertNotNull; import static melnorme.utilbox.core.CoreUtil.areEqual; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.Point; import melnorme.lang.ide.ui.LangImages; import melnorme.lang.tooling.EAttributeFlag; import melnorme.lang.tooling.EProtection; import melnorme.lang.tooling.ElementAttributes; import melnorme.utilbox.misc.HashcodeUtil; public class LangElementImageDescriptor extends CompositeImageDescriptorExt { public static final Point DEFAULT_SIZE = new Point(22, 16); protected final Point size; protected final ElementAttributes elementAttributes; public LangElementImageDescriptor(ImageDescriptor baseImage, ElementAttributes elementData) { this(DEFAULT_SIZE, baseImage, elementData); } public LangElementImageDescriptor(Point size, ImageDescriptor baseImage, ElementAttributes elementAttributes) { super(baseImage); this.size = assertNotNull(size); this.elementAttributes = assertNotNull(elementAttributes); } @Override protected Point getSize() { return size; } @Override public boolean equals(Object obj) { if(this == obj) return true; if(obj == null || !getClass().equals(obj.getClass())) return false; LangElementImageDescriptor other = (LangElementImageDescriptor) obj; return areEqual(baseImage, other.baseImage) && areEqual(size, other.size) && areEqual(elementAttributes, other.elementAttributes); } @Override public int hashCode() { return HashcodeUtil.combinedHashCode(baseImage, size, elementAttributes); } /* ----------------- ----------------- */ @Override protected void drawCompositeImage(int width, int height) { ImageData bg = getImageData(baseImage); drawImage(bg, 0, 0); resetDrawPosition(Corner.TOP_LEFT); drawTopLeftDecorations(); resetDrawPosition(Corner.TOP_RIGHT); drawTopRightDecorations(); resetDrawPosition(Corner.BOTTOM_LEFT); drawBottomLeftDecorations(); resetDrawPosition(Corner.BOTTOM_RIGHT); drawBottomRightDecorations(); } /* ----------------- ----------------- */ protected void drawTopLeftDecorations() { if(elementAttributes.hasFlag(EAttributeFlag.TEMPLATED)) { drawOverlayAtCursor(LangImages.DESC_OVR_TEMPLATED, Corner.TOP_LEFT); } } protected void drawTopRightDecorations() { if(elementAttributes.hasFlag(EAttributeFlag.CONST)) { drawOverlayAtCursor(LangImages.DESC_OVR_CONST, Corner.TOP_RIGHT); } if(elementAttributes.hasFlag(EAttributeFlag.IMMUTABLE)) { drawOverlayAtCursor(LangImages.DESC_OVR_IMMUTABLE, Corner.TOP_RIGHT); } if(elementAttributes.hasFlag(EAttributeFlag.FINAL)) { drawOverlayAtCursor(LangImages.DESC_OVR_FINAL, Corner.TOP_RIGHT); } if(elementAttributes.hasFlag(EAttributeFlag.ABSTRACT)) { drawOverlayAtCursor(LangImages.DESC_OVR_ABSTRACT, Corner.TOP_RIGHT); } if(elementAttributes.hasFlag(EAttributeFlag.STATIC)) { drawOverlayAtCursor(LangImages.DESC_OVR_STATIC, Corner.TOP_RIGHT); } } protected void drawBottomLeftDecorations() { if(elementAttributes.hasFlag(EAttributeFlag.ALIASED)) { drawOverlayAtCursor(LangImages.DESC_OVR_ALIAS, Corner.BOTTOM_LEFT); } } protected void drawBottomRightDecorations() { ImageDescriptor protectionDecoration = getProtectionDecoration(); if(protectionDecoration != null) { drawOverlayAtCursor(protectionDecoration, Corner.BOTTOM_RIGHT); } } protected ImageDescriptor getProtectionDecoration() { return getProtectionDecoration2(elementAttributes.getProtection()); } public static ImageDescriptor getProtectionDecoration2(EProtection protection) { return getProtectionDecoration_Small(protection); } public static ImageDescriptor getProtectionDecoration_Big(EProtection protection) { if(protection == null) return null; switch (protection) { case PRIVATE: return LangImages.DESC_OVR_PRIVATE; case PROTECTED: return LangImages.DESC_OVR_PROTECTED; case PACKAGE: return LangImages.DESC_OVR_DEFAULT; case PUBLIC: default: return null; } } public static ImageDescriptor getProtectionDecoration_Small(EProtection protection) { if(protection == null) return null; switch (protection) { case PRIVATE: return LangImages.DESC_OVR_PRIVATE_SMALL; case PROTECTED: return LangImages.DESC_OVR_PROTECTED_SMALL; case PACKAGE: return LangImages.DESC_OVR_DEFAULT_SMALL; case PUBLIC: default: return null; } } }