/*******************************************************************************
* Copyright (c) 2000, 2015 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
* Red Hat Inc. - Modified from MakefileEditor to support Automake files
*******************************************************************************/
package org.eclipse.cdt.internal.autotools.ui.editors.automake;
import org.eclipse.cdt.autotools.core.AutotoolsPlugin;
import org.eclipse.cdt.internal.autotools.ui.preferences.AutomakeEditorPreferencePage;
import org.eclipse.cdt.internal.autotools.ui.preferences.AutotoolsEditorPreferenceConstants;
import org.eclipse.cdt.make.core.makefile.IMakefile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.editors.text.EditorsUI;
import org.eclipse.ui.texteditor.ChainedPreferenceStore;
import org.eclipse.ui.texteditor.DefaultRangeIndicator;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
public class AutomakeEditor extends MakefileEditor {
protected AutomakefileContentOutlinePage ampage;
private AutomakefileSourceConfiguration sourceViewerConfiguration;
private static AutomakeEditor fgInstance;
private IEditorInput input;
static {
fgInstance = new AutomakeEditor();
}
public AutomakeEditor() {
super();
}
/**
* Returns the default editor instance.
*
* @return the default editor instance
*/
public static AutomakeEditor getDefault() {
return fgInstance;
}
@Override
protected void doSetInput(IEditorInput newInput) throws CoreException {
super.doSetInput(newInput);
this.input = newInput;
getOutlinePage().setInput(input);
}
@Override
protected void initializeEditor() {
setRangeIndicator(new DefaultRangeIndicator());
setEditorContextMenuId("#MakefileEditorContext"); //$NON-NLS-1$
setRulerContextMenuId("#MakefileRulerContext"); //$NON-NLS-1$
setDocumentProvider(AutomakeEditorFactory.getDefault().getAutomakefileDocumentProvider());
IPreferenceStore[] stores = new IPreferenceStore[2];
stores[0] = AutotoolsPlugin.getDefault().getPreferenceStore();
stores[1] = EditorsUI.getPreferenceStore();
ChainedPreferenceStore chainedStore = new ChainedPreferenceStore(stores);
setPreferenceStore(chainedStore);
sourceViewerConfiguration = new AutomakefileSourceConfiguration(chainedStore, this);
setSourceViewerConfiguration(sourceViewerConfiguration);
AutotoolsEditorPreferenceConstants.initializeDefaultValues(stores[0]);
AutomakeEditorPreferencePage.initDefaults(stores[0]);
configureInsertMode(SMART_INSERT, false);
setInsertMode(INSERT);
}
public AutomakeDocumentProvider getAutomakefileDocumentProvider() {
return AutomakeEditorFactory.getDefault().getAutomakefileDocumentProvider();
}
public AutomakefileContentOutlinePage getAutomakeOutlinePage() {
if (ampage == null) {
ampage = new AutomakefileContentOutlinePage(this);
ampage.addSelectionChangedListener(this);
ampage.setInput(getEditorInput());
}
return ampage;
}
@SuppressWarnings("unchecked")
@Override
public <T> T getAdapter(Class<T> key) {
if (key.equals(IContentOutlinePage.class)) {
return (T) getAutomakeOutlinePage();
}
return super.getAdapter(key);
}
public AutomakefileSourceConfiguration getAutomakeSourceViewerConfiguration() {
return sourceViewerConfiguration;
}
public IMakefile getMakefile() {
return getAutomakefileDocumentProvider().getWorkingCopy(this.getEditorInput());
}
public ISourceViewer getAutomakeSourceViewer() {
return getSourceViewer();
}
}