replaced <code></code> with more concise {@code}
[idea/community.git] / platform / platform-api / src / com / intellij / openapi / wm / WindowManager.java
1 /*
2  * Copyright 2000-2015 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;
17
18 import com.intellij.openapi.application.ApplicationManager;
19 import com.intellij.openapi.project.Project;
20 import org.jetbrains.annotations.NotNull;
21 import org.jetbrains.annotations.Nullable;
22
23 import javax.swing.*;
24 import java.awt.*;
25
26 public abstract class WindowManager {
27   /**
28    * @return {@code true} is and only if current OS supports alpha mode for windows and
29    *         all native libraries were successfully loaded.
30    */
31   public abstract boolean isAlphaModeSupported();
32
33   /**
34    * Sets alpha (transparency) ratio for the specified {@code window}.
35    * If alpha mode isn't supported by underlying windowing system then the method does nothing.
36    * The method also does nothing if alpha mode isn't enabled for the specified {@code window}.
37    *
38    * @param window {@code window} which transparency should be changed.
39    * @param ratio  ratio of transparency. {@code 0} means absolutely non transparent window.
40    *               {@code 1} means absolutely transparent window.
41    * @throws IllegalArgumentException if {@code window} is not displayable or not showing,
42    *                                  or if {@code ration} isn't in {@code [0..1]} range.
43    */
44   public abstract void setAlphaModeRatio(Window window, float ratio);
45
46   /**
47    * @return {@code true} if specified {@code window} is currently is alpha mode.
48    */
49   public abstract boolean isAlphaModeEnabled(Window window);
50
51   /**
52    * Sets whether the alpha (transparent) mode is enabled for specified {@code window}.
53    * If alpha mode isn't supported by underlying windowing system then the method does nothing.
54    *
55    * @param window window which mode to be set.
56    * @param state  determines the new alpha mode.
57    */
58   public abstract void setAlphaModeEnabled(Window window, boolean state);
59
60   public static WindowManager getInstance() {
61     return ApplicationManager.getApplication().getComponent(WindowManager.class);
62   }
63
64   public abstract void doNotSuggestAsParent(Window window);
65
66   /**
67    * Gets first window (starting from the active one) that can be parent for other windows.
68    * Note, that this method returns only subclasses of dialog or frame.
69    *
70    * @return {@code null} if there is no currently active window or there are any window
71    *         that can be parent.
72    */
73   @Nullable
74   public abstract Window suggestParentWindow(@Nullable Project project);
75
76   /**
77    * Get the status bar for the project's main frame
78    */
79   public abstract StatusBar getStatusBar(Project project);
80
81   /**
82    * Get the status bar for the component, it may be either the main status bar or the status bar for an undocked window
83    *
84    * @param c a component
85    * @return status bar
86    * @deprecated use getStatusBar(Component, Project)
87    */
88   public abstract StatusBar getStatusBar(@NotNull Component c);
89
90   public StatusBar getStatusBar(@NotNull Component c, @Nullable Project project) {
91     return null;
92   }
93
94   @Nullable // the frame could be null in test environment
95   public abstract JFrame getFrame(@Nullable Project project);
96
97   public abstract IdeFrame getIdeFrame(@Nullable Project project);
98
99   /**
100    * Tests whether the specified rectangle is inside of screen bounds. Method uses its own heuristic test.
101    * Test passes if intersection of screen bounds and specified rectangle isn't empty and its height and
102    * width are not less then some value. Note, that all parameters are in screen coordinate system.
103    * The method properly works in multi-monitor configuration.
104    */
105   public abstract boolean isInsideScreenBounds(int x, int y, int width);
106
107   /**
108    * Tests whether the specified point is inside of screen bounds. Note, that
109    * all parameters are in screen coordinate system.
110    * The method properly works in multi-monitor configuration.
111    */
112   public abstract boolean isInsideScreenBounds(int x, int y);
113
114   @NotNull
115   public abstract IdeFrame[] getAllProjectFrames();
116
117   public abstract JFrame findVisibleFrame();
118
119   public abstract void addListener(WindowManagerListener listener);
120
121   public abstract void removeListener(WindowManagerListener listener);
122
123   /**
124    * @return {@code true} if full screen mode is supported in current OS.
125    */
126   public abstract boolean isFullScreenSupportedInCurrentOS();
127
128   public abstract void requestUserAttention(@NotNull IdeFrame frame, boolean critical);
129 }