package org.eclipse.photran.internal.ui.properties;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PathEditor;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.dialogs.PropertyPage;

/**
 * Module Paths preference page
 * 
 * @author joverbey
 */
public class ModulePathsPropertyPage extends PropertyPage
{
    private static final String PROPERTY_NAME = "FortranModulePaths";
    
    private PathEditor pathEditor;

    protected String getProperty()
    {
        try
        {
            String result = ((IProject)getElement()).getPersistentProperty(new QualifiedName("", PROPERTY_NAME)); // Could cast to IResource instead
            if (result == null) result = ".";
            return result;
        }
        catch (CoreException e)
        {
            return null;
        }
    }

    protected void setProperty(String value)
    {
        try
        {
            ((IProject)getElement()).setPersistentProperty(new QualifiedName("", PROPERTY_NAME), value);
        }
        catch (CoreException e)
        {
            ;
        }
    }
    
    /**
     * @see PreferencePage#createContents(Composite)
     */
    protected Control createContents(Composite parent) {
        Composite composite = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        composite.setLayout(layout);
        GridData data = new GridData(GridData.FILL);
        data.grabExcessHorizontalSpace = true;
        composite.setLayoutData(data);

        pathEditor = new PathEditor(PROPERTY_NAME, "&Module Paths", "Select a directory to be searched for Fortran modules", composite);
        pathEditor.setPreferenceStore(new IPreferenceStore()
        {
            public void addPropertyChangeListener(IPropertyChangeListener listener) {;}
            public boolean contains(String name) {throw new Error();}
            public void firePropertyChangeEvent(String name, Object oldValue, Object newValue) {;}
            public boolean getBoolean(String name) {throw new Error();}
            public boolean getDefaultBoolean(String name) {throw new Error();}
            public double getDefaultDouble(String name) {throw new Error();}
            public float getDefaultFloat(String name) {throw new Error();}
            public int getDefaultInt(String name) {throw new Error();}
            public long getDefaultLong(String name) {throw new Error();}
            public String getDefaultString(String name) { return ""; } //////////////
            public double getDouble(String name) {throw new Error();}
            public float getFloat(String name) {throw new Error();}
            public int getInt(String name) {throw new Error();}
            public long getLong(String name) {throw new Error();}
            public String getString(String name) { return getProperty(); } ////////////
            public boolean isDefault(String name) { return getProperty()==null || getProperty().equals(""); } //////////
            public boolean needsSaving() {return false;}
            public void putValue(String name, String value) { setProperty(value); } //////
            public void removePropertyChangeListener(IPropertyChangeListener listener) {;}
            public void setDefault(String name, double value) {;}
            public void setDefault(String name, float value) {;}
            public void setDefault(String name, int value) {;}
            public void setDefault(String name, long value) {;}
            public void setDefault(String name, String defaultObject) {throw new Error();}
            public void setDefault(String name, boolean value) {;}
            public void setToDefault(String name) { setProperty(null); } ///////////
            public void setValue(String name, double value) {;}
            public void setValue(String name, float value) {;}
            public void setValue(String name, int value) {;}
            public void setValue(String name, long value) {;}
            public void setValue(String name, String value) { setProperty(value); } ///////
            public void setValue(String name, boolean value) {;}
        });
        pathEditor.load();
        
        return composite;
    }

    protected void performDefaults()
    {
        pathEditor.loadDefault();
    }
    
    public boolean performOk()
    {
        pathEditor.store();
        return true;
    }
}
