blob: a9358507c59191d44ab880d72c685c17d57dc664 [file] [log] [blame]
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.openapi.editor;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.event.EditorEventMulticaster;
import com.intellij.openapi.editor.event.EditorFactoryListener;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* Provides services for creating document and editor instances.
*
* Creating and releasing of editors must be done from EDT.
*/
public abstract class EditorFactory {
/**
* Returns the editor factory instance.
*
* @return the editor factory instance.
*/
public static EditorFactory getInstance() {
final Application application = ApplicationManager.getApplication();
return application == null ? null : application.getComponent(EditorFactory.class);
}
/**
* Creates a document from the specified text specified as a character sequence.
*
* @param text the text to create the document from.
* @return the document instance.
*/
@NotNull
public abstract Document createDocument(@NotNull CharSequence text);
/**
* Creates a document from the specified text specified as an array of characters.
*
* @param text the text to create the document from.
* @return the document instance.
*/
@NotNull
public abstract Document createDocument(@NotNull char[] text);
/**
* Creates an editor for the specified document.
*
* Must be invoked in EDT.
*
* @param document the document to create the editor for.
* @return the editor instance.
* @see #releaseEditor(Editor)
*/
public abstract Editor createEditor(@NotNull Document document);
/**
* Creates a read-only editor for the specified document.
*
* Must be invoked in EDT.
*
* @param document the document to create the editor for.
* @return the editor instance.
* @see #releaseEditor(Editor)
*/
public abstract Editor createViewer(@NotNull Document document);
/**
* Creates an editor for the specified document associated with the specified project.
*
* Must be invoked in EDT.
*
* @param document the document to create the editor for.
* @param project the project with which the editor is associated.
* @return the editor instance.
* @see Editor#getProject()
* @see #releaseEditor(Editor)
*/
public abstract Editor createEditor(@NotNull Document document, @Nullable Project project);
/**
* Creates an editor for the specified document associated with the specified project.
*
* Must be invoked in EDT.
*
* @param document the document to create the editor for.
* @param project the project for which highlighter should be created
* @param fileType the file type according to which the editor contents is highlighted.
* @param isViewer true if read-only editor should be created
* @return the editor instance.
* @see Editor#getProject()
* @see #releaseEditor(Editor)
*/
public abstract Editor createEditor(@NotNull Document document, Project project, @NotNull FileType fileType, boolean isViewer);
/**
* Creates an editor for the specified document associated with the specified project.
*
* Must be invoked in EDT.
*
* @param document the document to create the editor for.
* @param project the project for which highlighter should be created
* @param file the file according to which the editor contents is highlighted.
* @param isViewer true if read-only editor should be created
* @return the editor instance.
* @see Editor#getProject()
* @see #releaseEditor(Editor)
*/
public abstract Editor createEditor(@NotNull Document document, Project project, @NotNull VirtualFile file, boolean isViewer);
/**
* Creates a read-only editor for the specified document associated with the specified project.
*
* Must be invoked in EDT.
*
* @param document the document to create the editor for.
* @param project the project with which the editor is associated.
* @return the editor instance.
* @see Editor#getProject()
* @see #releaseEditor(Editor)
*/
public abstract Editor createViewer(@NotNull Document document, @Nullable Project project);
/**
* Disposes of the specified editor instance.
*
* Must be invoked in EDT.
*
* @param editor the editor instance to release.
*/
public abstract void releaseEditor(@NotNull Editor editor);
/**
* Returns the list of editors for the specified document associated with the specified project.
*
* @param document the document for which editors are requested.
* @param project the project with which editors should be associated, or null if any editors
* for this document should be returned.
* @return the list of editors.
*/
@NotNull
public abstract Editor[] getEditors(@NotNull Document document, @Nullable Project project);
/**
* Returns the list of all editors for the specified document.
*
* @param document the document for which editors are requested.
* @return the list of editors.
*/
@NotNull
public abstract Editor[] getEditors(@NotNull Document document);
/**
* Returns the list of all currently open editors.
*
* @return the list of editors.
*/
@NotNull
public abstract Editor[] getAllEditors();
/**
* Registers a listener for receiving notifications when editor instances are created
* and released.
*
* @param listener the listener instance.
* @deprecated use the {@link #addEditorFactoryListener(EditorFactoryListener, Disposable)} instead
*/
public abstract void addEditorFactoryListener(@NotNull EditorFactoryListener listener);
/**
* Registers a listener for receiving notifications when editor instances are created and released
* and removes the listener when the <code>'parentDisposable'</code> gets disposed.
*
* @param listener the listener instance.
* @param parentDisposable the Disposable which triggers the removal of the listener
*/
public abstract void addEditorFactoryListener(@NotNull EditorFactoryListener listener, @NotNull Disposable parentDisposable);
/**
* Un-registers a listener for receiving notifications when editor instances are created
* and released.
*
* @param listener the listener instance.
* @deprecated you should have used the {@link #addEditorFactoryListener(EditorFactoryListener, Disposable)} instead
*/
public abstract void removeEditorFactoryListener(@NotNull EditorFactoryListener listener);
/**
* Returns the service for attaching event listeners to all editor instances.
*
* @return the event multicaster instance.
*/
@NotNull
public abstract EditorEventMulticaster getEventMulticaster();
/**
* Reloads the editor settings and refreshes all currently open editors.
*/
public abstract void refreshAllEditors();
}