blob: 136f91d71e0f97d391f5ae71c458673b7da6c069 [file] [log] [blame]
/*
* Copyright 2000-2012 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.ui.popup;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.DataProvider;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.ui.awt.RelativePoint;
import org.intellij.lang.annotations.JdkConstants;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
/**
* Base interface for popup windows.
*
* @author mike
* @see com.intellij.openapi.ui.popup.JBPopupFactory
* @since 6.0
*/
public interface JBPopup extends Disposable, LightweightWindow {
@NonNls String KEY = "JBPopup";
/**
* Shows the popup at the bottom left corner of the specified component.
*
* @param componentUnder the component near which the popup should be displayed.
*/
void showUnderneathOf(@NotNull Component componentUnder);
/**
* Shows the popup at the specified point.
*
* @param point the relative point where the popup should be displayed.
*/
void show(@NotNull RelativePoint point);
void showInScreenCoordinates(@NotNull Component owner, @NotNull Point point);
/**
* Shows the popup in the position most appropriate for the specified data context.
*
* @param dataContext the data context to which the popup is related.
* @see com.intellij.openapi.ui.popup.JBPopupFactory#guessBestPopupLocation(com.intellij.openapi.actionSystem.DataContext)
*/
void showInBestPositionFor(@NotNull DataContext dataContext);
/**
* Shows the popup near the cursor location in the specified editor.
*
* @param editor the editor relative to which the popup should be displayed.
* @see com.intellij.openapi.ui.popup.JBPopupFactory#guessBestPopupLocation(com.intellij.openapi.editor.Editor)
*/
void showInBestPositionFor(@NotNull Editor editor);
/**
* Shows the popup in the center of the specified component.
*
* @param component the component at which the popup should be centered.
*/
void showInCenterOf(@NotNull Component component);
/**
* Shows the popups in the center of currently focused component
*/
void showInFocusCenter();
/**
* Shows in best position with a given owner
*/
void show(Component owner);
/**
* Shows the popup in the center of the active window in the IDEA frame for the specified project.
*
* @param project the project in which the popup should be displayed.
*/
void showCenteredInCurrentWindow(@NotNull Project project);
/**
* Hides popup as if Enter was pressed or or any other "accept" action
*/
void closeOk(@Nullable InputEvent e);
/**
* Cancels the popup as if Esc was pressed or any other "cancel" action
*/
void cancel();
/**
* @param b true if popup should request focus
*/
void setRequestFocus(final boolean b);
/**
* Cancels the popup as a response to some mouse action. All the subsequent mouse events originated from the event's point
* will be consumed.
* @param e
*/
void cancel(@Nullable InputEvent e);
/**
* Checks if it's currently allowed to close the popup.
*
* @return true if the popup can be closed, false if a callback disallowed closing the popup.
* @see com.intellij.openapi.ui.popup.ComponentPopupBuilder#setCancelCallback(com.intellij.openapi.util.Computable)
*/
boolean canClose();
/**
* Checks if the popup is currently visible.
*
* @return true if the popup is visible, false otherwise.
*/
boolean isVisible();
/**
* Returns the Swing component contained in the popup.
*
* @return the contents of the popup.
*/
JComponent getContent();
/**
* Moves popup to the given point. Does nothing if popup is invisible.
* @param screenPoint Point to move to.
*/
void setLocation(@NotNull Point screenPoint);
void setSize(@NotNull Dimension size);
Dimension getSize();
boolean isPersistent();
boolean isModalContext();
boolean isNativePopup();
void setUiVisible(boolean visible);
@Nullable
<T>
T getUserData(Class<T> userDataClass);
boolean isFocused();
boolean isCancelKeyEnabled();
void addListener(JBPopupListener listener);
void removeListener(JBPopupListener listener);
boolean isDisposed();
Component getOwner();
void setMinimumSize(Dimension size);
void setFinalRunnable(@Nullable Runnable runnable);
void moveToFitScreen();
Point getLocationOnScreen();
void pack(boolean width, boolean height);
void setAdText(String s, @JdkConstants.HorizontalAlignment int alignment);
void setDataProvider(@NotNull DataProvider dataProvider);
/**
* This callback is called when new key event from the event queue is being processed.
* <p/>
* The popup has a right to decide if its further processing should be continued (method return value).
*
* @param e new key event being processed
* @return <code>true</code> if the event is completely dispatched, i.e. no further processing is necessary;
* <code>false</code> otherwise
*/
boolean dispatchKeyEvent(@NotNull KeyEvent e);
}