/**
* (c) 2011, Alejandro Serrano
* Released under the terms of the EPL.
*/
package net.sf.eclipsefp.haskell.ui.internal.editors.uuagcOptions;
import net.sf.eclipsefp.haskell.core.uuagc.UuagcFile;
import net.sf.eclipsefp.haskell.core.uuagc.UuagcProjectManager;
import net.sf.eclipsefp.haskell.ui.internal.util.UITexts;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.text.DocumentEvent;
import org.eclipse.jface.text.IDocumentListener;
import org.eclipse.ui.forms.IFormPart;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.FormPage;
import org.eclipse.ui.forms.widgets.ColumnLayout;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
/**
* Visual editor for uuagc_options page.
* @author Alejandro Serrano
*
*/
public class UuagcOptionsPage extends FormPage {
protected IProject project;
private final UuagcProjectManager manager;
private final UuagcOptionsFormEditor theEditor;
// private IManagedForm theManagedForm;
public UuagcOptionsPage( final UuagcOptionsFormEditor editor,
final IProject project ) {
super( editor, UuagcOptionsPage.class.getName(),
UITexts.uuagcEditor_uuagcOptions );
this.theEditor = editor;
this.project = project;
this.manager = new UuagcProjectManager( project );
}
@Override
protected void createFormContent( final IManagedForm managedForm ) {
ScrolledForm form = managedForm.getForm();
FormToolkit toolkit = managedForm.getToolkit();
toolkit.decorateFormHeading( form.getForm() );
form.updateToolBar();
form.setText( UITexts.uuagcEditor_uuagcOptions );
form.getBody().setLayout( new ColumnLayout() );
createContentsFromManager();
theEditor.getModel().addDocumentListener( new IDocumentListener() {
@Override
public void documentAboutToBeChanged( final DocumentEvent event ) {
// Nothing
}
@Override
public void documentChanged( final DocumentEvent event ) {
// Nothing
String pastContents = manager.toUuagcString();
String docContents = theEditor.getModel().get();
if (!docContents.equals( pastContents )) {
createContentsFromManager();
}
}
} );
}
private void createContentsFromManager() {
IManagedForm mForm = getManagedForm();
ScrolledForm form = mForm.getForm();
for (IFormPart part : mForm.getParts()) {
UuagcFileSection sPart = (UuagcFileSection)part;
sPart.getSection().dispose();
sPart.getInnerComposite().dispose();
mForm.removePart( part );
}
this.manager.initFromContents( theEditor.getModel().get() );
for( UuagcFile file: manager.getElements() ) {
UuagcFileSection section = new UuagcFileSection( this, form.getBody(),
file );
mForm.addPart( section );
}
}
void makeChanges() {
String newContents = manager.toUuagcString();
String docContents = theEditor.getModel().get();
if (!newContents.equals( docContents )) {
theEditor.getModel().set( newContents );
}
}
}