show usage in preview editor

This commit is contained in:
Maxim.Mossienko
2015-01-14 14:48:41 +01:00
parent a1b44a53ac
commit 2300591f46
@@ -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;
}
}