Package org.erlide.ui.properties

Source Code of org.erlide.ui.properties.ErlangProjectPropertyPage

/*******************************************************************************
* Copyright (c) 2004 Vlad Dumitrescu and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Vlad Dumitrescu
*******************************************************************************/
package org.erlide.ui.properties;

import java.util.Arrays;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.Path;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.PropertyPage;
import org.eclipse.xtext.xbase.lib.Functions;
import org.eclipse.xtext.xbase.lib.ListExtensions;
import org.erlide.engine.ErlangEngine;
import org.erlide.engine.model.root.ErlangProjectProperties;
import org.erlide.engine.model.root.IErlProject;
import org.erlide.engine.model.root.PathSerializer;
import org.erlide.engine.model.root.ProjectConfigType;
import org.erlide.engine.model.root.ProjectPreferencesConstants;
import org.erlide.runtime.runtimeinfo.RuntimeVersion;
import org.erlide.util.SystemConfiguration;

public class ErlangProjectPropertyPage extends PropertyPage {

    private Text outputText;
    private Text sourcesText;
    private Text includesText;
    private Text testsText;
    private Combo runtimeCombo;
    private Text extModsText;
    private Text extIncsText;

    private IErlProject erlProject;

    private ErlangProjectProperties model;

    public ErlangProjectPropertyPage() {
        super();
        // noDefaultAndApplyButton();
        model = new ErlangProjectProperties();
    }

    @Override
    public boolean performOk() {
        if (!isValid()) {
            return false;
        }
        erlProject.clearCaches();
        erlProject.setProperties(model);
        return super.performOk();
    }

    @Override
    protected void performDefaults() {
        model = erlProject.getProperties();
        super.performDefaults();
    }

    @Override
    public boolean isValid() {
        boolean ok = true;
        ok &= !outputText.getText().isEmpty();
        ok &= !sourcesText.getText().isEmpty();
        return (erlProject.getConfigType() != ProjectConfigType.INTERNAL || ok)
                && super.isValid();
    }

