From 9e99a6d7e26ed8509e8a1e3f6699fe6b5ad4f6bc Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Sun, 5 Feb 2012 20:22:12 +0100 Subject: [PATCH] annoying problem with --- .../ide/navigationToolbar/NavBarItem.java | 2 +- .../NavBarListCellRenderer.java | 2 +- .../ide/navigationToolbar/NavBarModel.java | 16 ++++++++++++++++ .../ide/navigationToolbar/NavBarPanel.java | 3 ++- .../ide/navigationToolbar/NavBarPopup.java | 2 +- .../navigationToolbar/NavBarPresentation.java | 6 ++++-- 6 files changed, 25 insertions(+), 6 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarItem.java b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarItem.java index e8385b9da65a..47cdf243c920 100644 --- a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarItem.java +++ b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarItem.java @@ -59,7 +59,7 @@ public class NavBarItem extends SimpleColoredComponent implements Disposable { openIcon = closedIcon = EmptyIcon.create(5); } final NavBarPresentation presentation = myPanel.getPresentation(); - myText = NavBarPresentation.getPresentableText(object, myPanel.getWindow()); + myText = NavBarPresentation.getPresentableText(object); myIcon = wrapIcon(openIcon, closedIcon, idx); myAttributes = presentation.getTextAttributes(object, false); } else { diff --git a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarListCellRenderer.java b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarListCellRenderer.java index 3f6c87c8fc45..6bb72e0a405f 100644 --- a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarListCellRenderer.java +++ b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarListCellRenderer.java @@ -47,7 +47,7 @@ public class NavBarListCellRenderer extends ColoredListCellRenderer { protected void customizeCellRenderer(JList list, Object value, int index, boolean selected, boolean hasFocus) { setFocusBorderAroundIcon(false); - final String name = NavBarPresentation.getPresentableText(value, myPanel.getWindow()); + final String name = NavBarPresentation.getPresentableText(value); Color color = list.getForeground(); boolean isProblemFile = false; diff --git a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarModel.java b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarModel.java index a356f92abcf9..8bb0189b8481 100644 --- a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarModel.java +++ b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarModel.java @@ -159,6 +159,22 @@ public class NavBarModel { setModel(updatedModel); } + void revalidate() { + final List objects = new ArrayList(); + boolean update = false; + for (Object o : myModel) { + if (isValid(o)) { + objects.add(o); + } else { + update = true; + break; + } + } + if (update) { + setModel(objects); + } + } + private void setModel(List model) { if (!model.equals(myModel)) { myModel = model; diff --git a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java index a6d8f607482a..abfa5435a815 100644 --- a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java +++ b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPanel.java @@ -336,6 +336,7 @@ public class NavBarPanel extends JPanel implements DataProvider, PopupOwner, Dis } boolean isRebuildUiNeeded() { + myModel.revalidate(); if (myList.size() == myModel.size()) { int index = 0; for (NavBarItem eachLabel : myList) { @@ -344,7 +345,7 @@ public class NavBarPanel extends JPanel implements DataProvider, PopupOwner, Dis return true; } - if (!StringUtil.equals(eachLabel.getText(), NavBarPresentation.getPresentableText(eachElement, null))) { + if (!StringUtil.equals(eachLabel.getText(), NavBarPresentation.getPresentableText(eachElement))) { return true; } diff --git a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPopup.java b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPopup.java index f131e966b4fc..c592df43b92b 100644 --- a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPopup.java +++ b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPopup.java @@ -160,7 +160,7 @@ public class NavBarPopup extends LightweightHint implements Disposable{ final JComponent component = ListWithFilter.wrap(list, new NavBarListWrapper(list), new Function() { @Override public String fun(Object o) { - return NavBarPresentation.getPresentableText(o, panel.getWindow()); + return NavBarPresentation.getPresentableText(o); } }); component.putClientProperty(JBLIST_KEY, list); diff --git a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPresentation.java b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPresentation.java index 7726804491ae..50526eba63e9 100644 --- a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPresentation.java +++ b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarPresentation.java @@ -91,8 +91,10 @@ public class NavBarPresentation { } @NotNull - protected static String getPresentableText(final Object object, @Nullable Window window) { - if (!NavBarModel.isValid(object)) return IdeBundle.message("node.structureview.invalid"); + protected static String getPresentableText(final Object object) { + if (!NavBarModel.isValid(object)) { + return IdeBundle.message("node.structureview.invalid"); + } for (NavBarModelExtension modelExtension : Extensions.getExtensions(NavBarModelExtension.EP_NAME)) { String text = modelExtension.getPresentableText(object); if (text != null) {