Package org.pdtextensions.semanticanalysis.ui.preferences.validation

Source Code of org.pdtextensions.semanticanalysis.ui.preferences.validation.SemanticAnalysisConfigurationBlock

/*******************************************************************************
* Copyright (c) 2013 The PDT Extension Group (https://github.com/pdt-eg)
* 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
******************************************************************************/
package org.pdtextensions.semanticanalysis.ui.preferences.validation;

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import org.eclipse.core.resources.IProject;
import org.eclipse.dltk.compiler.problem.ProblemSeverity;
import org.eclipse.e4.core.contexts.ContextInjectionFactory;
import org.eclipse.jface.layout.PixelConverter;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.php.internal.ui.preferences.IStatusChangeListener;
import org.eclipse.php.internal.ui.preferences.util.Key;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
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.ui.forms.events.ExpansionAdapter;
import org.eclipse.ui.forms.events.ExpansionEvent;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
import org.pdtextensions.core.ui.preferences.AbstractOptionsConfigurationBlock;
import org.pdtextensions.semanticanalysis.PEXAnalysisPlugin;
import org.pdtextensions.semanticanalysis.PreferenceConstants;
import org.pdtextensions.semanticanalysis.model.validators.Category;
import org.pdtextensions.semanticanalysis.model.validators.Type;
import org.pdtextensions.semanticanalysis.model.validators.Validator;
import org.pdtextensions.semanticanalysis.validation.IValidatorManager;

@SuppressWarnings("restriction")
public class SemanticAnalysisConfigurationBlock extends AbstractOptionsConfigurationBlock {

  @Inject
  private IValidatorManager manager;

  private Composite fieldEditorParent;
  private Combo[] fields;
  private Button analysisEnabled;
  private PixelConverter pixelConverter;

  public SemanticAnalysisConfigurationBlock(IStatusChangeListener context,
      IProject project, IWorkbenchPreferenceContainer container) {
    super(context, project, getKeys(), container);
  }

  private static Key[] getKeys() {
    Validator[] validators = PEXAnalysisPlugin.getDefault().getValidatorManager().getValidators();
    List<Key >res = new ArrayList<Key>();
    res.add(getKey(PEXAnalysisPlugin.VALIDATORS_PREFERENCES_NODE_ID, PreferenceConstants.ENABLED));
    for (Validator v : validators) {
      for (Type t : v.getTypes()) {
       
        res.add(getKey(PEXAnalysisPlugin.VALIDATORS_PREFERENCES_NODE_ID + "/" + v.getId(), t.getId()));
      }
    }
    return res.toArray(new Key[res.size()]);
  }

  @Override
  public Control createBlockContents(Composite parent) {
    if (pixelConverter == null) {
      pixelConverter = new PixelConverter(parent);
      ContextInjectionFactory.inject(this, PEXAnalysisPlugin.getEclipseContext());
    }

    Composite content = new Composite(parent, SWT.NONE);
    content.setLayout(new FillLayout(SWT.VERTICAL));

    createFields(content);
    updateFieldVisibility();

    return content;
  }
 
  protected String[] getSeverityLabels() {
    return new String[] {
        "Error", "Warning", "Info", "Ignore"
    };
  }
 
  protected String[] getSeverityValues() {
    return new String[] {
        ProblemSeverity.ERROR.toString(),
        ProblemSeverity.WARNING.toString(),
        ProblemSeverity.INFO.toString(),
        ProblemSeverity.IGNORE.toString()
    };
  }

  private Composite createFields(Composite parent) {

    Composite fieldEditorParentWrap = new Composite(parent, SWT.NULL);
    GridLayout wrapLayout = new GridLayout();
    wrapLayout.marginHeight = 0;
    wrapLayout.marginWidth = 0;
    fieldEditorParentWrap.setLayout(wrapLayout);
    fieldEditorParentWrap.setFont(parent.getFont());
   
    fieldEditorParent = new Composite(fieldEditorParentWrap, SWT.NULL);
    fieldEditorParent.setLayout(new GridLayout());
    fieldEditorParent.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    fieldEditorParent.setFont(parent.getFont());
   
   
   
    analysisEnabled = addCheckBox(fieldEditorParent, "Enable semantic analysis", fAllKeys[0], new String[] {"true", "false"}, 0); //$NON-NLS-2$ $NON-NLS-3$
    analysisEnabled.addSelectionListener(new SelectionListener() {
     
      @Override
      public void widgetSelected(SelectionEvent e) {
        updateFieldVisibility();
       
      }
     
      @Override
      public void widgetDefaultSelected(SelectionEvent e) {
        updateFieldVisibility();
      }
    });
   
    final Label horizontalLine = new Label(fieldEditorParent, SWT.SEPARATOR | SWT.HORIZONTAL);
    horizontalLine.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    horizontalLine.setFont(fieldEditorParent.getFont());

    fields = new Combo[fAllKeys.length -1];
    int i = 0;
    for (Category category : manager.getCategories()) {
      ExpandableComposite group = createGroup(1, fieldEditorParent, category.getLabel());
      Composite inner = new Composite(group, SWT.NONE);
      inner.setFont(parent.getFont());
      inner.setLayout( new GridLayout(3, false));
      inner.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
      group.setClient(inner);

      for (Validator v : category.getValidators()) {
        for (Type t : v.getTypes()) {
          Combo combo = fields[i] = addComboBox(inner, t.getLabel(), new Key(PEXAnalysisPlugin.VALIDATORS_PREFERENCES_NODE_ID + "/" + v.getId(), t.getId()), getSeverityValues(), getSeverityLabels());
          Label object = (Label)fLabels.get(combo);
          object.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1));
          i++;
        }
      }
    }

    return fieldEditorParentWrap;
  }

  protected ExpandableComposite createGroup(int numColumns, Composite parent, String label) {
    ExpandableComposite excomposite= new ExpandableComposite(parent, SWT.NONE, ExpandableComposite.TWISTIE | ExpandableComposite.CLIENT_INDENT);
    excomposite.setText(label);
    excomposite.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT));
    excomposite.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false, 3, 1));
    excomposite.setExpanded(true);
    excomposite.addExpansionListener(new ExpansionAdapter() {
      public void expansionStateChanged(ExpansionEvent e) {
        expandedStateChanged((ExpandableComposite) e.getSource());
      }
    });

    return excomposite;
  }

  protected void updateFieldVisibility() {
    for (int i = 0; i < fields.length; i++) {
      if (fields[i] != null) {
        fields[i].setEnabled(analysisEnabled.getSelection());
      }
    }
  }
}
TOP

Related Classes of org.pdtextensions.semanticanalysis.ui.preferences.validation.SemanticAnalysisConfigurationBlock

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.