Search in sources :

Example 31 with ListSelectionListener

use of javax.swing.event.ListSelectionListener in project intellij-community by JetBrains.

the class XDebuggerUtilImpl method toggleAndReturnLineBreakpoint.

@NotNull
public static <P extends XBreakpointProperties> Promise<XLineBreakpoint> toggleAndReturnLineBreakpoint(@NotNull final Project project, @NotNull final XLineBreakpointType<P> type, @NotNull final XSourcePosition position, final boolean temporary, @Nullable final Editor editor, boolean canRemove) {
    return new WriteAction<Promise<XLineBreakpoint>>() {

        @Override
        protected void run(@NotNull Result<Promise<XLineBreakpoint>> result) throws Throwable {
            final VirtualFile file = position.getFile();
            final int line = position.getLine();
            final XBreakpointManager breakpointManager = XDebuggerManager.getInstance(project).getBreakpointManager();
            XLineBreakpoint<P> breakpoint = breakpointManager.findBreakpointAtLine(type, file, line);
            if (breakpoint != null) {
                if (!temporary && canRemove) {
                    breakpointManager.removeBreakpoint(breakpoint);
                }
            } else {
                List<? extends XLineBreakpointType<P>.XLineBreakpointVariant<P>> variants = type.computeVariants(project, position);
                if (!variants.isEmpty() && editor != null) {
                    RelativePoint relativePoint = DebuggerUIUtil.getPositionForPopup(editor, line);
                    if (variants.size() > 1 && relativePoint != null) {
                        final AsyncPromise<XLineBreakpoint> res = new AsyncPromise<>();
                        class MySelectionListener implements ListSelectionListener {

                            RangeHighlighter myHighlighter = null;

                            @Override
                            public void valueChanged(ListSelectionEvent e) {
                                if (!e.getValueIsAdjusting()) {
                                    updateHighlighter(((JList) e.getSource()).getSelectedValue());
                                }
                            }

                            public void initialSet(Object value) {
                                if (myHighlighter == null) {
                                    updateHighlighter(value);
                                }
                            }

                            void updateHighlighter(Object value) {
                                clearHighlighter();
                                if (value instanceof XLineBreakpointType.XLineBreakpointVariant) {
                                    TextRange range = ((XLineBreakpointType.XLineBreakpointVariant) value).getHighlightRange();
                                    TextRange lineRange = DocumentUtil.getLineTextRange(editor.getDocument(), line);
                                    if (range != null) {
                                        range = range.intersection(lineRange);
                                    } else {
                                        range = lineRange;
                                    }
                                    if (range != null && !range.isEmpty()) {
                                        EditorColorsScheme scheme = EditorColorsManager.getInstance().getGlobalScheme();
                                        TextAttributes attributes = scheme.getAttributes(DebuggerColors.BREAKPOINT_ATTRIBUTES);
                                        myHighlighter = editor.getMarkupModel().addRangeHighlighter(range.getStartOffset(), range.getEndOffset(), DebuggerColors.BREAKPOINT_HIGHLIGHTER_LAYER, attributes, HighlighterTargetArea.EXACT_RANGE);
                                    }
                                }
                            }

                            private void clearHighlighter() {
                                if (myHighlighter != null) {
                                    myHighlighter.dispose();
                                }
                            }
                        }
                        // calculate default item
                        int caretOffset = editor.getCaretModel().getOffset();
                        XLineBreakpointType<P>.XLineBreakpointVariant<P> defaultVariant = null;
                        for (XLineBreakpointType<P>.XLineBreakpointVariant<P> variant : variants) {
                            TextRange range = variant.getHighlightRange();
                            if (range != null && range.contains(caretOffset)) {
                                //noinspection ConstantConditions
                                if (defaultVariant == null || defaultVariant.getHighlightRange().getLength() > range.getLength()) {
                                    defaultVariant = variant;
                                }
                            }
                        }
                        final int defaultIndex = defaultVariant != null ? variants.indexOf(defaultVariant) : 0;
                        final MySelectionListener selectionListener = new MySelectionListener();
                        ListPopupImpl popup = new ListPopupImpl(new BaseListPopupStep<XLineBreakpointType.XLineBreakpointVariant>("Set Breakpoint", variants) {

                            @NotNull
                            @Override
                            public String getTextFor(XLineBreakpointType.XLineBreakpointVariant value) {
                                return value.getText();
                            }

                            @Override
                            public Icon getIconFor(XLineBreakpointType.XLineBreakpointVariant value) {
                                return value.getIcon();
                            }

                            @Override
                            public void canceled() {
                                selectionListener.clearHighlighter();
                            }

                            @Override
                            public PopupStep onChosen(final XLineBreakpointType.XLineBreakpointVariant selectedValue, boolean finalChoice) {
                                selectionListener.clearHighlighter();
                                ApplicationManager.getApplication().runWriteAction(() -> {
                                    P properties = (P) selectedValue.createProperties();
                                    res.setResult(breakpointManager.addLineBreakpoint(type, file.getUrl(), line, properties, temporary));
                                });
                                return FINAL_CHOICE;
                            }

                            @Override
                            public int getDefaultOptionIndex() {
                                return defaultIndex;
                            }
                        }) {

                            @Override
                            protected void afterShow() {
                                super.afterShow();
                                selectionListener.initialSet(getList().getSelectedValue());
                            }
                        };
                        DebuggerUIUtil.registerExtraHandleShortcuts(popup, IdeActions.ACTION_TOGGLE_LINE_BREAKPOINT);
                        popup.setAdText(DebuggerUIUtil.getSelectionShortcutsAdText(IdeActions.ACTION_TOGGLE_LINE_BREAKPOINT));
                        popup.addListSelectionListener(selectionListener);
                        popup.show(relativePoint);
                        result.setResult(res);
                        return;
                    } else {
                        P properties = variants.get(0).createProperties();
                        result.setResult(Promise.resolve(breakpointManager.addLineBreakpoint(type, file.getUrl(), line, properties, temporary)));
                        return;
                    }
                }
                P properties = type.createBreakpointProperties(file, line);
                result.setResult(Promise.resolve(breakpointManager.addLineBreakpoint(type, file.getUrl(), line, properties, temporary)));
                return;
            }
            result.setResult(rejectedPromise());
        }
    }.execute().getResultObject();
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) ListSelectionEvent(javax.swing.event.ListSelectionEvent) RelativePoint(com.intellij.ui.awt.RelativePoint) AsyncPromise(org.jetbrains.concurrency.AsyncPromise) NotNull(org.jetbrains.annotations.NotNull) Result(com.intellij.openapi.application.Result) BaseListPopupStep(com.intellij.openapi.ui.popup.util.BaseListPopupStep) PopupStep(com.intellij.openapi.ui.popup.PopupStep) RangeHighlighter(com.intellij.openapi.editor.markup.RangeHighlighter) TextAttributes(com.intellij.openapi.editor.markup.TextAttributes) EditorColorsScheme(com.intellij.openapi.editor.colors.EditorColorsScheme) WriteAction(com.intellij.openapi.application.WriteAction) TextRange(com.intellij.openapi.util.TextRange) RelativePoint(com.intellij.ui.awt.RelativePoint) ListSelectionListener(javax.swing.event.ListSelectionListener) ListPopupImpl(com.intellij.ui.popup.list.ListPopupImpl) NotNull(org.jetbrains.annotations.NotNull)

