net.rim.ejde.internal.ui.views.profiler.ProfilingViewOptionsDialog.java Source code

Java tutorial

Introduction

Here is the source code for net.rim.ejde.internal.ui.views.profiler.ProfilingViewOptionsDialog.java

Source

/*
* Copyright (c) 2010-2012 Research In Motion Limited. All rights reserved.
*
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License, Version 1.0,
* which accompanies this distribution and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*
*/
package net.rim.ejde.internal.ui.views.profiler;

import net.rim.ejde.internal.core.ContextManager;
import net.rim.ejde.internal.core.IConstants;
import net.rim.ejde.internal.ui.preferences.PreferenceConstants;
import net.rim.ejde.internal.util.Messages;
import net.rim.ide.RIA;
import net.rim.ide.RIA.ProfileType;

import org.eclipse.jface.preference.IPreferenceStore;
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.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;

/**
 * This class demonstrates how to create your own dialog classes. It allows users to input a String
 */
public class ProfilingViewOptionsDialog extends Dialog implements IConstants {

    public static final int PROFILE_TYPE_SAMPLE = 11;
    public static final int PROFILE_TYPE_SAMPLE_NO_BREAK = 12;
    public static final int PROFILE_TYPE_NOTHING = 9;

    private ProfileType[] types;
    private boolean _okButtonClicked;

    /**
     * Constructs an instance of OptionsDialog (default style).
     *
     * @param parent
     *            the parent
     */
    public ProfilingViewOptionsDialog(Shell parent) {
        // Pass the default styles here
        this(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
    }

    /**
     * Constructs an instance of OptionsDialog (customized style).
     *
     * @param parent
     *            the parent
     * @param style
     *            the style
     */
    public ProfilingViewOptionsDialog(Shell parent, int style) {
        // Let users override the default styles
        super(parent, style);

        RIA ria = RIA.getCurrentDebugger();
        if (ria == null) {
            types = new ProfileType[] {};
        } else {//MKS 2486071
            String debugAttachedTo = ria.getDebugAttachTo();
            if (debugAttachedTo == null || debugAttachedTo.isEmpty()) {
                types = new ProfileType[] {};
            } else {
                types = getProfileTypes(ria);
            }
        }
        setText(Messages.OptionsDialog_OPTIONS_DIALOG_TITLE);
    }

    /**
     * Opens the dialog.
     *
     * @return String
     */
    public void open() {
        // Create the dialog window
        Shell shell = new Shell(getParent(), getStyle());
        shell.setMinimumSize(300, 100);
        shell.setText(getText());
        createContents(shell);
        shell.pack();
        shell.open();
        Display display = getParent().getDisplay();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }

    /**
     * Creates the dialog's contents
     *
     * @param shell
     *            the dialog window
     */
    private void createContents(final Shell shell) {
        IPreferenceStore ps = ContextManager.PLUGIN.getPreferenceStore();
        shell.setLayout(new GridLayout(2, false));
        GridData data;
        data = new GridData(GridData.FILL_HORIZONTAL);
        // Display the "method attribution" combo
        Label label1 = new Label(shell, SWT.NONE);
        label1.setText(Messages.OptionsDialog_METHOD_ATTRIBUTION_LABEL_TITLE);
        final Combo comMethodAtt = new Combo(shell, SWT.READ_ONLY);
        comMethodAtt.setLayoutData(data);
        comMethodAtt.setItems(
                new String[] { RIA.getString(Messages.OptionsDialog_1), RIA.getString(Messages.OptionsDialog_2) });
        comMethodAtt.select(ps.getBoolean(PreferenceConstants.NET_RIM_EJDE_UI_VIEWS_METHOD_TIME_TYPE) ? 0 : 1);

        // Display the "what to profile" combo
        Label label2 = new Label(shell, SWT.NONE);
        label2.setText(Messages.OptionsDialog_WHATTOPROFILE_LABEL_TITLE);
        final Combo comWhatToProfile = new Combo(shell, SWT.READ_ONLY);
        comWhatToProfile.setLayoutData(data);
        comWhatToProfile.setItems(getProfileTypeNames());
        comWhatToProfile.select(
                indexOfProfileType(types, ps.getInt(PreferenceConstants.NET_RIM_EJDE_UI_VIEWS_WHATTOPROFILE)));

        Composite buttonComposite = new Composite(shell, SWT.NONE);
        GridLayout layout = new GridLayout(2, true);
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        buttonComposite.setLayout(layout);
        data = new GridData(GridData.FILL_HORIZONTAL);
        data.horizontalSpan = 2;
        buttonComposite.setLayoutData(data);

        // Create the OK button and add a handler
        // so that pressing it will set input
        // to the entered value
        Button ok = new Button(buttonComposite, SWT.PUSH);
        ok.setText(Messages.IConstants_OK_BUTTON_TITLE);
        data = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_END);
        data.widthHint = 60;
        ok.setLayoutData(data);
        ok.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                _okButtonClicked = true;
                IPreferenceStore preferenceStore = ContextManager.PLUGIN.getPreferenceStore();
                preferenceStore.setValue(PreferenceConstants.NET_RIM_EJDE_UI_VIEWS_WHATTOPROFILE,
                        types[comWhatToProfile.getSelectionIndex()].getId());
                preferenceStore.setValue(PreferenceConstants.NET_RIM_EJDE_UI_VIEWS_METHOD_TIME_TYPE,
                        comMethodAtt.getSelectionIndex() == 0 ? true : false);
                shell.close();
            }
        });

        // Create the cancel button and add a handler
        Button cancel = new Button(buttonComposite, SWT.PUSH);
        cancel.setText(Messages.IConstants_CANCEL_BUTTON_TITLE);
        data = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_BEGINNING);
        data.widthHint = 60;
        cancel.setLayoutData(data);
        cancel.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                _okButtonClicked = false;
                shell.close();
            }
        });

        // Set the OK button as the default, so
        // user can type input and press Enter
        // to dismiss
        shell.setDefaultButton(ok);
    }

    /**
     * Gets names of all profile types.
     *
     * @return
     */
    private String[] getProfileTypeNames() {
        String[] names = new String[types.length];
        for (int i = 0; i < types.length; i++)
            names[i] = types[i].getDescription();
        return names;
    }

    /**
     * Get all profile options.
     *
     * @param ria
     *            The debugger
     * @return all profile options
     */
    public static ProfileType[] getProfileTypes(RIA ria) {
        String debugAttachedTo = ria.getDebugAttachTo();
        ProfileType[] types;
        if (debugAttachedTo.contains("USB")) {
            types = ria.profileGetTypes(RIA.PROFILE_TYPE_DEVICE);
        } else {
            types = ria.profileGetTypes(RIA.PROFILE_TYPE_SIMULATOR);
        }
        return types;
    }

    private static int indexOfProfileType(ProfileType[] types, int id) {
        for (int i = 0; i < types.length; i++) {
            if (types[i].getId() == id) {
                return i;
            }
        }
        return types.length > 0 ? 0 : -1;
    }

    /**
     * Returns if the OK button is clicked.
     *
     * @return <code>true</code> if yes; <code>false</code> otherwise.
     */
    public boolean isOkButtonClicked() {
        return _okButtonClicked;
    }
}