org.csstudio.opibuilder.preferences.OPIRuntimePreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for org.csstudio.opibuilder.preferences.OPIRuntimePreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2010 Oak Ridge National Laboratory.
 * 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.csstudio.opibuilder.preferences;

import org.csstudio.opibuilder.OPIBuilderPlugin;
import org.csstudio.opibuilder.preferences.PreferencesHelper.ConsolePopupLevel;
import org.csstudio.simplepv.SimplePVLayer;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.ComboFieldEditor;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IntegerFieldEditor;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.jdom.Verifier;

/**The preference page for OPIBuilder
 * @author Xihui Chen
 *
 */
public class OPIRuntimePreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

    // private static final String RESTART_MESSAGE = "Changes only takes effect after restart.";
    private static final String RESTART_MESSAGE = "Changes only takes effect after restart.";

    private String wrongMacroName = "";

    private StringTableFieldEditor macrosEditor;

    public OPIRuntimePreferencePage() {
        super(FieldEditorPreferencePage.GRID);
        setPreferenceStore(OPIBuilderPlugin.getDefault().getPreferenceStore());
        setMessage("OPI Runtime Preferences");
    }

    @Override
    protected void createFieldEditors() {
        final Composite parent = getFieldEditorParent();

        macrosEditor = new StringTableFieldEditor(PreferencesHelper.RUN_MACROS, "Macros: ", parent,
                new String[] { "Name", "Value" }, new boolean[] { true, true },
                new MacroEditDialog(parent.getShell()), new int[] { 120, 120 }) {

            @Override
            public boolean isValid() {
                String reason;
                for (String[] row : items) {
                    reason = Verifier.checkElementName(row[0]);
                    if (reason != null) {
                        wrongMacroName = row[0];
                        return false;
                    }
                }
                return true;
            }

            @Override
            protected void doStore() {
                if (!isValid())
                    return;
                super.doStore();
            }

            @Override
            protected void doFillIntoGrid(Composite parent, int numColumns) {
                super.doFillIntoGrid(parent, numColumns);
                tableEditor.getTableViewer().getTable().addKeyListener(new KeyAdapter() {
                    @Override
                    public void keyReleased(KeyEvent e) {
                        boolean valid = isValid();
                        fireStateChanged(IS_VALID, !valid, valid);
                    }
                });
                tableEditor.getTableViewer().getTable().addFocusListener(new FocusListener() {

                    @Override
                    public void focusLost(FocusEvent e) {
                        boolean valid = isValid();
                        fireStateChanged(IS_VALID, !valid, valid);
                    }

                    @Override
                    public void focusGained(FocusEvent e) {
                        boolean valid = isValid();
                        fireStateChanged(IS_VALID, !valid, valid);
                    }
                });
            }

        };
        addField(macrosEditor);

        IntegerFieldEditor guiRefreshCycleEditor = new IntegerFieldEditor(PreferencesHelper.OPI_GUI_REFRESH_CYCLE,
                "OPI GUI Refresh Cycle (ms)", parent);
        guiRefreshCycleEditor.setValidRange(10, 5000);
        guiRefreshCycleEditor.getTextControl(parent)
                .setToolTipText("The fastest refresh cycle for OPI GUI in millisecond");
        addField(guiRefreshCycleEditor);

        IntegerFieldEditor pulsingMinorPeriodFieldEditor = new IntegerFieldEditor(
                PreferencesHelper.PULSING_ALARM_MINOR_PERIOD,
                "Time period of MINOR alarm if pulsing alarm selected (ms)", parent);
        pulsingMinorPeriodFieldEditor.setValidRange(100, 10000);
        pulsingMinorPeriodFieldEditor.getTextControl(parent)
                .setToolTipText("If the pulsing alarm box is checked for a widget that monitors a PV, "
                        + "then what is the time period of the pulse with the PV is in MINOR alarm severity");
        addField(pulsingMinorPeriodFieldEditor);

        IntegerFieldEditor pulsingMajorPeriodFieldEditor = new IntegerFieldEditor(
                PreferencesHelper.PULSING_ALARM_MAJOR_PERIOD,
                "Time period of MAJOR alarm if pulsing alarm selected (ms)", parent);
        pulsingMajorPeriodFieldEditor.setValidRange(100, 10000);
        pulsingMajorPeriodFieldEditor.getTextControl(parent)
                .setToolTipText("If the pulsing alarm box is checked for a widget that monitors a PV, "
                        + "then what is the time period of the pulse with the PV is in MAJOR alarm severity");
        addField(pulsingMajorPeriodFieldEditor);

        String[] allPVFactories = SimplePVLayer.getAllPVFactoryExtensions();
        String[][] entries = new String[allPVFactories.length][2];
        for (int i = 0; i < allPVFactories.length; i++) {
            entries[i][0] = allPVFactories[i];
            entries[i][1] = allPVFactories[i];
        }
        ComboFieldEditor pvConnectionLayerEditor = new ComboFieldEditor(PreferencesHelper.PV_CONNECTION_LAYER,
                "PV Connection Layer", entries, parent);
        addField(pvConnectionLayerEditor);

        ComboFieldEditor popupConsoleEditor = new ComboFieldEditor(PreferencesHelper.POPUP_CONSOLE,
                "Console Popup Level",
                new String[][] { { "Error, Warning and Info", ConsolePopupLevel.ALL.toString() },
                        { "Only Info", ConsolePopupLevel.ONLY_INFO.toString() },
                        { "Don't Popup", ConsolePopupLevel.NO_POP.toString() } },
                parent);
        addField(popupConsoleEditor);

        StringFieldEditor pythonPathEditor = new StringFieldEditor(PreferencesHelper.PYTHON_PATH, "PYTHONPATH",
                parent);
        pythonPathEditor.getTextControl(parent).setToolTipText("The path to search python modules");
        addField(pythonPathEditor);

        BooleanFieldEditor showCompactModeDialogEditor = new BooleanFieldEditor(
                PreferencesHelper.SHOW_COMPACT_MODE_DIALOG, "Show tip dialog about how to exit compact mode",
                parent);
        addField(showCompactModeDialogEditor);

        BooleanFieldEditor showFullScreenDialogEditor = new BooleanFieldEditor(
                PreferencesHelper.SHOW_FULLSCREEN_DIALOG, "Show tip dialog about how to exit fullscreen", parent);
        addField(showFullScreenDialogEditor);

        BooleanFieldEditor startWindowInCompactEditor = new BooleanFieldEditor(
                PreferencesHelper.START_WINDOW_IN_COMPACT_MODE, "Start application window in compact mode.",
                parent);
        addField(startWindowInCompactEditor);

        BooleanFieldEditor startWindowInFullScreen = new BooleanFieldEditor(
                PreferencesHelper.START_WINDOW_IN_FULL_SCREEN_MODE, "Start application window in full screen mode.",
                parent);
        addField(startWindowInFullScreen);

        BooleanFieldEditor showStatusLineInCompactMode = new BooleanFieldEditor(
                PreferencesHelper.SHOW_STATUS_LINE_IN_FULL_COMPACT_MODE, "Show status line in compact mode.",
                parent);
        addField(showStatusLineInCompactMode);

        BooleanFieldEditor showStatusLineInFullScreenMode = new BooleanFieldEditor(
                PreferencesHelper.SHOW_STATUS_LINE_IN_FULL_SCREEN_MODE, "Show status line in full screen mode.",
                parent);
        addField(showStatusLineInFullScreenMode);
    }

    @Override
    public void init(IWorkbench workbench) {

    }

    @Override
    public void propertyChange(PropertyChangeEvent event) {
        super.propertyChange(event);
        Object src = event.getSource();
        if (src instanceof FieldEditor) {
            String prefName = ((FieldEditor) src).getPreferenceName();
            if (prefName.equals(PreferencesHelper.RUN_MACROS)) {
                if ((Boolean) event.getNewValue())
                    setMessage(null);
                else
                    setMessage(wrongMacroName + " is not a valid Macro name!", ERROR);
            } else if (prefName.equals(PreferencesHelper.PYTHON_PATH)) {
                setMessage(RESTART_MESSAGE, WARNING);
            }
        }
    }

    @Override
    public boolean performOk() {
        macrosEditor.tableEditor.getTableViewer().getTable().forceFocus();
        if (!isValid())
            return false;
        return super.performOk();
    }

}