org.eclipse.jubula.client.ui.rcp.widgets.StatusLineContributionItem.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.jubula.client.ui.rcp.widgets.StatusLineContributionItem.java

Source

/*******************************************************************************
 * Copyright (c) 2004, 2010 BREDEX GmbH.
 * 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:
 *     BREDEX GmbH - initial API and implementation and/or initial documentation
 *******************************************************************************/
package org.eclipse.jubula.client.ui.rcp.widgets;

import org.eclipse.jface.action.ContributionItem;
import org.eclipse.jface.action.IContributionManager;
import org.eclipse.jface.action.StatusLineLayoutData;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;

/**
 * @author BREDEX GmbH
 * @created 29.05.2006
 */
public class StatusLineContributionItem extends ContributionItem {
    /** default char width of the displayed text */
    public static final int DEFAULT_CHAR_WIDTH = 40;

    /** max. char width of the displayed text */
    private int m_charWidth;

    /** <code>m_textLabel</code> label for text */
    private CLabel m_textLabel;

    /** <code>m_imageLabel</code> label for image */
    private CLabel m_imageLabel;

    /** <code>m_text</code> text for item */
    private String m_text = null;

    /** <code>m_image</code> image for item */
    private Image m_image = null;

    /**
     * The composite into which this contribution item has been placed. This
     * will be <code>null</code> if this instance has not yet been
     * initialized.
     */
    private Composite m_statusLine = null;

    /** width of the displayed text */
    private int m_widthHint = -1;

    /** height of the displayed text */
    private int m_heightHint = -1;

    /**
     * @param id ID of the StatusLineContributionItem.
     */
    public StatusLineContributionItem(String id) {
        this(id, DEFAULT_CHAR_WIDTH);
    }

    /**
     * @param id
     *            StatusLineContributionItem
     * @param charWidth
     *            max. char width of the displayed text.
     */
    public StatusLineContributionItem(String id, int charWidth) {
        super(id);
        m_charWidth = charWidth;
        setVisible(false); // no text to start with
    }

    /**
     * {@inheritDoc}
     */
    public void fill(Composite parent) {
        m_statusLine = parent;

        Label sep = new Label(parent, SWT.SEPARATOR);
        m_textLabel = new CLabel(m_statusLine, SWT.SHADOW_NONE);

        if (m_widthHint < 0) {
            GC gc = new GC(m_statusLine);
            gc.setFont(m_statusLine.getFont());
            FontMetrics fm = gc.getFontMetrics();
            m_widthHint = fm.getAverageCharWidth() * m_charWidth;
            m_heightHint = fm.getHeight();
            gc.dispose();
        }

        StatusLineLayoutData data = new StatusLineLayoutData();
        m_textLabel.setLayoutData(data);
        m_textLabel.setText(m_text);

        if (m_image != null) {
            m_imageLabel = new CLabel(parent, SWT.NONE);
            m_imageLabel.setImage(m_image);
        }

        data = new StatusLineLayoutData();
        data.heightHint = m_heightHint;
        sep.setLayoutData(data);
    }
    //
    //    /**
    //     * @return displayed text
    //     */
    //    public String getText() {
    //        return m_text;
    //    }

    /**
     * @param text displayed text to set
     */
    public void setText(String text) {
        if (text == null) {
            throw new NullPointerException();
        }
        m_text = text;
        if (m_textLabel != null && !m_textLabel.isDisposed()) {
            m_textLabel.setText(m_text);
        }
        if (m_text.length() == 0) {
            if (isVisible()) {
                updateContributionManager(false);
            }
        } else {
            if (!isVisible()) {
                updateContributionManager(true);
            }
        }
    }

    /**
     * Sets the conribution item visible and updates the contribution manager.
     * @param visible set visible.
     */
    private void updateContributionManager(boolean visible) {
        setVisible(visible);
        IContributionManager contributionManager = getParent();
        if (contributionManager != null) {
            contributionManager.update(true);
        }
    }

    /**
     * @param image The displayed image to set.
     */
    public void setImage(Image image) {
        m_image = image;
    }

    /**
     * @param text displayed text to set
     * @param image displayed image to set
     */
    public void setMessage(Image image, String text) {
        setImage(image);
        setText(text);
    }
}