diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/CreateAnnotationInstanceColumn.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/CreateAnnotationInstanceColumn.java index c5a40ed01643477e386a3c603945b640f6f75be2..bbf47efbfa8f3e22331045ee251103c6f0ca92cb 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/CreateAnnotationInstanceColumn.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/CreateAnnotationInstanceColumn.java @@ -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(); + } + }); } /** diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/GenericAnnotationView.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/GenericAnnotationView.java index a6cc52461661cf93c7aaabc61af59ad6fe104e24..a8ddfe832ce844e39c98660b02fa224b19bef535 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/GenericAnnotationView.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/GenericAnnotationView.java @@ -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); }