Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: 5e0e2b024cbd70b955eb63956b38d090ce848dd8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package org.eclipse.papyrus.customization.properties.providers;

import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.papyrus.infra.emf.providers.EMFGraphicalContentProvider;
import org.eclipse.papyrus.infra.widgets.editors.AbstractEditor;
import org.eclipse.papyrus.infra.widgets.editors.BooleanToggle;
import org.eclipse.papyrus.infra.widgets.editors.ICommitListener;
import org.eclipse.papyrus.infra.widgets.providers.AbstractTreeFilter;
import org.eclipse.papyrus.views.properties.environment.PropertyEditorType;
import org.eclipse.papyrus.views.properties.ui.PropertyEditor;
import org.eclipse.papyrus.views.properties.widgets.layout.PropertiesLayout;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;


public class PropertyEditorTypeContentProvider extends EMFGraphicalContentProvider implements ICommitListener {

	private PropertyEditor source;

	private BooleanToggle filterButton;

	private PropertyEditorTypeViewerFilter currentFilter;

	public PropertyEditorTypeContentProvider(IStructuredContentProvider semanticProvider, PropertyEditor source) {
		super(semanticProvider, source.eResource().getResourceSet(), getHistoryId(source));
		this.source = source;
		this.currentFilter = new PropertyEditorTypeViewerFilter();
	}

	private static String getHistoryId(PropertyEditor source) {
		return "history_propertyEditorType_" + source.eResource().getURI();
	}

	@Override
	public void createBefore(Composite parent) {
		Composite self = new Composite(parent, SWT.NONE);
		self.setLayout(new PropertiesLayout());

		filterButton = new BooleanToggle(self);
		filterButton.setText("Filter");
		filterButton.setValue(currentFilter.getFilter());
		filterButton.addCommitListener(this);
		super.createBefore(self);
	}

	@Override
	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
		if(super.viewer != null) {
			super.viewer.removeFilter(currentFilter);
		}
		super.inputChanged(viewer, oldInput, newInput);
		super.viewer.addFilter(currentFilter);
	}

	@Override
	public void commit(AbstractEditor editor) {
		currentFilter.setFilter(filterButton.getValue());
		if(super.viewer != null) {
			super.viewer.refresh();
		}
	}

	private class PropertyEditorTypeViewerFilter extends AbstractTreeFilter {

		private boolean filter = true;

		@Override
		public boolean isVisible(Viewer viewer, Object parentElement, Object element) {
			if(!filter) {
				return true;
			}

			Object adaptedValue = getAdaptedValue(element);
			if(adaptedValue instanceof PropertyEditorType) {
				PropertyEditorType editorType = (PropertyEditorType)adaptedValue;
				if(source.getProperty() == null) {
					return true;
				}
				return editorType.getType() == source.getProperty().getType();
			}

			return false;
		}

		public boolean getFilter() {
			return filter;
		}

		public void setFilter(boolean filter) {
			this.filter = filter;
			clearCache();
		}

	}

}

Back to the top