Skip to content

Commit

Permalink
Bug 434750 - Bad performance with equal row-header text
Browse files Browse the repository at this point in the history
Improve performance with Thomas Schindl patch in Grid.setItemCount

Change-Id: I2699a4602d1600edb9b2d3cae20eb46ab9b2fde9
Signed-off-by: mpaturzo <caosmpz@yahoo.it>
  • Loading branch information
caosmp committed May 21, 2014
1 parent 24ea881 commit dc4c3d8
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,18 @@
* Mirko Paturzo - realize example
*******************************************************************************/

import org.eclipse.jface.viewers.ILazyContentProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.nebula.jface.gridviewer.GridTableViewer;
import org.eclipse.nebula.widgets.grid.GridColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

Expand All @@ -28,27 +33,28 @@
public class GridVirtualTableViewer {

private static final int ROWS = 1000000;
private static final int COLUMNS = 1000;
private static final int COLUMNS = 10;

private class MyLazyContentProvider implements ILazyContentProvider {
private final GridTableViewer viewer;
private MyModel[] elements;

public MyLazyContentProvider(GridTableViewer viewer) {
this.viewer = viewer;
}

public void dispose() {
}
private class MyContentProvider implements IStructuredContentProvider {
public MyContentProvider(GridTableViewer viewer) {

}
public void dispose() {
// TODO Auto-generated method stub

}

public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
this.elements = (MyModel[]) newInput;
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO Auto-generated method stub

}

public void updateElement(int index) {
viewer.replace(elements[index], index);
}
}
public Object[] getElements(Object inputElement) {
return (Object[]) inputElement;
}

}

public class MyModel {
public int counter;

Expand All @@ -67,20 +73,45 @@ public GridVirtualTableViewer(Shell shell) {
final GridTableViewer v = new GridTableViewer(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.VIRTUAL);

v.setLabelProvider(labelProvider);
v.setContentProvider(new MyLazyContentProvider(v));
v.setContentProvider(new MyContentProvider(v));
v.setUseHashlookup(true);
v.getGrid().setLinesVisible(true);
v.getGrid().setHeaderVisible(true);
v.getGrid().setVisibleLinesColumnPack(true);
// v.getGrid().setRowHeaderVisible(true);
// v.setRowHeaderLabelProvider(new ColumnLabelProvider() {
// @Override
// public String getText(Object element) {
// return "xyz";
// }
// });
v.getGrid().setLayoutData(new GridData(GridData.FILL_BOTH));

for (int i = 0; i < COLUMNS; i++)
{
createColumn(v, "Column");
}

MyModel[] model = createModel();
v.setInput(model);
v.getGrid().setItemCount(model.length);

v.getGrid().setLinesVisible(true);
v.getGrid().setHeaderVisible(true);
v.getGrid().setVisibleLinesColumnPack(true);

Button b = new Button(shell, SWT.PUSH);
b.setText("Filter items without 0");
b.addSelectionListener(new SelectionListener() {

public void widgetSelected(SelectionEvent arg0) {
v.addFilter(new ViewerFilter() {

@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
return element.toString().contains("0");
}
});
}

public void widgetDefaultSelected(SelectionEvent arg0) {
}
});
}
private void createColumn(final GridTableViewer v, String name) {
GridColumn column = new GridColumn(v.getGrid(), SWT.NONE);
Expand All @@ -103,7 +134,7 @@ private MyModel[] createModel() {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
shell.setLayout(new GridLayout());
new GridVirtualTableViewer(shell);
shell.open();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -714,7 +714,7 @@ public void clearItems() {
private boolean autoHeight = false;
private boolean autoWidth = true;
private boolean wordWrapRowHeader = false;

private final DataVisualizer dataVisualizer;

private Listener defaultKeyListener;
Expand Down Expand Up @@ -7646,6 +7646,7 @@ else if (!root) {
* @param item item to remove
*/
void removeItem(GridItem item) {

Point[] cells = getCells(item);
boolean selectionModified = false;

Expand Down Expand Up @@ -7684,12 +7685,13 @@ void removeItem(GridItem item) {
if (selectionModified && !disposing) {
updateColumnSelection();
}

redraw();
// Need to update the scrollbars see see 375327
updateScrollbars();
}


/**
* Creates the given column group at the given index. This method is only
* called from the {@code GridColumnGroup}'s constructor.
Expand Down Expand Up @@ -8890,7 +8892,7 @@ public void setItemHeaderWidth(int width) {
setAutoWidth(false);
redraw();
}

/**
* Sets the number of items contained in the receiver.
*
Expand All @@ -8910,9 +8912,23 @@ public void setItemCount(int count) {

if (count < items.size()) {

selectedCells.clear();
for(int i = items.size() - 1; i >= count; i--){
items.get(i).dispose();
GridItem removed = items.remove(i);
rootItems.remove(i);

selectedItems.remove(removed);

if(removed.isVisible())
currentVisibleItems--;
removed.disposeOnly();
}
if (!disposing) {
updateColumnSelection();
}
scrollValuesObsolete = true;
topIndex = -1;
bottomIndex = -1;
}

while (count > items.size()) {
Expand Down

0 comments on commit dc4c3d8

Please sign in to comment.