From c6b24c0cd415ae1d2105d2aa1a9a0ea0c8ad0d3f Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Mon, 23 Nov 2009 16:31:08 +0300 Subject: [PATCH] DataProvider in Show Usages Popup --- .../find/actions/ShowUsagesAction.java | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/find/actions/ShowUsagesAction.java b/platform/lang-impl/src/com/intellij/find/actions/ShowUsagesAction.java index 330b51629090..884b6c418f9e 100644 --- a/platform/lang-impl/src/com/intellij/find/actions/ShowUsagesAction.java +++ b/platform/lang-impl/src/com/intellij/find/actions/ShowUsagesAction.java @@ -62,6 +62,7 @@ import com.intellij.util.Icons; import com.intellij.util.Processor; import com.intellij.util.messages.MessageBusConnection; import com.intellij.util.ui.Table; +import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -334,12 +335,7 @@ public class ShowUsagesAction extends AnAction { addUsageNodes(usageView.getRoot(), usageView, new ArrayList()); - final JTable table = new Table(){ - @Override - public boolean getScrollableTracksViewportWidth() { - return true; - } - }; + final JTable table = new MyTable(); TableScrollingUtil.installActions(table); final Vector data = new Vector(); setModel(table, usages, visibleNodes, usageView, data); @@ -411,6 +407,8 @@ public class ShowUsagesAction extends AnAction { } }; + + KeyboardShortcut shortcut = getSettingsShortcut(); if (shortcut != null) { builder.registerKeyboardAction(shortcut.getFirstKeyStroke(), editSettings); @@ -635,4 +633,30 @@ public class ShowUsagesAction extends AnAction { }); } } + + static class MyTable extends Table implements DataProvider { + @Override + public boolean getScrollableTracksViewportWidth() { + return true; + } + + public Object getData(@NonNls String dataId) { + if (LangDataKeys.PSI_ELEMENT.getName().equals(dataId)) { + final int[] selected = getSelectedRows(); + if (selected.length == 1) { + final Object at = getValueAt(selected[0], 0); + if (at instanceof UsageNode) { + final Usage usage = ((UsageNode)at).getUsage(); + if (usage instanceof UsageInfo2UsageAdapter) { + final PsiElement element = ((UsageInfo2UsageAdapter)usage).getElement(); + if (element != null) { + return element.getContainingFile(); + } + } + } + } + } + return null; + } + } } \ No newline at end of file