/* * Copyright 2000-2009 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.ui.plaf.beg; import org.jetbrains.annotations.NonNls; import javax.swing.*; import javax.swing.border.Border; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.metal.MetalScrollBarUI; import javax.swing.plaf.metal.MetalScrollPaneUI; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; /** * @author Eugene Belyaev */ public class BegScrollPaneUI extends MetalScrollPaneUI { @NonNls public static final String VERTICAL_SCROLL_BAR_PROPERTY = "verticalScrollBar"; @NonNls public static final String HORIZONTAL_SCROLL_BAR_PROPERTY = "horizontalScrollBar"; @NonNls public static final String BORDER_PROPERTY = "border"; public static ComponentUI createUI(JComponent x) { return new BegScrollPaneUI(); } /** * If the border of the scrollpane is an instance of * <code>MetalBorders.ScrollPaneBorder</code>, the client property * <code>FREE_STANDING_PROP</code> of the scrollbars * is set to false, otherwise it is set to true. */ private void updateScrollbarsFreeStanding() { if (scrollpane == null) { return; } Object value = Boolean.FALSE; scrollpane.getHorizontalScrollBar().putClientProperty (MetalScrollBarUI.FREE_STANDING_PROP, value); scrollpane.getVerticalScrollBar().putClientProperty (MetalScrollBarUI.FREE_STANDING_PROP, value); } protected PropertyChangeListener createScrollBarSwapListener() { return new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent e) { String propertyName = e.getPropertyName(); if (propertyName.equals(VERTICAL_SCROLL_BAR_PROPERTY) || propertyName.equals(HORIZONTAL_SCROLL_BAR_PROPERTY)) { ((JScrollBar) e.getOldValue()).putClientProperty(MetalScrollBarUI.FREE_STANDING_PROP, null); ((JScrollBar) e.getNewValue()).putClientProperty(MetalScrollBarUI.FREE_STANDING_PROP, Boolean.FALSE); } else if (BORDER_PROPERTY.equals(propertyName)) { updateScrollbarsFreeStanding(); } } }; } }