blob: 4a5a31bb3f3dfb8a56b4d0b9849e6eb9553587b5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.sse.ui.internal.text;
import org.eclipse.jface.text.IAutoEditStrategy;
import org.eclipse.jface.text.IDocument;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.ui.texteditor.ITextEditorExtension3;
/**
* Abstract class providing functionality to verify if a document supports
* the smart insert mode.
*
*/
public abstract class StructuredAutoEditStrategy implements IAutoEditStrategy {
/**
* Evaluates if the document should support smart insert mode
* @param document the document being edited
* @return false if the document belongs to an active editor whose smart insert mode is disabled; otherwise, true.
*/
protected boolean supportsSmartInsert(IDocument document) {
Object editor = getActiveTextEditor();
if (editor instanceof ITextEditor) {
ITextEditor textEditor = (ITextEditor) editor;
final IDocumentProvider provider = textEditor.getDocumentProvider();
if (provider != null) {
if (document == provider.getDocument(textEditor.getEditorInput())) {
// Document belongs to the active editor
if (!((textEditor instanceof ITextEditorExtension3) && (((ITextEditorExtension3) textEditor).getInsertMode() == ITextEditorExtension3.SMART_INSERT))) {
return false;
}
}
}
}
return true;
}
/**
* Return the active text editor if possible, otherwise the active editor
* part.
*
* @return Object
*/
private Object getActiveTextEditor() {
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (window != null) {
IWorkbenchPage page = window.getActivePage();
if (page != null) {
IEditorPart editor = page.getActiveEditor();
if (editor != null) {
if (editor instanceof ITextEditor) {
return editor;
}
ITextEditor textEditor = (ITextEditor) editor.getAdapter(ITextEditor.class);
if (textEditor != null) {
return textEditor;
}
return editor;
}
}
}
return null;
}
}