org.eclipse.gmt.modisco.jm2t.internal.ui.util.SWTUtil.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.gmt.modisco.jm2t.internal.ui.util.SWTUtil.java

Source

/*******************************************************************************
 * Copyright (c) 2010 Angelo ZERR.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:      
 *     Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation
 *******************************************************************************/
package org.eclipse.gmt.modisco.jm2t.internal.ui.util;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
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.Composite;
import org.eclipse.swt.widgets.Control;

/**
 * SWT Utilities.
 * 
 */
public class SWTUtil {

    private static FontMetrics fontMetrics;

    protected static void initializeDialogUnits(Control testControl) {
        // Compute and store a font metric
        GC gc = new GC(testControl);
        gc.setFont(JFaceResources.getDialogFont());
        fontMetrics = gc.getFontMetrics();
        gc.dispose();
    }

    /**
     * Returns a width hint for a button control.
     */
    public static int getButtonWidthHint(Button button) {
        if (fontMetrics == null)
            initializeDialogUnits(button.getParent());
        int widthHint = Dialog.convertHorizontalDLUsToPixels(fontMetrics, IDialogConstants.BUTTON_WIDTH);
        return Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
    }

    /**
     * Create a new button with the standard size.
     * 
     * @param comp
     *            the component to add the button to
     * @param label
     *            the button label
     * @return a button
     */
    public static Button createButton(Composite comp, String label) {
        Button b = new Button(comp, SWT.PUSH);
        b.setText(label);
        if (fontMetrics == null)
            initializeDialogUnits(comp);
        GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
        data.widthHint = getButtonWidthHint(b);
        b.setLayoutData(data);
        return b;
    }

    /**
     * Convert DLUs to pixels.
     * 
     * @param comp a component
     * @param x pixels
     * @return dlus
     */
    public static int convertHorizontalDLUsToPixels(Composite comp, int x) {
        if (fontMetrics == null)
            initializeDialogUnits(comp);
        return Dialog.convertHorizontalDLUsToPixels(fontMetrics, x);
    }

    /**
     * Convert DLUs to pixels.
     * 
     * @param comp a component
     * @param y pixels
     * @return dlus
     */
    public static int convertVerticalDLUsToPixels(Composite comp, int y) {
        if (fontMetrics == null)
            initializeDialogUnits(comp);
        return Dialog.convertVerticalDLUsToPixels(fontMetrics, y);
    }

}