org.eclipse.titan.designer.properties.pages.FieldEditorPropertyPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.titan.designer.properties.pages.FieldEditorPropertyPage.java

Source

/******************************************************************************
 * Copyright (c) 2000-2016 Ericsson Telecom AB
 * 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.eclipse.titan.designer.properties.pages;

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

import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.titan.designer.Activator;
import org.eclipse.ui.IWorkbenchPropertyPage;

/**
 * @author Kristof Szabados
 * */
public abstract class FieldEditorPropertyPage extends FieldEditorPreferencePage implements IWorkbenchPropertyPage {
    /**
     * The element.
     */
    private IAdaptable element;
    // Overlay preference store for property pages
    private IPreferenceStore overlayStore;
    // Stores all created field editors
    private List<FieldEditor> editors = new ArrayList<FieldEditor>();

    protected FieldEditorPropertyPage(final int style) {
        super(style);
    }

    @Override
    public IAdaptable getElement() {
        return element;
    }

    @Override
    public void setElement(final IAdaptable element) {
        this.element = element;
    }

    @Override
    public IPreferenceStore getPreferenceStore() {
        return overlayStore;
    }

    protected void resetPreferenceStore() {
        overlayStore = new PropertyStore((IResource) getElement(), Activator.getDefault().getPreferenceStore(),
                getPageId());
    }

    protected abstract String getPageId();

    @Override
    protected Control createContents(final Composite parent) {
        overlayStore = new PropertyStore((IResource) getElement(), Activator.getDefault().getPreferenceStore(),
                getPageId());

        Control result = super.createContents(parent);

        return result;
    }

    @Override
    protected void addField(final FieldEditor editor) {
        editors.add(editor);
        super.addField(editor);
    }

    @Override
    protected void checkState() {
        super.checkState();

        boolean valid = true;
        if (editors != null) {
            int size = editors.size();
            for (int i = 0; i < size; i++) {
                FieldEditor editor = editors.get(i);
                valid = valid && editor.isValid();
                if (!valid) {
                    break;
                }
            }
        }
        setValid(valid);
    }

    /**
     * The field editor preference page implementation of a
     * <code>PreferencePage</code> method loads all the field editors with
     * their default values.
     */
    @Override
    protected void performDefaults() {
        if (editors != null) {
            Iterator<FieldEditor> e = editors.iterator();
            while (e.hasNext()) {
                FieldEditor pe = e.next();
                pe.loadDefault();
            }
        }

        checkState();
        super.performDefaults();
    }

    /**
     * The field editor preference page implementation of this
     * <code>PreferencePage</code> method saves all field editors by calling
     * <code>FieldEditor.store</code>. Note that this method does not save
     * the preference store itself; it just stores the values back into the
     * preference store.
     * 
     * @see FieldEditor#store()
     */
    @Override
    public boolean performOk() {
        if (editors != null) {
            Iterator<FieldEditor> e = editors.iterator();
            while (e.hasNext()) {
                FieldEditor pe = e.next();
                pe.store();
                pe.getPreferenceStore().setToDefault(pe.getPreferenceName());
            }
        }

        super.performOk();

        return true;
    }

    /**
     * The field editor preference page implementation of this
     * <code>IPreferencePage</code> (and
     * <code>IPropertyChangeListener</code>) method intercepts
     * <code>IS_VALID</code> events but passes other events on to its
     * superclass.
     */
    @Override
    public void propertyChange(final PropertyChangeEvent event) {

        if (event.getProperty().equals(FieldEditor.IS_VALID)) {
            boolean newValue = ((Boolean) event.getNewValue()).booleanValue();
            if (newValue) {
                checkState();
            } else {
                setValid(newValue);
            }
        }
    }

    protected void updateFieldEditors(final boolean enabled) {
        Composite parent = getFieldEditorParent();
        Iterator<FieldEditor> it = editors.iterator();
        while (it.hasNext()) {
            FieldEditor editor = it.next();
            editor.setEnabled(enabled, parent);
        }
    }
}