/** * 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.cabal; import java.util.Collection; import net.sf.eclipsefp.haskell.ui.internal.util.UITexts; import org.eclipse.core.resources.IProject; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Text; /** * Options for cabal haddock export wizard * @author JP Moresmau * */ public class CabalHaddockOptionsPage extends WizardPage { private static boolean doHoogle=true; // since we can use Hoogle data from our own projects, default to true private static boolean doExecutables=false; private static boolean doInternal=false; private static boolean doColourSrc=false; private static boolean doCss=false; private static String css=""; private static boolean doColourSrcCss=false; private static String colourSrcCss=""; private static boolean doHtml=false; private static String html="https://hackage.haskell.org/packages/archive/$pkg/latest/doc/html"; private DistFolder dFolder; private final Collection<IProject> projects; public CabalHaddockOptionsPage(final Collection<IProject> projects) { super( "HaddockOptions", UITexts.exportDoc_options, null ); this.projects=projects; } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) */ @Override public void createControl( final Composite parent ) { initializeDialogUnits( parent ); Composite composite = new Composite( parent, SWT.NONE ); GridData gd=new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL); composite.setLayoutData( gd ); GridLayout layout=new GridLayout( 3, false ); composite.setLayout( layout ); dFolder=new DistFolder(projects,composite, UITexts.exportSource_options_folder,UITexts.exportSource_options_folder_choose,UITexts.exportSource_options_folder_choose ); Composite optionsComposite=new Composite(composite, SWT.NONE); GridData gdOptions=new GridData(GridData.HORIZONTAL_ALIGN_FILL); gdOptions.horizontalSpan=3; optionsComposite.setLayoutData( gdOptions ); optionsComposite.setLayout(new GridLayout( 1, false )); final Button bHoogle=new Button(optionsComposite, SWT.CHECK); bHoogle.setLayoutData( new GridData(GridData.HORIZONTAL_ALIGN_FILL) ); bHoogle.setText( UITexts.exportDoc_options_hoogle ); bHoogle.setSelection( doHoogle ); bHoogle.addSelectionListener( new SelectionAdapter() { /* (non-Javadoc) * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ @Override public void widgetSelected( final SelectionEvent e ) { doHoogle=bHoogle.getSelection(); } } ); final Button bExecutables=new Button(optionsComposite, SWT.CHECK); bExecutables.setLayoutData( new GridData(GridData.HORIZONTAL_ALIGN_FILL) ); bExecutables.setText( UITexts.exportDoc_options_executables ); bExecutables.setSelection( doExecutables ); bExecutables.addSelectionListener( new SelectionAdapter() { /* (non-Javadoc) * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ @Override public void widgetSelected( final SelectionEvent e ) { doExecutables=bExecutables.getSelection(); } } ); final Button bInternal=new Button(optionsComposite, SWT.CHECK); bInternal.setLayoutData( new GridData(GridData.HORIZONTAL_ALIGN_FILL) ); bInternal.setText( UITexts.exportDoc_options_internal ); bInternal.setSelection( doInternal ); bInternal.addSelectionListener( new SelectionAdapter() { /* (non-Javadoc) * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ @Override public void widgetSelected( final SelectionEvent e ) { doInternal=bInternal.getSelection(); } } ); final Button bHTML=new Button(optionsComposite, SWT.CHECK); bHTML.setLayoutData( new GridData(GridData.HORIZONTAL_ALIGN_FILL) ); bHTML.setText( UITexts.exportDoc_options_html ); bHTML.setSelection( doHtml ); final Text tHTML=new Text(optionsComposite,SWT.BORDER); GridData gdHTML=new GridData(GridData.HORIZONTAL_ALIGN_FILL); gdHTML.horizontalIndent=20; tHTML.setLayoutData( gdHTML ); tHTML.setText( html ); tHTML.setEnabled( doHtml ); bHTML.addSelectionListener( new SelectionAdapter() { /* (non-Javadoc) * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ @Override public void widgetSelected( final SelectionEvent e ) { doHtml=bHTML.getSelection(); tHTML.setEnabled( doHtml ); } } ); final Button bCSS=new Button(optionsComposite, SWT.CHECK); bCSS.setLayoutData( new GridData(GridData.HORIZONTAL_ALIGN_FILL) ); bCSS.setText( UITexts.exportDoc_options_css ); bCSS.setSelection( doCss ); final Composite cCSS=new Composite(optionsComposite,SWT.NONE); GridData gdCSS=new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); gdCSS.horizontalIndent=20; cCSS.setLayoutData( gdCSS ); cCSS.setLayout( new GridLayout(2,false) ); final Text tCSS=new Text(cCSS,SWT.BORDER); tCSS.setText( css ); tCSS.setLayoutData( new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL) ); tCSS.setEnabled( doCss ); final Button bfCSS=new Button(cCSS,SWT.PUSH); bfCSS.setText( "..." ); bfCSS.setEnabled( doCss ); bCSS.addSelectionListener( new SelectionAdapter() { /* (non-Javadoc) * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ @Override public void widgetSelected( final SelectionEvent e ) { doCss=bCSS.getSelection(); tCSS.setEnabled( doCss ); bfCSS.setEnabled( doCss ); } } ); bfCSS.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { FileDialog fd=new FileDialog( getShell() ,SWT.OPEN); fd.setFilterExtensions( new String[]{"*.css","*.*"} ); fd.setFilterNames(new String[]{UITexts.exportDoc_options_filter_css,UITexts.exportDoc_options_filter_all} ); if (css.length()>0){ fd.setFileName( css ); } String f=fd.open(); if (f!=null){ css=f; tCSS.setText( css ); } } } ); final Button bColour=new Button(optionsComposite, SWT.CHECK); bColour.setLayoutData( new GridData(GridData.HORIZONTAL_ALIGN_FILL) ); bColour.setText( UITexts.exportDoc_options_hscolour ); bColour.setSelection( doColourSrc ); final Button bColourCSS=new Button(optionsComposite, SWT.CHECK); bColourCSS.setLayoutData( new GridData(GridData.HORIZONTAL_ALIGN_FILL) ); bColourCSS.setText( UITexts.exportDoc_options_hscolour_css ); bColourCSS.setEnabled( doColourSrc ); bColourCSS.setSelection( doColourSrcCss ); final Composite cColourCSS=new Composite(optionsComposite,SWT.NONE); GridData gdColourCSS=new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); gdColourCSS.horizontalIndent=20; cColourCSS.setLayoutData( gdColourCSS ); cColourCSS.setLayout( new GridLayout(2,false) ); final Text tColourCSS=new Text(cColourCSS,SWT.BORDER); tColourCSS.setText( colourSrcCss ); tColourCSS.setEnabled( doColourSrc && doColourSrcCss ); tColourCSS.setLayoutData( new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL) ); final Button bfColourCSS=new Button(cColourCSS,SWT.PUSH); bfColourCSS.setText( "..." ); bfColourCSS.setEnabled( doColourSrc && doColourSrcCss ); bColourCSS.addSelectionListener( new SelectionAdapter() { /* (non-Javadoc) * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ @Override public void widgetSelected( final SelectionEvent e ) { doColourSrcCss=bColourCSS.getSelection(); tColourCSS.setEnabled( doColourSrcCss ); bfColourCSS.setEnabled( doColourSrcCss ); } } ); bfColourCSS.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { FileDialog fd=new FileDialog( getShell() ,SWT.OPEN); fd.setFilterExtensions( new String[]{"*.css","*.*"} ); fd.setFilterNames(new String[]{UITexts.exportDoc_options_filter_css,UITexts.exportDoc_options_filter_all} ); if (colourSrcCss.length()>0){ fd.setFileName( colourSrcCss ); } String f=fd.open(); if (f!=null){ colourSrcCss=f; tColourCSS.setText( colourSrcCss ); } } } ); bColour.addSelectionListener( new SelectionAdapter() { /* (non-Javadoc) * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ @Override public void widgetSelected( final SelectionEvent e ) { doColourSrc=bColour.getSelection(); if (!doColourSrc){ bColourCSS.setSelection( false ); } bColourCSS.setEnabled( doColourSrc ); tColourCSS.setEnabled( doColourSrc && doColourSrcCss ); bfColourCSS.setEnabled( doColourSrc && doColourSrcCss ); } } ); setControl( composite ); Dialog.applyDialogFont( composite ); } public String getFolder(){ return dFolder.getFolder(); } /** * @return the doHoogle */ public static boolean isDoHoogle() { return doHoogle; } public static boolean isDoExecutables() { return doExecutables; } public static boolean isDoInternal() { return doInternal; } public static boolean isDoColourSrc() { return doColourSrc; } public static String getCss() { return css; } public static String getColourSrcCss() { return colourSrcCss; } public static String getHtml() { return html; } public static boolean isDoCss() { return doCss; } public static boolean isDoColourSrcCss() { return doColourSrcCss; } public static boolean isDoHtml() { return doHtml; } }