Example 32 with ListSelectionListener

use of javax.swing.event.ListSelectionListener in project intellij-community by JetBrains.

the class SelectCvsConfigurationPanel method fireSelectionValueChanged.

private void fireSelectionValueChanged(int firstIndex, int lastIndex, boolean isAdjusting) {
    final ListSelectionListener[] listeners = getListeners(ListSelectionListener.class);
    if (listeners.length == 0)
        return;
    final ListSelectionEvent event = new ListSelectionEvent(this, firstIndex, lastIndex, isAdjusting);
    for (ListSelectionListener listener : listeners) {
        listener.valueChanged(event);
    }
}
Also used : ListSelectionEvent(javax.swing.event.ListSelectionEvent) ListSelectionListener(javax.swing.event.ListSelectionListener)

Example 33 with ListSelectionListener

use of javax.swing.event.ListSelectionListener in project intellij-community by JetBrains.

the class ListPopupImpl method handleNextStep.

private boolean handleNextStep(final PopupStep nextStep, Object parentValue, InputEvent e) {
    if (nextStep != PopupStep.FINAL_CHOICE) {
        final Point point = myList.indexToLocation(myList.getSelectedIndex());
        SwingUtilities.convertPointToScreen(point, myList);
        myChild = createPopup(this, nextStep, parentValue);
        if (myChild instanceof ListPopupImpl) {
            for (ListSelectionListener listener : myList.getListSelectionListeners()) {
                ((ListPopupImpl) myChild).addListSelectionListener(listener);
            }
        }
        final JComponent container = getContent();
        assert container != null : "container == null";
        int y = point.y;
        if (parentValue != null && getListModel().isSeparatorAboveOf(parentValue)) {
            SeparatorWithText swt = new SeparatorWithText();
            swt.setCaption(getListModel().getCaptionAboveOf(parentValue));
            y += swt.getPreferredSize().height - 1;
        }
        myChild.show(container, point.x + container.getWidth() - STEP_X_PADDING, y, true);
        setIndexForShowingChild(myList.getSelectedIndex());
        return false;
    } else {
        setOk(true);
        setFinalRunnable(myStep.getFinalRunnable());
        disposeAllParents(e);
        setIndexForShowingChild(-1);
        return true;
    }
}
Also used : SeparatorWithText(com.intellij.ui.SeparatorWithText) RelativePoint(com.intellij.ui.awt.RelativePoint) RelativePoint(com.intellij.ui.awt.RelativePoint) ListSelectionListener(javax.swing.event.ListSelectionListener)

