Skip to content

Commit

Permalink
Show number of differences in the Compare editor eclipse-platform#504
Browse files Browse the repository at this point in the history
Show number of differences (Ex: 6 Differences) in the toolbar of compare
editor
which matches "Change markers" next to the scroll bar in compare editor

Fixes eclipse-platform#504
  • Loading branch information
lathapatil committed Nov 10, 2023
1 parent b345854 commit c611ac8
Show file tree
Hide file tree
Showing 7 changed files with 207 additions and 6 deletions.
2 changes: 1 addition & 1 deletion team/bundles/org.eclipse.compare/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.compare; singleton:=true
Bundle-Version: 3.9.300.qualifier
Bundle-Version: 3.10.0.qualifier
Bundle-Activator: org.eclipse.compare.internal.CompareUIPlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
/*******************************************************************************
* Copyright (c) ETAS GmbH 2023, all rights reserved.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* ETAS GmbH - initial API and implementation
*******************************************************************************/

package org.eclipse.compare;

import org.eclipse.jface.action.ControlContribution;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;


/**
* @since 3.10
*
* A contribution item which delegates to a label on the tool bar.
*
*/
public class LabelContributionItem extends ControlContribution {

private Label toolbarLabel;
private String labelName;

/**
* @param id
* @param name
*/
public LabelContributionItem(String id, String name) {
super(id);
this.labelName = name;
}

@Override
protected Control createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.LEFT);
this.toolbarLabel = new Label(composite, SWT.LEFT);

GridLayout compositeLayout = new GridLayout(1, false);
compositeLayout.marginTop = -3;
compositeLayout.marginBottom = -3;
composite.setLayout(compositeLayout);
GridData labelLayout = new GridData(SWT.LEFT, SWT.BOTTOM, true, true);

this.toolbarLabel.setLayoutData(labelLayout);
this.toolbarLabel.setText(this.labelName);

return composite;
}

