/*
* 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;
}
}