/plugins/Substance/trunk/substance-6.1/substance/src/org/pushingpixels/substance/internal/ui/SubstanceSplitPaneUI.java

# · Java · 101 lines · 44 code · 9 blank · 48 comment · 1 complexity · 8a29cebfc75ee53ab0dfb6ba1537405f MD5 · raw file

  1. /*
  2. * Copyright (c) 2005-2010 Substance Kirill Grouchnikov. All Rights Reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions are met:
  6. *
  7. * o Redistributions of source code must retain the above copyright notice,
  8. * this list of conditions and the following disclaimer.
  9. *
  10. * o Redistributions in binary form must reproduce the above copyright notice,
  11. * this list of conditions and the following disclaimer in the documentation
  12. * and/or other materials provided with the distribution.
  13. *
  14. * o Neither the name of Substance Kirill Grouchnikov nor the names of
  15. * its contributors may be used to endorse or promote products derived
  16. * from this software without specific prior written permission.
  17. *
  18. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  19. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  20. * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  21. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  22. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  23. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  24. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
  25. * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  26. * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
  27. * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  28. * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29. */
  30. package org.pushingpixels.substance.internal.ui;
  31. import java.beans.PropertyChangeEvent;
  32. import java.beans.PropertyChangeListener;
  33. import javax.swing.JComponent;
  34. import javax.swing.JSplitPane;
  35. import javax.swing.plaf.ComponentUI;
  36. import javax.swing.plaf.basic.BasicSplitPaneDivider;
  37. import javax.swing.plaf.basic.BasicSplitPaneUI;
  38. import org.pushingpixels.substance.internal.utils.SubstanceCoreUtilities;
  39. import org.pushingpixels.substance.internal.utils.SubstanceSplitPaneDivider;
  40. /**
  41. * UI for split panes in <b>Substance</b> look and feel.
  42. *
  43. * @author Kirill Grouchnikov
  44. */
  45. public class SubstanceSplitPaneUI extends BasicSplitPaneUI {
  46. /**
  47. * Property change listener that listens on changes to
  48. * {@link JSplitPane#ORIENTATION_PROPERTY} property.
  49. */
  50. protected PropertyChangeListener substancePropertyListener;
  51. /*
  52. * (non-Javadoc)
  53. *
  54. * @see javax.swing.plaf.ComponentUI#createUI(javax.swing.JComponent)
  55. */
  56. public static ComponentUI createUI(JComponent comp) {
  57. SubstanceCoreUtilities.testComponentCreationThreadingViolation(comp);
  58. return new SubstanceSplitPaneUI();
  59. }
  60. @Override
  61. protected void installListeners() {
  62. super.installListeners();
  63. this.substancePropertyListener = new PropertyChangeListener() {
  64. public void propertyChange(PropertyChangeEvent evt) {
  65. if (JSplitPane.ORIENTATION_PROPERTY.equals(evt
  66. .getPropertyName())) {
  67. SubstanceSplitPaneDivider substanceDivider = (SubstanceSplitPaneDivider) SubstanceSplitPaneUI.this.divider;
  68. substanceDivider.updateOneTouchButtons((Integer) evt
  69. .getNewValue());
  70. }
  71. };
  72. };
  73. this.splitPane
  74. .addPropertyChangeListener(this.substancePropertyListener);
  75. }
  76. @Override
  77. protected void uninstallListeners() {
  78. this.splitPane
  79. .removePropertyChangeListener(this.substancePropertyListener);
  80. this.substancePropertyListener = null;
  81. super.uninstallListeners();
  82. }
  83. /*
  84. * (non-Javadoc)
  85. *
  86. * @see javax.swing.plaf.basic.BasicSplitPaneUI#createDefaultDivider()
  87. */
  88. @Override
  89. public BasicSplitPaneDivider createDefaultDivider() {
  90. return new SubstanceSplitPaneDivider(this);
  91. }
  92. }