replaced <code></code> with more concise {@code}
[idea/community.git] / platform / platform-impl / src / com / intellij / ui / plaf / beg / BegScrollPaneUI.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.ui.plaf.beg;
17
18 import org.jetbrains.annotations.NonNls;
19
20 import javax.swing.*;
21 import javax.swing.border.Border;
22 import javax.swing.plaf.ComponentUI;
23 import javax.swing.plaf.metal.MetalScrollBarUI;
24 import javax.swing.plaf.metal.MetalScrollPaneUI;
25 import java.beans.PropertyChangeEvent;
26 import java.beans.PropertyChangeListener;
27
28 /**
29  * @author Eugene Belyaev
30  */
31 public class BegScrollPaneUI extends MetalScrollPaneUI {
32   @NonNls public static final String VERTICAL_SCROLL_BAR_PROPERTY = "verticalScrollBar";
33   @NonNls public static final String HORIZONTAL_SCROLL_BAR_PROPERTY = "horizontalScrollBar";
34   @NonNls public static final String BORDER_PROPERTY = "border";
35
36   public static ComponentUI createUI(JComponent x) {
37     return new BegScrollPaneUI();
38   }
39
40   /**
41    * If the border of the scrollpane is an instance of
42    * {@code MetalBorders.ScrollPaneBorder}, the client property
43    * {@code FREE_STANDING_PROP} of the scrollbars
44    * is set to false, otherwise it is set to true.
45    */
46   private void updateScrollbarsFreeStanding() {
47     if (scrollpane == null) {
48       return;
49     }
50     Object value = Boolean.FALSE;
51     scrollpane.getHorizontalScrollBar().putClientProperty
52         (MetalScrollBarUI.FREE_STANDING_PROP, value);
53     scrollpane.getVerticalScrollBar().putClientProperty
54         (MetalScrollBarUI.FREE_STANDING_PROP, value);
55   }
56
57   protected PropertyChangeListener createScrollBarSwapListener() {
58     return new PropertyChangeListener() {
59       public void propertyChange(PropertyChangeEvent e) {
60         String propertyName = e.getPropertyName();
61         if (propertyName.equals(VERTICAL_SCROLL_BAR_PROPERTY) ||
62             propertyName.equals(HORIZONTAL_SCROLL_BAR_PROPERTY)) {
63           ((JScrollBar) e.getOldValue()).putClientProperty(MetalScrollBarUI.FREE_STANDING_PROP,
64               null);
65           ((JScrollBar) e.getNewValue()).putClientProperty(MetalScrollBarUI.FREE_STANDING_PROP,
66               Boolean.FALSE);
67         }
68         else if (BORDER_PROPERTY.equals(propertyName)) {
69           updateScrollbarsFreeStanding();
70         }
71       }
72     };
73   }
74 }