/* ==================================================================== * * The ObjectStyle Group Software License, Version 1.0 * * Copyright (c) 2002 - 2005 The ObjectStyle Group * and individual authors of the software. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * ObjectStyle Group (http://objectstyle.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "ObjectStyle Group" and "Cayenne" * must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact andrus@objectstyle.org. * * 5. Products derived from this software may not be called "ObjectStyle" * nor may "ObjectStyle" appear in their names without prior written * permission of the ObjectStyle Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the ObjectStyle Group. For more * information on the ObjectStyle Group, please see * <http://objectstyle.org/>. * */ package org.objectstyle.wolips.launching.ui; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.debug.ui.ILaunchConfigurationDialog; import org.eclipse.debug.ui.ILaunchConfigurationTab; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.util.Assert; 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.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; /** * @author ulrich To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ public abstract class AbstractWOArgumentsTab implements ILaunchConfigurationTab { /** * The control for this page, or <code>null</code> */ private Control fControl; /** * The launch configuration dialog this tab is contained in. */ private ILaunchConfigurationDialog fLaunchConfigurationDialog; /** * Current error message, or <code>null</code> */ private String fErrorMessage; /** * Current message, or <code>null</code> */ private String fMessage; /** * Whether this tab needs to apply changes. This attribute is initialized to * <code>true</code> to be backwards compatible. If clients want to take * adavantage of such a feature, they should set the flag to false, and * check it before applying changes to the lanuch configuration working * copy. * * @since 2.1 */ private boolean fDirty = true; /** * Returns the dialog this tab is contained in, or <code>null</code> if * not yet set. * * @return launch configuration dialog, or <code>null</code> */ protected ILaunchConfigurationDialog getLaunchConfigurationDialog() { return this.fLaunchConfigurationDialog; } /** * Updates the buttons and message in this page's launch configuration * dialog. */ protected void updateLaunchConfigurationDialog() { if (getLaunchConfigurationDialog() != null) { getLaunchConfigurationDialog().updateMessage(); getLaunchConfigurationDialog().updateButtons(); } } /** * @see ILaunchConfigurationTab#getControl() */ public Control getControl() { return this.fControl; } /** * Sets the control to be displayed in this tab. * * @param control * the control for this tab */ protected void setControl(Control control) { this.fControl = control; } /** * @see ILaunchConfigurationTab#getErrorMessage() */ public String getErrorMessage() { return this.fErrorMessage; } /** * @see ILaunchConfigurationTab#getMessage() */ public String getMessage() { return this.fMessage; } /** * @see ILaunchConfigurationTab#setLaunchConfigurationDialog(ILaunchConfigurationDialog) */ public void setLaunchConfigurationDialog(ILaunchConfigurationDialog dialog) { this.fLaunchConfigurationDialog = dialog; } /** * Sets this page's error message, possibly <code>null</code>. * * @param errorMessage * the error message or <code>null</code> */ protected void setErrorMessage(String errorMessage) { this.fErrorMessage = errorMessage; } /** * Sets this page's message, possibly <code>null</code>. * * @param message * the message or <code>null</code> */ protected void setMessage(String message) { this.fMessage = message; } /** * Convenience method to return the launch manager. * * @return the launch manager */ protected ILaunchManager getLaunchManager() { return DebugPlugin.getDefault().getLaunchManager(); } /** * By default, do nothing. * * @see ILaunchConfigurationTab#dispose() */ public void dispose() { return; } /** * Returns the shell this tab is contained in, or <code>null</code>. * * @return the shell this tab is contained in, or <code>null</code> */ protected Shell getShell() { Control control = getControl(); if (control != null) { return control.getShell(); } return null; } /** * @see ILaunchConfigurationTab#canSave() */ public boolean canSave() { return true; } /** * @see ILaunchConfigurationTab#isValid(ILaunchConfiguration) */ public boolean isValid(ILaunchConfiguration launchConfig) { return true; } /** * Create some empty space. * * @param comp * @param colSpan */ protected void createVerticalSpacer(Composite comp, int colSpan) { Label label = new Label(comp, SWT.NONE); GridData gd = new GridData(); gd.horizontalSpan = colSpan; label.setLayoutData(gd); } /** * @see ILaunchConfigurationTab#getImage() */ public Image getImage() { return null; } /** * Convenience method to set a boolean attribute of on a launch * configuration. If the value being set is the default, the attribute's * value is set to <code>null</code>. * * @param attribute * attribute identifier * @param configuration * the configuration on which to set the attribute * @param value * the value of the attribute * @param defaultValue * the default value of the attribute * @since 2.1 */ protected void setAttribute(String attribute, ILaunchConfigurationWorkingCopy configuration, boolean value, boolean defaultValue) { if (value == defaultValue) { configuration.setAttribute(attribute, (String) null); } else { configuration.setAttribute(attribute, value); } } /** * Returns whether this tab is dirty. It is up to clients to set/reset and * consult this attribute as required. By default, a tab is initialized to * dirty. * * @return whether this tab is dirty * @since 2.1 */ protected boolean isDirty() { return this.fDirty; } /** * Returns whether this tab is dirty. It is up to clients to set/reset and * consult this attribute as required. By default, a tab is initialized to * dirty. * * @param dirty * whether this tab is dirty * @since 2.1 */ protected void setDirty(boolean dirty) { this.fDirty = dirty; } /* * (non-Javadoc) * * @see org.eclipse.debug.ui.ILaunchConfigurationTab#activated(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) */ public void activated(ILaunchConfigurationWorkingCopy workingCopy) { return; } /* * (non-Javadoc) * * @see org.eclipse.debug.ui.ILaunchConfigurationTab#deactivated(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) */ public void deactivated(ILaunchConfigurationWorkingCopy workingCopy) { return; } /* * (non-Javadoc) * * @see org.eclipse.debug.ui.ILaunchConfigurationTab#launched(org.eclipse.debug.core.ILaunch) */ public void launched(ILaunch launch) { return; } /** * Returns a width hint for a button control. */ private static int getButtonWidthHint(Button button) { GC gc = new GC(button); gc.setFont(button.getFont()); FontMetrics fFontMetrics = gc.getFontMetrics(); gc.dispose(); int widthHint = Dialog.convertHorizontalDLUsToPixels(fFontMetrics, IDialogConstants.BUTTON_WIDTH); return Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); } /** * Sets width and height hint for the button control. <b>Note:</b> This is * a NOP if the button's layout data is not an instance of * <code>GridData</code>. * * @param the * button for which to set the dimension hint */ private static void setButtonDimensionHint(Button button) { Assert.isNotNull(button); Object gd = button.getLayoutData(); if (gd instanceof GridData) { ((GridData) gd).widthHint = getButtonWidthHint(button); ((GridData) gd).horizontalAlignment = GridData.FILL; } } /** * Creates and returns a new push button with the given label and/or image. * * @param parent * parent control * @param label * button label or <code>null</code> * @param image * image of <code>null</code> * @return a new push button */ public static Button createPushButton(Composite parent, String label, Image image) { Button button = new Button(parent, SWT.PUSH); button.setFont(parent.getFont()); if (image != null) { button.setImage(image); } if (label != null) { button.setText(label); } GridData gd = new GridData(); button.setLayoutData(gd); AbstractWOArgumentsTab.setButtonDimensionHint(button); return button; } }