blob: 5d019bea29b6e75a3247e5d787a1eca7e576be41 [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.wm.ex;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.wm.IdeFrame;
import com.intellij.openapi.wm.WindowManager;
import com.intellij.openapi.wm.impl.CommandProcessor;
import com.intellij.openapi.wm.impl.DesktopLayout;
import com.intellij.openapi.wm.impl.IdeFrameImpl;
import com.intellij.ui.AppIcon;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ComponentEvent;
/**
* @author Anton Katilin
* @author Vladimir Kondratyev
*/
public abstract class WindowManagerEx extends WindowManager {
public enum WindowShadowMode { NORMAL, SMALL, DISABLED }
public static WindowManagerEx getInstanceEx(){
return (WindowManagerEx)WindowManager.getInstance();
}
public abstract IdeFrameImpl getFrame(@Nullable Project project);
@Override
public void requestUserAttention(@NotNull IdeFrame frame, boolean critical) {
Project project = frame.getProject();
if (project != null)
AppIcon.getInstance().requestAttention(project, critical);
}
public abstract IdeFrameImpl allocateFrame(Project project);
public abstract void releaseFrame(IdeFrameImpl frame);
/**
* @return focus owner of the specified window.
* @exception IllegalArgumentException if <code>window</code> is <code>null</code>.
*/
public abstract Component getFocusedComponent(@NotNull Window window);
/**
* @param project may be <code>null</code> when no project is opened.
* @return focused component for the project. If project isn't specified then
* the method returns focused component in window which has no project.
* If there is no focused component at all then the method returns <code>null</code>.
*/
@Nullable
public abstract Component getFocusedComponent(@Nullable Project project);
public abstract Window getMostRecentFocusedWindow();
public abstract IdeFrame findFrameFor(@Nullable Project project);
@NotNull
public abstract CommandProcessor getCommandProcessor();
/**
* @return default layout for tool windows.
*/
public abstract DesktopLayout getLayout();
/**
* Copies <code>layout</code> into internal default layout.
*/
public abstract void setLayout(DesktopLayout layout);
/**
* This method is invoked by <code>IdeEventQueue</code> to notify window manager that
* some window activity happens. <u><b>Do not invoke it in other places!!!<b></u>
*/
public abstract void dispatchComponentEvent(ComponentEvent e);
/**
* @return union of bounds of all default screen devices. Note that <code>x</code> and/or <code>y</code>
* coordinates can be negative. It depends on physical configuration of graphics devices.
* For example, the left monitor has negative coordinates on Win32 platform with dual monitor support
* (right monitor is the primer one) .
*/
public abstract Rectangle getScreenBounds();
/**
* @return bounds for the screen device for the given project frame
*/
public abstract Rectangle getScreenBounds(@NotNull final Project project);
public abstract void setWindowMask(Window window, Shape mask);
public abstract void setWindowShadow(Window window, WindowShadowMode mode);
public abstract void resetWindow(final Window window);
/**
* Either dispose the dialog immediately if project's frame has focus or just hide and dispose when frame gets focus or closes.
* @param dialog to hide and dispose later
* @param project the dialog has been shown for
*/
public abstract void hideDialog(JDialog dialog, Project project);
public abstract void adjustContainerWindow(Component c, Dimension oldSize, Dimension newSize);
}