Skip to content

Package: SimpleControlJFaceViewerSWTRenderer$1

SimpleControlJFaceViewerSWTRenderer$1

nameinstructionbranchcomplexitylinemethod
widgetDisposed(DisposeEvent)
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
{...}
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2013 EclipseSource Muenchen GmbH and others.
3: *
4: * All rights reserved. This program and the accompanying materials
5: * are made available under the terms of the Eclipse Public License 2.0
6: * which accompanies this distribution, and is available at
7: * https://www.eclipse.org/legal/epl-2.0/
8: *
9: * SPDX-License-Identifier: EPL-2.0
10: *
11: * Contributors:
12: * Edagr Mueller - initial API and implementation
13: * Eugen Neufeld - Refactoring
14: ******************************************************************************/
15: package org.eclipse.emf.ecp.view.spi.core.swt;
16:
17: import org.eclipse.core.databinding.Binding;
18: import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
19: import org.eclipse.emf.ecp.view.spi.model.VControl;
20: import org.eclipse.emf.ecp.view.template.model.VTViewTemplateProvider;
21: import org.eclipse.emfforms.spi.common.report.ReportService;
22: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
23: import org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding;
24: import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
25: import org.eclipse.jface.viewers.Viewer;
26: import org.eclipse.swt.events.DisposeEvent;
27: import org.eclipse.swt.events.DisposeListener;
28: import org.eclipse.swt.widgets.Composite;
29: import org.eclipse.swt.widgets.Control;
30:
31: /**
32: * Renderer for {@link org.eclipse.swt.widgets.Control Controls} which uses a {@link Viewer}.
33: *
34: * @author Eugen Neufeld
35: *
36: */
37: public abstract class SimpleControlJFaceViewerSWTRenderer extends SimpleControlSWTRenderer {
38:
39:         private Binding[] bindings;
40:         private Viewer viewer;
41:
42:         /**
43:          * Default constructor.
44:          *
45:          * @param vElement the view model element to be rendered
46:          * @param viewContext the view context
47:          * @param reportService The {@link ReportService}
48:          * @param emfFormsDatabinding The {@link EMFFormsDatabinding}
49:          * @param emfFormsLabelProvider The {@link EMFFormsLabelProvider}
50:          * @param vtViewTemplateProvider The {@link VTViewTemplateProvider}
51:          * @since 1.6
52:          */
53:         public SimpleControlJFaceViewerSWTRenderer(VControl vElement, ViewModelContext viewContext,
54:                 ReportService reportService,
55:                 EMFFormsDatabinding emfFormsDatabinding, EMFFormsLabelProvider emfFormsLabelProvider,
56:                 VTViewTemplateProvider vtViewTemplateProvider) {
57:                 super(vElement, viewContext, reportService, emfFormsDatabinding, emfFormsLabelProvider, vtViewTemplateProvider);
58:         }
59:
60:         /**
61:          * Creates the control itself.
62:          *
63:          * @param parent the {@link Composite} to render onto
64:          * @return the rendered control
65:          * @throws DatabindingFailedException if the creation of the control fails due to failed databinding
66:          */
67:         @Override
68:         protected final Control createControl(Composite parent) throws DatabindingFailedException {
69:                 viewer = createJFaceViewer(parent);
70:                 bindings = createBindings(viewer);
71:
72:                 viewer.getControl().addDisposeListener(new DisposeListener() {
73:
74:                         @Override
75:                         public void widgetDisposed(DisposeEvent e) {
76:                                 disposeBindings();
77:                         }
78:                 });
79:                 return viewer.getControl();
80:         }
81:
82:         /**
83:          * {@inheritDoc}
84:          *
85:          * @see org.eclipse.emf.ecp.view.spi.core.swt.AbstractControlSWTRenderer#rootDomainModelChanged()
86:          */
87:         @Override
88:         protected void rootDomainModelChanged() throws DatabindingFailedException {
89:                 super.rootDomainModelChanged();
90:                 disposeBindings();
91:                 bindings = createBindings(viewer);
92:         }
93:
94:         /**
95:          * Disposes all bindings of this renderer.
96:          */
97:         private void disposeBindings() {
98:                 if (bindings != null) {
99:                         for (final Binding binding : bindings) {
100:                                 binding.dispose();
101:                         }
102:                 }
103:         }
104:
105:         /**
106:          * Create the {@link Binding Bindings} for this controls.
107:          *
108:          * @param viewer the {@link Viewer} to create the binding for
109:          * @return all the bindings created by this renderer
110:          * @throws DatabindingFailedException if the creation of the bindings failed
111:          * @since 1.6
112:          */
113:         protected abstract Binding[] createBindings(Viewer viewer) throws DatabindingFailedException;
114:
115:         /**
116:          * Creates the {@link Viewer}.
117:          *
118:          * @param parent the {@link Composite} to use as a parent
119:          * @return the created {@link Viewer}
120:          * @throws DatabindingFailedException if the databinding fails
121:          * @since 1.6
122:          */
123:         protected abstract Viewer createJFaceViewer(Composite parent) throws DatabindingFailedException;
124:
125: }