/* Soot - a J*va Optimization Framework * Copyright (C) 2004 Jennifer Lhotak * * 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., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ package ca.mcgill.sable.soot.ui; import java.util.*; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.RGB; import ca.mcgill.sable.soot.SootPlugin; import ca.mcgill.sable.soot.attributes.AnalysisKey; import ca.mcgill.sable.soot.editors.ColorManager; public class KeysLabelProvider implements ITableLabelProvider { private HashMap images; private ArrayList imageList; /* (non-Javadoc) * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int) */ public Image getColumnImage(Object element, int columnIndex) { AnalysisKey key = (AnalysisKey)element; ColorManager colorManager = SootPlugin.getDefault().getColorManager(); RGB rgb = new RGB(key.getRed(), key.getGreen(), key.getBlue()); Color c = colorManager.getColor(rgb); if (imageList == null){ imageList = new ArrayList(); } if (images == null){ images = new HashMap(); } Image image = null; ImageDescriptor id = SootPlugin.getImageDescriptor("key.png"); if (!images.isEmpty()){ Iterator it = images.keySet().iterator(); while (it.hasNext()){ RGB next = (RGB)it.next(); if (next.red == key.getRed() && next.green == key.getGreen() && next.blue == key.getBlue()){ image = (Image)images.get(next); } } } if (image == null) { image = id.createImage(); images.put(rgb, image); } GC gc = new GC(image); gc.setBackground(c); gc.fillRectangle(3,3,9,9); gc.dispose(); return image; } public void dispose(){ if (images == null) return; Iterator it2 = images.keySet().iterator(); while (it2.hasNext()){ ((Image)images.get(it2.next())).dispose(); } images = null; } /* (non-Javadoc) * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int) */ public String getColumnText(Object element, int columnIndex) { return ((AnalysisKey)element).getKey(); } /* (non-Javadoc) * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener) */ public void addListener(ILabelProviderListener listener) { } /* (non-Javadoc) * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String) */ public boolean isLabelProperty(Object element, String property) { return false; } /* (non-Javadoc) * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener) */ public void removeListener(ILabelProviderListener listener) { } }