org.cs3.prolog.ui.util.OptionEditor.java Source code

Java tutorial

Introduction

Here is the source code for org.cs3.prolog.ui.util.OptionEditor.java

Source

/*****************************************************************************
 * This file is part of the Prolog Development Tool (PDT)
 * 
 * Author: Lukas Degener (among others)
 * WWW: http://sewiki.iai.uni-bonn.de/research/pdt/start
 * Mail: pdt@lists.iai.uni-bonn.de
 * Copyright (C): 2004-2012, CS Dept. III, University of Bonn
 * 
 * All rights reserved. This program is  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.cs3.prolog.ui.util;

import java.util.Iterator;
import java.util.Vector;

import org.cs3.prolog.common.Option;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;

abstract public class OptionEditor implements PropertyEditor {
    Composite parent;

    Composite control;

    Option option;

    private Vector<IPropertyChangeListener> listeners = new Vector<IPropertyChangeListener>();

    /**
     * @param parent
     * @param option
     */
    public OptionEditor(Composite parent, Option option) {
        super();
        this.parent = parent;
        this.option = option;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.cs3.jtransformer.internal.properties.PropertyEditor#getControl()
     */
    @Override
    public Control getControl() {
        if (control == null) {
            control = new Composite(parent, SWT.NONE);
            createControls(control);
        }
        return control;
    }

    /**
     * @param control2
     */
    protected abstract void createControls(Composite composite);

    /*
     * (non-Javadoc)
     * 
     * @see org.cs3.jtransformer.internal.properties.PropertyEditor#isEnabled()
     */
    @Override
    public boolean isEnabled() {
        return getControl().isEnabled();
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.cs3.jtransformer.internal.properties.PropertyEditor#setEnabled(boolean)
     */
    @Override
    public void setEnabled(boolean enabled) {
        getControl().setEnabled(enabled);

    }

    /*
     * (non-Javadoc)
     * 
     * @see org.cs3.jtransformer.internal.properties.PropertyEditor#setPropertyChangeListener(java.beans.PropertyChangeListener)
     */
    @Override
    public void addPropertyChangeListener(IPropertyChangeListener l) {
        synchronized (listeners) {
            if (!listeners.contains(l)) {
                listeners.add(l);
            }
        }
    }

    /* (non-Javadoc)
     * @see org.cs3.jtransformer.internal.properties.PropertyEditor#removePropertyChangeListener(java.beans.PropertyChangeListener)
     */
    @Override
    public void removePropertyChangeListener(IPropertyChangeListener l) {
        synchronized (listeners) {
            if (listeners.contains(l)) {
                listeners.remove(l);
            }
        }
    }

    protected void firePropertyChange(String oldValue, String newValue) {
        PropertyChangeEvent e = new PropertyChangeEvent(this, getKey(), oldValue, newValue);
        Vector<IPropertyChangeListener> cloned = getAListenerClone();
        for (Iterator<IPropertyChangeListener> it = cloned.iterator(); it.hasNext();) {
            IPropertyChangeListener l = it.next();
            l.propertyChange(e);
        }
    }

    @SuppressWarnings("unchecked")
    private Vector<IPropertyChangeListener> getAListenerClone() {
        Vector<IPropertyChangeListener> cloned = null;
        synchronized (listeners) {
            cloned = (Vector<IPropertyChangeListener>) listeners.clone();
        }
        return cloned;
    }

    /* (non-Javadoc)
     * @see org.cs3.jtransformer.internal.properties.PropertyEditor#getOption()
     */
    @Override
    public String getKey() {
        return option.getId();
    }

    /* (non-Javadoc)
     * @see org.cs3.jtransformer.internal.properties.PropertyEditor#revertToDefault()
     */
    @Override
    public void revertToDefault() {
        setValue(option.getDefault());
    }

    protected int convertWidthInCharsToPixels(int chars) {
        GC gc = new GC(parent);
        int c = Dialog.convertWidthInCharsToPixels(gc.getFontMetrics(), chars);
        gc.dispose();
        return c;

    }

    /* (non-Javadoc)
     * @see org.cs3.jtransformer.internal.properties.PropertyEditor#validate()
     */
    @Override
    public String validate() {
        return option.validate(getValue());
    }

    public static PropertyEditor create(Composite parent, Option o) {
        switch (o.getType()) {
        case Option.DIR:
            return new DirectoryEditor(parent, o);
        case Option.FILE:
            return new FileEditor(parent, o);
        //        case Option.FILES:
        case Option.DIRS:
            return new FileListEditorAdapter(parent, o);
        case Option.FLAG:
            return new FlagEditor(parent, o);
        case Option.ENUM:
            return new EnumEditor(parent, o);
        default:
            return new StringEditor(parent, o);
        }

    }
}