blob: 3dbc286830d795ec7d88f471712b6dd010d80377 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2005 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jface.tests.viewers.interactive;
import java.util.ArrayList;
import java.util.Random;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.tests.viewers.TestComparator;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.deferred.DeferredContentProvider;
import org.eclipse.jface.viewers.deferred.SetModel;
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.swt.widgets.Label;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.ui.progress.WorkbenchJob;
/**
* @since 3.1
*/
public class ConcurrentTableTestView extends ViewPart {
private TableViewer table;
private boolean enableSlowComparisons = false;
private TestComparator comparator = new TestComparator() {
/* (non-Javadoc)
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
*/
public int compare(Object arg0, Object arg1) {
// try {
// // Insert a bogus delay to simulate doing work
// Thread.sleep(1);
// } catch (InterruptedException e) {
// }
if (enableSlowComparisons) {
int delay = 2; // Time to spin the CPU for (milliseconds)
// Do some work to occupy time
int counter = 0;
long timestamp = System.currentTimeMillis();
while (System.currentTimeMillis() < timestamp + delay) {
counter++;
}
}
int result = super.compare(arg0, arg1);
scheduleComparisonUpdate();
return result;
}
};
private DeferredContentProvider contentProvider;
private WorkbenchJob updateCountRunnable = new WorkbenchJob("") {
/* (non-Javadoc)
* @see org.eclipse.ui.progress.UIJob#runInUIThread(org.eclipse.core.runtime.IProgressMonitor)
*/
public IStatus runInUIThread(IProgressMonitor monitor) {
updateCount.setText("Comparison count = " + comparator.comparisons);
return Status.OK_STATUS;
}
};
private Label updateCount;
private SetModel model = new SetModel();
private Random rand = new Random();
private Button slowComparisons;
/* (non-Javadoc)
* @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
*/
public void createPartControl(Composite temp) {
Composite parent = new Composite(temp, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
parent.setLayout(layout);
// Create the table
{
table = new TableViewer(parent, SWT.VIRTUAL);
contentProvider = new DeferredContentProvider(comparator);
table.setContentProvider(contentProvider);
GridData data = new GridData(GridData.FILL_BOTH);
table.getControl().setLayoutData(data);
table.setInput(model);
}
// Create the buttons
Composite buttonBar = new Composite(parent, SWT.NONE);
buttonBar.setLayoutData(new GridData(GridData.FILL_BOTH));
GridLayout buttonBarLayout = new GridLayout();
buttonBarLayout.numColumns = 1;
buttonBar.setLayout(buttonBarLayout);
{
updateCount = new Label(buttonBar, SWT.NONE);
updateCount.setLayoutData(new GridData(GridData.FILL_BOTH));
slowComparisons = new Button(buttonBar, SWT.CHECK);
slowComparisons.setLayoutData(new GridData(GridData.FILL_BOTH));
slowComparisons.setText("Slow comparisons");
slowComparisons.setSelection(enableSlowComparisons);
slowComparisons.addSelectionListener(new SelectionAdapter() {
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e) {
enableSlowComparisons = slowComparisons.getSelection();
super.widgetSelected(e);
}
});
final Button limitSize = new Button(buttonBar, SWT.CHECK);
limitSize.setLayoutData(new GridData(GridData.FILL_BOTH));
limitSize.setText("Limit table size to 400");
limitSize.addSelectionListener(new SelectionAdapter() {
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e) {
if (limitSize.getSelection()) {
contentProvider.setLimit(400);
} else {
contentProvider.setLimit(-1);
}
super.widgetSelected(e);
}
});
Button resetCountButton = new Button(buttonBar, SWT.PUSH);
resetCountButton.setLayoutData(new GridData(GridData.FILL_BOTH));
resetCountButton.setText("Reset comparison count");
resetCountButton.addSelectionListener(new SelectionAdapter() {
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e) {
comparator.comparisons = 0;
scheduleComparisonUpdate();
}
});
Button testButton = new Button(buttonBar, SWT.PUSH);
testButton.setLayoutData(new GridData(GridData.FILL_BOTH));
testButton.setText("add 100000 elements");
testButton.addSelectionListener(new SelectionAdapter() {
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e) {
addRandomElements(100000);
}
});
Button removeButton = new Button(buttonBar, SWT.PUSH);
removeButton.setLayoutData(new GridData(GridData.FILL_BOTH));
removeButton.setText("remove all");
removeButton.addSelectionListener(new SelectionAdapter() {
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e) {
clear();
}
});
}
}
/**
*
* @since 3.1
*/
protected void scheduleComparisonUpdate() {
updateCountRunnable.schedule(100);
}
public void addRandomElements(int amount) {
ArrayList tempList = new ArrayList();
for (int counter = 0; counter < amount; counter++) {
tempList.add("" + rand.nextLong() + " " + counter );
}
model.addAll(tempList);
}
public void clear() {
model.clear();
}
/* (non-Javadoc)
* @see org.eclipse.ui.IWorkbenchPart#setFocus()
*/
public void setFocus() {
// TODO Auto-generated method stub
}
}