/******************************************************************************
* Copyright (c) 2011, 2016 Stephan Schwiebert and others.
* 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:
* Stephan Schwiebert - initial API and implementation
*
*******************************************************************************/
package org.eclipse.gef.cloudio.examples.ui.snippets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.gef.cloudio.internal.ui.ICloudLabelProvider;
import org.eclipse.gef.cloudio.internal.ui.TagCloud;
import org.eclipse.gef.cloudio.internal.ui.TagCloudViewer;
import org.eclipse.jface.viewers.BaseLabelProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
/**
* This snippet demonstrates how to create a {@link TagCloudViewer}, how to use
* label- and content-providers and how to add an
* {@link ISelectionChangedListener}.
*
* @author sschwieb
*
*/
public class TagCloudViewerSnippet {
static class CustomLabelProvider extends BaseLabelProvider implements ICloudLabelProvider {
private Font font;
public CustomLabelProvider(Font font) {
this.font = font;
}
@Override
public String getLabel(Object element) {
return element.toString();
}
@Override
public double getWeight(Object element) {
return Math.random();
}
@Override
public Color getColor(Object element) {
return Display.getDefault().getSystemColor(SWT.COLOR_GREEN);
}
@Override
public FontData[] getFontData(Object element) {
return font.getFontData();
}
@Override
public float getAngle(Object element) {
return (float) (-90 + Math.random() * 180);
}
@Override
public String getToolTip(Object element) {
return element.toString();
}
}
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
TagCloud cloud = new TagCloud(shell, SWT.NONE);
final TagCloudViewer viewer = new TagCloudViewer(cloud);
// A simple content provider for a list of elements
viewer.setContentProvider(new IStructuredContentProvider() {
@Override
public void dispose() {
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
@Override
public Object[] getElements(Object inputElement) {
return ((List<?>) inputElement).toArray();
}
});
// A simple label provider (see above)
viewer.setLabelProvider(new CustomLabelProvider(cloud.getFont()));
// Demo of an selection listener
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
System.out.println("Selection: " + selection);
}
});
// Demo data
List<String> data = new ArrayList<>();
data.add("Hello");
data.add("World");
data.add("Hello Cloudio");
shell.setBounds(50, 50, 300, 300);
cloud.setBounds(0, 0, shell.getBounds().width, shell.getBounds().height);
// Set the input of the viewer
viewer.setInput(data);
// Set initial selection:
viewer.setSelection(new StructuredSelection(Arrays.asList("Hello Cloudio")));
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}