示例#1
0
  @Override
  public ActionCallback show() {
    LOG.assertTrue(
        EventQueue.isDispatchThread(), "Access is allowed from event dispatch thread only");
    if (myTypeAheadCallback != null) {
      IdeFocusManager.getInstance(myProject).typeAheadUntil(myTypeAheadCallback);
    }
    LOG.assertTrue(
        EventQueue.isDispatchThread(), "Access is allowed from event dispatch thread only");
    final ActionCallback result = new ActionCallback();

    final AnCancelAction anCancelAction = new AnCancelAction();
    final JRootPane rootPane = getRootPane();
    anCancelAction.registerCustomShortcutSet(
        new CustomShortcutSet(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0)), rootPane);
    myDisposeActions.add(
        new Runnable() {
          @Override
          public void run() {
            anCancelAction.unregisterCustomShortcutSet(rootPane);
          }
        });

    if (!myCanBeParent && myWindowManager != null) {
      myWindowManager.doNotSuggestAsParent(myDialog.getWindow());
    }

    final CommandProcessorEx commandProcessor =
        ApplicationManager.getApplication() != null
            ? (CommandProcessorEx) CommandProcessor.getInstance()
            : null;
    final boolean appStarted = commandProcessor != null;

    if (myDialog.isModal() && !isProgressDialog()) {
      if (appStarted) {
        commandProcessor.enterModal();
        LaterInvocator.enterModal(myDialog);
      }
    }

    if (appStarted) {
      hidePopupsIfNeeded();
    }

    try {
      myDialog.show();
    } finally {
      if (myDialog.isModal() && !isProgressDialog()) {
        if (appStarted) {
          commandProcessor.leaveModal();
          LaterInvocator.leaveModal(myDialog);
        }
      }

      myDialog.getFocusManager().doWhenFocusSettlesDown(result.createSetDoneRunnable());
    }

    return result;
  }
示例#2
0
  private void createDialog(
      @Nullable Window owner,
      boolean canBeParent,
      @NotNull DialogWrapper.IdeModalityType ideModalityType) {
    if (isHeadless()) {
      myDialog = new HeadlessDialog();
      return;
    }

    myDialog =
        new MyDialog(
            owner,
            myWrapper,
            myProject,
            myWindowFocusedCallback,
            myTypeAheadDone,
            myTypeAheadCallback);
    myDialog.setModalityType(ideModalityType.toAwtModality());

    myCanBeParent = canBeParent;
  }
示例#3
0
  public DialogWrapperPeerImpl(
      @NotNull final DialogWrapper wrapper,
      final Window owner,
      final boolean canBeParent,
      final DialogWrapper.IdeModalityType ideModalityType) {
    myWrapper = wrapper;
    myWindowManager = null;
    Application application = ApplicationManager.getApplication();
    if (application != null && application.hasComponent(WindowManager.class)) {
      myWindowManager = (WindowManagerEx) WindowManager.getInstance();
    }
    createDialog(owner, canBeParent);

    if (!isHeadless()) {
      Dialog.ModalityType modalityType = DialogWrapper.IdeModalityType.IDE.toAwtModality();
      if (Registry.is("ide.perProjectModality")) {
        modalityType = ideModalityType.toAwtModality();
      }
      myDialog.setModalityType(modalityType);
    }
  }
示例#4
0
  @Override
  @SuppressWarnings("SSBasedInspection")
  protected void dispose() {
    LOG.assertTrue(
        EventQueue.isDispatchThread(), "Access is allowed from event dispatch thread only");
    for (Runnable runnable : myDisposeActions) {
      runnable.run();
    }
    myDisposeActions.clear();
    final JRootPane root = myDialog.getRootPane();

    Runnable disposer =
        new Runnable() {
          @Override
          public void run() {
            myDialog.dispose();
            myProject = null;

            SwingUtilities.invokeLater(
                new Runnable() {
                  @Override
                  public void run() {
                    if (myDialog != null && root != null) {
                      myDialog.remove(root);
                    }
                  }
                });
          }
        };

    if (EventQueue.isDispatchThread()) {
      disposer.run();
    } else {
      SwingUtilities.invokeLater(disposer);
    }
  }
示例#5
0
 @Override
 public void setUndecorated(boolean undecorated) {
   myDialog.setUndecorated(undecorated);
 }
示例#6
0
 @Override
 public void setLocation(@NotNull Point p) {
   myDialog.setLocation(p);
 }
示例#7
0
 @Override
 public void setResizable(boolean resizable) {
   myDialog.setResizable(resizable);
 }
示例#8
0
 @Override
 public void setTitle(String title) {
   myDialog.setTitle(title);
 }
示例#9
0
 @Override
 public boolean isShowing() {
   return myDialog.isShowing();
 }
示例#10
0
 @Override
 public boolean isModal() {
   return myDialog.isModal();
 }
示例#11
0
 @Override
 @Nullable
 public Container getContentPane() {
   return getRootPane() != null ? myDialog.getContentPane() : null;
 }
示例#12
0
 @Override
 public void toBack() {
   myDialog.toBack();
 }
示例#13
0
 @Override
 public void toFront() {
   myDialog.toFront();
 }
示例#14
0
 @Override
 public void addKeyListener(KeyListener listener) {
   myDialog.addKeyListener(listener);
 }
示例#15
0
 @Override
 public void addMouseListener(MouseMotionListener listener) {
   myDialog.addMouseMotionListener(listener);
 }
示例#16
0
 @Override
 public Dimension getPreferredSize() {
   return myDialog.getPreferredSize();
 }
示例#17
0
 @Override
 public void setModal(boolean modal) {
   myDialog.setModal(modal);
 }
示例#18
0
 /** @see javax.swing.JDialog#validate */
 @Override
 public void validate() {
   myDialog.validate();
 }
示例#19
0
 @Override
 public boolean isVisible() {
   return myDialog.isVisible();
 }
示例#20
0
 /** @see javax.swing.JDialog#repaint */
 @Override
 public void repaint() {
   myDialog.repaint();
 }
示例#21
0
 @Override
 public void setSize(int width, int height) {
   myDialog.setSize(width, height);
 }
示例#22
0
 @Override
 public Window getOwner() {
   return myDialog.getOwner();
 }
示例#23
0
 @Override
 public void isResizable() {
   myDialog.isResizable();
 }
示例#24
0
 @Override
 public Window getWindow() {
   return myDialog.getWindow();
 }
示例#25
0
 @NotNull
 @Override
 public Point getLocation() {
   return myDialog.getLocation();
 }
示例#26
0
 @Override
 public JRootPane getRootPane() {
   return myDialog.getRootPane();
 }
示例#27
0
 @Override
 public void setLocation(int x, int y) {
   myDialog.setLocation(x, y);
 }
示例#28
0
 @Override
 public String getTitle() {
   return myDialog.getTitle();
 }
示例#29
0
 @Override
 public FocusTrackback getFocusTrackback() {
   return myDialog.getFocusTrackback();
 }
示例#30
0
 /** @see java.awt.Window#pack */
 @Override
 public void pack() {
   myDialog.pack();
 }