Example 34 with ListSelectionListener

use of javax.swing.event.ListSelectionListener in project intellij-community by JetBrains.

the class FinderRecursivePanelListModelMergeTest method assertMerge.

private void assertMerge(String[] initialItems, int initialSelectionIdx, int selectionIndexAfterMerge, String... itemsToMerge) {
    final StringFinderRecursivePanel panel = createStringPanel(initialItems);
    disposeOnTearDown(panel);
    JBList<String> list = panel.getList();
    CollectionListModel<String> model = panel.getListModel();
    list.setSelectedIndex(initialSelectionIdx);
    ListSelectionListener selectionListener = new ListSelectionListener() {

        @Override
        public void valueChanged(ListSelectionEvent e) {
            if (panel.isMergeListItemsRunning())
                return;
            assertTrue("selection changed", false);
        }
    };
    list.addListSelectionListener(selectionListener);
    panel.merge(model, list, Arrays.asList(itemsToMerge));
    assertEquals(itemsToMerge.length, model.getSize());
    for (int i = 0; i < itemsToMerge.length; i++) {
        assertEquals("idx:" + i + " " + toString(model.getItems(), ","), itemsToMerge[i], model.getElementAt(i));
    }
    assertEquals(toString(model.getItems(), ","), selectionIndexAfterMerge, list.getSelectedIndex());
    list.removeListSelectionListener(selectionListener);
}
Also used : ListSelectionEvent(javax.swing.event.ListSelectionEvent) ListSelectionListener(javax.swing.event.ListSelectionListener)

Example 35 with ListSelectionListener

use of javax.swing.event.ListSelectionListener in project intellij-plugins by JetBrains.

the class AddAdapterSupportDialog method createFilesViewPanel.

@NotNull
private static JPanel createFilesViewPanel(@NotNull List<VirtualFile> files) {
    JPanel panel = new JPanel(new BorderLayout(0, 2));
    panel.add(new JLabel("Files to add:"), BorderLayout.NORTH);
    final JBList fileList = new JBList(ArrayUtil.EMPTY_STRING_ARRAY);
    fileList.setBorder(BorderFactory.createLineBorder(Color.lightGray));
    fileList.addListSelectionListener(new ListSelectionListener() {

        @Override
        public void valueChanged(ListSelectionEvent e) {
            fileList.clearSelection();
        }
    });
    fileList.setFocusable(false);
    fileList.setRequestFocusEnabled(false);
    fileList.setBackground(Gray._242);
    fileList.setCellRenderer(new ListCellRendererWrapper<VirtualFile>() {

        @Override
        public void customize(JList list, VirtualFile value, int index, boolean selected, boolean hasFocus) {
            setText(" " + value.getName());
        }
    });
    fileList.setListData(files.toArray());
    panel.add(fileList, BorderLayout.CENTER);
    return panel;
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) ListSelectionEvent(javax.swing.event.ListSelectionEvent) JBList(com.intellij.ui.components.JBList) ListSelectionListener(javax.swing.event.ListSelectionListener) NotNull(org.jetbrains.annotations.NotNull)

Aggregations

ListSelectionListener (javax.swing.event.ListSelectionListener)126 ListSelectionEvent (javax.swing.event.ListSelectionEvent)121 ActionEvent (java.awt.event.ActionEvent)35 JScrollPane (javax.swing.JScrollPane)31 ActionListener (java.awt.event.ActionListener)29 JPanel (javax.swing.JPanel)26 MouseEvent (java.awt.event.MouseEvent)24 BorderLayout (java.awt.BorderLayout)20 JButton (javax.swing.JButton)20 JBList (com.intellij.ui.components.JBList)17 Dimension (java.awt.Dimension)16 JLabel (javax.swing.JLabel)16 MouseAdapter (java.awt.event.MouseAdapter)14 NotNull (org.jetbrains.annotations.NotNull)13 FlowLayout (java.awt.FlowLayout)12 KeyAdapter (java.awt.event.KeyAdapter)11 KeyEvent (java.awt.event.KeyEvent)11 List (java.util.List)11 Insets (java.awt.Insets)10 JList (javax.swing.JList)10