Skip to content
Snippets Groups Projects
Commit 8a4a3eeb authored by Simon Barner's avatar Simon Barner
Browse files

- Fix disposal of CreateAnnotationInstanceColumn's "create" Button by installing a DisposeListener

- Optimize drawing speed by disabling the redraw while the new set of columns is beeing created
parent d5ef2178
No related branches found
No related tags found
No related merge requests found
......@@ -31,6 +31,8 @@ import org.eclipse.jface.viewers.ViewerColumn;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.TableEditor;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
......@@ -128,6 +130,13 @@ public class CreateAnnotationInstanceColumn extends ViewerColumn {
column.setText(entry.getSpecificationAnnotationName(spec.getClass()));
setLabelProvider(new CreateNewAnnotationColumn());
column.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
crButton.dispose();
}
});
}
/**
......
......@@ -17,9 +17,7 @@ $Id$
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.base.ui.annotation.view;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
......@@ -31,6 +29,7 @@ import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.fortiss.tooling.base.model.element.IAnnotatedSpecification;
import org.fortiss.tooling.base.ui.annotation.AnnotationEntry;
import org.fortiss.tooling.base.ui.annotation.editingsupport.ElementNameEditingSupport;
......@@ -55,13 +54,6 @@ import org.fortiss.tooling.base.ui.annotation.valueprovider.IAnnotationValueProv
*/
public class GenericAnnotationView extends AnnotationViewPartBase {
/**
* List containing the columns that are responsible for creating new keys. Required for
* disposing when updating the view.
*/
private List<CreateAnnotationInstanceColumn> createColumns =
new ArrayList<CreateAnnotationInstanceColumn>();
/** The table viewer */
protected TableViewer tableViewer;
......@@ -189,6 +181,9 @@ public class GenericAnnotationView extends AnnotationViewPartBase {
/** {@inheritDoc} */
@Override
protected void update(Collection<AnnotationEntry> annotationEntries) {
// Minimize flickering while updating the table
tableViewer.getTable().setRedraw(false);
/*
* Sorted set of {@link ColumnHandle} used to instantiate this {@link
* GenericAnnotationView}'s columns in the right order.
......@@ -203,10 +198,6 @@ public class GenericAnnotationView extends AnnotationViewPartBase {
tableViewer.getTable().getColumn(1).dispose();
}
for(CreateAnnotationInstanceColumn col : createColumns) {
col.dispose();
}
// Aggregate required columns. Column order is defined by ColumnHandle.compareTo().
for(AnnotationEntry entry : annotationEntries) {
for(IAnnotatedSpecification spec : entry.getSpecificationsList()) {
......@@ -237,7 +228,8 @@ public class GenericAnnotationView extends AnnotationViewPartBase {
createAnnotationColumn(columnHandle);
}
// Register content provider
// Update the view
tableViewer.getTable().setRedraw(true);
if(!tableViewer.getTable().isDisposed()) {
tableViewer.setInput(annotationEntries);
}
......@@ -274,36 +266,41 @@ public class GenericAnnotationView extends AnnotationViewPartBase {
/** Creates a column in tableViewer that displays the annotation given in spec */
protected void createAnnotationColumn(ColumnHandle columnHandle) {
TableColumn tableColumn;
if(columnHandle.isCreateColumn()) {
// Create column that contains a button for adding new instances of the
// current annotation type.
createColumns.add(new CreateAnnotationInstanceColumn(tableViewer, SWT.NONE,
columnHandle.getAnnotatedSpecification(), columnHandle.getEntry()));
(createColumns.get(createColumns.size() - 1)).getColumn().setWidth(125);
return;
}
String specName = getColumnName(columnHandle);
CreateAnnotationInstanceColumn column =
new CreateAnnotationInstanceColumn(tableViewer, SWT.NONE,
columnHandle.getAnnotatedSpecification(), columnHandle.getEntry());
tableColumn = column.getColumn();
} else {
// Add new new column
TableViewerColumn column = new TableViewerColumn(tableViewer, SWT.NONE);
column.getColumn().setText(specName);
// Add new new column
TableViewerColumn column = new TableViewerColumn(tableViewer, SWT.NONE);
tableColumn = column.getColumn();
Class<? extends IAnnotatedSpecification> annotationClass =
columnHandle.getAnnotatedSpecification().getClass();
String specName = getColumnName(columnHandle);
tableColumn.setText(specName);
column.getColumn().setWidth(125);
Class<? extends IAnnotatedSpecification> annotationClass =
columnHandle.getAnnotatedSpecification().getClass();
// Have the matching EditingSupport created for the current annotated specification
// (work is delegated to respective IAnnotationValueProvider implementation)
EditingSupport editingSupport =
columnHandle.getEntry().createSpecificationEditElement(tableViewer,
annotationClass, columnHandle.getInstanceKey());
// Have the matching EditingSupport created for the current annotated specification
// (work is delegated to respective IAnnotationValueProvider implementation)
EditingSupport editingSupport =
columnHandle.getEntry().createSpecificationEditElement(tableViewer,
annotationClass, columnHandle.getInstanceKey());
column.setEditingSupport(editingSupport);
// Add column label provider, and set EditingSupport
column.setLabelProvider(new AnnotationLabelProvider(annotationClass, this, columnHandle
.getInstanceKey()));
}
// Add column label provider, and set EditingSupport
column.setLabelProvider(new AnnotationLabelProvider(annotationClass, this, columnHandle
.getInstanceKey()));
column.setEditingSupport(editingSupport);
tableColumn.setWidth(125);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment