diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog index d6ee9da0df8..915c32f1b2d 100644 --- a/debug/org.eclipse.cdt.debug.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog @@ -1,3 +1,15 @@ +2004-08-24 Mikhail Khodjaiants + Replaced the "Breakpoint Properties" dialog by standard property pages. + * CBreakpointPreferenceStore.java + * CBreakpointPropertiesAction.java + * CBreakpointPropertiesRulerAction.java + * CBreakpointPropertiesRulerActionDelegate.java + * CBreakpointPreferencePage.java renamed to CBreakpointPropertyPage.java + * CBreakpointPropertiesDialog.java: removed + * plugin.xml + * plugin.properties + * ActionMessages.properties + 2004-08-12 Mikhail Khodjaiants Fix for bug 70453. Linux: error exiting Eclipse on Linux RedHat or SuSe Enterprise Server 9. Applied modified patch from Sean Evoy. diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.properties b/debug/org.eclipse.cdt.debug.ui/plugin.properties index 0a917ba6b60..0ba85c71e63 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.properties +++ b/debug/org.eclipse.cdt.debug.ui/plugin.properties @@ -119,3 +119,5 @@ DebugTextHover.description=Shows the value of the expression selected in the deb DebuggingCContext.name=Debugging C/C++ DebuggingCContext.description=Debugging C/C++ Programs + +CommonBreakpointPage.label=Common \ No newline at end of file diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml index 0fe3915651a..f9e7277b6d7 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.xml +++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml @@ -1071,6 +1071,12 @@ class="org.eclipse.cdt.debug.ui.sourcelookup.SourcePropertyPage" id="org.eclipse.cdt.debug.ui.sourcelookup.SourcePropertyPage"> + 0 && (oldValue == null || !oldValue.equals( newValue ) ) ) - { + if ( listeners.length > 0 && (oldValue == null || !oldValue.equals( newValue )) ) { PropertyChangeEvent pe = new PropertyChangeEvent( this, name, oldValue, newValue ); - for ( int i = 0; i < listeners.length; ++i ) - { + for( int i = 0; i < listeners.length; ++i ) { IPropertyChangeListener l = (IPropertyChangeListener)listeners[i]; l.propertyChange( pe ); } } } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#getBoolean(String) */ - public boolean getBoolean( String name ) - { + public boolean getBoolean( String name ) { Object b = fProperties.get( name ); - if ( b instanceof Boolean ) - { + if ( b instanceof Boolean ) { return ((Boolean)b).booleanValue(); } return false; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#getDefaultBoolean(String) */ - public boolean getDefaultBoolean( String name ) - { + public boolean getDefaultBoolean( String name ) { return false; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#getDefaultDouble(String) */ - public double getDefaultDouble( String name ) - { + public double getDefaultDouble( String name ) { return 0; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#getDefaultFloat(String) */ - public float getDefaultFloat( String name ) - { + public float getDefaultFloat( String name ) { return 0; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#getDefaultInt(String) */ - public int getDefaultInt( String name ) - { + public int getDefaultInt( String name ) { return 0; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#getDefaultLong(String) */ - public long getDefaultLong( String name ) - { + public long getDefaultLong( String name ) { return 0; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#getDefaultString(String) */ - public String getDefaultString( String name ) - { + public String getDefaultString( String name ) { return null; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#getDouble(String) */ - public double getDouble( String name ) - { + public double getDouble( String name ) { return 0; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#getFloat(String) */ - public float getFloat( String name ) - { + public float getFloat( String name ) { return 0; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#getInt(String) */ - public int getInt( String name ) - { + public int getInt( String name ) { Object i = fProperties.get( name ); - if ( i instanceof Integer ) - { + if ( i instanceof Integer ) { return ((Integer)i).intValue(); } return 1; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#getLong(String) */ - public long getLong( String name ) - { + public long getLong( String name ) { return 0; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#getString(String) */ - public String getString( String name ) - { + public String getString( String name ) { Object str = fProperties.get( name ); - if ( str instanceof String ) - { + if ( str instanceof String ) { return (String)str; } return null; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#isDefault(String) */ - public boolean isDefault( String name ) - { + public boolean isDefault( String name ) { return false; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#needsSaving() */ - public boolean needsSaving() - { + public boolean needsSaving() { return fIsDirty; } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#putValue(String, String) */ - public void putValue( String name, String newValue ) - { + public void putValue( String name, String newValue ) { Object oldValue = fProperties.get( name ); - if ( oldValue == null || !oldValue.equals( newValue ) ) - { + if ( oldValue == null || !oldValue.equals( newValue ) ) { fProperties.put( name, newValue ); setDirty( true ); } } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#removePropertyChangeListener(IPropertyChangeListener) */ - public void removePropertyChangeListener( IPropertyChangeListener listener ) - { + public void removePropertyChangeListener( IPropertyChangeListener listener ) { fListeners.remove( listener ); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#setDefault(String, double) */ - public void setDefault( String name, double value ) - { + public void setDefault( String name, double value ) { } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#setDefault(String, float) */ - public void setDefault( String name, float value ) - { + public void setDefault( String name, float value ) { } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#setDefault(String, int) */ - public void setDefault( String name, int value ) - { + public void setDefault( String name, int value ) { } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#setDefault(String, long) */ - public void setDefault( String name, long value ) - { + public void setDefault( String name, long value ) { } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#setDefault(String, String) */ - public void setDefault( String name, String defaultObject ) - { + public void setDefault( String name, String defaultObject ) { } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#setDefault(String, boolean) */ - public void setDefault( String name, boolean value ) - { + public void setDefault( String name, boolean value ) { } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#setToDefault(String) */ - public void setToDefault( String name ) - { + public void setToDefault( String name ) { } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#setValue(String, double) */ - public void setValue( String name, double value ) - { + public void setValue( String name, double value ) { } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#setValue(String, float) */ - public void setValue( String name, float value ) - { + public void setValue( String name, float value ) { } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#setValue(String, int) */ - public void setValue( String name, int newValue ) - { + public void setValue( String name, int newValue ) { int oldValue = getInt( name ); - if ( oldValue != newValue ) - { + if ( oldValue != newValue ) { fProperties.put( name, new Integer( newValue ) ); setDirty( true ); firePropertyChangeEvent( name, new Integer( oldValue ), new Integer( newValue ) ); } } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#setValue(String, long) */ - public void setValue( String name, long value ) - { + public void setValue( String name, long value ) { } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#setValue(String, String) */ - public void setValue( String name, String newValue ) - { + public void setValue( String name, String newValue ) { Object oldValue = fProperties.get( name ); - if ( oldValue == null || !oldValue.equals( newValue ) ) - { + if ( oldValue == null || !oldValue.equals( newValue ) ) { fProperties.put( name, newValue ); setDirty( true ); firePropertyChangeEvent( name, oldValue, newValue ); } } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.preference.IPreferenceStore#setValue(String, boolean) */ - public void setValue( String name, boolean newValue ) - { + public void setValue( String name, boolean newValue ) { boolean oldValue = getBoolean( name ); - if ( oldValue != newValue ) - { + if ( oldValue != newValue ) { fProperties.put( name, new Boolean( newValue ) ); - setDirty(true); + setDirty( true ); firePropertyChangeEvent( name, new Boolean( oldValue ), new Boolean( newValue ) ); } } - protected void setDirty( boolean isDirty ) - { + protected void setDirty( boolean isDirty ) { fIsDirty = isDirty; } -} +} \ No newline at end of file diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPropertiesAction.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPropertiesAction.java index 84fe6de5a22..112fcd3d920 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPropertiesAction.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPropertiesAction.java @@ -11,86 +11,87 @@ package org.eclipse.cdt.debug.internal.ui.actions; import org.eclipse.cdt.debug.core.model.ICBreakpoint; +import org.eclipse.cdt.debug.ui.CDebugUIPlugin; import org.eclipse.jface.action.IAction; -import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.dialogs.PropertyDialogAction; /** - * * Presents a custom properties dialog to configure the attibutes of a C/C++ breakpoint. - * - * @since Sep 3, 2002 */ -public class CBreakpointPropertiesAction implements IObjectActionDelegate -{ +public class CBreakpointPropertiesAction implements IObjectActionDelegate { + private IWorkbenchPart fPart; + private ICBreakpoint fBreakpoint; /** * Constructor for CBreakpointPropertiesAction. */ - public CBreakpointPropertiesAction() - { + public CBreakpointPropertiesAction() { super(); } /* (non-Javadoc) - * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart) + * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction, org.eclipse.ui.IWorkbenchPart) */ - public void setActivePart( IAction action, IWorkbenchPart targetPart ) - { + public void setActivePart( IAction action, IWorkbenchPart targetPart ) { fPart = targetPart; } /* (non-Javadoc) - * @see org.eclipse.ui.IActionDelegate#run(IAction) + * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction) */ - public void run( IAction action ) - { - Dialog d = new CBreakpointPropertiesDialog( getActivePart().getSite().getShell(), getBreakpoint() ); - d.open(); + public void run( IAction action ) { + PropertyDialogAction propertyAction = new PropertyDialogAction( CDebugUIPlugin.getActiveWorkbenchShell(), new ISelectionProvider() { + + public void addSelectionChangedListener( ISelectionChangedListener listener ) { + } + + public ISelection getSelection() { + return new StructuredSelection( getBreakpoint() ); + } + + public void removeSelectionChangedListener( ISelectionChangedListener listener ) { + } + + public void setSelection( ISelection selection ) { + } + } ); + propertyAction.run(); } /* (non-Javadoc) - * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection) + * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection) */ - public void selectionChanged( IAction action, ISelection selection ) - { - if ( selection instanceof IStructuredSelection ) - { + public void selectionChanged( IAction action, ISelection selection ) { + if ( selection instanceof IStructuredSelection ) { IStructuredSelection ss = (IStructuredSelection)selection; - if ( ss.isEmpty() || ss.size() > 1 ) - { + if ( ss.isEmpty() || ss.size() > 1 ) { return; } Object element = ss.getFirstElement(); - if ( element instanceof ICBreakpoint ) - { + if ( element instanceof ICBreakpoint ) { setBreakpoint( (ICBreakpoint)element ); } } } - protected IWorkbenchPart getActivePart() - { + protected IWorkbenchPart getActivePart() { return fPart; } - protected void setActivePart( IWorkbenchPart part ) - { - fPart = part; - } - - protected ICBreakpoint getBreakpoint() - { + protected ICBreakpoint getBreakpoint() { return fBreakpoint; } - protected void setBreakpoint( ICBreakpoint breakpoint ) - { + protected void setBreakpoint( ICBreakpoint breakpoint ) { fBreakpoint = breakpoint; } -} +} \ No newline at end of file diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPropertiesDialog.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPropertiesDialog.java deleted file mode 100644 index f195369db50..00000000000 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPropertiesDialog.java +++ /dev/null @@ -1,510 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 QNX Software Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * QNX Software Systems - Initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.debug.internal.ui.actions; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.cdt.debug.core.model.ICBreakpoint; -import org.eclipse.cdt.debug.ui.CDebugUIPlugin; -import org.eclipse.core.resources.IWorkspaceRunnable; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.preference.IPreferencePageContainer; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.preference.PreferenceDialog; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.resource.ImageRegistry; -import org.eclipse.jface.resource.JFaceColors; -import org.eclipse.jface.resource.JFaceResources; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.CLabel; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -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.Display; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Layout; -import org.eclipse.swt.widgets.Shell; - -/** - * - * - * @since Aug 29, 2002 - */ -public class CBreakpointPropertiesDialog extends Dialog - implements IPreferencePageContainer -{ - /** - * Layout for the page container. - * - * @see CBreakpointPropertiesDialog#createPageContainer(Composite, int) - */ - private class PageLayout extends Layout - { - public void layout( Composite composite, boolean force ) - { - Rectangle rect = composite.getClientArea(); - Control[] children = composite.getChildren(); - for ( int i = 0; i < children.length; i++ ) - { - children[i].setSize( rect.width, rect.height ); - } - } - - public Point computeSize( Composite composite, int wHint, int hHint, boolean force ) - { - if ( wHint != SWT.DEFAULT && hHint != SWT.DEFAULT ) - return new Point( wHint, hHint ); - int x = getMinimumPageSize().x; - int y = getMinimumPageSize().y; - - Control[] children = composite.getChildren(); - for ( int i = 0; i < children.length; i++ ) - { - Point size = children[i].computeSize( SWT.DEFAULT, SWT.DEFAULT, force ); - x = Math.max( x, size.x ); - y = Math.max( y, size.y ); - } - if ( wHint != SWT.DEFAULT ) - x = wHint; - if ( hHint != SWT.DEFAULT ) - y = hHint; - return new Point( x, y ); - } - } - - private Composite fTitleArea; - private Label fTitleImage; - private CLabel fMessageLabel; - - private String fMessage; - private Color fNormalMsgAreaBackground; - private Image fErrorMsgImage; - - - private CBreakpointPreferencePage fPage; - - private Button fOkButton; - - /** - * Must declare our own images as the JFaceResource images will not be created unless - * a property/preference dialog has been shown - */ - protected static final String PREF_DLG_TITLE_IMG = "breakpoint_preference_dialog_title_image"; //$NON-NLS-1$ - protected static final String PREF_DLG_IMG_TITLE_ERROR = "breakpoint_preference_dialog_title_error_image"; //$NON-NLS-1$ - static - { - ImageRegistry reg = CDebugUIPlugin.getDefault().getImageRegistry(); - reg.put( PREF_DLG_TITLE_IMG, ImageDescriptor.createFromFile( PreferenceDialog.class, "images/pref_dialog_title.gif" ) ); //$NON-NLS-1$ - reg.put( PREF_DLG_IMG_TITLE_ERROR, ImageDescriptor.createFromFile( Dialog.class, "images/message_error.gif" ) ); //$NON-NLS-1$ - } - - /** - * The Composite in which a page is shown. - */ - private Composite fPageContainer; - - /** - * The minimum page size; 200 by 200 by default. - * - * @see #setMinimumPageSize(Point) - */ - private Point fMinimumPageSize = new Point(200,200); - - /** - * The breakpoint that this dialog is operating on - */ - private ICBreakpoint fBreakpoint; - - /** - * The "fake" preference store used to interface between - * the breakpoint and the breakpoint preference page. - */ - private CBreakpointPreferenceStore fCBreakpointPreferenceStore; - - /** - * Constructor for CBreakpointPropertiesDialog. - * @param parentShell - */ - public CBreakpointPropertiesDialog( Shell parentShell, ICBreakpoint breakpoint ) - { - super( parentShell ); - setBreakpoint( breakpoint ); - fCBreakpointPreferenceStore= new CBreakpointPreferenceStore(); - } - - /* (non-Javadoc) - * @see org.eclipse.jface.preference.IPreferencePageContainer#getPreferenceStore() - */ - public IPreferenceStore getPreferenceStore() - { - return fCBreakpointPreferenceStore; - } - - /* (non-Javadoc) - * @see org.eclipse.jface.preference.IPreferencePageContainer#updateButtons() - */ - public void updateButtons() - { - if ( fOkButton != null ) - { - fOkButton.setEnabled( fPage.isValid() ); - } - } - - /* (non-Javadoc) - * @see org.eclipse.jface.preference.IPreferencePageContainer#updateMessage() - */ - public void updateMessage() - { - String pageMessage = fPage.getMessage(); - String pageErrorMessage = fPage.getErrorMessage(); - - // Adjust the font - if ( pageMessage == null && pageErrorMessage == null ) - fMessageLabel.setFont( JFaceResources.getBannerFont() ); - else - fMessageLabel.setFont( JFaceResources.getDialogFont() ); - - // Set the message and error message - if ( pageMessage == null ) - { - setMessage( fPage.getTitle() ); - } - else - { - setMessage( pageMessage ); - } - setErrorMessage( pageErrorMessage ); - } - - /* (non-Javadoc) - * @see org.eclipse.jface.preference.IPreferencePageContainer#updateTitle() - */ - public void updateTitle() - { - setTitle( fPage.getTitle() ); - } - - /** - * Display the given error message. The currently displayed message - * is saved and will be redisplayed when the error message is set - * to null. - * - * @param errorMessage the errorMessage to display or null - */ - public void setErrorMessage( String errorMessage ) - { - if ( errorMessage == null ) - { - if ( fMessageLabel.getImage() != null ) - { - // we were previously showing an error - fMessageLabel.setBackground( fNormalMsgAreaBackground ); - fMessageLabel.setImage( null ); - fTitleImage.setImage( CDebugUIPlugin.getDefault().getImageRegistry().get( PREF_DLG_TITLE_IMG ) ); - fTitleArea.layout( true ); - } - // show the message - setMessage( fMessage ); - } - else - { - fMessageLabel.setText( errorMessage ); - if ( fMessageLabel.getImage() == null ) - { - // we were not previously showing an error - - // lazy initialize the error background color and image - if ( fErrorMsgImage == null ) - { - fErrorMsgImage = CDebugUIPlugin.getDefault().getImageRegistry().get( PREF_DLG_IMG_TITLE_ERROR ); - } - - // show the error - fNormalMsgAreaBackground = fMessageLabel.getBackground(); - fMessageLabel.setBackground( JFaceColors.getErrorBackground( fMessageLabel.getDisplay() ) ); - fMessageLabel.setImage( fErrorMsgImage ); - fTitleImage.setImage( null ); - fTitleArea.layout( true ); - } - } - } - - /** - * Set the message text. If the message line currently displays an error, - * the message is stored and will be shown after a call to clearErrorMessage - */ - public void setMessage( String newMessage ) - { - fMessage = newMessage; - if ( fMessage == null ) - { - fMessage = ""; //$NON-NLS-1$ - } - if ( fMessageLabel.getImage() == null ) - { - // we are not showing an error - fMessageLabel.setText( fMessage ); - } - } - - /** - * Sets the title for this dialog. - * - * @param title the title. - */ - public void setTitle( String title ) - { - Shell shell = getShell(); - if ( ( shell != null ) && !shell.isDisposed() ) - { - shell.setText( title ); - } - } - - /** - * @see Dialog#okPressed() - */ - protected void okPressed() - { - final List changedProperties = new ArrayList( 5 ); - getPreferenceStore().addPropertyChangeListener( - new IPropertyChangeListener() - { - /** - * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent) - */ - public void propertyChange( PropertyChangeEvent event ) - { - changedProperties.add( event.getProperty() ); - } - } ); - fPage.performOk(); - setBreakpointProperties( changedProperties ); - super.okPressed(); - } - - /** - * All of the properties that the user has changed via the dialog - * are written through to the breakpoint. - */ - protected void setBreakpointProperties( final List changedProperties ) - { - IWorkspaceRunnable wr = new IWorkspaceRunnable() - { - public void run( IProgressMonitor monitor ) throws CoreException - { - ICBreakpoint breakpoint = getBreakpoint(); - Iterator changed = changedProperties.iterator(); - while ( changed.hasNext() ) - { - String property = (String)changed.next(); - if ( property.equals( CBreakpointPreferenceStore.IGNORE_COUNT ) ) - { - breakpoint.setIgnoreCount( getPreferenceStore().getInt( CBreakpointPreferenceStore.IGNORE_COUNT ) ); - } - else if ( property.equals( CBreakpointPreferenceStore.CONDITION ) ) - { - breakpoint.setCondition( getPreferenceStore().getString( CBreakpointPreferenceStore.CONDITION ) ); - } - } - } - }; - - try - { - ResourcesPlugin.getWorkspace().run( wr, null ); - } - catch( CoreException ce ) - { - CDebugUIPlugin.log( ce ); - } - } - - protected ICBreakpoint getBreakpoint() - { - return fBreakpoint; - } - - protected void setBreakpoint( ICBreakpoint breakpoint ) - { - fBreakpoint = breakpoint; - } - - /** - * @see Dialog#createDialogArea(Composite) - */ - protected Control createDialogArea( Composite parent ) - { - GridData gd; - Composite composite = (Composite) super.createDialogArea( parent ); - ((GridLayout)composite.getLayout()).numColumns = 1; - - // Build the title area and separator line - Composite titleComposite = new Composite( composite, SWT.NONE ); - GridLayout layout = new GridLayout(); - layout.marginHeight = 0; - layout.marginWidth = 0; - layout.verticalSpacing = 0; - layout.horizontalSpacing = 0; - titleComposite.setLayout( layout ); - titleComposite.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) ); - - createTitleArea( titleComposite ); - - Label titleBarSeparator = new Label( titleComposite, SWT.HORIZONTAL | SWT.SEPARATOR ); - gd = new GridData( GridData.FILL_HORIZONTAL ); - titleBarSeparator.setLayoutData( gd ); - - // Build the Page container - fPageContainer = createPageContainer( composite, 2 ); - fPageContainer.setLayoutData( new GridData( GridData.FILL_BOTH ) ); - fPageContainer.setFont( parent.getFont() ); - - fPage = new CBreakpointPreferencePage( getBreakpoint() ); - fPage.setContainer( this ); - fPage.createControl( fPageContainer ); - - // Build the separator line - Label separator = new Label( composite, SWT.HORIZONTAL | SWT.SEPARATOR ); - gd = new GridData( GridData.FILL_HORIZONTAL ); - gd.horizontalSpan = 2; - separator.setLayoutData( gd ); - - return composite; - } - - /** - * Creates the dialog's title area. - * - * @param parent the SWT parent for the title area composite - * @return the created title area composite - */ - private Composite createTitleArea( Composite parent ) - { - // Create the title area which will contain - // a title, message, and image. - fTitleArea = new Composite( parent, SWT.NONE ); - GridLayout layout = new GridLayout(); - layout.marginHeight = 0; - layout.marginWidth = 0; - layout.verticalSpacing = 0; - layout.horizontalSpacing = 0; - layout.numColumns = 2; - - // Get the colors for the title area - Display display = parent.getDisplay(); - Color bg = JFaceColors.getBannerBackground( display ); - Color fg = JFaceColors.getBannerForeground( display ); - - GridData layoutData = new GridData( GridData.FILL_BOTH ); - fTitleArea.setLayout( layout ); - fTitleArea.setLayoutData( layoutData ); - fTitleArea.setBackground( bg ); - - // Message label - fMessageLabel = new CLabel( fTitleArea, SWT.LEFT ); - fMessageLabel.setBackground( bg ); - fMessageLabel.setForeground( fg ); - fMessageLabel.setText( " " ); //$NON-NLS-1$ - fMessageLabel.setFont( JFaceResources.getBannerFont() ); - - final IPropertyChangeListener fontListener = - new IPropertyChangeListener() - { - public void propertyChange( PropertyChangeEvent event ) - { - if ( JFaceResources.BANNER_FONT.equals( event.getProperty() ) || - JFaceResources.DIALOG_FONT.equals( event.getProperty() ) ) - { - updateMessage(); - } - } - }; - - fMessageLabel.addDisposeListener( - new DisposeListener() - { - public void widgetDisposed( DisposeEvent event ) - { - JFaceResources.getFontRegistry().removeListener( fontListener ); - } - } ); - - JFaceResources.getFontRegistry().addListener( fontListener ); - - GridData gd = new GridData( GridData.FILL_BOTH ); - fMessageLabel.setLayoutData( gd ); - - // Title image - fTitleImage = new Label( fTitleArea, SWT.LEFT ); - fTitleImage.setBackground( bg ); - fTitleImage.setImage( CDebugUIPlugin.getDefault().getImageRegistry().get( PREF_DLG_TITLE_IMG ) ); - gd = new GridData(); - gd.horizontalAlignment = GridData.END; - fTitleImage.setLayoutData( gd ); - - return fTitleArea; - } - - /** - * Creates the inner page container. - */ - private Composite createPageContainer( Composite parent, int numColumns ) - { - Composite result = new Composite( parent, SWT.NULL ); - result.setLayout( new PageLayout() ); - return result; - } - - /** - * Sets the minimum page size. - * - * @param size the page size encoded as - * new Point(width,height) - * @see #setMinimumPageSize(int,int) - */ - public void setMinimumPageSize( Point size ) - { - fMinimumPageSize.x = size.x; - fMinimumPageSize.y = size.y; - } - - /** - * @see Dialog#createButtonsForButtonBar(Composite) - */ - protected void createButtonsForButtonBar( Composite parent ) - { - fOkButton = createButton( parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true ); - createButton( parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false ); - } - - protected Point getMinimumPageSize() - { - return fMinimumPageSize; - } -} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPropertiesRulerAction.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPropertiesRulerAction.java index 3f76c2488a5..97156797440 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPropertiesRulerAction.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPropertiesRulerAction.java @@ -13,9 +13,13 @@ package org.eclipse.cdt.debug.internal.ui.actions; import org.eclipse.cdt.debug.core.model.ICBreakpoint; import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds; import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants; -import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.text.source.IVerticalRulerInfo; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.dialogs.PropertyDialogAction; import org.eclipse.ui.help.WorkbenchHelp; /** @@ -40,8 +44,22 @@ public class CBreakpointPropertiesRulerAction extends AbstractBreakpointRulerAct */ public void run() { if ( getBreakpoint() != null ) { - Dialog d = new CBreakpointPropertiesDialog( getTargetPart().getSite().getShell(), (ICBreakpoint)getBreakpoint() ); - d.open(); + PropertyDialogAction action = new PropertyDialogAction( getTargetPart().getSite().getShell(), new ISelectionProvider() { + + public void addSelectionChangedListener( ISelectionChangedListener listener ) { + } + + public ISelection getSelection() { + return new StructuredSelection( getBreakpoint() ); + } + + public void removeSelectionChangedListener( ISelectionChangedListener listener ) { + } + + public void setSelection( ISelection selection ) { + } + } ); + action.run(); } } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPropertiesRulerActionDelegate.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPropertiesRulerActionDelegate.java index 001a5ba9a1d..e6d6682016d 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPropertiesRulerActionDelegate.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPropertiesRulerActionDelegate.java @@ -1,13 +1,9 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 QNX Software Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html +/*************************************************************************************************************************************************************** + * Copyright (c) 2000, 2004 QNX Software Systems and others. All rights reserved. This program and the accompanying materials are made available under the terms + * of the Common Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/cpl-v10.html * - * Contributors: - * QNX Software Systems - Initial API and implementation - *******************************************************************************/ + * Contributors: QNX Software Systems - Initial API and implementation + **************************************************************************************************************************************************************/ package org.eclipse.cdt.debug.internal.ui.actions; import org.eclipse.jface.action.IAction; @@ -15,19 +11,12 @@ import org.eclipse.jface.text.source.IVerticalRulerInfo; import org.eclipse.ui.texteditor.AbstractRulerActionDelegate; import org.eclipse.ui.texteditor.ITextEditor; -/** - * - * Enter type comment. - * - * @since Aug 29, 2002 - */ -public class CBreakpointPropertiesRulerActionDelegate extends AbstractRulerActionDelegate -{ +public class CBreakpointPropertiesRulerActionDelegate extends AbstractRulerActionDelegate { + /* (non-Javadoc) - * @see org.eclipse.ui.texteditor.AbstractRulerActionDelegate#createAction(ITextEditor, IVerticalRulerInfo) + * @see org.eclipse.ui.texteditor.AbstractRulerActionDelegate#createAction(org.eclipse.ui.texteditor.ITextEditor, org.eclipse.jface.text.source.IVerticalRulerInfo) */ - protected IAction createAction( ITextEditor editor, IVerticalRulerInfo rulerInfo ) - { + protected IAction createAction( ITextEditor editor, IVerticalRulerInfo rulerInfo ) { return new CBreakpointPropertiesRulerAction( editor, rulerInfo ); } -} +} \ No newline at end of file diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPreferencePage.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPropertyPage.java similarity index 65% rename from debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPreferencePage.java rename to debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPropertyPage.java index 6f42d37b6f9..a4ec7901ca9 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPreferencePage.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/CBreakpointPropertyPage.java @@ -10,37 +10,48 @@ ***********************************************************************/ package org.eclipse.cdt.debug.internal.ui.actions; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; import org.eclipse.cdt.debug.core.CDebugUtils; import org.eclipse.cdt.debug.core.model.ICAddressBreakpoint; import org.eclipse.cdt.debug.core.model.ICBreakpoint; import org.eclipse.cdt.debug.core.model.ICFunctionBreakpoint; import org.eclipse.cdt.debug.core.model.ICWatchpoint; import org.eclipse.cdt.debug.ui.CDebugUIPlugin; +import org.eclipse.core.resources.IWorkspaceRunnable; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.debug.core.model.ILineBreakpoint; +import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.FieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.IntegerFieldEditor; import org.eclipse.jface.preference.StringFieldEditor; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; 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.Label; import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.IWorkbenchPropertyPage; /** * The preference page used to present the properties of a breakpoint as preferences. A CBreakpointPreferenceStore is used to interface between this page and * the breakpoint. */ -public class CBreakpointPreferencePage extends FieldEditorPreferencePage { +public class CBreakpointPropertyPage extends FieldEditorPreferencePage implements IWorkbenchPropertyPage { class BreakpointIntegerFieldEditor extends IntegerFieldEditor { public BreakpointIntegerFieldEditor( String name, String labelText, Composite parent ) { super( name, labelText, parent ); - setErrorMessage( ActionMessages.getString( "CBreakpointPreferencePage.0" ) ); //$NON-NLS-1$ + setErrorMessage( ActionMessages.getString( "CBreakpointPropertyPage.0" ) ); //$NON-NLS-1$ } /** @@ -203,23 +214,31 @@ public class CBreakpointPreferencePage extends FieldEditorPreferencePage { } } + private BooleanFieldEditor fEnabled; + private BreakpointStringFieldEditor fCondition; private Text fIgnoreCountTextControl; private BreakpointIntegerFieldEditor fIgnoreCount; - private ICBreakpoint fBreakpoint; + private IAdaptable fElement; /** - * Constructor for CBreakpointPreferencePage. + * The "fake" preference store used to interface between + * the breakpoint and the breakpoint preference page. + */ + private CBreakpointPreferenceStore fCBreakpointPreferenceStore; + + /** + * Constructor for CBreakpointPropertyPage. * * @param breakpoint */ - public CBreakpointPreferencePage( ICBreakpoint breakpoint ) { + public CBreakpointPropertyPage() { super( GRID ); - setBreakpoint( breakpoint ); noDefaultAndApplyButton(); + fCBreakpointPreferenceStore = new CBreakpointPreferenceStore(); } /* @@ -230,6 +249,7 @@ public class CBreakpointPreferencePage extends FieldEditorPreferencePage { protected void createFieldEditors() { ICBreakpoint breakpoint = getBreakpoint(); createTypeSpecificLabelFieldEditors( breakpoint ); + createEnabledField( getFieldEditorParent() ); IPreferenceStore store = getPreferenceStore(); try { String condition = breakpoint.getCondition(); @@ -256,7 +276,8 @@ public class CBreakpointPreferencePage extends FieldEditorPreferencePage { private void createTypeSpecificLabelFieldEditors( ICBreakpoint breakpoint ) { if ( breakpoint instanceof ICFunctionBreakpoint ) { ICFunctionBreakpoint fbrkpt = (ICFunctionBreakpoint)breakpoint; - String function = ActionMessages.getString( "CBreakpointPreferencePage.1" ); //$NON-NLS-1$ + addField( createLabelEditor( getFieldEditorParent(), ActionMessages.getString( "CBreakpointPropertyPage.18" ), ActionMessages.getString( "CBreakpointPropertyPage.3" ) ) ); //$NON-NLS-1$//$NON-NLS-2$ + String function = ActionMessages.getString( "CBreakpointPropertyPage.1" ); //$NON-NLS-1$ try { function = fbrkpt.getFunction(); } @@ -265,13 +286,13 @@ public class CBreakpointPreferencePage extends FieldEditorPreferencePage { catch( NumberFormatException e ) { } if ( function != null ) { - addField( createLabelEditor( getFieldEditorParent(), ActionMessages.getString( "CBreakpointPreferencePage.2" ), function ) ); //$NON-NLS-1$ + addField( createLabelEditor( getFieldEditorParent(), ActionMessages.getString( "CBreakpointPropertyPage.2" ), function ) ); //$NON-NLS-1$ } - setTitle( ActionMessages.getString( "CBreakpointPreferencePage.3" ) ); //$NON-NLS-1$ } else if ( breakpoint instanceof ICAddressBreakpoint ) { ICAddressBreakpoint abrkpt = (ICAddressBreakpoint)breakpoint; - String address = ActionMessages.getString( "CBreakpointPreferencePage.4" ); //$NON-NLS-1$ + addField( createLabelEditor( getFieldEditorParent(), ActionMessages.getString( "CBreakpointPropertyPage.18" ), ActionMessages.getString( "CBreakpointPropertyPage.6" ) ) ); //$NON-NLS-1$//$NON-NLS-2$ + String address = ActionMessages.getString( "CBreakpointPropertyPage.4" ); //$NON-NLS-1$ try { address = CDebugUtils.toHexAddressString( Long.parseLong( abrkpt.getAddress() ) ); } @@ -280,16 +301,15 @@ public class CBreakpointPreferencePage extends FieldEditorPreferencePage { catch( NumberFormatException e ) { } if ( address != null ) { - addField( createLabelEditor( getFieldEditorParent(), ActionMessages.getString( "CBreakpointPreferencePage.5" ), address ) ); //$NON-NLS-1$ + addField( createLabelEditor( getFieldEditorParent(), ActionMessages.getString( "CBreakpointPropertyPage.5" ), address ) ); //$NON-NLS-1$ } - setTitle( ActionMessages.getString( "CBreakpointPreferencePage.6" ) ); //$NON-NLS-1$ } else if ( breakpoint instanceof ILineBreakpoint ) { + addField( createLabelEditor( getFieldEditorParent(), ActionMessages.getString( "CBreakpointPropertyPage.18" ), ActionMessages.getString( "CBreakpointPropertyPage.8" ) ) ); //$NON-NLS-1$//$NON-NLS-2$ String fileName = breakpoint.getMarker().getResource().getLocation().toOSString(); if ( fileName != null ) { - addField( createLabelEditor( getFieldEditorParent(), ActionMessages.getString( "CBreakpointPreferencePage.7" ), fileName ) ); //$NON-NLS-1$ + addField( createLabelEditor( getFieldEditorParent(), ActionMessages.getString( "CBreakpointPropertyPage.7" ), fileName ) ); //$NON-NLS-1$ } - setTitle( ActionMessages.getString( "CBreakpointPreferencePage.8" ) ); //$NON-NLS-1$ ILineBreakpoint lBreakpoint = (ILineBreakpoint)breakpoint; StringBuffer lineNumber = new StringBuffer( 4 ); try { @@ -302,43 +322,48 @@ public class CBreakpointPreferencePage extends FieldEditorPreferencePage { CDebugUIPlugin.log( ce ); } if ( lineNumber.length() > 0 ) { - addField( createLabelEditor( getFieldEditorParent(), ActionMessages.getString( "CBreakpointPreferencePage.9" ), lineNumber.toString() ) ); //$NON-NLS-1$ + addField( createLabelEditor( getFieldEditorParent(), ActionMessages.getString( "CBreakpointPropertyPage.9" ), lineNumber.toString() ) ); //$NON-NLS-1$ } } else if ( breakpoint instanceof ICWatchpoint ) { - String projectName = breakpoint.getMarker().getResource().getLocation().toOSString(); - if ( projectName != null ) { - addField( createLabelEditor( getFieldEditorParent(), ActionMessages.getString( "CBreakpointPreferencePage.10" ), projectName ) ); //$NON-NLS-1$ - } ICWatchpoint watchpoint = (ICWatchpoint)breakpoint; - String title = ""; //$NON-NLS-1$ + String type = ""; //$NON-NLS-1$ String expression = ""; //$NON-NLS-1$ try { if ( watchpoint.isReadType() && !watchpoint.isWriteType() ) - title = ActionMessages.getString( "CBreakpointPreferencePage.11" ); //$NON-NLS-1$ + type = ActionMessages.getString( "CBreakpointPropertyPage.11" ); //$NON-NLS-1$ else if ( !watchpoint.isReadType() && watchpoint.isWriteType() ) - title = ActionMessages.getString( "CBreakpointPreferencePage.12" ); //$NON-NLS-1$ + type = ActionMessages.getString( "CBreakpointPropertyPage.12" ); //$NON-NLS-1$ else - title = ActionMessages.getString( "CBreakpointPreferencePage.13" ); //$NON-NLS-1$ + type = ActionMessages.getString( "CBreakpointPropertyPage.13" ); //$NON-NLS-1$ expression = watchpoint.getExpression(); } catch( CoreException ce ) { CDebugUIPlugin.log( ce ); } - setTitle( title ); - addField( createLabelEditor( getFieldEditorParent(), ActionMessages.getString( "CBreakpointPreferencePage.14" ), expression ) ); //$NON-NLS-1$ + addField( createLabelEditor( getFieldEditorParent(), ActionMessages.getString( "CBreakpointPropertyPage.18" ), type ) ); //$NON-NLS-1$ + String projectName = breakpoint.getMarker().getResource().getLocation().toOSString(); + if ( projectName != null ) { + addField( createLabelEditor( getFieldEditorParent(), ActionMessages.getString( "CBreakpointPropertyPage.10" ), projectName ) ); //$NON-NLS-1$ + } + addField( createLabelEditor( getFieldEditorParent(), ActionMessages.getString( "CBreakpointPropertyPage.14" ), expression ) ); //$NON-NLS-1$ } } + protected void createEnabledField( Composite parent ) { + fEnabled = new BooleanFieldEditor( CBreakpointPreferenceStore.ENABLED, ActionMessages.getString( "CBreakpointPropertyPage.19" ), parent ); //$NON-NLS-1$ + addField( fEnabled ); + } + protected void createConditionEditor( Composite parent ) { - fCondition = new BreakpointStringFieldEditor( CBreakpointPreferenceStore.CONDITION, ActionMessages.getString( "CBreakpointPreferencePage.15" ), parent ); //$NON-NLS-1$ + fCondition = new BreakpointStringFieldEditor( CBreakpointPreferenceStore.CONDITION, ActionMessages.getString( "CBreakpointPropertyPage.15" ), parent ); //$NON-NLS-1$ fCondition.setEmptyStringAllowed( true ); - fCondition.setErrorMessage( ActionMessages.getString( "CBreakpointPreferencePage.16" ) ); //$NON-NLS-1$ + fCondition.setErrorMessage( ActionMessages.getString( "CBreakpointPropertyPage.16" ) ); //$NON-NLS-1$ addField( fCondition ); } protected void createIgnoreCountEditor( Composite parent ) { - fIgnoreCount = new BreakpointIntegerFieldEditor( CBreakpointPreferenceStore.IGNORE_COUNT, ActionMessages.getString( "CBreakpointPreferencePage.17" ), parent ); //$NON-NLS-1$ + fIgnoreCount = new BreakpointIntegerFieldEditor( CBreakpointPreferenceStore.IGNORE_COUNT, ActionMessages.getString( "CBreakpointPropertyPage.17" ), parent ); //$NON-NLS-1$ fIgnoreCount.setValidRange( 0, Integer.MAX_VALUE ); fIgnoreCountTextControl = fIgnoreCount.getTextControl( parent ); try { @@ -355,10 +380,69 @@ public class CBreakpointPreferencePage extends FieldEditorPreferencePage { } protected ICBreakpoint getBreakpoint() { - return fBreakpoint; + IAdaptable element = getElement(); + return ( element instanceof ICBreakpoint ) ? (ICBreakpoint)element : null; } - protected void setBreakpoint( ICBreakpoint breakpoint ) { - fBreakpoint = breakpoint; + /* (non-Javadoc) + * @see org.eclipse.ui.IWorkbenchPropertyPage#getElement() + */ + public IAdaptable getElement() { + return fElement; + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IWorkbenchPropertyPage#setElement(org.eclipse.core.runtime.IAdaptable) + */ + public void setElement( IAdaptable element ) { + fElement = element; + } + + public IPreferenceStore getPreferenceStore() { + return fCBreakpointPreferenceStore; + } + + public boolean performOk() { + final List changedProperties = new ArrayList( 5 ); + getPreferenceStore().addPropertyChangeListener( new IPropertyChangeListener() { + + /** + * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent) + */ + public void propertyChange( PropertyChangeEvent event ) { + changedProperties.add( event.getProperty() ); + } + } ); + boolean result = super.performOk(); + setBreakpointProperties( changedProperties ); + return result; + } + + protected void setBreakpointProperties( final List changedProperties ) { + IWorkspaceRunnable wr = new IWorkspaceRunnable() { + + public void run( IProgressMonitor monitor ) throws CoreException { + ICBreakpoint breakpoint = getBreakpoint(); + Iterator changed = changedProperties.iterator(); + while( changed.hasNext() ) { + String property = (String)changed.next(); + if ( property.equals( CBreakpointPreferenceStore.ENABLED ) ) { + breakpoint.setEnabled( getPreferenceStore().getBoolean( CBreakpointPreferenceStore.ENABLED ) ); + } + else if ( property.equals( CBreakpointPreferenceStore.IGNORE_COUNT ) ) { + breakpoint.setIgnoreCount( getPreferenceStore().getInt( CBreakpointPreferenceStore.IGNORE_COUNT ) ); + } + else if ( property.equals( CBreakpointPreferenceStore.CONDITION ) ) { + breakpoint.setCondition( getPreferenceStore().getString( CBreakpointPreferenceStore.CONDITION ) ); + } + } + } + }; + try { + ResourcesPlugin.getWorkspace().run( wr, null ); + } + catch( CoreException ce ) { + CDebugUIPlugin.log( ce ); + } } }