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

- GenericAnnotationView: Enable to restrict view to currently selected element...

- GenericAnnotationView: Enable to restrict view to currently selected element type (e.g., components, channels, ...)
- AnnotationViewPartBase: Generalize selectionChanged() to handle all graphical model elements (required for the above feature)
refs 1841
parent a070cc39
No related branches found
No related tags found
No related merge requests found
......@@ -27,6 +27,7 @@ import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISelectionListener;
......@@ -36,8 +37,6 @@ import org.fortiss.tooling.base.model.element.IAnnotatedSpecification;
import org.fortiss.tooling.base.model.element.IModelElement;
import org.fortiss.tooling.base.ui.annotation.AnnotationEntry;
import org.fortiss.tooling.base.ui.annotation.IAnnotationValueService;
import org.fortiss.tooling.base.ui.editpart.DiagramEditPartBase;
import org.fortiss.tooling.base.ui.editpart.ElementEditPartBase;
import org.fortiss.tooling.kernel.model.IProjectRootElement;
import org.fortiss.tooling.kernel.service.IPersistencyService;
import org.fortiss.tooling.kernel.ui.util.SelectionUtils;
......@@ -103,18 +102,10 @@ public abstract class AnnotationViewPartBase extends ViewPart implements ISelect
currentlySelectedObject = SelectionUtils.checkAndPickFirst(selection, IModelElement.class);
if(currentlySelectedObject == null) {
ElementEditPartBase<?> editPart =
SelectionUtils.checkAndPickFirst(selection, ElementEditPartBase.class);
AbstractGraphicalEditPart editPart =
SelectionUtils.checkAndPickFirst(selection, AbstractGraphicalEditPart.class);
if(editPart != null && editPart.getModel() instanceof IModelElement) {
currentlySelectedObject = (IModelElement)editPart.getModel();
} else {
// Not all editors are derived from ElementEditPartBase, most notably
// PlatformArchitectureDiagramEditPart
DiagramEditPartBase<?> diagramPart =
SelectionUtils.checkAndPickFirst(selection, DiagramEditPartBase.class);
if(diagramPart != null && diagramPart.getModel() instanceof IModelElement) {
currentlySelectedObject = (IModelElement)diagramPart.getModel();
}
}
}
if(currentlySelectedObject != null) {
......
......@@ -41,6 +41,7 @@ import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
......@@ -50,6 +51,7 @@ import org.fortiss.tooling.base.ui.annotation.AnnotationEntry;
import org.fortiss.tooling.base.ui.annotation.editingsupport.ElementNameEditingSupport;
import org.fortiss.tooling.base.ui.annotation.valueprovider.IAnnotationValueProvider;
import org.fortiss.tooling.kernel.model.INamedElement;
import org.fortiss.tooling.kernel.model.IProjectRootElement;
/**
* <p>
......@@ -91,6 +93,12 @@ public class GenericAnnotationView extends AnnotationViewPartBase {
/** Flag whether columns should be filtered. */
boolean filterColumns;
/**
* Flag whether the displayed rows should be restricted to the currently selected model element
* type.
*/
boolean restrictToSelectedModelElementType;
/**
* Last set of {@link AnnotationEntry}s used to {@link #update(Collection)} the
* {@link GenericAnnotationView}, i.e. during the construction of the, or because of a model
......@@ -321,10 +329,6 @@ public class GenericAnnotationView extends AnnotationViewPartBase {
/** {@inheritDoc} */
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if(!active) {
return true;
}
if(!(element instanceof AnnotationEntry)) {
return true;
}
......@@ -334,13 +338,17 @@ public class GenericAnnotationView extends AnnotationViewPartBase {
return true;
}
return passesFilter(((INamedElement)annotationEntry.getModelElement()).getName(),
filterPattern);
return (!active || passesFilter(
((INamedElement)annotationEntry.getModelElement()).getName(), filterPattern)) &&
(!restrictToSelectedModelElementType || getCurrentlySelectedObject() == null ||
getCurrentlySelectedObject() instanceof IProjectRootElement || annotationEntry
.getModelElement().getClass()
.equals(getCurrentlySelectedObject().getClass()));
}
}
/**
* Returns true if a given {@code input} passes an case-insensitive filter specified by
* Returns {@code true} if a given {@code input} passes an case-insensitive filter specified by
* {@code filterString}.
*/
private static boolean passesFilter(String input, String filterString) {
......@@ -356,6 +364,14 @@ public class GenericAnnotationView extends AnnotationViewPartBase {
return input.toLowerCase().contains(filterString.toLowerCase());
}
/** Returns {@code true} if the column represented by the given column is visible in the view. */
private boolean passesFilter(ColumnHandle columnHandle, String filterPattern) {
if(!filterColumns) {
return true;
}
return passesFilter(getColumnName(columnHandle), filterPattern);
}
/** Updates the table after a filter change */
private void update() {
// Full update, i.e. including reconstructions of columns is always required due to the
......@@ -406,8 +422,7 @@ public class GenericAnnotationView extends AnnotationViewPartBase {
for(String instanceKey : entry.getInstanceKeys(spec.getClass())) {
ColumnHandle columnHandle =
new ColumnHandle(entry, spec, instanceKey, false);
if(!filterColumns ||
passesFilter(getColumnName(columnHandle), filterPattern)) {
if(passesFilter(columnHandle, filterPattern)) {
sortedColumnHandles.add(columnHandle);
}
}
......@@ -423,7 +438,7 @@ public class GenericAnnotationView extends AnnotationViewPartBase {
new ColumnHandle(entry, spec, null,
entry.allowsDynamicAnnotationInstances(spec.getClass()));
if(!filterColumns || passesFilter(getColumnName(columnHandle), filterPattern)) {
if(passesFilter(columnHandle, filterPattern)) {
sortedColumnHandles.add(columnHandle);
}
......@@ -507,13 +522,18 @@ public class GenericAnnotationView extends AnnotationViewPartBase {
filterText.addListener(SWT.MouseDown, textSelectionOnFocusListener);
filterText.addListener(SWT.MouseUp, textSelectionOnFocusListener);
// Filter options
Composite filterOptionsComposite = new Composite(filterComposite, SWT.NULL);
filterOptionsComposite
.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
filterOptionsComposite.setLayout(new RowLayout());
// Radio buttons to select between row and column filtering
Composite radioButtonComposite = new Composite(filterComposite, SWT.NULL);
radioButtonComposite.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
radioButtonComposite.setLayout(new RowLayout());
final Label filterLabel = new Label(filterOptionsComposite, SWT.NULL);
filterLabel.setText("Filter ");
final Button filterComponentNamesButton = new Button(radioButtonComposite, SWT.RADIO);
filterComponentNamesButton.setText("Component names");
final Button filterComponentNamesButton = new Button(filterOptionsComposite, SWT.RADIO);
filterComponentNamesButton.setText("component");
filterComponentNamesButton.setSelection(true);
filterComponentNamesButton.addSelectionListener(new SelectionAdapter() {
......@@ -530,8 +550,8 @@ public class GenericAnnotationView extends AnnotationViewPartBase {
}
});
final Button filterAnnotationNamesButton = new Button(radioButtonComposite, SWT.RADIO);
filterAnnotationNamesButton.setText("Annotation names");
final Button filterAnnotationNamesButton = new Button(filterOptionsComposite, SWT.RADIO);
filterAnnotationNamesButton.setText("annotation names.");
filterAnnotationNamesButton.setSelection(false);
filterAnnotationNamesButton.addSelectionListener(new SelectionAdapter() {
......@@ -547,6 +567,25 @@ public class GenericAnnotationView extends AnnotationViewPartBase {
update();
}
});
final Label spacerLabel = new Label(filterOptionsComposite, SWT.NULL);
spacerLabel.setText(" ");
// Check box to restrict view to currently selected model element type
final Button filterModelElementType = new Button(filterOptionsComposite, SWT.CHECK);
filterModelElementType.setText("Show only selected model element type.");
filterModelElementType.setSelection(false);
filterModelElementType.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
// widgetSelected() is also fired when the selection is removed from the radio
// button, so check, if this is the button that just obtained the selection
restrictToSelectedModelElementType = ((Button)e.getSource()).getSelection();
update();
}
});
}
/** {@inheritDoc} */
......
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