replaced <code></code> with more concise {@code}
[idea/community.git] / platform / platform-impl / src / com / intellij / openapi / wm / ex / WindowManagerEx.java
1 /*
2  * Copyright 2000-2017 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.openapi.wm.ex;
17
18 import com.intellij.openapi.project.Project;
19 import com.intellij.openapi.wm.IdeFrame;
20 import com.intellij.openapi.wm.WindowManager;
21 import com.intellij.openapi.wm.impl.CommandProcessor;
22 import com.intellij.openapi.wm.impl.DesktopLayout;
23 import com.intellij.openapi.wm.impl.IdeFrameImpl;
24 import com.intellij.ui.AppIcon;
25 import org.jetbrains.annotations.NotNull;
26 import org.jetbrains.annotations.Nullable;
27
28 import javax.swing.*;
29 import java.awt.*;
30 import java.awt.event.ComponentEvent;
31
32 /**
33  * @author Anton Katilin
34  * @author Vladimir Kondratyev
35  */
36 public abstract class WindowManagerEx extends WindowManager {
37   public enum WindowShadowMode { NORMAL, SMALL, DISABLED }
38
39   public static WindowManagerEx getInstanceEx(){
40     return (WindowManagerEx)WindowManager.getInstance();
41   }
42
43   public abstract IdeFrameImpl getFrame(@Nullable Project project);
44
45   @Override
46   public void requestUserAttention(@NotNull IdeFrame frame, boolean critical) {
47     Project project = frame.getProject();
48     if (project != null)
49       AppIcon.getInstance().requestAttention(project, critical);
50   }
51
52   public abstract IdeFrameImpl allocateFrame(@NotNull Project project);
53
54   public abstract void releaseFrame(IdeFrameImpl frame);
55
56   /**
57    * @return focus owner of the specified window.
58    * @exception IllegalArgumentException if {@code window} is {@code null}.
59    */
60   public abstract Component getFocusedComponent(@NotNull Window window);
61
62   /**
63    * @param project may be {@code null} when no project is opened.
64    * @return focused component for the project. If project isn't specified then
65    * the method returns focused component in window which has no project.
66    * If there is no focused component at all then the method returns {@code null}.
67    */
68   @Nullable
69   public abstract Component getFocusedComponent(@Nullable Project project);
70
71   public abstract Window getMostRecentFocusedWindow();
72
73   public abstract IdeFrame findFrameFor(@Nullable Project project);
74
75   @NotNull
76   public abstract CommandProcessor getCommandProcessor();
77
78   /**
79    * @return default layout for tool windows.
80    */
81   public abstract DesktopLayout getLayout();
82
83   /**
84    * Copies {@code layout} into internal default layout.
85    */
86   public abstract void setLayout(DesktopLayout layout);
87
88   /**
89    * This method is invoked by {@code IdeEventQueue} to notify window manager that
90    * some window activity happens. <u><b>Do not invoke it in other places!!!<b></u>
91    */
92   public abstract void dispatchComponentEvent(ComponentEvent e);
93
94   /**
95    * @return union of bounds of all default screen devices. Note that {@code x} and/or {@code y}
96    * coordinates can be negative. It depends on physical configuration of graphics devices.
97    * For example, the left monitor has negative coordinates on Win32 platform with dual monitor support
98    * (right monitor is the primer one) .
99    */
100   public abstract Rectangle getScreenBounds();
101
102   /**
103    * @return bounds for the screen device for the given project frame
104    */
105   public abstract Rectangle getScreenBounds(@NotNull final Project project);
106
107   public abstract void setWindowMask(Window window, Shape mask);
108
109   public abstract void setWindowShadow(Window window, WindowShadowMode mode);
110
111   public abstract void resetWindow(final Window window);
112
113   /**
114    * Either dispose the dialog immediately if project's frame has focus or just hide and dispose when frame gets focus or closes.
115    * @param dialog to hide and dispose later
116    * @param project the dialog has been shown for
117    */
118   public abstract void hideDialog(JDialog dialog, Project project);
119
120   public abstract void adjustContainerWindow(Component c, Dimension oldSize, Dimension newSize);
121 }