/** * 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.style.stylishhaskell.ui; import net.sf.eclipsefp.haskell.style.stylishhaskell.StylishHaskell; import net.sf.eclipsefp.haskell.style.util.StyleText; import org.eclipse.core.resources.IProject; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; 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.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.dialogs.PropertyPage; /** * Property page to assign a stylish haskell configuration to a project * @author JP Moresmau * */ public class SHConfigurationPP extends PropertyPage implements IWorkbenchPreferencePage { private Button bProject; private SHConfigurationComposite confComp; /** * */ public SHConfigurationPP() { setDescription(StyleText.sh_title); } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) */ @Override public void init(IWorkbench arg0) { // NOOP } /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite) */ @Override protected Control createContents(Composite parent) { Composite container = new Composite( parent, SWT.NULL ); GridLayout layout = new GridLayout(); layout.numColumns = 1; container.setLayout( layout ); bProject=new Button(container, SWT.CHECK); bProject.setText(StyleText.sh_project); final Group g=new Group(parent,SWT.NONE); //g.setText(StyleText.sh_title); g.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.GRAB_VERTICAL)); g.setLayout(new GridLayout(1,true)); IProject project=( IProject )getElement(); confComp=new SHConfigurationComposite(g, SWT.NONE); confComp.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.GRAB_VERTICAL)); confComp.setConfiguration(StylishHaskell.getProjectConfiguration(project)); bProject.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { confComp.setEnabled(bProject.getSelection()); g.setEnabled(bProject.getSelection()); } }); boolean hasConfig=StylishHaskell.hasProjectConfiguration(project); bProject.setSelection(hasConfig); confComp.setEnabled(hasConfig); g.setEnabled(bProject.getSelection()); Label space=new Label(parent,SWT.NONE); space.setLayoutData(new GridData(GridData.FILL_VERTICAL)); Dialog.applyDialogFont( parent ); return container; } /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#performOk() */ @Override public boolean performOk() { IProject project=( IProject )getElement(); try { if (bProject.getSelection()){ StylishHaskell.setProjectConfiguration(confComp.getConfiguration(), project); } else { StylishHaskell.setProjectConfiguration(null, project); } } catch (Exception ioe){ MessageDialog.openError( getShell(), StyleText.sh_save_error, ioe.getLocalizedMessage() ); return false; } return super.performOk(); } /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#performDefaults() */ @Override protected void performDefaults() { bProject.setSelection(false); confComp.setConfiguration(StylishHaskell.getWorkspaceConfiguration()); bProject.notifyListeners(SWT.Selection, new Event()); super.performDefaults(); } }