/** * Copyright (c) 2012 by JP Moresmau * 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.wizards; import java.util.Map; import net.sf.eclipsefp.haskell.core.HaskellCorePlugin; import net.sf.eclipsefp.haskell.core.cabalmodel.CabalSyntax; import net.sf.eclipsefp.haskell.core.cabalmodel.PackageDescription; import net.sf.eclipsefp.haskell.core.cabalmodel.PackageDescriptionStanza; import net.sf.eclipsefp.haskell.core.internal.project.ProjectModelFilesOp; import net.sf.eclipsefp.haskell.core.preferences.ICorePreferenceNames; import net.sf.eclipsefp.haskell.core.preferences.TemplateVariables; import net.sf.eclipsefp.haskell.ui.internal.util.UITexts; import net.sf.eclipsefp.haskell.ui.internal.wizards.NewProjectWizardPage; import org.eclipse.swt.widgets.Composite; /** * GTK project wizard: executable referencing gtk, Main.hs have default hello world * @author JP Moresmau * */ public class NewGtkProjectWizard extends NewHaskellProjectWizard { /** * */ public NewGtkProjectWizard() { super(); op=new GktProjectModelFilesOp(); getOperation().setExtraOperation( op ); } /* (non-Javadoc) * @see net.sf.eclipsefp.haskell.ui.internal.wizards.ProjectCreationWizard#addPages() */ @Override public void addPages() { page = new NewProjectWizardPage(){ /* (non-Javadoc) * @see net.sf.eclipsefp.haskell.ui.internal.wizards.NewProjectWizardPage#createControls(org.eclipse.swt.widgets.Composite) */ @Override protected void createControls( final Composite composite ) { createNameControl(composite); createLocationControl(composite); } }; page.setTitle( getPageTitle() ); page.setDescription( getPageDescription() ); addPage( page ); } @Override public boolean performFinish() { op.setExecutable( true); op.setLibrary( false ); return super.performFinish(); } @Override protected String getPageDescription() { return UITexts.newGtkProjectWizard_pageDesc; } @Override protected String getPageTitle() { return UITexts.newGtkProjectWizard_pageTitle; } @Override protected String getTheWindowTitle() { return UITexts.newGtkProjectWizard_windowTitle; } /** * override main.hs and cabal file with gtk specifics * @author JP Moresmau * */ private static class GktProjectModelFilesOp extends ProjectModelFilesOp{ /* (non-Javadoc) * @see net.sf.eclipsefp.haskell.core.internal.project.ProjectModelFilesOp#getCabalFile(java.lang.String) */ @Override protected PackageDescription getCabalFile( final Map<String,String> vars) { PackageDescription pd=super.getCabalFile( vars ); PackageDescriptionStanza pds=pd.getStanzas().get( 1 ); pds.addToPropertyList( CabalSyntax.FIELD_BUILD_DEPENDS, "gtk" ); //$NON-NLS-1$ return pd; } /* (non-Javadoc) * @see net.sf.eclipsefp.haskell.core.internal.project.ProjectModelFilesOp#getMainFileContent() */ @Override protected String getMainFileContent(final Map<String,String> vars) { /** get module header **/ vars.put( TemplateVariables.MODULE_NAME, "Main" );//$NON-NLS-1$ String mod=HaskellCorePlugin.populateTemplate( ICorePreferenceNames.TEMPLATE_MODULE, vars ); /** get content **/ vars.put( TemplateVariables.MODULE, mod ); return HaskellCorePlugin.populateTemplate( ICorePreferenceNames.TEMPLATE_GTK, vars ); // return "module Main where"+PlatformUtil.NL+PlatformUtil.NL+ // "import Graphics.UI.Gtk"+PlatformUtil.NL+PlatformUtil.NL+ // "main :: IO ()"+PlatformUtil.NL+ // "main = do"+PlatformUtil.NL+ // " initGUI"+PlatformUtil.NL+ // " window <- windowNew"+PlatformUtil.NL+ // " button <- buttonNew"+PlatformUtil.NL+ // " set window [ containerBorderWidth := 10,"+PlatformUtil.NL+ // " containerChild := button ]"+PlatformUtil.NL+ // " set button [ buttonLabel := \"Hello World\" ]"+PlatformUtil.NL+ // " onClicked button (putStrLn \"Hello World\")"+PlatformUtil.NL+ // " onDestroy window mainQuit"+PlatformUtil.NL+ // " widgetShowAll window"+PlatformUtil.NL+ // " mainGUI"+PlatformUtil.NL; } } }