Package com.subgraph.vega.ui.util.preferences

Source Code of com.subgraph.vega.ui.util.preferences.VegaPreferencePage

/*******************************************************************************
* Copyright (c) 2011 Subgraph.
* 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:
*     Subgraph - initial API and implementation
******************************************************************************/
package com.subgraph.vega.ui.util.preferences;

import java.util.ArrayList;
import java.util.Iterator;

import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IWorkbenchPreferencePage;

/**
* A flexible replacement for FieldEditorPreferencePage. Requires the inheriting class to set up fields within
* createContents(Composite).
*/
public abstract class VegaPreferencePage extends PreferencePage implements IWorkbenchPreferencePage, IPropertyChangeListener {
  private ArrayList<FieldEditor> fieldList = new ArrayList<FieldEditor>();

    protected VegaPreferencePage() {
        this("");
    }

    protected VegaPreferencePage(String title) {
        super(title);
    }

    protected VegaPreferencePage(String title, ImageDescriptor image) {
        super(title, image);
    }

  @Override
  protected Control createContents(Composite parent) {
    Control control = createPage(parent);
      for (Iterator<FieldEditor> iter = fieldList.iterator(); iter.hasNext();) {
        FieldEditor editor = iter.next();
      editor.setPage(this);
      editor.setPropertyChangeListener(this);
      editor.setPreferenceStore(getPreferenceStore());
        editor.load();
      }
    checkState();
    return control;
  }

  /**
   * Create a SWT control containing page contents for the preferences page.
   * @param parent Parent control.
   * @return Created control.
   */
  abstract protected Control createPage(Composite parent);
 
  @Override
  protected void performDefaults() {
      super.performDefaults();
      for (Iterator<FieldEditor> iter = fieldList.iterator(); iter.hasNext();) {
        ((FieldEditor) iter.next()).loadDefault();
      }
    checkState();
  }

  @Override
  public boolean performOk() {
      boolean rv = super.performOk();
      if (rv) {
        for (Iterator<FieldEditor> iter = fieldList.iterator(); iter.hasNext();) {
          ((FieldEditor) iter.next()).store();
        }
      }
      return rv;
  }

  @Override
  public void propertyChange(PropertyChangeEvent event) {
    if (event.getProperty().equals(FieldEditor.IS_VALID)) {
            boolean value = ((Boolean) event.getNewValue()).booleanValue();
            if (value) {
                checkState();
            } else {
                setValid(false);
            }
        }
  }

    /**
     * Add a field editor to the list of field editors managed on the page.
     * @param editor FieldEditor.
     */
  protected void addField(FieldEditor editor) {
    fieldList.add(editor);
  }

  private void checkState() {
      for (Iterator<FieldEditor> iter = fieldList.iterator(); iter.hasNext();) {
        if (!((FieldEditor) iter.next()).isValid()) {
          setValid(false);
          return;
        }
      }
      setValid(true);
  }

}
TOP

Related Classes of com.subgraph.vega.ui.util.preferences.VegaPreferencePage

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.