diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog index dfbbb28da30..8a507537fe8 100644 --- a/debug/org.eclipse.cdt.debug.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog @@ -1,3 +1,13 @@ +2003-10-23 Mikhail Khodjaiants + Added a preference page for the source lookup. + It includes two new preferences: 'Source Locations' and 'Search For Duplicate Source Files'. + * plugin.properties + * plugin.xml + * ICDebugHelpContextIds.java + * SourcePreferencePage.java + * SourceListDialogField.java + * SourceLookupBlock.java + 2003-10-22 Mikhail Khodjaiants Refactoring: converting nested types 'SourceListDialogField' and 'SourceLookupLabelProvider' of 'SourceLookupBlock' to the top level types. diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.properties b/debug/org.eclipse.cdt.debug.ui/plugin.properties index b6809bf8562..481e4af6e6e 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.properties +++ b/debug/org.eclipse.cdt.debug.ui/plugin.properties @@ -16,6 +16,7 @@ MemoryPreferencePage.name=Memory View RegistersPreferencePage.name=Registers View CDebugPreferencePage.name=Debug SharedLibrariesPreferencePage.name=Shared Libraries View +SourcePreferencePage.name=Source RunMenu.label=&Run DebugActionSet.label=C/C++ Debug diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml index 9d243f5ce18..737b5b70f30 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.xml +++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml @@ -130,6 +130,12 @@ class="org.eclipse.cdt.debug.internal.ui.preferences.CDebugPreferencePage" id="org.eclipse.cdt.debug.ui.CDebugPreferencePage"> + + diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java index 34b3c41cb72..df0ad8a4f2f 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java @@ -43,6 +43,7 @@ public interface ICDebugHelpContextIds public static final String SIGNALS_VIEW = PREFIX + "signals_view_context"; //$NON-NLS-1$ // Preference pages + public static final String SOURCE_PREFERENCE_PAGE = PREFIX + "source_preference_page_context"; //$NON-NLS-1$ public static final String SHARED_LIBRARIES_PREFERENCE_PAGE = PREFIX + "shared_libraries_preference_page_context"; //$NON-NLS-1$ public static final String MEMORY_PREFERENCE_PAGE = PREFIX + "memory_preference_page_context"; //$NON-NLS-1$ public static final String REGISTERS_PREFERENCE_PAGE = PREFIX + "registers_preference_page_context"; //$NON-NLS-1$ diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/SourcePreferencePage.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/SourcePreferencePage.java new file mode 100644 index 00000000000..5afc6f17181 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/SourcePreferencePage.java @@ -0,0 +1,233 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ + +package org.eclipse.cdt.debug.internal.ui.preferences; + +import java.util.Arrays; +import java.util.Observable; +import java.util.Observer; + +import org.eclipse.cdt.debug.core.CDebugCorePlugin; +import org.eclipse.cdt.debug.core.ICDebugConstants; +import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation; +import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds; +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.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.SelectionButtonDialogField; +import org.eclipse.cdt.debug.internal.ui.wizards.AddSourceLocationWizard; +import org.eclipse.cdt.debug.ui.CDebugUIPlugin; +import org.eclipse.cdt.debug.ui.sourcelookup.SourceListDialogField; +import org.eclipse.jface.preference.PreferencePage; +import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.jface.window.Window; +import org.eclipse.jface.wizard.WizardDialog; +import org.eclipse.swt.SWT; +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.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; +import org.eclipse.ui.help.WorkbenchHelp; + +/** + * Enter type comment. + * + * @since Oct 22, 2003 + */ +public class SourcePreferencePage extends PreferencePage implements IWorkbenchPreferencePage, Observer +{ + private SourceListDialogField fSourceListField; + private SelectionButtonDialogField fSearchForDuplicateFiles; + + private boolean fChanged = false; + + public SourcePreferencePage() + { + super(); + setPreferenceStore( CDebugUIPlugin.getDefault().getPreferenceStore() ); + setDescription( "Common source lookup settings." ); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite) + */ + protected Control createContents( Composite parent ) + { + WorkbenchHelp.setHelp( getControl(), ICDebugHelpContextIds.SOURCE_PREFERENCE_PAGE ); + + fSourceListField = createSourceListField(); + fSearchForDuplicateFiles = createSearchForDuplicateFilesButton(); + + Composite control = new Composite( parent, SWT.NONE ); + GridLayout layout = new GridLayout(); + layout.numColumns = 2; + layout.marginWidth = 5; + layout.marginHeight = 5; + control.setLayout( layout ); + GridData data = new GridData(); + data.verticalAlignment = GridData.FILL; + data.horizontalAlignment = GridData.FILL; + control.setLayoutData( data ); + control.setFont( JFaceResources.getDialogFont() ); + + PixelConverter converter = new PixelConverter( control ); + + fSourceListField.doFillIntoGrid( control, 3 ); + LayoutUtil.setHorizontalSpan( fSourceListField.getLabelControl( null ), 2 ); + LayoutUtil.setWidthHint( fSourceListField.getLabelControl( null ), converter.convertWidthInCharsToPixels( 40 ) ); + LayoutUtil.setHorizontalGrabbing( fSourceListField.getListControl( null ) ); + fSearchForDuplicateFiles.doFillIntoGrid( control, 3 ); + + setValues(); + + return control; + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) + */ + public void init( IWorkbench workbench ) + { + } + + /* (non-Javadoc) + * @see java.util.Observer#update(java.util.Observable, java.lang.Object) + */ + public void update( Observable o, Object arg ) + { + setChanged( true ); + } + + private SourceListDialogField createSourceListField() + { + SourceListDialogField field = + new SourceListDialogField( "Source Locations", + new IListAdapter() + { + public void customButtonPressed( DialogField field, int index ) + { + sourceButtonPressed( index ); + } + + public void selectionChanged(DialogField field) + { + } + } ); + field.addObserver( this ); + return field; + } + + private SelectionButtonDialogField createSearchForDuplicateFilesButton() + { + SelectionButtonDialogField button = new SelectionButtonDialogField( SWT.CHECK ); + button.setLabelText( "Search for duplicate source files" ); + button.setDialogFieldListener( + new IDialogFieldListener() + { + public void dialogFieldChanged( DialogField field ) + { + setChanged( true ); + } + } ); + return button; + } + + protected void sourceButtonPressed( int index ) + { + switch( index ) + { + case 0: // Add... + if ( addSourceLocation() ) + setChanged( true ); + break; + case 2: // Up + case 3: // Down + case 5: // Remove + setChanged( true ); + break; + } + } + + protected boolean isChanged() + { + return fChanged; + } + + protected void setChanged( boolean changed ) + { + fChanged = changed; + } + + private boolean addSourceLocation() + { + AddSourceLocationWizard wizard = new AddSourceLocationWizard( getSourceLocations() ); + WizardDialog dialog = new WizardDialog( getShell(), wizard ); + if ( dialog.open() == Window.OK ) + { + fSourceListField.addElement( wizard.getSourceLocation() ); + return true; + } + return false; + } + + public ICSourceLocation[] getSourceLocations() + { + return ( fSourceListField != null ) ? fSourceListField.getSourceLocations() : new ICSourceLocation[0]; + } + + public void setSourceLocations( ICSourceLocation[] locations ) + { + if ( fSourceListField != null ) + fSourceListField.setElements( Arrays.asList( locations ) ); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.preference.PreferencePage#performDefaults() + */ + protected void performDefaults() + { + setSourceLocations( new ICSourceLocation[0] ); + setSearchForDuplicateFiles( false ); + super.performDefaults(); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.preference.IPreferencePage#performOk() + */ + public boolean performOk() + { + storeValues(); + CDebugCorePlugin.getDefault().savePluginPreferences(); + return true; + } + + private boolean searchForDuplicateFiles() + { + return ( fSearchForDuplicateFiles != null ) ? fSearchForDuplicateFiles.isSelected() : false; + } + + private void setSearchForDuplicateFiles( boolean search ) + { + if ( fSearchForDuplicateFiles != null ) + fSearchForDuplicateFiles.setSelection( search ); + } + + private void setValues() + { + setSourceLocations( CDebugCorePlugin.getDefault().getCommonSourceLocations() ); + setSearchForDuplicateFiles( CDebugCorePlugin.getDefault().getPluginPreferences().getBoolean( ICDebugConstants.PREF_SEARCH_DUPLICATE_FILES ) ); + } + + private void storeValues() + { + CDebugCorePlugin.getDefault().saveCommonSourceLocations( getSourceLocations() ); + CDebugCorePlugin.getDefault().getPluginPreferences().setValue( ICDebugConstants.PREF_SEARCH_DUPLICATE_FILES, searchForDuplicateFiles() ); + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/SourceListDialogField.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/SourceListDialogField.java index 38388582421..831dc2f83a5 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/SourceListDialogField.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/SourceListDialogField.java @@ -10,6 +10,7 @@ import java.util.List; import java.util.Observable; import java.util.Observer; +import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation; import org.eclipse.cdt.debug.internal.core.sourcelookup.CDirectorySourceLocation; import org.eclipse.cdt.debug.internal.ui.dialogfields.IListAdapter; import org.eclipse.cdt.debug.internal.ui.dialogfields.ListDialogField; @@ -203,4 +204,10 @@ public class SourceListDialogField extends ListDialogField { fObservable.setChanged(); } + + public ICSourceLocation[] getSourceLocations() + { + List list = getElements(); + return (ICSourceLocation[])list.toArray( new ICSourceLocation[list.size()] ); + } } \ No newline at end of file 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 8ec1f5ef9f1..b5d7c41acc5 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 @@ -11,7 +11,9 @@ import java.util.List; import java.util.Observable; import java.util.Observer; +import org.eclipse.cdt.debug.core.CDebugCorePlugin; import org.eclipse.cdt.debug.core.CDebugUtils; +import org.eclipse.cdt.debug.core.ICDebugConstants; import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation; import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator; import org.eclipse.cdt.debug.core.sourcelookup.IProjectSourceLocation; @@ -276,7 +278,7 @@ public class SourceLookupBlock implements Observer locations = CSourceLocator.getDefaultSourceLocations( getProject() ); resetGeneratedLocations( locations ); resetAdditionalLocations( locations ); - fSearchForDuplicateFiles.setSelection( false ); + fSearchForDuplicateFiles.setSelection( CDebugCorePlugin.getDefault().getPluginPreferences().getBoolean( ICDebugConstants.PREF_SEARCH_DUPLICATE_FILES ) ); } public IProject getProject()