/*******************************************************************************
* Copyright (c) 2004, 2010 QNX Software Systems and others.
* 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:
* QNX Software Systems - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.debug.internal.ui.actions;
import java.util.Arrays;
import java.util.List;
import org.eclipse.cdt.debug.core.model.IRegisterDescriptor;
import org.eclipse.cdt.debug.internal.ui.CDebugImages;
import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds;
import org.eclipse.cdt.debug.internal.ui.dialogfields.CheckedListDialogField;
import org.eclipse.cdt.debug.internal.ui.dialogfields.DialogField;
import org.eclipse.cdt.debug.internal.ui.dialogfields.IDialogFieldListener;
import org.eclipse.cdt.debug.internal.ui.dialogfields.IListAdapter;
import org.eclipse.cdt.debug.internal.ui.dialogfields.LayoutUtil;
import org.eclipse.cdt.debug.internal.ui.dialogfields.Separator;
import org.eclipse.cdt.debug.internal.ui.dialogfields.StringDialogField;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.layout.PixelConverter;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import com.ibm.icu.text.MessageFormat;
/**
* This dialog is used to add/edit user-defined register groups.
*/
public class RegisterGroupDialog extends TitleAreaDialog {
public class RegisterLabelProvider extends LabelProvider {
public Image getImage( Object element ) {
if ( element instanceof IRegisterDescriptor ) {
return CDebugImages.get( CDebugImages.IMG_OBJS_REGISTER );
}
return super.getImage( element );
}
public String getText( Object element ) {
if ( element instanceof IRegisterDescriptor ) {
IRegisterDescriptor rd = (IRegisterDescriptor)element;
return MessageFormat.format( "{0} - {1}", new String[] { rd.getName(), rd.getGroupName() } ); //$NON-NLS-1$
}
return super.getText( element );
}
}
private StringDialogField fNameField;
private CheckedListDialogField fListField;
private String fName;
private IRegisterDescriptor[] fDescriptors;
public RegisterGroupDialog( Shell parentShell, IRegisterDescriptor[] allRegisters ) {
this( parentShell, ActionMessages.getString( "RegisterGroupDialog.0" ), allRegisters, new IRegisterDescriptor[0] ); //$NON-NLS-1$
}
public RegisterGroupDialog( Shell parentShell, String groupName, IRegisterDescriptor[] allRegisters, IRegisterDescriptor[] groupRegisters ) {
super( parentShell );
fName = groupName;
fDescriptors = groupRegisters;
String[] buttonLabels = new String[] { ActionMessages.getString( "RegisterGroupDialog.1" ), ActionMessages.getString( "RegisterGroupDialog.2" ) }; //$NON-NLS-1$ //$NON-NLS-2$
fNameField = new StringDialogField();
fNameField.setLabelText( ActionMessages.getString( "RegisterGroupDialog.3" ) ); //$NON-NLS-1$
fNameField.setTextWithoutUpdate( groupName );
fNameField.setDialogFieldListener( new IDialogFieldListener() {
public void dialogFieldChanged( DialogField field ) {
update();
}
} );
fListField = new CheckedListDialogField( new IListAdapter() {
public void customButtonPressed( DialogField field, int index ) {
// TODO Auto-generated method stub
}
public void selectionChanged( DialogField field ) {
// TODO Auto-generated method stub
}
}, buttonLabels, new RegisterLabelProvider() );
fListField.setLabelText( ActionMessages.getString( "RegisterGroupDialog.4" ) ); //$NON-NLS-1$
fListField.setCheckAllButtonIndex( 0 );
fListField.setUncheckAllButtonIndex( 1 );
fListField.setElements( Arrays.asList( allRegisters ) );
fListField.setCheckedElements( Arrays.asList( groupRegisters ) );
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
*/
protected Control createDialogArea( Composite parent ) {
getShell().setText( ActionMessages.getString( "RegisterGroupDialog.5" ) ); //$NON-NLS-1$
setTitle( ActionMessages.getString( "RegisterGroupDialog.6" ) ); //$NON-NLS-1$
// setTitleImage( CDebugImages.get( CDebugImages.IMG_WIZBAN_REGISTER_GROUP ) );
PlatformUI.getWorkbench().getHelpSystem().setHelp( getShell(), ICDebugHelpContextIds.REGISTER_GROUP );
Composite composite = new Composite( parent, SWT.NONE );
GridLayout layout = new GridLayout();
layout.numColumns = Math.max( fNameField.getNumberOfControls(), fListField.getNumberOfControls() );
layout.marginHeight = convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_MARGIN );
layout.marginWidth = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_MARGIN );
composite.setLayout( layout );
composite.setLayoutData( new GridData( GridData.FILL_BOTH ) );
Dialog.applyDialogFont( composite );
PixelConverter converter = new PixelConverter( composite );
new Separator().doFillIntoGrid( composite, layout.numColumns, converter.convertHeightInCharsToPixels( 1 ) );
fNameField.doFillIntoGrid( composite, layout.numColumns );
fNameField.getTextControl( null ).selectAll();
new Separator().doFillIntoGrid( composite, layout.numColumns, converter.convertHeightInCharsToPixels( 1 ) );
fListField.doFillIntoGrid( composite, layout.numColumns + 1 );
LayoutUtil.setHorizontalSpan( fListField.getLabelControl( null ), layout.numColumns );
LayoutUtil.setHeigthHint( fListField.getListControl( null ), convertWidthInCharsToPixels( 30 ) );
LayoutUtil.setHorizontalGrabbing( fListField.getListControl( null ) );
setMessage( null );
return composite;
}
protected void update() {
setErrorMessage( null );
String name = fNameField.getText().trim();
if ( name.length() == 0 ) {
setErrorMessage( ActionMessages.getString( "RegisterGroupDialog.7" ) ); //$NON-NLS-1$
}
getButton( IDialogConstants.OK_ID ).setEnabled( name.length() > 0 );
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#okPressed()
*/
protected void okPressed() {
super.okPressed();
fName = fNameField.getText().trim();
List elements = fListField.getCheckedElements();
fDescriptors = (IRegisterDescriptor[])elements.toArray( new IRegisterDescriptor[elements.size()] );
}
public String getName() {
return fName;
}
public IRegisterDescriptor[] getDescriptors() {
return fDescriptors;
}
}