Skip to content

Package: SWTDiffMergeAddition$3

SWTDiffMergeAddition$3

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

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2014 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: * Eugen - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emf.ecp.diffmerge.internal.renderer.swt;
15:
16: import org.eclipse.emf.common.notify.Adapter;
17: import org.eclipse.emf.common.notify.Notification;
18: import org.eclipse.emf.common.notify.impl.AdapterImpl;
19: import org.eclipse.emf.ecp.diffmerge.spi.context.DiffMergeModelContext;
20: import org.eclipse.emf.ecp.diffmerge.swt.DiffDialogHelper;
21: import org.eclipse.emf.ecp.spi.diffmerge.model.VDiffAttachment;
22: import org.eclipse.emf.ecp.spi.diffmerge.model.VDiffmergePackage;
23: import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
24: import org.eclipse.emf.ecp.view.spi.model.VAttachment;
25: import org.eclipse.emf.ecp.view.spi.model.VControl;
26: import org.eclipse.emf.ecp.view.spi.renderer.NoPropertyDescriptorFoundExeption;
27: import org.eclipse.emf.ecp.view.spi.renderer.NoRendererFoundException;
28: import org.eclipse.emfforms.spi.common.report.AbstractReport;
29: import org.eclipse.emfforms.spi.common.report.ReportService;
30: import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
31: import org.eclipse.emfforms.spi.core.services.label.NoLabelFoundException;
32: import org.eclipse.emfforms.spi.swt.core.AbstractAdditionalSWTRenderer;
33: import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
34: import org.eclipse.emfforms.spi.swt.core.layout.SWTGridDescription;
35: import org.eclipse.swt.SWT;
36: import org.eclipse.swt.events.DisposeEvent;
37: import org.eclipse.swt.events.DisposeListener;
38: import org.eclipse.swt.events.SelectionAdapter;
39: import org.eclipse.swt.events.SelectionEvent;
40: import org.eclipse.swt.widgets.Button;
41: import org.eclipse.swt.widgets.Composite;
42: import org.eclipse.swt.widgets.Control;
43:
44: /**
45: * A diff merge addition renderer.
46: *
47: * @author Eugen Neufeld
48: *
49: */
50: public class SWTDiffMergeAddition extends AbstractAdditionalSWTRenderer<VControl> {
51:
52:         /**
53:          * @param vElement the view model element to be rendered
54:          * @param viewContext the view context
55:          * @param reportService the {@link ReportService}
56:          */
57:         public SWTDiffMergeAddition(VControl vElement, ViewModelContext viewContext, ReportService reportService) {
58:                 super(vElement, viewContext, reportService);
59:         }
60:
61:         /**
62:          * {@inheritDoc}
63:          *
64:          * @see org.eclipse.emfforms.spi.swt.core.AbstractSWTRenderer#getGridDescription(org.eclipse.emfforms.spi.swt.core.layout.SWTGridDescription)
65:          */
66:         @Override
67:         public SWTGridDescription getGridDescription(SWTGridDescription gridDescription) {
68:                 final SWTGridDescription addGridDescription = gridDescription.copy();
69:                 addGridDescription.getGrid().add(new SWTGridCell(0, addGridDescription.getColumns(), this));
70:                 addGridDescription.setColumns(addGridDescription.getColumns() + 1);
71:                 return addGridDescription;
72:         }
73:
74:         /**
75:          * {@inheritDoc}
76:          *
77:          * @see org.eclipse.emfforms.spi.swt.core.AbstractSWTRenderer#renderControl(org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell,
78:          * org.eclipse.swt.widgets.Composite)
79:          */
80:         @Override
81:         protected Control renderControl(SWTGridCell cell, Composite parent) throws NoRendererFoundException,
82:                 NoPropertyDescriptorFoundExeption {
83:                 // if (gridDescription.getColumns() == cell.getColumn() + 1) {
84:                 if (cell.getRenderer() == this) {
85:                         return createDiffButton(parent);
86:
87:                 }
88:                 return null;
89:         }
90:
91:         /**
92:          * @param parent
93:          */
94:         private Button createDiffButton(Composite parent) {
95:                 final Button diffButton = new Button(parent, SWT.PUSH);
96:                 diffButton.setText(Messages.getString("SWTDiffMergeControlRenderer.DiffButton")); //$NON-NLS-1$
97:                 diffButton.setData(CUSTOM_VARIANT, "org_eclipse_emf_ecp_control_compare_button"); //$NON-NLS-1$
98:                 // diffButton.setLayoutData(SWTRenderingHelper.INSTANCE.getLayoutHelper().getLeftColumnLayoutData());
99:                 diffButton.addSelectionListener(new SelectionAdapter() {
100:
101:                         /**
102:                          * {@inheritDoc}
103:                          *
104:                          * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
105:                          */
106:                         @Override
107:                         public void widgetSelected(SelectionEvent e) {
108:                                 super.widgetSelected(e);
109:                                 openDiffDialog((DiffMergeModelContext) getViewModelContext(), getVElement());
110:                         }
111:
112:                 });
113:                 for (final VAttachment attachment : getVElement().getAttachments()) {
114:                         if (VDiffAttachment.class.isInstance(attachment)) {
115:                                 final Adapter adapter = new AdapterImpl() {
116:
117:                                         /**
118:                                          * {@inheritDoc}
119:                                          *
120:                                          * @see org.eclipse.emf.common.notify.impl.AdapterImpl#notifyChanged(org.eclipse.emf.common.notify.Notification)
121:                                          */
122:                                         @Override
123:                                         public void notifyChanged(Notification msg) {
124:                                                 super.notifyChanged(msg);
125:                                                 if (msg.getFeature() == VDiffmergePackage.eINSTANCE.getDiffAttachment_MergedDiffs()) {
126:                                                         updateButton(diffButton, (VDiffAttachment) attachment);
127:                                                 }
128:                                         }
129:
130:                                 };
131:                                 attachment.eAdapters().add(adapter);
132:                                 diffButton.addDisposeListener(new DisposeListener() {
133:
134:                                         @Override
135:                                         public void widgetDisposed(DisposeEvent event) {
136:                                                 attachment.eAdapters().remove(adapter);
137:                                         }
138:                                 });
139:                                 updateButton(diffButton, (VDiffAttachment) attachment);
140:                                 break;
141:                         }
142:                 }
143:                 return diffButton;
144:         }
145:
146:         private void updateButton(Button diffButton, VDiffAttachment attachment) {
147:                 if (attachment.getMergedDiffs() == 0) {
148:                         diffButton.setImage(Activator.getImage("icons/lightning.png")); //$NON-NLS-1$
149:                 } else {
150:                         diffButton.setImage(Activator.getImage("icons/accept.png")); //$NON-NLS-1$
151:                 }
152:         }
153:
154:         private void openDiffDialog(DiffMergeModelContext diffModelContext, VControl vControl) {
155:
156:                 String label;
157:                 try {
158:                         label = (String) getViewModelContext().getService(EMFFormsLabelProvider.class)
159:                                 .getDisplayName(vControl.getDomainModelReference(), diffModelContext.getDomainModel()).getValue();
160:                 } catch (final NoLabelFoundException ex) {
161:                         getViewModelContext().getService(ReportService.class).report(new AbstractReport(ex));
162:                         label = ex.getMessage();
163:                 }
164:
165:                 DiffDialogHelper.showDialog(diffModelContext, vControl, label);
166:         }
167:
168: }