From 7b7bcda775b4060900962f2bb6ae1f8c49b4561c Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Fri, 13 May 2011 13:33:59 +0400 Subject: [PATCH] NavBar is always shown on the top --- .../NavBarRootPaneExtension.java | 93 +++++++++++-------- 1 file changed, 52 insertions(+), 41 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarRootPaneExtension.java b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarRootPaneExtension.java index 4b3b06b72ee2..38dbc8daf723 100644 --- a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarRootPaneExtension.java +++ b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/NavBarRootPaneExtension.java @@ -20,6 +20,7 @@ */ package com.intellij.ide.navigationToolbar; +import com.intellij.ide.ui.LafManager; import com.intellij.ide.ui.UISettings; import com.intellij.ide.ui.UISettingsListener; import com.intellij.openapi.actionSystem.*; @@ -27,6 +28,7 @@ import com.intellij.openapi.actionSystem.ex.ComboBoxAction; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.IconLoader; +import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.wm.IdeRootPaneNorthExtension; import com.intellij.openapi.wm.impl.IdeFrameImpl; @@ -186,48 +188,56 @@ public class NavBarRootPaneExtension extends IdeRootPaneNorthExtension { } private JComponent buildNavBarPanel() { - final JComponent result = new JPanel(new BorderLayout()) { + final Ref panel = new Ref(null); + final Runnable updater = new Runnable() { + String laf; + @Override + public void run() { + if (LafManager.getInstance().getCurrentLookAndFeel().getName().equals(laf)) return; + laf = LafManager.getInstance().getCurrentLookAndFeel().getName(); + panel.get().removeAll(); + myScrollPane = null; + myCloseIcon = null; + if (myNavigationBar != null && !Disposer.isDisposed(myNavigationBar)) { + Disposer.dispose(myNavigationBar); + } + myNavigationBar = new NavBarPanel(myProject); + myWrapperPanel.putClientProperty("NavBarPanel", myNavigationBar); + myNavigationBar.getModel().setFixedComponent(true); + + myScrollPane = ScrollPaneFactory.createScrollPane(myNavigationBar); + myScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); + myScrollPane.setHorizontalScrollBar(null); + myScrollPane.setBorder(null); + + myScrollPane.setOpaque(false); + myScrollPane.getViewport().setOpaque(false); + + panel.get().setBackground(UIUtil.isUnderGTKLookAndFeel() ? Color.WHITE : UIUtil.getListBackground()); + panel.get().setOpaque(!UIUtil.isUnderAquaLookAndFeel() || UISettings.getInstance().SHOW_MAIN_TOOLBAR); + panel.get().setBorder(UIUtil.isUnderAquaLookAndFeel() ? BorderFactory.createEmptyBorder(2, 0, 2, 4) : new NavBarBorder(true, 0)); + myNavigationBar.setBorder(null); + panel.get().add(myScrollPane, BorderLayout.CENTER); + if (!SystemInfo.isMac) { + myCloseIcon = new JLabel(CROSS_ICON); + myCloseIcon.addMouseListener(new MouseAdapter() { + public void mouseClicked(final MouseEvent e) { + UISettings.getInstance().SHOW_NAVIGATION_BAR = false; + uiSettingsChanged(UISettings.getInstance()); + } + }); + panel.get().add(myCloseIcon, BorderLayout.EAST); + } + } + }; + + panel.set(new JPanel(new BorderLayout()) { @Override public void updateUI() { super.updateUI(); - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - removeAll(); - myScrollPane = null; - myCloseIcon = null; - if (myNavigationBar != null && !Disposer.isDisposed(myNavigationBar)) { - Disposer.dispose(myNavigationBar); - } - myNavigationBar = new NavBarPanel(myProject); - myWrapperPanel.putClientProperty("NavBarPanel", myNavigationBar); - myNavigationBar.getModel().setFixedComponent(true); - - myScrollPane = ScrollPaneFactory.createScrollPane(myNavigationBar); - myScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); - myScrollPane.setHorizontalScrollBar(null); - myScrollPane.setBorder(null); - - myScrollPane.setOpaque(false); - myScrollPane.getViewport().setOpaque(false); - - setBackground(UIUtil.isUnderGTKLookAndFeel() ? Color.WHITE : UIUtil.getListBackground()); - setOpaque(!UIUtil.isUnderAquaLookAndFeel() || UISettings.getInstance().SHOW_MAIN_TOOLBAR); - setBorder(UIUtil.isUnderAquaLookAndFeel() ? BorderFactory.createEmptyBorder(2, 0, 2, 4) : new NavBarBorder(true, 0)); - myNavigationBar.setBorder(null); - add(myScrollPane, BorderLayout.CENTER); - if (!SystemInfo.isMac) { - myCloseIcon = new JLabel(CROSS_ICON); - myCloseIcon.addMouseListener(new MouseAdapter() { - public void mouseClicked(final MouseEvent e) { - UISettings.getInstance().SHOW_NAVIGATION_BAR = false; - uiSettingsChanged(UISettings.getInstance()); - } - }); - add(myCloseIcon, BorderLayout.EAST); - } - } - }); + if (UISettings.getInstance().SHOW_NAVIGATION_BAR) { + SwingUtilities.invokeLater(updater); + } } @Override @@ -292,9 +302,10 @@ public class NavBarRootPaneExtension extends IdeRootPaneNorthExtension { closePreferredSize.width, closePreferredSize.height); } } - }; + }); - return result; + updater.run(); + return panel.get(); } public void uiSettingsChanged(final UISettings settings) {