| /******************************************************************************* |
| * Copyright (c) 2004, 2008 Mylyn project committers 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: |
| * Red Hat Inc. - modification from Java to CDT |
| *******************************************************************************/ |
| package org.eclipse.mylyn.internal.cdt.ui; |
| |
| import org.eclipse.cdt.core.model.CoreModel; |
| import org.eclipse.cdt.internal.ui.editor.CEditor; |
| import org.eclipse.cdt.ui.CUIPlugin; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.mylyn.context.core.ContextCore; |
| import org.eclipse.mylyn.context.ui.IContextUiStartup; |
| import org.eclipse.mylyn.internal.cdt.ui.contentassist.CDTContentAssistUtils; |
| import org.eclipse.mylyn.internal.cdt.ui.editor.ActiveFoldingEditorTracker; |
| import org.eclipse.mylyn.internal.cdt.ui.editor.ActiveFoldingListener; |
| import org.eclipse.mylyn.monitor.ui.MonitorUi; |
| import org.eclipse.ui.IEditorPart; |
| import org.eclipse.ui.IEditorReference; |
| import org.eclipse.ui.IWorkbench; |
| import org.eclipse.ui.IWorkbenchPage; |
| import org.eclipse.ui.IWorkbenchWindow; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.plugin.AbstractUIPlugin; |
| import org.eclipse.ui.progress.UIJob; |
| import org.osgi.framework.BundleContext; |
| |
| /** |
| * @author Mik Kersten |
| * @author Jeff Johnston |
| */ |
| public class CDTUIBridgePlugin extends AbstractUIPlugin implements IContextUiStartup { |
| |
| // TODO CHANGE plugin id? |
| public static final String ID_PLUGIN = "org.eclipse.cdt.mylyn.ui"; //$NON-NLS-1$ |
| |
| public static final String AUTO_FOLDING_ENABLED = "org.eclipse.mylyn.context.ui.editor.folding.enabled"; //$NON-NLS-1$ |
| |
| private static final String MYLYN_RUN_COUNT = "org.eclipse.mylyn.cdt.ui.run.count.3_3_0"; //$NON-NLS-1$ |
| |
| private static CDTUIBridgePlugin INSTANCE; |
| |
| private final LandmarkMarkerManager landmarkMarkerManager = new LandmarkMarkerManager(); |
| |
| private CDTEditorMonitor cEditingMonitor; |
| |
| private final InterestUpdateDeltaListener cElementChangeListener = new InterestUpdateDeltaListener(); |
| |
| private ActiveFoldingEditorTracker activeFoldingEditorTracker; |
| |
| public CDTUIBridgePlugin() { |
| super(); |
| } |
| |
| /** |
| * Startup order is critical. |
| */ |
| @Override |
| public void start(BundleContext context) throws Exception { |
| super.start(context); |
| INSTANCE = this; |
| initializeContentAssist(); |
| } |
| |
| public void lazyStartup() { |
| |
| // TODO do in a UI JOB? and only on first run |
| installFoldingEditorTracker(PlatformUI.getWorkbench()); |
| |
| ContextCore.getContextManager().addListener(landmarkMarkerManager); |
| cEditingMonitor = new CDTEditorMonitor(); |
| MonitorUi.getSelectionMonitors().add(cEditingMonitor); |
| CoreModel.getDefault().addElementChangedListener(cElementChangeListener); |
| |
| } |
| |
| private void lazyStop() { |
| ContextCore.getContextManager().removeListener(landmarkMarkerManager); |
| MonitorUi.getSelectionMonitors().remove(cEditingMonitor); |
| CoreModel.getDefault().removeElementChangedListener(cElementChangeListener); |
| uninstallFoldingEditorTracker(PlatformUI.getWorkbench()); |
| } |
| |
| @Override |
| public void stop(BundleContext context) throws Exception { |
| lazyStop(); |
| super.stop(context); |
| INSTANCE = null; |
| } |
| |
| private void initializeContentAssist() { |
| |
| int count = getPreferenceStore().getInt(MYLYN_RUN_COUNT); |
| if (count < 1) { |
| getPreferenceStore().setValue(MYLYN_RUN_COUNT, count + 1); |
| |
| new UIJob(Messages.CDTUIBridgePlugin_Initializing_Content_Assist) { |
| @Override |
| public IStatus runInUIThread(IProgressMonitor monitor) { |
| CDTContentAssistUtils.installContentAssist(CUIPlugin.getDefault().getPreferenceStore(), true); |
| return Status.OK_STATUS; |
| } |
| }.schedule(); |
| } |
| |
| CDTContentAssistUtils.updateDefaultPreference(CUIPlugin.getDefault().getPreferenceStore()); |
| } |
| |
| private void uninstallFoldingEditorTracker(IWorkbench workbench) { |
| if (activeFoldingEditorTracker != null) { |
| activeFoldingEditorTracker.dispose(workbench); |
| activeFoldingEditorTracker = null; |
| } |
| } |
| |
| private void installFoldingEditorTracker(IWorkbench workbench) { |
| activeFoldingEditorTracker = new ActiveFoldingEditorTracker(); |
| activeFoldingEditorTracker.install(workbench); |
| |
| // update editors that are already opened |
| for (IWorkbenchWindow w : PlatformUI.getWorkbench().getWorkbenchWindows()) { |
| IWorkbenchPage page = w.getActivePage(); |
| if (page != null) { |
| IEditorReference[] references = page.getEditorReferences(); |
| for (IEditorReference reference : references) { |
| IEditorPart part = reference.getEditor(false); |
| if (part != null && part instanceof CEditor) { |
| CEditor editor = (CEditor) part; |
| activeFoldingEditorTracker.registerEditor(editor); |
| ActiveFoldingListener.resetProjection(editor); |
| } |
| } |
| } |
| } |
| } |
| |
| /** |
| * Returns the shared instance. |
| */ |
| public static CDTUIBridgePlugin getDefault() { |
| return INSTANCE; |
| } |
| } |