/*****************************************************************************
* Limpet - the Lightweight InforMation ProcEssing Toolkit
* http://limpet.info
*
* (C) 2015-2016, Deep Blue C Technologies Ltd
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the Eclipse Public License v1.0
* (http://www.eclipse.org/legal/epl-v10.html)
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*****************************************************************************/
package info.limpet.ui.data_provider.data;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CheckboxCellEditor;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.views.properties.PropertyDescriptor;
import info.limpet.ui.Activator;
/**
* A property descriptor for boolean values that uses the CheckboxCellEditor
*
* @author ddean
*
*/
public class CheckboxPropertyDescriptor extends PropertyDescriptor
{
/**
* The checkbox is actually emulated by having a custom label provider to show corresponding image
* for each boolean state. Solution adopted from here:
* http://www.vogella.com/tutorials/EclipseJFaceTable/article.html#jfaceeditor
*/
private static final LabelProvider CHECKBOX_LABEL_PROVIDER =
new LabelProvider()
{
/**
* Use lazy loading for the images, since the class might be used in non-rcp (i.e. junit
* environment)
*/
private Image checked;
private Image unchecked;
public Image getImage(Object element)
{
return ((Boolean) element).booleanValue() ? getCheckedImage()
: getUncheckedImage();
};
public String getText(Object element)
{
// we don't need text here
return null;
};
private Image getCheckedImage()
{
if (checked == null)
{
checked =
Activator.getImageDescriptor("icons/checked.gif").createImage();
}
return checked;
}
private Image getUncheckedImage()
{
if (unchecked == null)
{
unchecked =
Activator.getImageDescriptor("icons/unchecked.gif")
.createImage();
}
return unchecked;
}
};
/**
* @param id
* @param displayName
*/
public CheckboxPropertyDescriptor(Object id, String displayName)
{
super(id, displayName);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.views.properties.IPropertyDescriptor#createPr
* opertyEditor(org.eclipse.swt.widgets.Composite)
*/
public CellEditor createPropertyEditor(Composite parent)
{
CellEditor editor = new CheckboxCellEditor(parent);
if (getValidator() != null)
{
editor.setValidator(getValidator());
}
return editor;
}
@Override
public ILabelProvider getLabelProvider()
{
return CHECKBOX_LABEL_PROVIDER;
}
}