1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.log4j.chainsaw;
18
19 import javax.swing.*;
20 import javax.swing.border.BevelBorder;
21 import javax.swing.border.Border;
22 import javax.swing.border.SoftBevelBorder;
23 import java.awt.*;
24 import java.awt.event.ItemEvent;
25 import java.awt.event.ItemListener;
26 import java.awt.event.MouseEvent;
27 import java.awt.event.MouseListener;
28
29
30 /**
31 * A better button class that has nice roll over effects.
32 * <p>
33 * This class is borrowed (quite heavily, but with modifications)
34 * from the "Swing: Second Edition"
35 * book by Matthew Robinson and Pavel Vorobeiv. An excellent book on Swing.
36 *
37 * @author Matthew Robinson
38 * @author Pavel Vorobeiv
39 * @author Paul Smith <psmith@apache.org>
40 */
41 class SmallToggleButton extends JToggleButton implements ItemListener,
42 MouseListener {
43 protected Border m_highlighted = new SoftBevelBorder(BevelBorder.RAISED);
44 protected Border m_raised = BorderFactory.createEmptyBorder(3, 3, 3, 3);
45 protected Border m_inactive = m_raised;
46 protected Border m_border = m_inactive;
47 protected Border m_lowered = new SoftBevelBorder(BevelBorder.LOWERED);
48 protected Insets m_ins = new Insets(4, 4, 4, 4);
49
50 public SmallToggleButton() {
51 super();
52 setHorizontalAlignment(SwingConstants.CENTER);
53 setBorder(isSelected() ? m_lowered : m_raised);
54 setMargin(m_ins);
55 setRequestFocusEnabled(false);
56 addItemListener(this);
57 addMouseListener(this);
58 setText("");
59 }
60
61 public SmallToggleButton(Action action) {
62 this();
63 setAction(action);
64 }
65
66 /**
67 * DOCUMENT ME!
68 *
69 * @return DOCUMENT ME!
70 */
71 public float getAlignmentY() {
72 return 0.5f;
73 }
74
75 /**
76 * DOCUMENT ME!
77 *
78 * @return DOCUMENT ME!
79 */
80 public Border getBorder() {
81 return m_border;
82 }
83
84 /**
85 * DOCUMENT ME!
86 *
87 * @return DOCUMENT ME!
88 */
89 public Insets getInsets() {
90 return m_ins;
91 }
92
93 /**
94 * DOCUMENT ME!
95 *
96 * @param e DOCUMENT ME!
97 */
98 public void itemStateChanged(ItemEvent e) {
99 setBorder(isSelected() ? m_lowered : m_raised);
100 }
101
102 /**
103 * DOCUMENT ME!
104 *
105 * @param e DOCUMENT ME!
106 */
107 public void mouseClicked(MouseEvent e) {
108 }
109
110 /**
111 * DOCUMENT ME!
112 *
113 * @param e DOCUMENT ME!
114 */
115 public void mouseEntered(MouseEvent e) {
116 if (isEnabled()) {
117 m_border = m_highlighted;
118 setBorder(m_highlighted);
119 }
120 }
121
122 /**
123 * DOCUMENT ME!
124 *
125 * @param e DOCUMENT ME!
126 */
127 public void mouseExited(MouseEvent e) {
128 m_border = m_inactive;
129 setBorder(m_inactive);
130 }
131
132 /**
133 * DOCUMENT ME!
134 *
135 * @param e DOCUMENT ME!
136 */
137 public void mousePressed(MouseEvent e) {
138 m_border = m_lowered;
139 setBorder(m_lowered);
140 }
141
142 /**
143 * DOCUMENT ME!
144 *
145 * @param e DOCUMENT ME!
146 */
147 public void mouseReleased(MouseEvent e) {
148 m_border = m_inactive;
149 setBorder(m_inactive);
150 }
151 }