package org.eclipse.ui.examples.jobs.views;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.ui.part.ViewPart;
/**
 * This sample class demonstrates how to plug-in a new workbench view. The view
 * shows data obtained from the model. The sample creates a dummy model on the
 * fly, but a real implementation would connect to the model available either
 * in this or another plug-in (e.g. the workspace). The view is connected to
 * the model using a content provider.
 * <p>
 * The view uses a label provider to define how model objects should be
 * presented in the view. Each view can present the same model objects using
 * different labels and icons, if needed. Alternatively, a single label
 * provider can be shared between views in order to ensure that objects of the
 * same type are presented in the same way everywhere.
 * <p>
 */
public class LazyTreeView extends ViewPart {
	protected TreeViewer viewer;
	protected Button serializeButton, batchButton;

	/* (non-Javadoc)
	 * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
	 */
	public void createPartControl(Composite top) {
		Composite parent = new Composite(top, SWT.NONE);
		GridLayout layout = new GridLayout();
		layout.marginHeight = 0;
		layout.marginWidth = 0;
		parent.setLayout(layout);
		GridData data = new GridData(GridData.FILL_BOTH);
		data.grabExcessHorizontalSpace = true;
		data.grabExcessVerticalSpace = true;
		parent.setLayoutData(data);
//		parent.setBackground(WorkbenchColors.getSystemColor(SWT.COLOR_WHITE));
		serializeButton = new Button(parent, SWT.CHECK | SWT.FLAT);
		serializeButton.setText("Serialize fetch jobs"); //$NON-NLS-1$
//		serializeButton.setBackground(WorkbenchColors.getSystemColor(SWT.COLOR_WHITE));
		serializeButton.setSelection(SlowElementAdapter.isSerializeFetching());
		serializeButton.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				SlowElementAdapter.setSerializeFetching(serializeButton.getSelection());
			}
		});
		serializeButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		batchButton = new Button(parent, SWT.CHECK | SWT.FLAT);
		batchButton.setText("Batch returned children"); //$NON-NLS-1$
//		batchButton.setBackground(WorkbenchColors.getSystemColor(SWT.COLOR_WHITE));
		serializeButton.setSelection(SlowElementAdapter.isBatchFetchedChildren());
		batchButton.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				SlowElementAdapter.setBatchFetchedChildren(batchButton.getSelection());
			}
		});
		batchButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
		viewer.setContentProvider(new DeferredContentProvider());
		viewer.setLabelProvider(new WorkbenchLabelProvider());
		viewer.setInput(new SlowElement("root")); //$NON-NLS-1$
		viewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
	}
	/**
	 * Passing the focus request to the viewer's control.
	 */
	public void setFocus() {
		viewer.getControl().setFocus();
	}
}