blob: 4ee038805a50749fbd2eb711ce09d5373e284dbf [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2007 Sybase, Inc. and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Sybase, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.jsf.common.ui.internal.dialogfield;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.widgets.FormToolkit;
/**
* A layout utility class
*
*/
public final class LayoutUtil {
// The Text control looks higher then Button control when they have the same
// height,
// Increasing the height of 5 pixels will make them looks the same height.
private final static int BUTTON_HEIGHT_ADJUSTMENT = 5;
/**
* @param control
* @param grab
*/
public static void setGrabHorizontal(Control control, boolean grab) {
Object ld = control.getLayoutData();
if (ld instanceof GridData) {
((GridData) ld).grabExcessHorizontalSpace = grab;
}
}
/**
* Sets the width hint of a control. Assumes that GridData is used.
* @param control
* @param widthHint
*/
public static void setWidthHint(Control control, int widthHint) {
Object ld = control.getLayoutData();
if (ld instanceof GridData) {
((GridData) ld).widthHint = widthHint;
}
}
/**
* Sets the horizontal indent of a control. Assumes that GridData is used.
* @param control
* @param horizontalIndent
*/
static void setHorizontalIndent(Control control, int horizontalIndent) {
Object ld = control.getLayoutData();
if (ld instanceof GridData) {
((GridData) ld).horizontalIndent = horizontalIndent;
}
}
/**
* Sets the horizontal indent of a control. Assumes that GridData is used.
* @param control
*/
public static void setHorizontalGrabbing(Control control) {
Object ld = control.getLayoutData();
if (ld instanceof GridData) {
((GridData) ld).grabExcessHorizontalSpace = true;
}
}
/**
* Returns a width hint for a button control.
* @param button
* @return the hint value
*/
static int getButtonWidthHint(Button button) {
if (button.getFont().equals(JFaceResources.getDefaultFont()))
button.setFont(JFaceResources.getDialogFont());
GC gc = new GC(button);
gc.setFont(button.getFont());
FontMetrics fontMetrics = gc.getFontMetrics();
gc.dispose();
int length = button.getText().length();
int widthHint = Dialog.convertWidthInCharsToPixels(fontMetrics,
length < 2 ? 2 : length);
return Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT,
true).x);
}
static int getButtonHeightHint(FormToolkit toolkit, Text text) {
if (toolkit != null) {
return text.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y
+ BUTTON_HEIGHT_ADJUSTMENT;
}
return text.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y;
}
private LayoutUtil()
{
// static utility class; no instantiation
}
}