public Label getToolbarLabel() {
return toolbarLabel;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2000, 2020 IBM Corporation and others.
* Copyright (c) 2000, 2023 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
Expand All @@ -13,6 +13,7 @@
* Alex Blewitt <[email protected]> - replace new Boolean with Boolean.valueOf - https://bugs.eclipse.org/470344
* Stefan Xenos <[email protected]> (Google) - bug 448968 - Add diagnostic logging
* Conrad Groth - Bug 213780 - Compare With direction should be configurable
* Latha Patil (ETAS GmbH) - Issue #504 Show number of differences in the Compare editor
*******************************************************************************/

package org.eclipse.compare.contentmergeviewer;
Expand All @@ -27,6 +28,7 @@
import org.eclipse.compare.ICompareContainer;
import org.eclipse.compare.ICompareInputLabelProvider;
import org.eclipse.compare.IPropertyChangeNotifier;
import org.eclipse.compare.LabelContributionItem;
import org.eclipse.compare.internal.ChangePropertyAction;
import org.eclipse.compare.internal.CompareEditor;
import org.eclipse.compare.internal.CompareHandlerService;
Expand Down Expand Up @@ -364,6 +366,7 @@ private void resize(MouseEvent e) {
private Cursor fHSashCursor;
private Cursor fVSashCursor;
private Cursor fHVSashCursor;
private int documentDiffCount;

private final ILabelProviderListener labelChangeListener = event -> {
Object[] elements = event.getElements();
Expand Down Expand Up @@ -778,6 +781,7 @@ public void refresh() {
}

private void internalRefresh(Object input) {
final String DIFF_COUNT_ID = "DiffCount"; //$NON-NLS-1$
IMergeViewerContentProvider content= getMergeContentProvider();
if (content != null) {
Object ancestor= content.getAncestorContent(input);
Expand All @@ -803,7 +807,16 @@ private void internalRefresh(Object input) {
updateHeader();
if (Utilities.okToUse(fComposite) && Utilities.okToUse(fComposite.getParent())) {
ToolBarManager tbm = (ToolBarManager) getToolBarManager(fComposite.getParent());
if (tbm != null ) {
if (tbm != null) {
String label = documentDiffCount > 1 ? " Differences" : " Difference"; //$NON-NLS-1$ //$NON-NLS-2$
LabelContributionItem labelContributionItem = new LabelContributionItem(DIFF_COUNT_ID,
documentDiffCount + label);

if (tbm.find(DIFF_COUNT_ID) != null) {
tbm.replaceItem(DIFF_COUNT_ID, labelContributionItem);
} else {
tbm.appendToGroup("diffLabel", labelContributionItem); //$NON-NLS-1$
}
updateToolItems();
Display.getDefault().asyncExec(() -> {
// relayout in next tick
Expand Down Expand Up @@ -909,6 +922,7 @@ private void initializeToolbars(Composite parent) {
tbm.removeAll();

// Define groups.
tbm.add(new Separator("diffLabel")); //$NON-NLS-1$
tbm.add(new Separator("modes")); //$NON-NLS-1$
tbm.add(new Separator("merge")); //$NON-NLS-1$
tbm.add(new Separator("navigation")); //$NON-NLS-1$
Expand Down Expand Up @@ -1451,4 +1465,12 @@ protected boolean isLeftEditable() {
protected boolean isRightEditable() {
return fCompareConfiguration.isMirrored() ? fCompareConfiguration.isLeftEditable() : fCompareConfiguration.isRightEditable();
}

/**
* @param docDiffCount - current number of differences in the compare editor
* @since 3.10
*/
protected void setDocumentDiffCount(int docDiffCount) {
documentDiffCount = docDiffCount;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2000, 2019 IBM Corporation and others.
* Copyright (c) 2000, 2023 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
Expand All @@ -21,6 +21,7 @@
* Robin Stocker ([email protected]) - Bug 399960: [Edit] Make merge arrow buttons easier to hit
* John Hendrikx ([email protected]) - Bug 541401 - [regression] Vertical scrollbar thumb size is wrong in compare view
* Stefan Dirix ([email protected]) - Bug 473847: Minimum E4 Compatibility of Compare
* Latha Patil (ETAS GmbH) - Issue #504 Show number of differences in the Compare editor
*******************************************************************************/
package org.eclipse.compare.contentmergeviewer;

Expand Down Expand Up @@ -3059,7 +3060,9 @@ protected void updateContent(Object ancestor, Object left, Object right) {
setSyncScrolling(fPreferenceStore.getBoolean(ComparePreferencePage.SYNCHRONIZE_SCROLLING));

update(false);

if (fMerger!=null) {
setDocumentDiffCount(fMerger.changesCount());
}
if (!fHasErrors && !emptyInput && !fComposite.isDisposed()) {
if (isRefreshing()) {
fLeftContributor.updateSelection(fLeft, !fSynchronizedScrolling);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package testPackage;
import java.math.*;
public class Javaclass1 {

public static void main(String[] args) {
// TODO Auto-generated method stub

int a=0;

System.out.println("");

call_me();


}

private static void call_me() {
// TODO Auto-generated method stub
System.out.println();

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package testPackage;

import java.io.File;

public class Javaclass1 {

public static void main(String[] args) {


int a=0;

System.out.println("");

call_me();

callMe(a);

}

private static void callMe(int a) {
// TODO Auto-generated method stub
System.out.println();

}

private static void call_me() {
File f= new File("");
System.out.println("I am calledJavaclass1.java");
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006, 2018 IBM Corporation and others.
* Copyright (c) 2006, 2023 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
Expand All @@ -10,6 +10,7 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
* Latha Patil (ETAS GmbH) - Issue #504 Show number of differences in the Compare editor
*******************************************************************************/
package org.eclipse.compare.tests;

Expand All @@ -28,13 +29,18 @@
import org.eclipse.compare.structuremergeviewer.DiffNode;
import org.eclipse.compare.structuremergeviewer.Differencer;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import java.net.URL;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.text.*;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.PlatformUI;
import org.junit.Test;
import org.eclipse.swt.SWT;

public class TextMergeViewerTest {

Expand Down Expand Up @@ -480,6 +486,56 @@ public String getType() {
assertNotNull(rightDoc.getDocumentPartitioner());
}

@Test
public void testToolbarLabelContribution() throws Exception {

IPath path = IPath.fromOSString("labelContributionData/" + "file1.java");
URL url = new URL(CompareTestPlugin.getDefault().getBundle().getEntry("/"), path.toString());

IPath path1= IPath.fromOSString("labelContributionData/" + "file2.java");
URL url1 = new URL(CompareTestPlugin.getDefault().getBundle().getEntry("/"), path1.toString());

DiffNode parentNode = new DiffNode(new ParentTestElement(), new ParentTestElement());
DiffNode testNode = new DiffNode(parentNode, Differencer.CHANGE, null, new EditableTestElement(url.openStream().readAllBytes()), new EditableTestElement(url1.openStream().readAllBytes()));

runInDialogWithToolbarDiffLabel(testNode, () -> {
//Not required
});
}

CompareViewerPane fCompareViewerPane;
private void runInDialogWithToolbarDiffLabel(DiffNode testNode, Runnable runnable) throws Exception {

CompareConfiguration compareConfig = new CompareConfiguration();
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
Dialog dialog = new Dialog(shell) {
@Override
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
fCompareViewerPane = new CompareViewerPane(composite, SWT.BORDER | SWT.FLAT);
composite.getChildren();
viewer = new TestMergeViewer(fCompareViewerPane, compareConfig);
return composite;
}
};
dialog.setBlockOnOpen(false);
dialog.open();
viewer.setInput(testNode);
fCompareViewerPane.setContent(viewer.getControl());
ToolBarManager toolbarManager = CompareViewerPane.getToolBarManager(fCompareViewerPane);

IContributionItem contributionItem = toolbarManager.find("DiffCount");
assertNotNull(contributionItem);
LabelContributionItem labelContributionItem=(LabelContributionItem) contributionItem;
assertTrue(labelContributionItem.getToolbarLabel().getText().equals("7 Differences"));
try {
runnable.run();
} catch (WrappedException e) {
e.throwException();
}
dialog.close();
viewer = null;
}

private void runInDialogWithPartioner(Object input, Runnable runnable, final CompareConfiguration cc) throws Exception {
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
Expand Down

0 comments on commit c611ac8

Please sign in to comment.