mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-22 22:22:11 +02:00
Bug 271752: Improve "Path Mappings" UI.
This commit is contained in:
parent
3ff09538e2
commit
10ffd0daca
4 changed files with 662 additions and 1 deletions
|
@ -1640,7 +1640,7 @@
|
|||
<extension
|
||||
point="org.eclipse.debug.ui.sourceContainerPresentations">
|
||||
<sourceContainerPresentation
|
||||
browserClass="org.eclipse.cdt.debug.internal.ui.sourcelookup.MappingSourceContainerBrowser"
|
||||
browserClass="org.eclipse.cdt.debug.internal.ui.sourcelookup.NewMappingSourceContainerBrowser"
|
||||
containerTypeID="org.eclipse.cdt.debug.core.containerType.mapping"
|
||||
icon="icons/obj16/mapping_obj.gif"
|
||||
id="org.eclipse.cdt.debug.ui.sourceContainerPresentation.mapping"/>
|
||||
|
|
|
@ -0,0 +1,597 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2009 ARM Limited 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:
|
||||
* ARM Limited - Initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.debug.internal.ui.sourcelookup;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.debug.core.sourcelookup.MappingSourceContainer;
|
||||
import org.eclipse.cdt.debug.internal.core.sourcelookup.MapEntrySourceContainer;
|
||||
import org.eclipse.cdt.debug.internal.ui.CDebugImages;
|
||||
import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds;
|
||||
import org.eclipse.cdt.debug.internal.ui.SWTUtil;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
import org.eclipse.debug.core.sourcelookup.ISourceContainer;
|
||||
import org.eclipse.jface.dialogs.IDialogConstants;
|
||||
import org.eclipse.jface.dialogs.TitleAreaDialog;
|
||||
import org.eclipse.jface.viewers.CellEditor;
|
||||
import org.eclipse.jface.viewers.DialogCellEditor;
|
||||
import org.eclipse.jface.viewers.ICellModifier;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
import org.eclipse.jface.viewers.ISelectionChangedListener;
|
||||
import org.eclipse.jface.viewers.IStructuredContentProvider;
|
||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
import org.eclipse.jface.viewers.ITableLabelProvider;
|
||||
import org.eclipse.jface.viewers.LabelProvider;
|
||||
import org.eclipse.jface.viewers.SelectionChangedEvent;
|
||||
import org.eclipse.jface.viewers.StructuredSelection;
|
||||
import org.eclipse.jface.viewers.TableViewer;
|
||||
import org.eclipse.jface.viewers.TextCellEditor;
|
||||
import org.eclipse.jface.viewers.Viewer;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.events.ControlEvent;
|
||||
import org.eclipse.swt.events.ControlListener;
|
||||
import org.eclipse.swt.events.ModifyEvent;
|
||||
import org.eclipse.swt.events.ModifyListener;
|
||||
import org.eclipse.swt.events.SelectionAdapter;
|
||||
import org.eclipse.swt.events.SelectionEvent;
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
import org.eclipse.swt.layout.GridData;
|
||||
import org.eclipse.swt.layout.GridLayout;
|
||||
import org.eclipse.swt.widgets.Button;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Control;
|
||||
import org.eclipse.swt.widgets.DirectoryDialog;
|
||||
import org.eclipse.swt.widgets.Item;
|
||||
import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.swt.widgets.Table;
|
||||
import org.eclipse.swt.widgets.TableColumn;
|
||||
import org.eclipse.swt.widgets.Text;
|
||||
import org.eclipse.ui.PlatformUI;
|
||||
|
||||
public class MappingSourceContainerDialog extends TitleAreaDialog {
|
||||
|
||||
class EntryCellModifier implements ICellModifier {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.ICellModifier#canModify(java.lang.Object, java.lang.String)
|
||||
*/
|
||||
public boolean canModify( Object element, String property ) {
|
||||
return ( CP_COMPILATION_PATH.equals( property ) || CP_FILE_SYSTEM_PATH.equals( property ) );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.ICellModifier#getValue(java.lang.Object, java.lang.String)
|
||||
*/
|
||||
public Object getValue( Object element, String property ) {
|
||||
if ( element instanceof MapEntrySourceContainer ) {
|
||||
MapEntrySourceContainer entry = (MapEntrySourceContainer)element;
|
||||
if ( CP_COMPILATION_PATH.equals( property ) )
|
||||
return entry.getBackendPath().toOSString();
|
||||
if ( CP_FILE_SYSTEM_PATH.equals( property ) )
|
||||
return entry.getLocalPath().toOSString();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.ICellModifier#modify(java.lang.Object, java.lang.String, java.lang.Object)
|
||||
*/
|
||||
public void modify( Object element, String property, Object value ) {
|
||||
MapEntrySourceContainer entry =
|
||||
( element instanceof Item ) ?
|
||||
(MapEntrySourceContainer)((Item)element).getData()
|
||||
: (MapEntrySourceContainer)element;
|
||||
boolean isDirty = false;
|
||||
if ( CP_COMPILATION_PATH.equals( property ) ) {
|
||||
entry.setBackendPath( new Path( (String)value) );
|
||||
isDirty = true;
|
||||
}
|
||||
else if ( CP_FILE_SYSTEM_PATH.equals( property ) ) {
|
||||
entry.setLocalPath( new Path( (String)value) );
|
||||
isDirty = true;
|
||||
}
|
||||
if ( isDirty )
|
||||
refresh();
|
||||
}
|
||||
}
|
||||
|
||||
class DirectoryCellEditor extends DialogCellEditor {
|
||||
|
||||
DirectoryCellEditor( Composite parent ) {
|
||||
super( parent );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.DialogCellEditor#openDialogBox(org.eclipse.swt.widgets.Control)
|
||||
*/
|
||||
@Override
|
||||
protected Object openDialogBox( Control cellEditorWindow ) {
|
||||
DirectoryDialog dialog = new DirectoryDialog( cellEditorWindow.getShell() );
|
||||
return dialog.open();
|
||||
}
|
||||
}
|
||||
|
||||
class EntryLabelProvider extends LabelProvider implements ITableLabelProvider {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
|
||||
*/
|
||||
public Image getColumnImage( Object element, int columnIndex ) {
|
||||
if ( element instanceof MapEntrySourceContainer && columnIndex == 0 ) {
|
||||
return CDebugImages.get( CDebugImages.IMG_OBJS_PATH_MAP_ENTRY );
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
|
||||
*/
|
||||
public String getColumnText( Object element, int columnIndex ) {
|
||||
if ( element instanceof MapEntrySourceContainer ) {
|
||||
MapEntrySourceContainer entry = (MapEntrySourceContainer)element;
|
||||
if ( columnIndex == 0 )
|
||||
return entry.getBackendPath().toOSString();
|
||||
if ( columnIndex == 1 )
|
||||
return entry.getLocalPath().toOSString();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Column properties
|
||||
private static final String CP_COMPILATION_PATH = "compilationPath"; //$NON-NLS-1$
|
||||
private static final String CP_FILE_SYSTEM_PATH = "fileSystemPath"; //$NON-NLS-1$
|
||||
|
||||
private MappingSourceContainer fOriginalContainer;
|
||||
private MappingSourceContainer fContainer;
|
||||
|
||||
private Text fNameText;
|
||||
private TableViewer fViewer;
|
||||
private Button fAddButton;
|
||||
private Button fRemoveButton;
|
||||
private Button fUpButton;
|
||||
private Button fDownButton;
|
||||
|
||||
private ControlListener fTableListener;
|
||||
|
||||
private boolean fIsValid = true;
|
||||
|
||||
public MappingSourceContainerDialog( Shell shell, MappingSourceContainer container ) {
|
||||
super( shell );
|
||||
fOriginalContainer = container;
|
||||
fContainer = container.copy();
|
||||
fTableListener = new ControlListener() {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.swt.events.ControlListener#controlMoved(org.eclipse.swt.events.ControlEvent)
|
||||
*/
|
||||
public void controlMoved( ControlEvent e ) {
|
||||
MappingSourceContainerDialog.this.controlMoved( e );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.swt.events.ControlListener#controlResized(org.eclipse.swt.events.ControlEvent)
|
||||
*/
|
||||
public void controlResized( ControlEvent e ) {
|
||||
MappingSourceContainerDialog.this.controlResized( e );
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.dialogs.TrayDialog#close()
|
||||
*/
|
||||
@Override
|
||||
public boolean close() {
|
||||
fViewer.getTable().removeControlListener( fTableListener );
|
||||
fContainer.dispose();
|
||||
return super.close();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.dialogs.Dialog#isResizable()
|
||||
*/
|
||||
@Override
|
||||
protected boolean isResizable() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
|
||||
*/
|
||||
@Override
|
||||
protected void configureShell( Shell newShell ) {
|
||||
super.configureShell( newShell );
|
||||
newShell.setText( SourceLookupUIMessages.getString( "PathMappingDialog.16" ) ); //$NON-NLS-1$
|
||||
newShell.setToolTipText( SourceLookupUIMessages.getString( "MappingSourceContainerDialog.0" ) ); //$NON-NLS-1$
|
||||
newShell.setImage( CDebugImages.get( CDebugImages.IMG_OBJS_PATH_MAPPING ) );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.dialogs.Dialog#createContents(org.eclipse.swt.widgets.Composite)
|
||||
*/
|
||||
@Override
|
||||
protected Control createContents( Composite parent ) {
|
||||
Control control = super.createContents( parent );
|
||||
initialize();
|
||||
return control;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
|
||||
*/
|
||||
@Override
|
||||
protected Control createDialogArea( Composite parent ) {
|
||||
Composite control = (Composite)super.createDialogArea( parent );
|
||||
|
||||
setTitle( SourceLookupUIMessages.getString( "PathMappingDialog.0" ) ); //$NON-NLS-1$
|
||||
setTitleImage( CDebugImages.get( CDebugImages.IMG_WIZBAN_PATH_MAPPING ) );
|
||||
|
||||
Composite composite = new Composite( control, SWT.None );
|
||||
composite.setLayout( new GridLayout( 2, false ) );
|
||||
composite.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
|
||||
|
||||
createNameArea( composite );
|
||||
|
||||
createViewer( composite );
|
||||
|
||||
createViewerButtonBar( composite );
|
||||
|
||||
PlatformUI.getWorkbench().getHelpSystem().setHelp( getShell(), ICDebugHelpContextIds.SOURCE_PATH_MAP_ENTRY_DIALOG );
|
||||
|
||||
return control;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.dialogs.Dialog#okPressed()
|
||||
*/
|
||||
@Override
|
||||
protected void okPressed() {
|
||||
fOriginalContainer.clear();
|
||||
fOriginalContainer.setName( fNameText.getText().trim() );
|
||||
try {
|
||||
fOriginalContainer.addMapEntries( (MapEntrySourceContainer[])fContainer.getSourceContainers() );
|
||||
}
|
||||
catch( CoreException e ) {
|
||||
}
|
||||
super.okPressed();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.dialogs.TitleAreaDialog#setErrorMessage(java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public void setErrorMessage( String newErrorMessage ) {
|
||||
fIsValid = ( newErrorMessage == null );
|
||||
super.setErrorMessage( newErrorMessage );
|
||||
}
|
||||
|
||||
public MappingSourceContainer getContainer() {
|
||||
return fOriginalContainer;
|
||||
}
|
||||
|
||||
private void createNameArea( Composite parent ) {
|
||||
Composite composite = new Composite( parent, SWT.None );
|
||||
composite.setLayout( new GridLayout( 2, false ) );
|
||||
composite.setLayoutData( new GridData( SWT.FILL, SWT.TOP, true, false, 2, 1 ) );
|
||||
|
||||
Label label = new Label( composite, SWT.NONE );
|
||||
label.setText( SourceLookupUIMessages.getString( "PathMappingDialog.12" ) ); //$NON-NLS-1$
|
||||
fNameText = new Text( composite, SWT.BORDER | SWT.SINGLE );
|
||||
GridData data = new GridData( SWT.FILL, SWT.CENTER, false, false );
|
||||
data.widthHint = 200;
|
||||
fNameText.setLayoutData( data );
|
||||
fNameText.addModifyListener( new ModifyListener() {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
|
||||
*/
|
||||
public void modifyText( ModifyEvent e ) {
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
private void createViewer( Composite parent ) {
|
||||
Composite tableComp = new Composite( parent, SWT.NONE );
|
||||
tableComp.setLayout( new GridLayout() );
|
||||
tableComp.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
|
||||
|
||||
fViewer = new TableViewer( tableComp, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION );
|
||||
Table table = fViewer.getTable();
|
||||
table.setLinesVisible( true );
|
||||
table.setHeaderVisible( true );
|
||||
GridData data = new GridData( SWT.FILL, SWT.FILL, true, true );
|
||||
data.widthHint = 500;
|
||||
data.heightHint = 200;
|
||||
table.setLayoutData( data );
|
||||
|
||||
table.addControlListener( fTableListener );
|
||||
|
||||
TableColumn nameColumn = new TableColumn( table, SWT.NULL );
|
||||
nameColumn.setResizable( true );
|
||||
nameColumn.setText( SourceLookupUIMessages.getString( "PathMappingDialog.1" ) ); //$NON-NLS-1$
|
||||
nameColumn.setToolTipText( SourceLookupUIMessages.getString( "MappingSourceContainerDialog.1" ) ); //$NON-NLS-1$
|
||||
|
||||
TableColumn valueColumn = new TableColumn( table, SWT.NULL );
|
||||
valueColumn.setResizable( true );
|
||||
valueColumn.setText( SourceLookupUIMessages.getString( "PathMappingDialog.2" ) ); //$NON-NLS-1$
|
||||
valueColumn.setToolTipText( SourceLookupUIMessages.getString( "MappingSourceContainerDialog.2" ) ); //$NON-NLS-1$
|
||||
|
||||
fViewer.setColumnProperties(
|
||||
new String[] {
|
||||
CP_COMPILATION_PATH,
|
||||
CP_FILE_SYSTEM_PATH,
|
||||
} );
|
||||
|
||||
fViewer.setContentProvider( new IStructuredContentProvider() {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
|
||||
*/
|
||||
public Object[] getElements( Object inputElement ) {
|
||||
if ( inputElement instanceof MappingSourceContainer ) {
|
||||
try {
|
||||
return ((MappingSourceContainer)inputElement).getSourceContainers();
|
||||
}
|
||||
catch( CoreException e ) {
|
||||
}
|
||||
}
|
||||
return new Object[0];
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
|
||||
*/
|
||||
public void dispose() {
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
|
||||
*/
|
||||
public void inputChanged( Viewer viewer, Object oldInput, Object newInput ) {
|
||||
}
|
||||
} );
|
||||
|
||||
fViewer.setCellEditors( new CellEditor[] {
|
||||
new TextCellEditor( table ),
|
||||
new DirectoryCellEditor( table ),
|
||||
} );
|
||||
|
||||
fViewer.setCellModifier( new EntryCellModifier() );
|
||||
|
||||
fViewer.setLabelProvider( new EntryLabelProvider() );
|
||||
|
||||
fViewer.addSelectionChangedListener( new ISelectionChangedListener() {
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
|
||||
*/
|
||||
public void selectionChanged( SelectionChangedEvent event ) {
|
||||
updateViewerButtons();
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
private void createViewerButtonBar( Composite parent ) {
|
||||
Composite buttonComp = new Composite( parent, SWT.NONE );
|
||||
buttonComp.setLayout( new GridLayout() );
|
||||
buttonComp.setLayoutData( new GridData( SWT.RIGHT, SWT.FILL, false, false ) );
|
||||
|
||||
fAddButton = createPushButton( buttonComp, SourceLookupUIMessages.getString( "MappingSourceContainerDialog.3" ) ); //$NON-NLS-1$
|
||||
fAddButton.addSelectionListener( new SelectionAdapter() {
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
|
||||
*/
|
||||
@Override
|
||||
public void widgetSelected( SelectionEvent event ) {
|
||||
addPathEntry();
|
||||
}
|
||||
} );
|
||||
|
||||
fRemoveButton = createPushButton( buttonComp, SourceLookupUIMessages.getString( "PathMappingDialog.15" ) ); //$NON-NLS-1$
|
||||
fRemoveButton.addSelectionListener( new SelectionAdapter() {
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
|
||||
*/
|
||||
@Override
|
||||
public void widgetSelected( SelectionEvent event ) {
|
||||
removePathEntries();
|
||||
}
|
||||
} );
|
||||
|
||||
fUpButton = createPushButton( buttonComp, SourceLookupUIMessages.getString( "MappingSourceContainerDialog.4" ) ); //$NON-NLS-1$
|
||||
fUpButton.addSelectionListener( new SelectionAdapter() {
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
|
||||
*/
|
||||
@Override
|
||||
public void widgetSelected( SelectionEvent event ) {
|
||||
move( true );
|
||||
}
|
||||
} );
|
||||
|
||||
fDownButton = createPushButton( buttonComp, SourceLookupUIMessages.getString( "MappingSourceContainerDialog.5" ) ); //$NON-NLS-1$
|
||||
fDownButton.addSelectionListener( new SelectionAdapter() {
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
|
||||
*/
|
||||
@Override
|
||||
public void widgetSelected( SelectionEvent event ) {
|
||||
move( false );
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
private void initialize() {
|
||||
fNameText.setText( fContainer.getName() );
|
||||
fNameText.selectAll();
|
||||
fViewer.setInput( fContainer );
|
||||
updateViewerButtons();
|
||||
}
|
||||
|
||||
private Button createPushButton( Composite parent, String label ) {
|
||||
Button button = new Button( parent, SWT.PUSH );
|
||||
button.setText( label );
|
||||
GridData gd = new GridData( SWT.FILL, SWT.BEGINNING, true, false );
|
||||
gd.widthHint = SWTUtil.getButtonWidthHint( button );
|
||||
button.setLayoutData( gd );
|
||||
return button;
|
||||
}
|
||||
|
||||
private MapEntrySourceContainer[] getSelectedEntries() {
|
||||
List<?> list = ((IStructuredSelection)fViewer.getSelection()).toList();
|
||||
return list.toArray( new MapEntrySourceContainer[list.size()] );
|
||||
}
|
||||
|
||||
private void updateErrorMessage() {
|
||||
setErrorMessage( null );
|
||||
try {
|
||||
ISourceContainer[] containers = fContainer.getSourceContainers();
|
||||
if ( containers.length == 0 )
|
||||
return;
|
||||
for ( ISourceContainer c : containers ) {
|
||||
MapEntrySourceContainer entry = (MapEntrySourceContainer)c;
|
||||
IPath backendPath = entry.getBackendPath();
|
||||
if ( backendPath.isEmpty() ) {
|
||||
setErrorMessage( SourceLookupUIMessages.getString( "PathMappingDialog.5" ) ); //$NON-NLS-1$
|
||||
break;
|
||||
}
|
||||
if ( !backendPath.isValidPath( backendPath.toString() ) ) {
|
||||
setErrorMessage( SourceLookupUIMessages.getString( "PathMappingDialog.6" ) ); //$NON-NLS-1$
|
||||
break;
|
||||
}
|
||||
IPath localPath = entry.getLocalPath();
|
||||
if ( localPath.isEmpty() ) {
|
||||
setErrorMessage( SourceLookupUIMessages.getString( "PathMappingDialog.7" ) ); //$NON-NLS-1$
|
||||
break;
|
||||
}
|
||||
if ( !localPath.toFile().exists() ) {
|
||||
setErrorMessage( SourceLookupUIMessages.getString( "PathMappingDialog.8" ) ); //$NON-NLS-1$
|
||||
break;
|
||||
}
|
||||
if ( !localPath.toFile().isDirectory() ) {
|
||||
setErrorMessage( SourceLookupUIMessages.getString( "PathMappingDialog.9" ) ); //$NON-NLS-1$
|
||||
break;
|
||||
}
|
||||
if ( !localPath.toFile().isAbsolute() ) {
|
||||
setErrorMessage( SourceLookupUIMessages.getString( "PathMappingDialog.10" ) ); //$NON-NLS-1$
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch( CoreException e ) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
|
||||
private void updateViewerButtons() {
|
||||
boolean ok = true;
|
||||
boolean remove = true;
|
||||
boolean up = true;
|
||||
boolean down = true;
|
||||
|
||||
try {
|
||||
ISourceContainer[] allEntries = fContainer.getSourceContainers();
|
||||
MapEntrySourceContainer[] entries = getSelectedEntries();
|
||||
if ( entries.length == 0 ) {
|
||||
remove = false;
|
||||
}
|
||||
|
||||
if ( entries.length != 1 ) {
|
||||
up = false;
|
||||
down = false;
|
||||
}
|
||||
else {
|
||||
up = ( !entries[0].equals( allEntries[0] ) );
|
||||
down = ( !entries[0].equals( allEntries[allEntries.length - 1] ) );
|
||||
}
|
||||
|
||||
ok = ( allEntries.length != 0 && fIsValid );
|
||||
}
|
||||
catch( CoreException e ) {
|
||||
// ignore, shouldn't happen
|
||||
}
|
||||
getButton( IDialogConstants.OK_ID ).setEnabled( ok );
|
||||
fRemoveButton.setEnabled( remove );
|
||||
fUpButton.setEnabled( up );
|
||||
fDownButton.setEnabled( down );
|
||||
}
|
||||
|
||||
private void refresh() {
|
||||
ISelection s = fViewer.getSelection();
|
||||
fViewer.refresh();
|
||||
fViewer.setSelection( s );
|
||||
updateErrorMessage();
|
||||
updateViewerButtons();
|
||||
}
|
||||
|
||||
void controlMoved( ControlEvent e ) {
|
||||
}
|
||||
|
||||
void controlResized( ControlEvent e ) {
|
||||
// resize columns
|
||||
Table table = fViewer.getTable();
|
||||
int width = table.getSize().x;
|
||||
if ( width > 0 ) {
|
||||
TableColumn[] columns = table.getColumns();
|
||||
int colWidth = width / columns.length;
|
||||
for ( TableColumn col : columns ) {
|
||||
if ( col.getWidth() == 0 ) {
|
||||
col.setWidth( colWidth );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void addPathEntry() {
|
||||
MapEntrySourceContainer entry = new MapEntrySourceContainer();
|
||||
fContainer.addMapEntry( entry );
|
||||
fViewer.refresh();
|
||||
fViewer.setSelection( new StructuredSelection( entry ), true );
|
||||
updateViewerButtons();
|
||||
fViewer.editElement( entry, 0 );
|
||||
}
|
||||
|
||||
void removePathEntries() {
|
||||
MapEntrySourceContainer[] entries = getSelectedEntries();
|
||||
fContainer.removeMapEntries( entries );
|
||||
refresh();
|
||||
}
|
||||
|
||||
void move( boolean up ) {
|
||||
MapEntrySourceContainer[] selEntries = getSelectedEntries();
|
||||
if ( selEntries.length != 1 )
|
||||
return;
|
||||
MapEntrySourceContainer entry = selEntries[0];
|
||||
try {
|
||||
ISourceContainer[] containers = fContainer.getSourceContainers();
|
||||
List<MapEntrySourceContainer> list = new ArrayList<MapEntrySourceContainer>( containers.length );
|
||||
for ( ISourceContainer container : containers ) {
|
||||
list.add( ((MapEntrySourceContainer)container).copy() );
|
||||
}
|
||||
int index = list.indexOf( entry );
|
||||
list.remove( index );
|
||||
index = ( up ) ? index - 1 : index + 1;
|
||||
list.add( index, entry );
|
||||
fContainer.clear();
|
||||
fContainer.addMapEntries( list.toArray( new MapEntrySourceContainer[list.size()] ) );
|
||||
refresh();
|
||||
}
|
||||
catch( CoreException e ) {
|
||||
}
|
||||
catch( IndexOutOfBoundsException e ) {
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2009 ARM Limited 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:
|
||||
* ARM Limited - Initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.debug.internal.ui.sourcelookup;
|
||||
|
||||
import org.eclipse.cdt.debug.core.sourcelookup.MappingSourceContainer;
|
||||
import org.eclipse.debug.core.sourcelookup.ISourceContainer;
|
||||
import org.eclipse.debug.core.sourcelookup.ISourceLookupDirector;
|
||||
import org.eclipse.debug.ui.sourcelookup.AbstractSourceContainerBrowser;
|
||||
import org.eclipse.jface.window.Window;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
public class NewMappingSourceContainerBrowser extends AbstractSourceContainerBrowser {
|
||||
|
||||
private static final String MAPPING = SourceLookupUIMessages.getString( "MappingSourceContainerBrowser.0" ); //$NON-NLS-1$
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.debug.ui.sourcelookup.AbstractSourceContainerBrowser#addSourceContainers(org.eclipse.swt.widgets.Shell, org.eclipse.debug.core.sourcelookup.ISourceLookupDirector)
|
||||
*/
|
||||
@Override
|
||||
public ISourceContainer[] addSourceContainers( Shell shell, ISourceLookupDirector director ) {
|
||||
MappingSourceContainerDialog dialog =
|
||||
new MappingSourceContainerDialog( shell, new MappingSourceContainer( MAPPING ) );
|
||||
if ( dialog.open() == Window.OK ) {
|
||||
return new ISourceContainer[] { dialog.getContainer() };
|
||||
}
|
||||
return new ISourceContainer[0];
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.debug.ui.sourcelookup.AbstractSourceContainerBrowser#canEditSourceContainers(org.eclipse.debug.core.sourcelookup.ISourceLookupDirector, org.eclipse.debug.core.sourcelookup.ISourceContainer[])
|
||||
*/
|
||||
public boolean canEditSourceContainers( ISourceLookupDirector director, ISourceContainer[] containers ) {
|
||||
return ( containers.length == 1 && containers[0] instanceof MappingSourceContainer );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.debug.ui.sourcelookup.AbstractSourceContainerBrowser#editSourceContainers(org.eclipse.swt.widgets.Shell, org.eclipse.debug.core.sourcelookup.ISourceLookupDirector, org.eclipse.debug.core.sourcelookup.ISourceContainer[])
|
||||
*/
|
||||
public ISourceContainer[] editSourceContainers( Shell shell, ISourceLookupDirector director, ISourceContainer[] containers ) {
|
||||
if ( containers.length == 1 && containers[0] instanceof MappingSourceContainer ) {
|
||||
MappingSourceContainerDialog dialog =
|
||||
new MappingSourceContainerDialog( shell, (MappingSourceContainer)containers[0] );
|
||||
if ( dialog.open() == Window.OK ) {
|
||||
return new ISourceContainer[] { dialog.getContainer() };
|
||||
}
|
||||
}
|
||||
return new ISourceContainer[0];
|
||||
}
|
||||
}
|
|
@ -16,6 +16,12 @@ AddSourceContainerDialog.1=Select the type of source to add to the source lookup
|
|||
DownAction.0=&Down
|
||||
EditContainerAction.0=&Edit...
|
||||
MappingSourceContainerBrowser.0=New Mapping
|
||||
MappingSourceContainerDialog.0=Add/Modify path mapping
|
||||
MappingSourceContainerDialog.1=Compilation path
|
||||
MappingSourceContainerDialog.2=Local file system path
|
||||
MappingSourceContainerDialog.3=Add
|
||||
MappingSourceContainerDialog.4=Up
|
||||
MappingSourceContainerDialog.5=Down
|
||||
AbsolutePathSourceContainerBrowser.0=Absolute Path
|
||||
PathMappingDialog.0=Specify the mapping paths
|
||||
PathMappingDialog.1=Compilation path:
|
||||
|
|
Loading…
Add table
Reference in a new issue