package net.sf.eclipsefp.haskell.ui.properties; import net.sf.eclipsefp.haskell.core.code.ModuleCreationInfo; import net.sf.eclipsefp.haskell.core.util.ResourceUtil; import net.sf.eclipsefp.haskell.ui.HaskellUIPlugin; import net.sf.eclipsefp.haskell.ui.internal.util.UITexts; import net.sf.eclipsefp.haskell.ui.wizards.ModuleCreationOperation; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.dialogs.PropertyPage; /** * <p>Property page for Haskell files: decide to include or expose the module</p> * * @author JP Moresmau */ public class ModuleInclusionPP extends PropertyPage { private ModuleInclusionComposite mic; private ModuleCreationInfo info; public ModuleInclusionPP() { // NOOP } protected IFile getFile(){ Object o=getElement(); if (o instanceof IFileEditorInput){ return ((IFileEditorInput)o).getFile(); } return (IFile)o; } @Override protected Control createContents( final Composite parent ) { mic=new ModuleInclusionComposite( parent, SWT.NONE ); IFile f=getFile(); IContainer src=ResourceUtil.getSourceContainer( f ); if (src!=null){ info=new ModuleCreationInfo(); info.setProject( f.getProject() ); info.setSourceContainer( src ); IPath p=ResourceUtil.getSourceRelativePath( src, f ); info.setFolders(p); info.setModuleName( f.getProjectRelativePath().removeFileExtension().lastSegment() ); mic.init(f, src, info.getQualifiedModuleName() ,false); } else { mic.initNoSourceFolder(); } Dialog.applyDialogFont( parent ); return mic; } @Override public boolean performOk() { if (info!=null){ mic.populateInfo( info ); ModuleCreationOperation mco=new ModuleCreationOperation( info ); mco.setGeneratedFile( getFile() ); try { mco.run( new NullProgressMonitor() ); return true; } catch( Exception ex ) { HaskellUIPlugin.log( UITexts.module_inclusion_error, ex ); return false; } } return true; } }