1 package org.apache.log4j.chainsaw;
2
3 import java.awt.Insets;
4 import java.awt.event.ItemEvent;
5 import java.awt.event.ItemListener;
6 import java.awt.event.MouseEvent;
7 import java.awt.event.MouseListener;
8
9 import javax.swing.Action;
10 import javax.swing.BorderFactory;
11 import javax.swing.JToggleButton;
12 import javax.swing.SwingConstants;
13 import javax.swing.border.BevelBorder;
14 import javax.swing.border.Border;
15 import javax.swing.border.SoftBevelBorder;
16
17
18 /***
19 * A better button class that has nice roll over effects.
20 *
21 * This class is borrowed (quite heavily, but with modifications)
22 * from the "Swing: Second Edition"
23 * book by Matthew Robinson and Pavel Vorobeiv. An excellent book on Swing.
24 *
25 * @author Matthew Robinson
26 * @author Pavel Vorobeiv
27 * @author Paul Smith <psmith@apache.org>
28 */
29 class SmallToggleButton extends JToggleButton implements ItemListener,
30 MouseListener {
31 protected Border m_highlighted = new SoftBevelBorder(BevelBorder.RAISED);
32 protected Border m_raised = BorderFactory.createEmptyBorder();
33 protected Border m_inactive = m_raised;
34 protected Border m_border = m_inactive;
35 protected Border m_lowered = new SoftBevelBorder(BevelBorder.LOWERED);
36 protected Insets m_ins = new Insets(4, 4, 4, 4);
37
38 public SmallToggleButton() {
39 super();
40 setHorizontalAlignment(SwingConstants.CENTER);
41 setBorder(isSelected() ? m_lowered : m_raised);
42 setMargin(m_ins);
43 setRequestFocusEnabled(false);
44 addItemListener(this);
45 addMouseListener(this);
46 setText("");
47 }
48
49 public SmallToggleButton(Action action) {
50 this();
51 setAction(action);
52 }
53
54 /***
55 * DOCUMENT ME!
56 *
57 * @return DOCUMENT ME!
58 */
59 public float getAlignmentY() {
60 return 0.5f;
61 }
62
63 /***
64 * DOCUMENT ME!
65 *
66 * @return DOCUMENT ME!
67 */
68 public Border getBorder() {
69 return m_border;
70 }
71
72 /***
73 * DOCUMENT ME!
74 *
75 * @return DOCUMENT ME!
76 */
77 public Insets getInsets() {
78 return m_ins;
79 }
80
81 /***
82 * DOCUMENT ME!
83 *
84 * @param e DOCUMENT ME!
85 */
86 public void itemStateChanged(ItemEvent e) {
87 setBorder(isSelected() ? m_lowered : m_raised);
88 }
89
90 /***
91 * DOCUMENT ME!
92 *
93 * @param e DOCUMENT ME!
94 */
95 public void mouseClicked(MouseEvent e) {
96 }
97
98 /***
99 * DOCUMENT ME!
100 *
101 * @param e DOCUMENT ME!
102 */
103 public void mouseEntered(MouseEvent e) {
104 if (isEnabled()) {
105 m_border = m_highlighted;
106 setBorder(m_highlighted);
107 }
108 }
109
110 /***
111 * DOCUMENT ME!
112 *
113 * @param e DOCUMENT ME!
114 */
115 public void mouseExited(MouseEvent e) {
116 m_border = m_inactive;
117 setBorder(m_inactive);
118 }
119
120 /***
121 * DOCUMENT ME!
122 *
123 * @param e DOCUMENT ME!
124 */
125 public void mousePressed(MouseEvent e) {
126 m_border = m_lowered;
127 setBorder(m_lowered);
128 }
129
130 /***
131 * DOCUMENT ME!
132 *
133 * @param e DOCUMENT ME!
134 */
135 public void mouseReleased(MouseEvent e) {
136 m_border = m_inactive;
137 setBorder(m_inactive);
138 }
139 }