/*
* Copyright (c) 2009
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dcarew.hudson.utils;
import java.util.HashMap;
import java.util.Map;
import org.dcarew.hudson.HudsonPlugin;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.ContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.ToolBar;
// TODO: add hyperlinks to the tooltips
/**
* A ContributionItem for the application's status line.
*
* @author Devon Carew
*/
public class LabelContributionItem
extends ContributionItem
{
private Label label;
private IAction hudsonAction;
private IMenuCreator menuCreator;
private IAction doubleClickAction;
private String tooltip = "";
private ImageDescriptor imageDescriptor = HudsonPlugin.getImageDescriptor("resources/icons/hudson.gif");
private String text;
private static Map imageDescriptionMap = new HashMap();
public LabelContributionItem(String id, IMenuCreator menuCreator)
{
super(id);
this.menuCreator = menuCreator;
}
public void fill(Composite composite)
{
Composite parent = new Composite(composite, SWT.NONE);
GridLayout layout = new GridLayout(3, false);
layout.marginWidth = 0;
layout.marginHeight = 0;
parent.setLayout(layout);
// separator
Label sep = new Label(parent, SWT.SEPARATOR);
sep.setLayoutData(new GridData(GridData.FILL_VERTICAL));
// action menu
hudsonAction = new Action("", IAction.AS_DROP_DOWN_MENU) {
public void run() {
handleDoubleClick();
}
};
hudsonAction.setMenuCreator(menuCreator);
hudsonAction.setImageDescriptor(imageDescriptor);
ToolBar toolbar = new ToolBar(parent, SWT.HORIZONTAL);
IContributionItem contributionItem = new ActionContributionItem(hudsonAction);
contributionItem.fill(toolbar, -1);
toolbar.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_CENTER));
// project count label
label = new Label(parent, SWT.LEFT);
label.setText("000 projects");
label.setVisible(false);
label.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_CENTER));
setTooltip(tooltip);
if (text != null)
setText(text);
}
public void setDoubleClickAction(IAction doubleClickAction)
{
this.doubleClickAction = doubleClickAction;
}
public void setText(String text)
{
this.text = text;
if (!label.isDisposed())
{
label.setText(text);
if (!label.isVisible())
label.setVisible(true);
}
}
public void setImage(Image image)
{
if (!imageDescriptionMap.containsKey(image))
{
if (image == null)
imageDescriptionMap.put(image, null);
else
imageDescriptionMap.put(image, new ImageImageDescription(image));
}
ImageDescriptor imageDescriptor = (ImageDescriptor)imageDescriptionMap.get(image);
this.imageDescriptor = imageDescriptor;
hudsonAction.setImageDescriptor(imageDescriptor);
}
public void setTooltip(String tooltip)
{
this.tooltip = tooltip;
if (!label.isDisposed())
{
hudsonAction.setToolTipText(tooltip);
label.setToolTipText(tooltip);
}
}
private void handleDoubleClick()
{
if (doubleClickAction != null)
doubleClickAction.run();
}
/*private static class CustomToolTip
extends ToolTip
{
private String text = "";
private Label tooltipLabel;
public CustomToolTip(Control control)
{
super(control, NO_RECREATE, false);
}
public void setToolTipText(String tooltip)
{
if (tooltip == null)
tooltip = "";
this.text = tooltip;
if (tooltipLabel != null && !tooltipLabel.isDisposed())
{
tooltipLabel.setText(tooltip);
tooltipLabel.getShell().pack();
}
}
protected Composite createToolTipContentArea(Event event, Composite parent)
{
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout());
tooltipLabel = new Label(composite, SWT.NONE);
tooltipLabel.setText(text);
return composite;
}
}*/
}