net.sf.eclipsensis.settings.NSISSettingsEditorPage.java Source code

Java tutorial

Introduction

Here is the source code for net.sf.eclipsensis.settings.NSISSettingsEditorPage.java

Source

/*******************************************************************************
 * Copyright (c) 2004-2010 Sunil Kamath (IcemanK).
 * All rights reserved.
 * This program is made available under the terms of the Common Public License
 * v1.0 which is available at http://www.eclipse.org/legal/cpl-v10.html
 *
 * Contributors:
 *     Sunil Kamath (IcemanK) - initial API and implementation
 *******************************************************************************/
package net.sf.eclipsensis.settings;

import java.util.*;
import java.util.List;

import net.sf.eclipsensis.EclipseNSISPlugin;
import net.sf.eclipsensis.dialogs.TableResizer;
import net.sf.eclipsensis.util.*;
import net.sf.eclipsensis.viewer.TableViewerUpDownMover;

import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.model.*;

public abstract class NSISSettingsEditorPage implements DisposeListener {
    protected static final String LABEL = "LABEL"; //$NON-NLS-1$

    private String mName;
    protected NSISSettings mSettings = null;
    private List<INSISSettingsEditorPageListener> mListeners = new ArrayList<INSISSettingsEditorPageListener>();
    private Control mControl = null;

    public NSISSettingsEditorPage(String name, NSISSettings settings) {
        mName = name;
        mSettings = settings;
    }

    public String getName() {
        return mName;
    }

    public void addListener(INSISSettingsEditorPageListener listener) {
        if (!mListeners.contains(listener)) {
            mListeners.add(listener);
        }
    }

    public void removeListener(INSISSettingsEditorPageListener listener) {
        mListeners.remove(listener);
    }

    protected void fireChanged() {
        INSISSettingsEditorPageListener[] listeners = mListeners
                .toArray(new INSISSettingsEditorPageListener[mListeners.size()]);
        for (int i = 0; i < listeners.length; i++) {
            listeners[i].settingsChanged();
        }
    }

    protected void enableComposite(Composite composite, boolean state) {
        Control[] controls = composite.getChildren();
        for (int i = 0; i < controls.length; i++) {
            if (controls[i] instanceof Composite) {
                enableComposite((Composite) controls[i], state);
            }
            controls[i].setEnabled(state);
        }
    }

