package org.nightlabs.jfire.reporting.ui.parameter;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.nightlabs.base.ui.resource.SharedImages;
import org.nightlabs.jdo.ObjectID;
import org.nightlabs.jfire.base.ui.jdo.tree.ActiveJDOObjectTreeComposite;
import org.nightlabs.jfire.base.ui.jdo.tree.ActiveJDOObjectTreeController;
import org.nightlabs.jfire.base.ui.jdo.tree.JDOObjectTreeContentProvider;
import org.nightlabs.jfire.base.ui.jdo.tree.JDOObjectTreeLabelProvider;
import org.nightlabs.jfire.base.ui.jdo.tree.JDOTreeNodesChangedEvent;
import org.nightlabs.jfire.base.ui.jdo.tree.JDOTreeNodesChangedEventHandler;
import org.nightlabs.jfire.reporting.parameter.ValueProvider;
import org.nightlabs.jfire.reporting.parameter.ValueProviderCategory;
import org.nightlabs.jfire.reporting.ui.ReportingPlugin;
import org.nightlabs.util.NLLocale;
/**
* Active tree displaying {@link ValueProviderCategory}s and {@link ValueProvider}.
*
* @author Alexander Bieber <!-- alex [AT] nightlabs [DOT] de -->
*/
public class ValueProviderTree extends ActiveJDOObjectTreeComposite<ObjectID, Object, ValueProviderTreeNode>
{
protected class ContentProvider extends JDOObjectTreeContentProvider<ObjectID, Object, ValueProviderTreeNode> {
@Override
public boolean hasJDOObjectChildren(Object jdoObject) {
return jdoObject instanceof ValueProviderCategory;
}
}
protected class LabelProvider extends JDOObjectTreeLabelProvider<ObjectID, Object, ValueProviderTreeNode> {
@Override
protected String getJDOObjectText(Object jdoObject, int columnIndex) {
if (jdoObject instanceof ValueProviderCategory) {
return ((ValueProviderCategory)jdoObject).getName().getText(NLLocale.getDefault().getLanguage());
}
else if (jdoObject instanceof ValueProvider) {
return ((ValueProvider)jdoObject).getName().getText(NLLocale.getDefault().getLanguage());
}
return jdoObject.toString();
// return jdoObject.getName().getText(NLLocale.getDefault().getLanguage());
}
@Override
protected Image getJDOObjectImage(Object jdoObject, int columnIndex) {
if (columnIndex == 0) {
if (jdoObject instanceof ValueProviderCategory)
return SharedImages.getSharedImage(ReportingPlugin.getDefault(), ValueProviderTree.class, "category"); //$NON-NLS-1$
else if (jdoObject instanceof ValueProvider)
return SharedImages.getSharedImage(ReportingPlugin.getDefault(), ValueProviderTree.class, "provider"); //$NON-NLS-1$
}
return null;
}
}
private ValueProviderController providerTreeController = new ValueProviderController() {
@Override
protected void onJDOObjectsChanged(JDOTreeNodesChangedEvent<ObjectID, ValueProviderTreeNode> changedEvent) {
JDOTreeNodesChangedEventHandler.handle(getTreeViewer(), changedEvent);
}
};
public ValueProviderTree(Composite parent)
{
super(parent, DEFAULT_STYLE_SINGLE, true, true, false);
setInput(providerTreeController);
addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e)
{
providerTreeController.close();
providerTreeController = null;
}
});
}
@Override
public void init() {
super.init();
getTreeViewer().setSorter(new ViewerSorter());
}
@Override
public void createTreeColumns(Tree tree)
{
// TreeColumn column = new TreeColumn(tree, SWT.LEFT);
}
@Override
public void setTreeProvider(TreeViewer treeViewer)
{
treeViewer.setContentProvider(new ContentProvider());
treeViewer.setLabelProvider(new LabelProvider());
}
@Override
protected ActiveJDOObjectTreeController<ObjectID, Object, ValueProviderTreeNode> getJDOObjectTreeController() {
return providerTreeController;
}
}