cf9adfd5ec32be896f404640c616bbe9fcf1927d
[idea/community.git] / platform / platform-api / src / com / intellij / openapi / fileEditor / FileEditorManagerListener.java
1 // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.openapi.fileEditor;
3
4 import com.intellij.openapi.util.Pair;
5 import com.intellij.openapi.vfs.VirtualFile;
6 import com.intellij.util.messages.Topic;
7 import org.jetbrains.annotations.NotNull;
8
9 import java.util.EventListener;
10
11 /**
12  * Listener for {@link FileEditorManager} events. All methods are invoked in EDT.
13  */
14 public interface FileEditorManagerListener extends EventListener{
15   Topic<FileEditorManagerListener> FILE_EDITOR_MANAGER =
16     new Topic<>("file editor events", FileEditorManagerListener.class, Topic.BroadcastDirection.TO_PARENT);
17
18   /**
19    * This method is called synchronously (in the same EDT event), as the creation of FileEditor(s).
20    *
21    * @see #fileOpened(FileEditorManager, VirtualFile)
22    */
23   default void fileOpenedSync(@NotNull FileEditorManager source, @NotNull VirtualFile file,
24                               @NotNull Pair<FileEditor[], FileEditorProvider[]> editors) {
25   }
26
27   /**
28    * This method is after focus settles down (if requested) in newly created FileEditor.
29    * {@link #fileOpenedSync(FileEditorManager, VirtualFile, Pair)} is always invoked before this method (in same or previous EDT event).
30    *
31    * @see #fileOpenedSync(FileEditorManager, VirtualFile, Pair)
32    */
33   default void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
34   }
35
36   default void fileClosed(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
37   }
38
39   default void selectionChanged(@NotNull FileEditorManagerEvent event) {
40   }
41
42   interface Before extends EventListener {
43     Topic<Before> FILE_EDITOR_MANAGER =
44       new Topic<>("file editor before events", Before.class, Topic.BroadcastDirection.TO_PARENT);
45
46     default void beforeFileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
47     }
48
49     default void beforeFileClosed(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
50     }
51
52     /**
53      * @deprecated use {@link Before} directly
54      */
55     @Deprecated
56     class Adapter implements Before {
57       @Override
58       public void beforeFileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) { }
59
60       @Override
61       public void beforeFileClosed(@NotNull FileEditorManager source, @NotNull VirtualFile file) { }
62     }
63   }
64 }