    @Override
    protected Control createContents(final Composite parent) {
        final IProject project = (IProject) getElement().getAdapter(IProject.class);
        erlProject = ErlangEngine.getInstance().getModel().getErlangProject(project);
        model = erlProject.getProperties();

        final Composite composite = new Composite(parent, SWT.NONE);

        boolean globalEnable = true;
        final ProjectConfigType configType = erlProject.getConfigType();
        if (configType != ProjectConfigType.INTERNAL) {
            globalEnable = false;
            setMessage("Please edit " + configType.getConfigName()
                    + " to change settings for this project");
        }

        composite.setLayout(new GridLayout(2, false));
        {
            final Label lblRequiredErlangVersion = new Label(composite, SWT.NONE);
            lblRequiredErlangVersion.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER,
                    false, false, 1, 1));
            lblRequiredErlangVersion.setText("Required Erlang version");
        }
        {
            runtimeCombo = new Combo(composite, SWT.NONE);
            final GridData gd_combo = new GridData(SWT.LEFT, SWT.CENTER, true, false, 1,
                    1);
            gd_combo.widthHint = 83;
            runtimeCombo.setLayoutData(gd_combo);
            runtimeCombo.setEnabled(globalEnable);
            final RuntimeVersion[] runtimeVersions = ProjectPreferencesConstants.SUPPORTED_VERSIONS;
            runtimeCombo.setItems(ListExtensions.map(Arrays.asList(runtimeVersions),
                    new Functions.Function1<RuntimeVersion, String>() {
                        @Override
                        public String apply(final RuntimeVersion p) {
                            return p.toString();
                        }
                    }).toArray(new String[] {}));
            runtimeCombo.setText(model.getRequiredRuntimeVersion().asMajor().toString());
            runtimeCombo.addSelectionListener(new SelectionListener() {

                @Override
                public void widgetSelected(final SelectionEvent e) {
                    model.setRequiredRuntimeVersion(RuntimeVersion.Serializer
                            .parse(runtimeCombo.getText()));
                }

                @Override
                public void widgetDefaultSelected(final SelectionEvent e) {
                }
            });
        }
        new Label(composite, SWT.NONE);
        new Label(composite, SWT.NONE);
        {
            final Label lblNewLabel = new Label(composite, SWT.NONE);
            lblNewLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false,
                    1, 1));
            lblNewLabel.setText("Output directory");
        }
        {
            outputText = new Text(composite, SWT.BORDER);
            outputText
                    .setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
            outputText.setEnabled(globalEnable);
            outputText.setText(model.getOutputDir().toPortableString());
            outputText.addModifyListener(new ModifyListener() {

                @Override
                public void modifyText(final ModifyEvent e) {
                    model.setOutputDir(new Path(outputText.getText()));
                }
            });
        }
        {
            final Label lblNewLabel = new Label(composite, SWT.NONE);
            lblNewLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false,
                    1, 1));
            lblNewLabel.setText("Source directories");
        }
        {
            sourcesText = new Text(composite, SWT.BORDER);
            sourcesText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1,
                    1));
            sourcesText.setEnabled(globalEnable);
            sourcesText.setText(PathSerializer.packList(model.getSourceDirs()));
            sourcesText.addModifyListener(new ModifyListener() {

                @Override
                public void modifyText(final ModifyEvent e) {
                    model.setSourceDirs(PathSerializer.unpackList(sourcesText.getText()));
                }
            });
        }
        {
            final Label lblNewLabel = new Label(composite, SWT.NONE);
            lblNewLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false,
                    1, 1));
            lblNewLabel.setText("Include directories");
        }
        {
            includesText = new Text(composite, SWT.BORDER);
            includesText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1,
                    1));
            includesText.setEnabled(globalEnable);
            includesText.setText(PathSerializer.packList(model.getIncludeDirs()));
            includesText.addModifyListener(new ModifyListener() {

                @Override
                public void modifyText(final ModifyEvent e) {
                    model.setIncludeDirs(PathSerializer.unpackList(includesText.getText()));
                }
            });
        }
        {
            final Label lblNewLabel = new Label(composite, SWT.NONE);
            lblNewLabel.setEnabled(false);
            lblNewLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false,
                    1, 1));
            lblNewLabel.setText("Test directories");
        }
        {
            testsText = new Text(composite, SWT.BORDER);
            testsText.setEnabled(globalEnable && false);
            testsText
                    .setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
            testsText.setText(PathSerializer.packList(model.getTestDirs()));
            testsText.addModifyListener(new ModifyListener() {

                @Override
                public void modifyText(final ModifyEvent e) {
                    model.setTestDirs(PathSerializer.unpackList(testsText.getText()));
                }
            });
        }
        new Label(composite, SWT.NONE);
        new Label(composite, SWT.NONE);
        {
            final Label lblExternalModules = new Label(composite, SWT.NONE);
            lblExternalModules.setVisible(true);
            lblExternalModules.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false,
                    false, 1, 1));
            lblExternalModules.setText("External modules");
        }
        {
            extModsText = new Text(composite, SWT.BORDER);
            extModsText.setEditable(false);
            extModsText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1,
                    1));
            extModsText.setEnabled(globalEnable
                    && SystemConfiguration.getInstance().isDeveloper());
            extModsText.setText(model.getExternalModulesFile());
        }
        {
            final Label lblExternalIncludes = new Label(composite, SWT.NONE);
            lblExternalIncludes.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false,
                    false, 1, 1));
            lblExternalIncludes.setText("External includes");
        }
        {
            extIncsText = new Text(composite, SWT.BORDER);
            extIncsText.setEditable(false);
            extIncsText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1,
                    1));
            extIncsText.setEnabled(globalEnable
                    && SystemConfiguration.getInstance().isDeveloper());
            extIncsText.setText(model.getExternalIncludesFile());
        }
        return composite;
    }

}
TOP

Related Classes of org.erlide.ui.properties.ErlangProjectPropertyPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.