diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog index 63ae2d87aa1..766433554a4 100644 --- a/debug/org.eclipse.cdt.debug.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog @@ -1,3 +1,8 @@ +2002-12-19 Mikhail Khodjaiants + Added new utility class - SWTUtil + * SWTUtil.java + * AttachSourceLocationBlock.java + 2002-12-19 Mikhail Khodjaiants Added new utility class - PixelConverter * PixelCoverter.java diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/SWTUtil.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/SWTUtil.java new file mode 100644 index 00000000000..5a4983346d0 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/SWTUtil.java @@ -0,0 +1,103 @@ +/* + * (c) Copyright IBM Corp. 2000, 2001. + * All Rights Reserved. + */ +package org.eclipse.cdt.debug.internal.ui; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.dnd.DragSource; +import org.eclipse.swt.dnd.DropTarget; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Caret; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.ScrollBar; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Widget; + +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.util.Assert; + +/** + * Utility class to simplify access to some SWT resources. + */ +public class SWTUtil +{ + + /** + * Returns the standard display to be used. The method first checks, if + * the thread calling this method has an associated disaply. If so, this + * display is returned. Otherwise the method returns the default display. + */ + public static Display getStandardDisplay() + { + Display display; + display = Display.getCurrent(); + if ( display == null ) + display = Display.getDefault(); + return display; + } + + /** + * Returns the shell for the given widget. If the widget doesn't represent + * a SWT object that manage a shell, null is returned. + * + * @return the shell for the given widget + */ + public static Shell getShell( Widget widget ) + { + if ( widget instanceof Control ) + return ((Control) widget).getShell(); + if ( widget instanceof Caret ) + return ((Caret) widget).getParent().getShell(); + if ( widget instanceof DragSource ) + return ((DragSource) widget).getControl().getShell(); + if ( widget instanceof DropTarget ) + return ((DropTarget) widget).getControl().getShell(); + if ( widget instanceof Menu ) + return ((Menu) widget).getParent().getShell(); + if ( widget instanceof ScrollBar ) + return ((ScrollBar) widget).getParent().getShell(); + + return null; + } + + /** + * Returns a width hint for a button control. + */ + public static int getButtonWidthHint( Button button ) + { + PixelConverter converter = new PixelConverter( button ); + int widthHint = converter.convertHorizontalDLUsToPixels( IDialogConstants.BUTTON_WIDTH ); + return Math.max( widthHint, button.computeSize( SWT.DEFAULT, SWT.DEFAULT, true ).x ); + } + + /** + * Returns a height hint for a button control. + */ + public static int getButtonHeigthHint( Button button ) + { + PixelConverter converter = new PixelConverter( button ); + return converter.convertVerticalDLUsToPixels( IDialogConstants.BUTTON_HEIGHT ); + } + + /** + * Sets width and height hint for the button control. + * Note: This is a NOP if the button's layout data is not + * an instance of GridData. + * + * @param the button for which to set the dimension hint + */ + public static void setButtonDimensionHint( Button button ) + { + Assert.isNotNull( button ); + Object gd = button.getLayoutData(); + if ( gd instanceof GridData ) + { + ((GridData) gd).heightHint = getButtonHeigthHint( button ); + ((GridData) gd).widthHint = getButtonWidthHint( button ); + } + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/AttachSourceLocationBlock.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/AttachSourceLocationBlock.java index 8ba982effe8..b6828f10c65 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/AttachSourceLocationBlock.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/sourcelookup/AttachSourceLocationBlock.java @@ -6,8 +6,8 @@ package org.eclipse.cdt.debug.ui.sourcelookup; import org.eclipse.cdt.debug.internal.ui.PixelConverter; +import org.eclipse.cdt.debug.internal.ui.SWTUtil; import org.eclipse.core.runtime.IPath; -import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; @@ -93,7 +93,7 @@ public class AttachSourceLocationBlock composite.setLayoutData( data ); fLocationText = new Text( composite, SWT.SINGLE | SWT.BORDER ); fLocationText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL ) ); - Button button = createButton( composite, "&Browse...", converter ); + Button button = createButton( composite, "&Browse..." ); button.addSelectionListener( new SelectionAdapter() { /* (non-Javadoc) @@ -148,15 +148,13 @@ public class AttachSourceLocationBlock fAssociationText.setText( "" ); } - protected Button createButton( Composite parent, String label, PixelConverter pc ) + protected Button createButton( Composite parent, String label ) { Button button = new Button( parent, SWT.PUSH ); button.setText( label ); GridData data = new GridData( GridData.END ); - data.heightHint = pc.convertVerticalDLUsToPixels( IDialogConstants.BUTTON_HEIGHT ); - int widthHint = pc.convertHorizontalDLUsToPixels( IDialogConstants.BUTTON_WIDTH ); - data.widthHint = Math.max( widthHint, button.computeSize( SWT.DEFAULT, SWT.DEFAULT, true ).x ); button.setLayoutData( data ); + SWTUtil.setButtonDimensionHint( button ); button.setFont( parent.getFont() ); return button;