/**
* Copyright (c) 2005-2012 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package org.python.pydev.compare;
import java.util.List;
import org.eclipse.compare.CompareConfiguration;
import org.eclipse.compare.IViewerCreator;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.texteditor.ChainedPreferenceStore;
import org.python.pydev.plugin.preferences.PydevPrefs;
/**
* Required when creating a PyMergeViewer from the plugin.xml file.
*/
public class PyContentMergeViewerCreator implements IViewerCreator {
@Override
public Viewer createViewer(Composite parent, CompareConfiguration mp) {
return new PyMergeViewer(parent, SWT.NULL, createNewCompareConfiguration(mp));
}
/**
* Creates a new configuration with the pydev preference store so that the colors appear correctly when using
* Aptana themes.
*
* Also copies the available data from the original compare configuration to the new configuration.
*/
private CompareConfiguration createNewCompareConfiguration(CompareConfiguration mp) {
List<IPreferenceStore> stores = PydevPrefs.getDefaultStores(false);
IPreferenceStore prefs = mp.getPreferenceStore();
if (prefs != null) {
//Note, we could use the CompareUIPlugin.getDefault().getPreferenceStore() directly, but it's access
//is restricted, so, we go to the preferences of the previously created compare configuration.
stores.add(prefs);
}
CompareConfiguration cc = new CompareConfiguration(new ChainedPreferenceStore(
stores.toArray(new IPreferenceStore[stores.size()])));
cc.setAncestorImage(mp.getAncestorImage(null));
cc.setAncestorLabel(mp.getAncestorLabel(null));
cc.setLeftImage(mp.getLeftImage(null));
cc.setLeftLabel(mp.getLeftLabel(null));
cc.setLeftEditable(mp.isLeftEditable());
cc.setRightImage(mp.getRightImage(null));
cc.setRightLabel(mp.getRightLabel(null));
cc.setRightEditable(mp.isRightEditable());
try {
cc.setContainer(mp.getContainer());
} catch (Throwable e) {
//Ignore: not available in Eclipse 3.2.
}
return cc;
}
}