mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
show usage in preview editor
This commit is contained in:
@@ -60,6 +60,7 @@ import com.intellij.ui.components.JBScrollPane;
|
||||
import com.intellij.ui.table.JBTable;
|
||||
import com.intellij.usageView.UsageInfo;
|
||||
import com.intellij.usages.*;
|
||||
import com.intellij.usages.impl.UsagePreviewPanel;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.Processor;
|
||||
@@ -70,14 +71,14 @@ import org.jetbrains.annotations.Nullable;
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
import javax.swing.event.ListSelectionListener;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.regex.PatternSyntaxException;
|
||||
@@ -123,7 +124,9 @@ public class FindDialog extends DialogWrapper {
|
||||
private static boolean myPreviewResultsTabWasSelected;
|
||||
private static final int RESULTS_PREVIEW_TAB_INDEX = 1;
|
||||
|
||||
private Splitter myPreviewSplitter;
|
||||
private JBTable myResultsPreviewTable;
|
||||
private UsagePreviewPanel myUsagePreviewPanel;
|
||||
private TabbedPane myContent;
|
||||
private volatile ProgressIndicatorBase myResultsPreviewSearchProgress;
|
||||
|
||||
@@ -173,6 +176,7 @@ public class FindDialog extends DialogWrapper {
|
||||
@Override
|
||||
protected void dispose() {
|
||||
finishPreviousPreviewSearch();
|
||||
if (myUsagePreviewPanel != null) Disposer.dispose(myUsagePreviewPanel);
|
||||
for(Map.Entry<EditorTextField, DocumentAdapter> e: myComboBoxListeners.entrySet()) {
|
||||
e.getKey().removeDocumentListener(e.getValue());
|
||||
}
|
||||
@@ -489,8 +493,29 @@ public class FindDialog extends DialogWrapper {
|
||||
}
|
||||
};
|
||||
table.setShowColumns(false);
|
||||
table.setShowGrid(false);
|
||||
new NavigateToSourceListener().installOn(table);
|
||||
|
||||
Splitter previewSplitter = new Splitter(true, 0.5f, 0.1f, 0.9f);
|
||||
myUsagePreviewPanel = new UsagePreviewPanel(myProject, new UsageViewPresentation());
|
||||
myResultsPreviewTable = table;
|
||||
myResultsPreviewTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
|
||||
@Override
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
if (e.getValueIsAdjusting()) return;
|
||||
int index = myResultsPreviewTable.getSelectionModel().getLeadSelectionIndex();
|
||||
if (index != -1) {
|
||||
UsageInfo usageInfo = ((UsageInfo2UsageAdapter)myResultsPreviewTable.getModel().getValueAt(index, 0)).getUsageInfo();
|
||||
myUsagePreviewPanel.updateLayout(Collections.singletonList(usageInfo));
|
||||
}
|
||||
else {
|
||||
myUsagePreviewPanel.updateLayout(null);
|
||||
}
|
||||
}
|
||||
});
|
||||
previewSplitter.setFirstComponent(new JBScrollPane(myResultsPreviewTable));
|
||||
previewSplitter.setSecondComponent(myUsagePreviewPanel.createComponent());
|
||||
myPreviewSplitter = previewSplitter;
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -513,10 +538,10 @@ public class FindDialog extends DialogWrapper {
|
||||
resultsOptionPanel.add(myCbToOpenInNewTab);
|
||||
}
|
||||
|
||||
if (myResultsPreviewTable != null) {
|
||||
if (myPreviewSplitter != null) {
|
||||
TabbedPane pane = new TabbedPaneImpl(SwingConstants.TOP);
|
||||
pane.insertTab("Options", null, optionsPanel, null, 0);
|
||||
pane.insertTab("Preview", null, new JBScrollPane(myResultsPreviewTable), null, RESULTS_PREVIEW_TAB_INDEX);
|
||||
pane.insertTab("Preview", null, myPreviewSplitter, null, RESULTS_PREVIEW_TAB_INDEX);
|
||||
myContent = pane;
|
||||
if (myPreviewResultsTabWasSelected) myContent.setSelectedIndex(RESULTS_PREVIEW_TAB_INDEX);
|
||||
|
||||
@@ -1389,36 +1414,46 @@ public class FindDialog extends DialogWrapper {
|
||||
}
|
||||
|
||||
private static class UsageTableCellRenderer extends JPanel implements TableCellRenderer {
|
||||
private SimpleColoredComponent myUsageRenderer = new SimpleColoredComponent();
|
||||
private SimpleColoredComponent myFileAndLineNumber = new SimpleColoredComponent();
|
||||
private ColoredTableCellRenderer myUsageRenderer = new ColoredTableCellRenderer() {
|
||||
@Override
|
||||
protected void customizeCellRenderer(JTable table, Object value, boolean selected, boolean hasFocus, int row, int column) {
|
||||
if (value instanceof UsageInfo2UsageAdapter) {
|
||||
TextChunk[] text = ((UsageInfo2UsageAdapter)value).getPresentation().getText();
|
||||
|
||||
// skip line number / file info
|
||||
for (int i = 1; i < text.length; ++i) {
|
||||
TextChunk textChunk = text[i];
|
||||
myUsageRenderer.append(textChunk.getText(), textChunk.getSimpleAttributesIgnoreBackground());
|
||||
}
|
||||
}
|
||||
setBorder(null);
|
||||
}
|
||||
};
|
||||
private ColoredTableCellRenderer myFileAndLineNumber = new ColoredTableCellRenderer() {
|
||||
@Override
|
||||
protected void customizeCellRenderer(JTable table, Object value, boolean selected, boolean hasFocus, int row, int column) {
|
||||
if (value instanceof UsageInfo2UsageAdapter) {
|
||||
TextChunk[] text = ((UsageInfo2UsageAdapter)value).getPresentation().getText();
|
||||
// line number / file info
|
||||
append(((UsageInfo2UsageAdapter)value).getFile().getName() + " " + text[0].getText(), SimpleTextAttributes.GRAYED_ITALIC_ATTRIBUTES);
|
||||
}
|
||||
setBorder(null);
|
||||
}
|
||||
};
|
||||
|
||||
UsageTableCellRenderer() {
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
add(myUsageRenderer, BorderLayout.WEST);
|
||||
add(myFileAndLineNumber, BorderLayout.EAST);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
|
||||
myUsageRenderer.clear();
|
||||
myFileAndLineNumber.clear();
|
||||
setBackground(isSelected && hasFocus ? UIUtil.getTableSelectionBackground() : UIUtil.getTableBackground());
|
||||
setBackground(UIUtil.getTableBackground(isSelected));
|
||||
myUsageRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
|
||||
myFileAndLineNumber.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
|
||||
|
||||
if (value instanceof UsageInfo2UsageAdapter) {
|
||||
UsageInfo2UsageAdapter usageAdapter = (UsageInfo2UsageAdapter)value;
|
||||
UsagePresentation presentation = usageAdapter.getPresentation();
|
||||
TextChunk[] text = presentation.getText();
|
||||
|
||||
// put line number / file info at the right
|
||||
for (int i = 1; i < text.length; ++i) {
|
||||
TextChunk textChunk = text[i];
|
||||
SimpleTextAttributes simples = textChunk.getSimpleAttributesIgnoreBackground();
|
||||
myUsageRenderer.append(textChunk.getText(), simples);
|
||||
}
|
||||
|
||||
myFileAndLineNumber.append(usageAdapter.getFile().getName() + " " + text[0].getText(),
|
||||
SimpleTextAttributes.GRAYED_ITALIC_ATTRIBUTES);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user