use of java.awt.event.ComponentAdapter in project intellij-community by JetBrains.
the class ActionToolbarImpl method showAutoPopup.
private void showAutoPopup() {
if (isPopupShowing())
return;
final ActionGroup group;
if (myOrientation == SwingConstants.HORIZONTAL) {
group = myActionGroup;
} else {
final DefaultActionGroup outside = new DefaultActionGroup();
for (int i = myFirstOutsideIndex; i < myVisibleActions.size(); i++) {
outside.add(myVisibleActions.get(i));
}
group = outside;
}
PopupToolbar popupToolbar = new PopupToolbar(myPlace, group, true, myDataManager, myActionManager, myUpdater.getKeymapManager(), this) {
@Override
protected void onOtherActionPerformed() {
hidePopup();
}
@Override
protected DataContext getDataContext() {
return ActionToolbarImpl.this.getDataContext();
}
};
popupToolbar.setLayoutPolicy(NOWRAP_LAYOUT_POLICY);
popupToolbar.updateActionsImmediately();
Point location;
if (myOrientation == SwingConstants.HORIZONTAL) {
location = getLocationOnScreen();
} else {
location = getLocationOnScreen();
location.y = location.y + getHeight() - popupToolbar.getPreferredSize().height;
}
final ComponentPopupBuilder builder = JBPopupFactory.getInstance().createComponentPopupBuilder(popupToolbar, null);
builder.setResizable(false).setMovable(// fit the screen automatically
true).setRequestFocus(false).setTitle(null).setCancelOnClickOutside(true).setCancelOnOtherWindowOpen(true).setCancelCallback(() -> {
final boolean toClose = myActionManager.isActionPopupStackEmpty();
if (toClose) {
myUpdater.updateActions(false, true);
}
return toClose;
}).setCancelOnMouseOutCallback(new MouseChecker() {
@Override
public boolean check(final MouseEvent event) {
return myAutoPopupRec != null && myActionManager.isActionPopupStackEmpty() && !new RelativeRectangle(ActionToolbarImpl.this, myAutoPopupRec).contains(new RelativePoint(event));
}
});
builder.addListener(new JBPopupAdapter() {
@Override
public void onClosed(LightweightWindowEvent event) {
processClosed();
}
});
myPopup = builder.createPopup();
final AnActionListener.Adapter listener = new AnActionListener.Adapter() {
@Override
public void afterActionPerformed(AnAction action, DataContext dataContext, AnActionEvent event) {
final JBPopup popup = myPopup;
if (popup != null && !popup.isDisposed() && popup.isVisible()) {
popup.cancel();
}
}
};
ActionManager.getInstance().addAnActionListener(listener);
Disposer.register(myPopup, popupToolbar);
Disposer.register(popupToolbar, new Disposable() {
@Override
public void dispose() {
ActionManager.getInstance().removeAnActionListener(listener);
}
});
myPopup.showInScreenCoordinates(this, location);
final Window window = SwingUtilities.getWindowAncestor(this);
if (window != null) {
final ComponentAdapter componentAdapter = new ComponentAdapter() {
@Override
public void componentResized(final ComponentEvent e) {
hidePopup();
}
@Override
public void componentMoved(final ComponentEvent e) {
hidePopup();
}
@Override
public void componentShown(final ComponentEvent e) {
hidePopup();
}
@Override
public void componentHidden(final ComponentEvent e) {
hidePopup();
}
};
window.addComponentListener(componentAdapter);
Disposer.register(popupToolbar, new Disposable() {
@Override
public void dispose() {
window.removeComponentListener(componentAdapter);
}
});
}
}
use of java.awt.event.ComponentAdapter in project intellij-community by JetBrains.
the class MultilineTreeCellRenderer method installRenderer.
public static JScrollPane installRenderer(final JTree tree, final MultilineTreeCellRenderer renderer) {
final TreeCellRenderer defaultRenderer = tree.getCellRenderer();
JScrollPane scrollpane = new JBScrollPane(tree) {
private int myAddRemoveCounter = 0;
private boolean myShouldResetCaches = false;
public void setSize(Dimension d) {
boolean isChanged = getWidth() != d.width || myShouldResetCaches;
super.setSize(d);
if (isChanged)
resetCaches();
}
public void reshape(int x, int y, int w, int h) {
boolean isChanged = w != getWidth() || myShouldResetCaches;
super.reshape(x, y, w, h);
if (isChanged)
resetCaches();
}
private void resetCaches() {
resetHeightCache(tree, defaultRenderer, renderer);
myShouldResetCaches = false;
}
public void addNotify() {
//To change body of overriden methods use Options | File Templates.
super.addNotify();
if (myAddRemoveCounter == 0)
myShouldResetCaches = true;
myAddRemoveCounter++;
}
public void removeNotify() {
//To change body of overriden methods use Options | File Templates.
super.removeNotify();
myAddRemoveCounter--;
}
};
scrollpane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
tree.setCellRenderer(renderer);
scrollpane.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
resetHeightCache(tree, defaultRenderer, renderer);
}
public void componentShown(ComponentEvent e) {
// componentResized not called when adding to opened tool window.
// Seems to be BUG#4765299, however I failed to create same code to reproduce it.
// To reproduce it with IDEA: 1. remove this method, 2. Start any Ant task, 3. Keep message window open 4. start Ant task again.
resetHeightCache(tree, defaultRenderer, renderer);
}
});
return scrollpane;
}
use of java.awt.event.ComponentAdapter in project intellij-community by JetBrains.
the class EditConfigurationsDialog method addRunConfiguration.
public void addRunConfiguration(@NotNull final ConfigurationFactory factory) {
final RunConfigurable configurable = (RunConfigurable) getConfigurable();
final SingleConfigurationConfigurable<RunConfiguration> configuration = configurable.createNewConfiguration(factory);
if (!isVisible()) {
getContentPanel().addComponentListener(new ComponentAdapter() {
@Override
public void componentShown(ComponentEvent e) {
if (configuration != null) {
configurable.updateRightPanel(configuration);
getContentPanel().removeComponentListener(this);
}
}
});
}
}
use of java.awt.event.ComponentAdapter in project frostwire by frostwire.
the class LibraryLeftPanel method setupUI.
protected void setupUI() {
setLayout(new BorderLayout());
// Prepare a split pane with explorers
splitPane.setTopComponent(libraryExplorer);
splitPane.setBottomComponent(libraryPlaylists);
splitPane.setAutoscrolls(true);
add(splitPane, BorderLayout.CENTER);
Dimension minSize = new Dimension(MIN_WIDTH, MIN_WIDTH);
Dimension maxSize = new Dimension(MAX_WIDTH, MAX_WIDTH);
libraryCoverArtPanel.setPreferredSize(minSize);
libraryCoverArtPanel.setMinimumSize(minSize);
libraryCoverArtPanel.setMaximumSize(maxSize);
add(libraryCoverArtPanel, BorderLayout.PAGE_END);
addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
layoutComponents();
}
});
DividerLocationSettingUpdater.install(splitPane, UISettings.UI_LIBRARY_EXPLORER_DIVIDER_POSITION);
}
use of java.awt.event.ComponentAdapter in project omegat by omegat-org.
the class PreferencesWindowController method show.
@SuppressWarnings("serial")
public void show(Window parent, Class<? extends IPreferencesController> initialSelection) {
dialog = new JDialog();
dialog.setTitle(OStrings.getString("PREFERENCES_TITLE_NO_SELECTION"));
dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
dialog.setModal(true);
StaticUIUtils.setWindowIcon(dialog);
outerPanel = new PreferencePanel();
innerPanel = new PreferenceViewSelectorPanel();
outerPanel.prefsViewPanel.add(innerPanel, BorderLayout.CENTER);
dialog.getContentPane().add(outerPanel);
overlay = new HighlightablePanel(dialog.getRootPane(), innerPanel.selectedPrefsScrollPane);
// Prevent ugly white viewport background with GTK LAF
innerPanel.selectedPrefsScrollPane.getViewport().setOpaque(false);
innerPanel.selectedPrefsScrollPane.setBackground(innerPanel.getBackground());
innerPanel.searchTextField.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent e) {
SwingUtilities.invokeLater(PreferencesWindowController.this::searchAndFilterTree);
}
@Override
public void insertUpdate(DocumentEvent e) {
SwingUtilities.invokeLater(PreferencesWindowController.this::searchAndFilterTree);
}
@Override
public void changedUpdate(DocumentEvent e) {
SwingUtilities.invokeLater(PreferencesWindowController.this::searchAndFilterTree);
}
});
innerPanel.searchTextField.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyCode() == KeyEvent.VK_UP) {
innerPanel.availablePrefsTree.getActionForKeyStroke(KeyStroke.getKeyStrokeForEvent(e)).actionPerformed(new ActionEvent(innerPanel.availablePrefsTree, 0, null));
innerPanel.availablePrefsTree.requestFocusInWindow();
e.consume();
}
}
});
innerPanel.searchTextField.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
innerPanel.searchTextField.selectAll();
searchCurrentView();
preloadGuis();
}
});
innerPanel.clearButton.addActionListener(e -> {
innerPanel.searchTextField.clear();
});
innerPanel.availablePrefsTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
DefaultMutableTreeNode root = createNodeTree();
walkTree(root, node -> {
IPreferencesController view = (IPreferencesController) node.getUserObject();
if (view != null) {
view.addFurtherActionListener(this);
}
});
innerPanel.availablePrefsTree.setModel(new DefaultTreeModel(root));
innerPanel.availablePrefsTree.addTreeSelectionListener(e -> {
handleViewSelection(e);
updateTitle();
});
innerPanel.availablePrefsTree.addTreeExpansionListener(new TreeExpansionListener() {
@Override
public void treeExpanded(TreeExpansionEvent event) {
SwingUtilities.invokeLater(PreferencesWindowController.this::adjustTreeSize);
}
@Override
public void treeCollapsed(TreeExpansionEvent event) {
}
});
innerPanel.selectedPrefsScrollPane.getViewport().setBackground(innerPanel.getBackground());
DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) innerPanel.availablePrefsTree.getCellRenderer();
renderer.setIcon(null);
renderer.setLeafIcon(null);
renderer.setOpenIcon(null);
renderer.setClosedIcon(null);
renderer.setDisabledIcon(null);
outerPanel.okButton.addActionListener(e -> {
if (currentView == null || currentView.validate()) {
new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
doSave();
return null;
}
@Override
protected void done() {
if (getIsReloadRequired()) {
SwingUtilities.invokeLater(ProjectUICommands::promptReload);
}
}
}.execute();
StaticUIUtils.closeWindowByEvent(dialog);
}
});
outerPanel.cancelButton.addActionListener(e -> StaticUIUtils.closeWindowByEvent(dialog));
// Hide undo, reset buttons on outer panel
outerPanel.undoButton.setVisible(false);
outerPanel.resetButton.setVisible(false);
// Use ones on inner panel to indicate that actions are view-specific
innerPanel.undoButton.addActionListener(e -> currentView.undoChanges());
innerPanel.resetButton.addActionListener(e -> currentView.restoreDefaults());
dialog.addWindowListener(new WindowAdapter() {
@Override
public void windowOpened(WindowEvent e) {
walkTree(root, node -> {
// Start with tree fully expanded
if (node.getChildCount() > 0) {
innerPanel.availablePrefsTree.expandPath(new TreePath(node.getPath()));
}
});
SwingUtilities.invokeLater(() -> {
if (initialSelection != null) {
selectView(initialSelection);
}
});
}
});
innerPanel.availablePrefsScrollPane.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
SwingUtilities.invokeLater(PreferencesWindowController.this::adjustTreeSize);
}
});
ActionMap actionMap = innerPanel.getActionMap();
InputMap inputMap = innerPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
actionMap.put(ACTION_KEY_NEW_SEARCH, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
innerPanel.searchTextField.requestFocusInWindow();
innerPanel.searchTextField.selectAll();
}
});
KeyStroke searchKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_F, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
inputMap.put(searchKeyStroke, ACTION_KEY_NEW_SEARCH);
actionMap.put(ACTION_KEY_CLEAR_OR_CLOSE, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (!innerPanel.searchTextField.isEmpty()) {
// Move focus away from search field
innerPanel.availablePrefsTree.requestFocusInWindow();
innerPanel.clearButton.doClick();
} else {
StaticUIUtils.closeWindowByEvent(dialog);
}
}
});
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), ACTION_KEY_CLEAR_OR_CLOSE);
// Don't let Enter close the dialog
innerPanel.searchTextField.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), ACTION_KEY_DO_SEARCH);
innerPanel.searchTextField.getActionMap().put(ACTION_KEY_DO_SEARCH, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
searchCurrentView();
}
});
String searchKeyText = StaticUIUtils.getKeyStrokeText(searchKeyStroke);
innerPanel.searchTextField.setHintText(OStrings.getString("PREFERENCES_SEARCH_HINT", searchKeyText));
// Set initial state
searchAndFilterTree();
adjustTreeSize();
dialog.getRootPane().setDefaultButton(outerPanel.okButton);
dialog.setPreferredSize(new Dimension(800, 500));
dialog.pack();
// Prevent search field from getting initial focus
innerPanel.availablePrefsTree.requestFocusInWindow();
dialog.setLocationRelativeTo(parent);
dialog.setVisible(true);
}
Aggregations