diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog index c814a987e62..023f2bd5c28 100644 --- a/debug/org.eclipse.cdt.debug.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog @@ -1,3 +1,11 @@ +2002-12-19 Mikhail Khodjaiants + Implementing the 'Source Lookup' property page. + * AddSourceLocationWizard.java + * SourceLookupBlock.java + * SourcePropertyPage.java + icons/full/obj16/project_obj.gif + icons/full/obj16/folder_obj.gif + 2002-12-19 Mikhail Khodjaiants Added the 'org.eclipse.cdt.debug.internal.ui.dialogfields' package. diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/obj16/folder_obj.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/obj16/folder_obj.gif new file mode 100644 index 00000000000..a9c777343c0 Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/obj16/folder_obj.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/obj16/project_obj.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/obj16/project_obj.gif new file mode 100644 index 00000000000..7b2b6334ca0 Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/obj16/project_obj.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugImages.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugImages.java index bbaf9b64911..e1b2999cc93 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugImages.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugImages.java @@ -61,6 +61,8 @@ public class CDebugImages public static final String IMG_OBJS_REGISTER_GROUP = NAME_PREFIX + "registergroup_obj.gif"; //$NON-NLS-1$ public static final String IMG_OBJS_REGISTER = NAME_PREFIX + "register_obj.gif"; //$NON-NLS-1$ public static final String IMG_OBJS_DISASSEMBLY = NAME_PREFIX + "disassembly_obj.gif"; //$NON-NLS-1$ + public static final String IMG_OBJS_PROJECT = NAME_PREFIX + "project_obj.gif"; //$NON-NLS-1$ + public static final String IMG_OBJS_FOLDER = NAME_PREFIX + "folder_obj.gif"; //$NON-NLS-1$ public static final String IMG_LCL_TYPE_NAMES = NAME_PREFIX + "tnames_co.gif"; //$NON-NLS-1$ public static final String IMG_LCL_CHANGE_REGISTER_VALUE = NAME_PREFIX + "change_reg_value_co.gif"; //$NON-NLS-1$ @@ -97,6 +99,8 @@ public class CDebugImages public static final ImageDescriptor DESC_OBJS_REGISTER_GROUP = createManaged( T_OBJ, IMG_OBJS_REGISTER_GROUP ); public static final ImageDescriptor DESC_OBJS_REGISTER = createManaged( T_OBJ, IMG_OBJS_REGISTER ); public static final ImageDescriptor DESC_OBJS_DISASSEMBLY = createManaged( T_OBJ, IMG_OBJS_DISASSEMBLY ); + public static final ImageDescriptor DESC_OBJS_PROJECT = createManaged( T_OBJ, IMG_OBJS_PROJECT ); + public static final ImageDescriptor DESC_OBJS_FOLDER = createManaged( T_OBJ, IMG_OBJS_FOLDER ); /** * Returns the image managed under the given key in this registry. diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/wizards/AddSourceLocationWizard.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/wizards/AddSourceLocationWizard.java new file mode 100644 index 00000000000..d19943743b9 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/wizards/AddSourceLocationWizard.java @@ -0,0 +1,66 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.ui.wizards; + +import org.eclipse.jface.wizard.Wizard; +import org.eclipse.jface.wizard.WizardSelectionPage; +import org.eclipse.swt.widgets.Composite; + +/** + * Enter type comment. + * + * @since: Dec 20, 2002 + */ +public class AddSourceLocationWizard extends Wizard +{ + /** + * Enter type comment. + * + * @since: Dec 20, 2002 + */ + public class SourceLocationSelectionPage extends WizardSelectionPage + { + + /** + * Constructor for SourceLocationSelectionPage. + * @param pageName + */ + public SourceLocationSelectionPage( String pageName ) + { + super( pageName ); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.dialogs.IDialogPage#createControl(Composite) + */ + public void createControl( Composite parent ) + { + } + } + /** + * Constructor for AddSourceLocationWizard. + */ + public AddSourceLocationWizard() + { + super(); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.wizard.IWizard#performFinish() + */ + public boolean performFinish() + { + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.wizard.Wizard#addPages() + */ + public void addPages() + { + addPage( new SourceLocationSelectionPage( "Add Source Location" ) ); + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/SourceLookupBlock.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/SourceLookupBlock.java index c35e41306f2..d8896ee6ab3 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/SourceLookupBlock.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/SourceLookupBlock.java @@ -5,11 +5,21 @@ */ package org.eclipse.cdt.debug.ui.sourcelookup; -import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation; +import org.eclipse.cdt.debug.internal.core.sourcelookup.CDirectorySourceLocation; +import org.eclipse.cdt.debug.internal.core.sourcelookup.CProjectSourceLocation; +import org.eclipse.cdt.debug.internal.ui.CDebugImages; +import org.eclipse.cdt.debug.internal.ui.PixelConverter; +import org.eclipse.cdt.debug.internal.ui.dialogfields.DialogField; +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.ListDialogField; +import org.eclipse.cdt.debug.internal.ui.wizards.AddSourceLocationWizard; import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.FontMetrics; -import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; @@ -24,62 +34,136 @@ import org.eclipse.swt.widgets.Shell; */ public class SourceLookupBlock { + private class SourceLookupAdapter implements IListAdapter + { + public void customButtonPressed( DialogField field, int index ) + { + doButtonPressed( index ); + } + + public void selectionChanged( DialogField field ) + { + doSelectionChanged(); + } + } + + private static class SourceLookupLabelProvider extends LabelProvider + { + public String getText( Object element ) + { + if ( element instanceof CProjectSourceLocation ) + { + return ((CProjectSourceLocation)element).getProject().getName(); + } + if ( element instanceof CDirectorySourceLocation ) + { + return ((CDirectorySourceLocation)element).getDirectory().toOSString(); + } + return null; + } + + public Image getImage( Object element ) + { + if ( element instanceof CProjectSourceLocation ) + { + return CDebugImages.get( CDebugImages.IMG_OBJS_PROJECT ); + } + if ( element instanceof CDirectorySourceLocation ) + { + return CDebugImages.get( CDebugImages.IMG_OBJS_FOLDER ); + } + return null; + } + } + private Composite fControl = null; private Shell fShell = null; - private FontMetrics fFontMetrics = null; + private ListDialogField fSourceListField; /** * Constructor for SourceLookupBlock. */ public SourceLookupBlock() { - super(); + String[] buttonLabels = new String[] + { + /* 0 */ "Add...", + /* 1 */ "Edit...", + /* 2 */ null, + /* 3 */ "Up", + /* 4 */ "Down", + /* 5 */ null, + /* 6 */ "Remove", + }; + + SourceLookupAdapter adapter = new SourceLookupAdapter(); + + fSourceListField = new ListDialogField( adapter, buttonLabels, new SourceLookupLabelProvider() ); + fSourceListField.setLabelText( "Source Locations" ); + fSourceListField.setUpButtonIndex( 3 ); + fSourceListField.setDownButtonIndex( 4 ); + fSourceListField.setRemoveButtonIndex( 6 ); + + fSourceListField.enableButton( 1, false ); } public void createControl( Composite parent ) { fShell = parent.getShell(); fControl = new Composite( parent, SWT.NONE ); - fControl.setLayout( new GridLayout( 2, false ) ); + GridLayout layout = new GridLayout(); + layout.numColumns = 2; + layout.marginWidth = 0; + layout.marginHeight = 0; + fControl.setLayout( layout ); fControl.setLayoutData( new GridData( GridData.FILL_BOTH ) ); fControl.setFont( JFaceResources.getDialogFont() ); - createListControl( fControl ); - createButtonBar( fControl ); + + PixelConverter converter = new PixelConverter( fControl ); + + fSourceListField.doFillIntoGrid( fControl, 3 ); + LayoutUtil.setHorizontalSpan( fSourceListField.getLabelControl( null ), 2 ); + LayoutUtil.setWidthHint( fSourceListField.getLabelControl( null ), converter.convertWidthInCharsToPixels( 40 ) ); + LayoutUtil.setHorizontalGrabbing( fSourceListField.getListControl( null ) ); } public Control getControl() { return fControl; } - - protected void initializeDialogUnits( Control control ) + + protected void initialize( ICSourceLocation[] locations ) { - // Compute and store a font metric - GC gc = new GC( control ); - gc.setFont( control.getFont() ); - fFontMetrics = gc.getFontMetrics(); - gc.dispose(); + fSourceListField.removeAllElements(); + for ( int i = 0; i < locations.length; ++i ) + { + fSourceListField.addElement( locations[i] ); + } } - protected int convertVerticalDLUsToPixels( int dlus ) + protected void doButtonPressed( int index ) { - if ( fFontMetrics == null ) - return 0; - return Dialog.convertVerticalDLUsToPixels( fFontMetrics, dlus ); - } - - protected int convertHorizontalDLUsToPixels( int dlus ) - { - if ( fFontMetrics == null ) - return 0; - return Dialog.convertHorizontalDLUsToPixels( fFontMetrics, dlus ); + switch( index ) + { + case 0: // Add... + addSourceLocation(); + break; + } } - protected void createListControl( Composite parent ) + protected void doSelectionChanged() { } - - protected void createButtonBar( Composite parent ) + + protected ICSourceLocation[] getSourceLocations() { + return (ICSourceLocation[])fSourceListField.getElements().toArray( new ICSourceLocation[fSourceListField.getElements().size()] ); + } + + private void addSourceLocation() + { + AddSourceLocationWizard wizard = new AddSourceLocationWizard(); + WizardDialog dialog = new WizardDialog( fControl.getShell(), wizard ); + dialog.open(); } } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/SourcePropertyPage.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/SourcePropertyPage.java index c26bfac4184..0005f663a0f 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/SourcePropertyPage.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/SourcePropertyPage.java @@ -5,8 +5,14 @@ */ package org.eclipse.cdt.debug.ui.sourcelookup; +import org.eclipse.cdt.debug.core.model.ICDebugTarget; +import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation; +import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; import org.eclipse.ui.dialogs.PropertyPage; /** @@ -18,12 +24,15 @@ import org.eclipse.ui.dialogs.PropertyPage; public class SourcePropertyPage extends PropertyPage { private SourceLookupBlock fBlock = null; + + private boolean fHasActiveContents = false; /** * Constructor for SourcePropertyPage. */ public SourcePropertyPage() { + noDefaultAndApplyButton(); fBlock = new SourceLookupBlock(); } @@ -32,8 +41,78 @@ public class SourcePropertyPage extends PropertyPage */ protected Control createContents( Composite parent ) { + ICDebugTarget target = getDebugTarget(); + if ( target == null || target.isTerminated() || target.isDisconnected() ) + { + return createTerminatedContents( parent ); + } + fHasActiveContents = true; + return createActiveContents( parent ); + } + + protected Control createTerminatedContents( Composite parent ) + { + Label label= new Label( parent, SWT.LEFT ); + label.setText( "Terminated." ); + return label; + } + + protected Control createActiveContents( Composite parent ) + { + fBlock.initialize( getSourceLocations() ); fBlock.createControl( parent ); return fBlock.getControl(); } - + + protected ICDebugTarget getDebugTarget() + { + IAdaptable element = getElement(); + if ( element != null ) + { + return (ICDebugTarget)element.getAdapter( ICDebugTarget.class ); + } + return null; + } + + private ICSourceLocation[] getSourceLocations() + { + ICDebugTarget target = getDebugTarget(); + if ( target != null ) + { + if ( target.getLaunch().getSourceLocator() instanceof IAdaptable ) + { + ICSourceLocator locator = (ICSourceLocator)((IAdaptable)target.getLaunch().getSourceLocator()).getAdapter( ICSourceLocator.class ); + if ( locator != null ) + { + return locator.getSourceLocations(); + } + } + } + return new ICSourceLocation[0]; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.preference.IPreferencePage#performOk() + */ + public boolean performOk() + { + setSourceLocations( fBlock.getSourceLocations() ); + return true; + } + + private void setSourceLocations( ICSourceLocation[] locations ) + { + ICDebugTarget target = getDebugTarget(); + if ( target != null ) + { + if ( target.getLaunch().getSourceLocator() instanceof IAdaptable ) + { + ICSourceLocator locator = (ICSourceLocator)((IAdaptable)target.getLaunch().getSourceLocator()).getAdapter( ICSourceLocator.class ); + if ( locator != null ) + { + locator.setSourceLocations( locations ); + } + } + } + } }