eclox.core.ui.CustomDoxygenDialog.java Source code

Java tutorial

Introduction

Here is the source code for eclox.core.ui.CustomDoxygenDialog.java

Source

/*******************************************************************************
 * Copyright (C) 2015, Andre Bossert
 *
 * 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:
 *     Andre Bossert - Initial API and implementation
 *
 ******************************************************************************/

package eclox.core.ui;

import java.io.File;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.variables.IStringVariableManager;
import org.eclipse.core.variables.VariablesPlugin;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.preference.DirectoryFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;

public class CustomDoxygenDialog extends Dialog {

    private String targetDirectory;
    private FieldEditorPreferencePage page;
    private DirectoryFieldEditor targetDirectoryEditor;

    public CustomDoxygenDialog(Shell parentShell, String targetDirectory) {
        super(parentShell);
        this.targetDirectory = targetDirectory;
    }

    @Override
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        newShell.setText("Select a location containing doxygen.");
        newShell.setSize(500, 170);
    }

    @Override
    protected Control createDialogArea(Composite parent) {
        Composite composite = (Composite) super.createDialogArea(parent);
        page = new FieldEditorPreferencePage(FieldEditorPreferencePage.GRID) {
            @Override
            protected void createFieldEditors() {
                targetDirectoryEditor = new DirectoryFieldEditor("", "Custom Doxygen directory:",
                        getFieldEditorParent()) {
                    /** The own control is the variableButton */
                    private static final int NUMBER_OF_OWN_CONTROLS = 1;

                    @Override
                    protected boolean doCheckState() {
                        String dirName = getTextControl().getText();
                        dirName = dirName.trim();
                        if (dirName.length() == 0 && isEmptyStringAllowed())
                            return true;
                        IStringVariableManager manager = VariablesPlugin.getDefault().getStringVariableManager();
                        String substitutedDirName;
                        try {
                            substitutedDirName = manager.performStringSubstitution(dirName);
                        } catch (CoreException e) {
                            // It's apparently invalid
                            return false;
                        }
                        File dir = new File(substitutedDirName);
                        // require the file to exist
                        return dir.exists() && dir.isDirectory();
                    }

                    @Override
                    public int getNumberOfControls() {
                        return super.getNumberOfControls() + NUMBER_OF_OWN_CONTROLS;
                    }

                    @Override
                    protected void doFillIntoGrid(Composite parent, int numColumns) {
                        super.doFillIntoGrid(parent, numColumns - NUMBER_OF_OWN_CONTROLS);
                    }

                    @Override
                    protected void adjustForNumColumns(int numColumns) {
                        super.adjustForNumColumns(numColumns - NUMBER_OF_OWN_CONTROLS);
                    }

                    @Override
                    protected void createControl(Composite parent) {
                        // setting validate strategy using the setter method is too late
                        super.setValidateStrategy(StringFieldEditor.VALIDATE_ON_KEY_STROKE);
                        super.createControl(parent);
                        if (hasDebugUiBundle()) {
                            addVariablesButton(parent);
                        }
                    }

                    private void addVariablesButton(Composite parent) {
                        Button variableButton = new Button(parent, SWT.PUSH);
                        variableButton.setText("&Variable...");
                        variableButton.addSelectionListener(new SelectionAdapter() {
                            @Override
                            public void widgetSelected(SelectionEvent e) {
                                org.eclipse.debug.ui.StringVariableSelectionDialog dialog = new org.eclipse.debug.ui.StringVariableSelectionDialog(
                                        getShell());
                                int returnCode = dialog.open();
                                if (returnCode == Window.OK)
                                    setStringValue(dialog.getVariableExpression());
                            }
                        });
                    }
                };
                targetDirectoryEditor.setStringValue(targetDirectory == null ? "" : targetDirectory);
                addField(targetDirectoryEditor);
            }

            @Override
            public void createControl(Composite parentComposite) {
                noDefaultAndApplyButton();
                super.createControl(parentComposite);
            }

            @Override
            protected void updateApplyButton() {
                updateButtons(isValid());
                super.updateApplyButton();
            }

            // @Override
            // protected void createButtonsForButtonBar(Composite parent) {
            // super.createButtonsForButtonBar(parent);
            // updateButtons(page.isValid());
            // }
            private void updateButtons(boolean isValid) {
                Button okButton = getButton(IDialogConstants.OK_ID);
                if (okButton != null) {
                    okButton.setEnabled(isValid);
                }
            }
        };
        page.createControl(composite);
        Control pageControl = page.getControl();
        pageControl.setLayoutData(new GridData(GridData.FILL_BOTH));
        return pageControl;
    }

    @Override
    protected void buttonPressed(int buttonId) {
        if (buttonId == IDialogConstants.OK_ID) {
            targetDirectory = targetDirectoryEditor.getStringValue();
        }
        super.buttonPressed(buttonId);
    }

    public String getTargetDirectory() {
        return targetDirectory;
    }

    private static final boolean hasDebugUiBundle() {
        try {
            return Class.forName("org.eclipse.debug.ui.StringVariableSelectionDialog") != null; //$NON-NLS-1$
        } catch (ClassNotFoundException e) {
            return false;
        }
    }

}