| /* |
| * Copyright (C) 2008 The Android Open Source Project |
| * |
| * Licensed under the Eclipse Public License, Version 1.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.eclipse.org/org/documents/epl-v10.php |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.ide.eclipse.adt.internal.project; |
| |
| import com.android.SdkConstants; |
| import com.android.ide.eclipse.adt.AdtConstants; |
| import com.android.ide.eclipse.adt.AdtPlugin; |
| |
| import org.eclipse.core.resources.IFolder; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.jface.resource.ImageDescriptor; |
| import org.eclipse.jface.viewers.IDecoration; |
| import org.eclipse.jface.viewers.ILabelDecorator; |
| import org.eclipse.jface.viewers.ILabelProviderListener; |
| import org.eclipse.jface.viewers.ILightweightLabelDecorator; |
| |
| /** |
| * A {@link ILabelDecorator} associated with an org.eclipse.ui.decorators extension. |
| * This is used to add android icons in some special folders in the package explorer. |
| */ |
| public class FolderDecorator implements ILightweightLabelDecorator { |
| |
| private ImageDescriptor mDescriptor; |
| |
| public FolderDecorator() { |
| mDescriptor = AdtPlugin.getImageDescriptor("/icons/android_project.png"); //$NON-NLS-1$ |
| } |
| |
| @Override |
| public void decorate(Object element, IDecoration decoration) { |
| if (element instanceof IFolder) { |
| IFolder folder = (IFolder)element; |
| |
| // get the project and make sure this is an android project |
| IProject project = folder.getProject(); |
| if (project == null || !project.exists() || !folder.exists()) { |
| return; |
| } |
| |
| try { |
| if (project.hasNature(AdtConstants.NATURE_DEFAULT)) { |
| // check the folder is directly under the project. |
| if (folder.getParent().getType() == IResource.PROJECT) { |
| String name = folder.getName(); |
| if (name.equals(SdkConstants.FD_ASSETS)) { |
| doDecoration(decoration, null); |
| } else if (name.equals(SdkConstants.FD_RESOURCES)) { |
| doDecoration(decoration, null); |
| } else if (name.equals(SdkConstants.FD_GEN_SOURCES)) { |
| doDecoration(decoration, " [Generated Java Files]"); |
| } else if (name.equals(SdkConstants.FD_NATIVE_LIBS)) { |
| doDecoration(decoration, null); |
| } else if (name.equals(SdkConstants.FD_OUTPUT)) { |
| doDecoration(decoration, null); |
| } |
| } |
| } |
| } catch (CoreException e) { |
| // log the error |
| AdtPlugin.log(e, "Unable to get nature of project '%s'.", project.getName()); |
| } |
| } |
| } |
| |
| public void doDecoration(IDecoration decoration, String suffix) { |
| decoration.addOverlay(mDescriptor, IDecoration.TOP_LEFT); |
| |
| if (suffix != null) { |
| decoration.addSuffix(suffix); |
| } |
| } |
| |
| @Override |
| public boolean isLabelProperty(Object element, String property) { |
| // Property change do not affect the label |
| return false; |
| } |
| |
| @Override |
| public void addListener(ILabelProviderListener listener) { |
| // No state change will affect the rendering. |
| } |
| |
| @Override |
| public void removeListener(ILabelProviderListener listener) { |
| // No state change will affect the rendering. |
| } |
| |
| @Override |
| public void dispose() { |
| // nothing to dispose |
| } |
| } |