// Copyright (c) 2007-2008 by Leif Frenzel - see http://leiffrenzel.de
// This code is made available under the terms of the Eclipse Public License,
// version 1.0 (EPL). See http://www.eclipse.org/legal/epl-v10.html
package net.sf.eclipsefp.haskell.ui.internal.views.projectexplorer;
import net.sf.eclipsefp.haskell.buildwrapper.types.Location;
import net.sf.eclipsefp.haskell.core.cabalmodel.PackageDescriptionStanza;
import net.sf.eclipsefp.haskell.core.project.IImportLibrary;
import net.sf.eclipsefp.haskell.core.util.ResourceUtil;
import net.sf.eclipsefp.haskell.ui.internal.editors.cabal.outline.CabalOutlineLP;
import net.sf.eclipsefp.haskell.ui.internal.search.SectionSearchResult;
import net.sf.eclipsefp.haskell.ui.internal.util.UITexts;
import net.sf.eclipsefp.haskell.ui.internal.views.common.ITreeElement;
import net.sf.eclipsefp.haskell.ui.internal.views.outline.OutlineLabelProvider;
import net.sf.eclipsefp.haskell.ui.util.HaskellUIImages;
import net.sf.eclipsefp.haskell.ui.util.IImageNames;
import net.sf.eclipsefp.haskell.util.FileUtil;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.swt.graphics.Image;
/** <p>the label provider for elements in a Haskell project. Functionality
* for language elements is inherited.</p>
*
* @author Leif Frenzel
*/
public class HaskellResourceExtensionLP extends OutlineLabelProvider {
CabalOutlineLP lp = new CabalOutlineLP();
// interface methods
////////////////////
@Override
public String getText( final Object element ) {
String result;
if( element instanceof IProject && ResourceUtil.hasHaskellNature( (IProject )element )) {
result = ( (IProject )element ).getName();
} else if( element instanceof ITreeElement ) {
result = ( ( ITreeElement )element ).getText();
} else if( element instanceof IFolder ) {
result = ( ( IFolder )element ).getName();
} else if( element instanceof IFile ) {
result = ( ( IResource )element ).getName();
} else if( element instanceof ProjectExplorerOutlineDef ) {
result = super.getText(( ( ProjectExplorerOutlineDef )element ).getOutlineDef());
} else if (element instanceof CabalFolder) {
CabalFolder folder = (CabalFolder)element;
switch(folder.getType()) {
case EXECUTABLE:
result = UITexts.cabalEditor_executables;
break;
case TEST_SUITE:
result = UITexts.cabalEditor_testSuites;
break;
case BENCHMARK:
result = UITexts.cabalEditor_benchmarks;
break;
default:
result = "";
}
} else if (element instanceof ProjectExplorerStanza) {
PackageDescriptionStanza stanza = ((ProjectExplorerStanza)element).getStanza();
result = stanza.getName() != null ? stanza.getName() : String.valueOf( stanza.getType() );
} else if (element instanceof Location){
Location loc=(Location)element;
result=loc.toString();//NLS.bind( UITexts.References_result_location, loc.getStartLine() );
// } else if (element instanceof MatchInfo){
// MatchInfo loc=(MatchInfo)element;
// result=NLS.bind( UITexts.References_result_location, loc.getLocation().getStartLine() );
} else {
result = super.getText( element );
}
return result;
}
@Override
public Image getImage( final Object element ) {
Image result = null;
if( element instanceof ITreeElement ) {
String key = ( ( ITreeElement )element ).getImageKey();
result = HaskellUIImages.getImage( key );
} else if( element instanceof IProject && ResourceUtil.hasHaskellNature( (IProject )element )) {
result = HaskellUIImages.getImage( IImageNames.HASKELL_PROJECT );
} else if( element instanceof IImportLibrary ) {
result = HaskellUIImages.getImage( IImageNames.IMPORT_LIBRARY );
} else if( element instanceof IFolder ) {
result = getFolderImage( ( IFolder )element );
} else if( element instanceof IFile ) {
result = getFileImage( ( IFile )element );
} else if( element instanceof ProjectExplorerOutlineDef ) {
result =super.getImage(( ( ProjectExplorerOutlineDef )element ).getOutlineDef());
} else if (element instanceof CabalFolder) {
result = HaskellUIImages.getImage( IImageNames.SOURCE_FOLDER );
}else if (element instanceof ProjectExplorerStanza) {
result = lp.getImage( ((ProjectExplorerStanza)element).getStanza() );
} else if (element instanceof Location){
result = HaskellUIImages.getImage( IImageNames.SEARCH_LINE );
// } else if (element instanceof MatchInfo){
// result = HaskellUIImages.getImage( IImageNames.SEARCH_LINE );
} else if (element instanceof SectionSearchResult){
result = HaskellUIImages.getImage( IImageNames.SEARCH_LINE );
} else {
result=super.getImage( element );
}
return result;
}
// helping methods
//////////////////
private Image getFileImage( final IFile file ) {
Image result = null;
if(ResourceUtil.hasHaskellNature( file.getProject()) ) {
//if( ResourceUtil.isProjectExecutable( file ) ) {
// result = HaskellUIImages.getImage( IImageNames.PROJECT_EXECUTABLE );
//} else {
String ext = file.getFileExtension();
if( FileUtil.EXTENSION_HS.equals( ext ) ) {
result = HaskellUIImages.getImage( IImageNames.SOURCE_FILE );
} else if( FileUtil.EXTENSION_LHS.equals( ext ) ) {
result = HaskellUIImages.getImage( IImageNames.LITERATE_SOURCE_FILE );
}
//}
}
return result;
}
private Image getFolderImage( final IFolder folder ) {
Image result = null;
if(ResourceUtil.hasHaskellNature( folder.getProject())
&& ResourceUtil.isSourceFolder( folder ) ) {
String id = IImageNames.SOURCE_FOLDER;
result = HaskellUIImages.getImage( id );
} else {
result=super.getImage( folder );
if (result==null){
return HaskellUIImages.getImage( IImageNames.FOLDER);
}
}
return result;
}
}