diff --git a/platform/lang-impl/src/com/intellij/refactoring/BaseRefactoringProcessor.java b/platform/lang-impl/src/com/intellij/refactoring/BaseRefactoringProcessor.java index bce7d70f4087..18754bc08e32 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/BaseRefactoringProcessor.java +++ b/platform/lang-impl/src/com/intellij/refactoring/BaseRefactoringProcessor.java @@ -387,7 +387,10 @@ public abstract class BaseRefactoringProcessor implements Runnable { final UsageViewPresentation presentation = createPresentation(viewDescriptor, usages); final UsageView usageView = viewManager.showUsages(targets, usages, presentation, factory); + customizeUsagesView(viewDescriptor, usageView); + } + protected void customizeUsagesView(@NotNull final UsageViewDescriptor viewDescriptor, @NotNull final UsageView usageView) { final Runnable refactoringRunnable = new Runnable() { @Override public void run() { diff --git a/platform/usageView/src/com/intellij/usages/UsageView.java b/platform/usageView/src/com/intellij/usages/UsageView.java index a360e31ec50c..e0a3761c6db0 100644 --- a/platform/usageView/src/com/intellij/usages/UsageView.java +++ b/platform/usageView/src/com/intellij/usages/UsageView.java @@ -66,6 +66,8 @@ public interface UsageView extends Disposable { void addButtonToLowerPane(@NotNull Runnable runnable, @NotNull String text, char mnemonic); void addButtonToLowerPane(@NotNull Runnable runnable, @NotNull String text); + void setAdditionalComponent(@Nullable JComponent component); + void addPerformOperationAction(@NotNull Runnable processRunnable, String commandName, String cannotMakeString, @NotNull String shortDescription); /** diff --git a/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java b/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java index 9b5cfb4c26a0..50395188d8df 100644 --- a/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java +++ b/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java @@ -106,6 +106,7 @@ public class UsageViewImpl implements UsageView, UsageModelTracker.UsageModelTra private final Map myUsageNodes = new ConcurrentHashMap(); public static final UsageNode NULL_NODE = new UsageNode(NullUsage.INSTANCE, new UsageViewTreeModelBuilder(new UsageViewPresentation(), UsageTarget.EMPTY_ARRAY)); private final ButtonPanel myButtonPanel = new ButtonPanel(); + private final JComponent myAdditionalComponent = new JPanel(new BorderLayout()); private volatile boolean isDisposed; private volatile boolean myChangesDetected = false; public static final Comparator USAGE_COMPARATOR = new Comparator() { @@ -393,7 +394,8 @@ public class UsageViewImpl implements UsageView, UsageModelTracker.UsageModelTra myPreviewSplitter.setProportion(1); } - myCentralPanel.add(myButtonPanel, BorderLayout.SOUTH); + myCentralPanel.add(myAdditionalComponent, BorderLayout.SOUTH); + myAdditionalComponent.add(myButtonPanel, BorderLayout.SOUTH); myRootPanel.revalidate(); myRootPanel.repaint(); @@ -1235,6 +1237,16 @@ public class UsageViewImpl implements UsageView, UsageModelTracker.UsageModelTra myButtonPanel.addButtonRunnable(index, runnable, text); } + @Override + public void setAdditionalComponent(@Nullable JComponent comp) { + BorderLayout layout = (BorderLayout)myAdditionalComponent.getLayout(); + Component prev = layout.getLayoutComponent(myAdditionalComponent, BorderLayout.CENTER); + if (prev == comp) return; + if (prev != null) myAdditionalComponent.remove(prev); + if (comp != null) myAdditionalComponent.add(comp, BorderLayout.CENTER); + myAdditionalComponent.revalidate(); + } + @Override public void addButtonToLowerPane(@NotNull final Runnable runnable, @NotNull String text, char mnemonic) { // implemented method is deprecated, so, it just calls non-deprecated overloading one