    protected Button createCheckBox(Composite parent, String text, String tooltipText, boolean state) {
        Button button = new Button(parent, SWT.CHECK | SWT.LEFT);
        button.setText(text);
        button.setToolTipText(tooltipText);
        button.setSelection(state);
        GridData data = new GridData(SWT.FILL, SWT.CENTER, false, false);
        button.setLayoutData(data);
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                fireChanged();
            }
        });
        return button;
    }

    protected Combo createCombo(Composite composite, String text, String tooltipText, String[] list, int selected) {
        Label label = new Label(composite, SWT.LEFT);
        label.setText(text);
        GridData data = new GridData(SWT.FILL, SWT.CENTER, false, false);
        label.setLayoutData(data);

        Combo combo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
        combo.setToolTipText(tooltipText);
        if (!Common.isEmptyArray(list)) {
            for (int i = 0; i < list.length; i++) {
                combo.add(list[i]);
            }
        }
        combo.select(selected);
        combo.addSelectionListener(new SelectionListener() {
            public void widgetSelected(SelectionEvent e) {
                fireChanged();
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                fireChanged();
            }
        });
        combo.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                fireChanged();
            }
        });
        data = new GridData(SWT.FILL, SWT.CENTER, true, false);
        combo.setLayoutData(data);
        combo.setData(LABEL, label);
        return combo;
    }

    protected <S, T> TableViewer createTableViewer(Composite composite, final S input,
            IContentProvider contentProvider, ILabelProvider labelProvider, String description,
            String[] columnNames, String addTooltip, String editTooltip, String removeTooltip,
            SelectionListener addAdapter, SelectionListener editAdapter, SelectionListener removeAdapter,
            IDoubleClickListener doubleClickListener, final TableViewerUpDownMover<S, T> mover) {
        GridLayout layout = new GridLayout(2, false);
        composite.setLayout(layout);

        Label label = new Label(composite, SWT.LEFT);
        label.setText(description);
        GridData data = new GridData(SWT.FILL, SWT.CENTER, false, false);
        data.horizontalSpan = 2;
        label.setLayoutData(data);

        Table table = new Table(composite, SWT.FULL_SELECTION | SWT.MULTI | SWT.V_SCROLL | SWT.BORDER);

        if (!Common.isEmptyArray(columnNames)) {
            table.setHeaderVisible(true);
            table.setLinesVisible(true);
            TableColumn[] columns = new TableColumn[columnNames.length];

            for (int i = 0; i < columnNames.length; i++) {
                columns[i] = new TableColumn(table, SWT.LEFT, i);
                columns[i].setText(columnNames[i]);
            }
            table.addControlListener(new TableResizer());
        }
        TableViewer viewer = new TableViewer(table);
        viewer.setContentProvider((contentProvider == null ? new WorkbenchContentProvider() : contentProvider));
        viewer.setLabelProvider((labelProvider == null ? new WorkbenchLabelProvider() : labelProvider));
        viewer.setInput(input);
        mover.setViewer(viewer);

        data = new GridData(SWT.FILL, SWT.FILL, true, true);
        data.verticalSpan = 5;
        table.setLayoutData(data);
        Button addButton = createButton(composite, CommonImages.ADD_ICON, addTooltip);
        if (addAdapter != null) {
            addButton.addSelectionListener(addAdapter);
        }
        final Button editButton = createButton(composite, CommonImages.EDIT_ICON, editTooltip);
        editButton.setEnabled(false);
        if (editAdapter != null) {
            editButton.addSelectionListener(editAdapter);
        }
        final Button removeButton = createButton(composite, CommonImages.DELETE_ICON, removeTooltip);
        removeButton.setEnabled(false);
        if (removeAdapter != null) {
            removeButton.addSelectionListener(removeAdapter);
        }
        final Button upButton = createButton(composite, CommonImages.UP_ICON,
                EclipseNSISPlugin.getResourceString("up.tooltip")); //$NON-NLS-1$
        upButton.setEnabled(mover.canMoveUp());
        upButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                mover.moveUp();
            }
        });

        final Button downButton = createButton(composite, CommonImages.DOWN_ICON,
                EclipseNSISPlugin.getResourceString("down.tooltip")); //$NON-NLS-1$
        downButton.setEnabled(mover.canMoveDown());
        downButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                mover.moveDown();
            }
        });

        viewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                IStructuredSelection selection = (IStructuredSelection) event.getSelection();
                removeButton.setEnabled((selection != null && !selection.isEmpty()));
                editButton.setEnabled((selection != null && selection.size() == 1));
                upButton.setEnabled(mover.canMoveUp());
                downButton.setEnabled(mover.canMoveDown());
            }
        });

        viewer.addDoubleClickListener(doubleClickListener);

        return viewer;
    }

    protected Button createButton(Composite parent, Object object, String tooltipText) {
        Button button = new Button(parent, SWT.PUSH | SWT.CENTER);
        if (object instanceof Image) {
            button.setImage((Image) object);
        } else {
            button.setText(object.toString());
        }
        button.setToolTipText(tooltipText);
        GridData data = new GridData(SWT.FILL, SWT.BEGINNING, false, false);
        button.setLayoutData(data);
        return button;
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.preference.IPreferencePage#performOk()
     */
    public final boolean performApply() {
        if (!performApply(mSettings)) {
            return false;
        }
        return true;
    }

    public Control getControl() {
        return mControl;
    }

    public void widgetDisposed(DisposeEvent e) {
        mControl = null;
    }

    public Control create(Composite parent) {
        if (mControl != null) {
            mControl.removeDisposeListener(this);
            mControl.dispose();
        }
        mControl = createControl(parent);
        mControl.addDisposeListener(this);
        return mControl;
    }

    public boolean supportsEnablement() {
        return true;
    }

    protected abstract Control createControl(Composite parent);

    public abstract void enableControls(boolean state);

    protected abstract boolean performApply(NSISSettings settings);

    public abstract void reset();

    public abstract void setDefaults();

    public abstract boolean canEnableControls();
}