b33d1f59252705042adf945af8a325bc6785c618
[nikiroo-utils.git] / src / jexer / TCheckbox.java
1 /**
2 * Jexer - Java Text User Interface
3 *
4 * License: LGPLv3 or later
5 *
6 * This module is licensed under the GNU Lesser General Public License
7 * Version 3. Please see the file "COPYING" in this directory for more
8 * information about the GNU Lesser General Public License Version 3.
9 *
10 * Copyright (C) 2015 Kevin Lamonte
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Lesser General Public License
14 * as published by the Free Software Foundation; either version 3 of
15 * the License, or (at your option) any later version.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU Lesser General Public
23 * License along with this program; if not, see
24 * http://www.gnu.org/licenses/, or write to the Free Software
25 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
26 * 02110-1301 USA
27 *
28 * @author Kevin Lamonte [kevin.lamonte@gmail.com]
29 * @version 1
30 */
31 package jexer;
32
33 import jexer.bits.CellAttributes;
34 import jexer.bits.GraphicsChars;
35 import jexer.event.TKeypressEvent;
36 import jexer.event.TMouseEvent;
37 import static jexer.TKeypress.*;
38
39 /**
40 * TCheckbox implements an on/off checkbox.
41 */
42 public final class TCheckbox extends TWidget {
43
44 /**
45 * Checkbox state, true means checked.
46 */
47 private boolean checked = false;
48
49 /**
50 * Label for this checkbox.
51 */
52 private String label;
53
54 /**
55 * Public constructor.
56 *
57 * @param parent parent widget
58 * @param x column relative to parent
59 * @param y row relative to parent
60 * @param label label to display next to (right of) the checkbox
61 * @param checked initial check state
62 */
63 public TCheckbox(final TWidget parent, final int x, final int y,
64 final String label, final boolean checked) {
65
66 // Set parent and window
67 super(parent, x, y, label.length() + 4, 1);
68
69 this.label = label;
70 this.checked = checked;
71
72 setHasCursor(true);
73 setCursorX(1);
74 }
75
76 /**
77 * Returns true if the mouse is currently on the checkbox.
78 *
79 * @param mouse mouse event
80 * @return true if the mouse is currently on the checkbox
81 */
82 private boolean mouseOnCheckbox(final TMouseEvent mouse) {
83 if ((mouse.getY() == 0)
84 && (mouse.getX() >= 0)
85 && (mouse.getX() <= 2)
86 ) {
87 return true;
88 }
89 return false;
90 }
91
92 /**
93 * Draw a checkbox with label.
94 */
95 @Override
96 public void draw() {
97 CellAttributes checkboxColor;
98
99 if (getAbsoluteActive()) {
100 checkboxColor = getTheme().getColor("tcheckbox.active");
101 } else {
102 checkboxColor = getTheme().getColor("tcheckbox.inactive");
103 }
104
105 getScreen().putCharXY(0, 0, '[', checkboxColor);
106 if (checked) {
107 getScreen().putCharXY(1, 0, GraphicsChars.CHECK, checkboxColor);
108 } else {
109 getScreen().putCharXY(1, 0, ' ', checkboxColor);
110 }
111 getScreen().putCharXY(2, 0, ']', checkboxColor);
112 getScreen().putStrXY(4, 0, label, checkboxColor);
113 }
114
115 /**
116 * Handle mouse checkbox presses.
117 *
118 * @param mouse mouse button down event
119 */
120 @Override
121 public void onMouseDown(final TMouseEvent mouse) {
122 if ((mouseOnCheckbox(mouse)) && (mouse.getMouse1())) {
123 // Switch state
124 checked = !checked;
125 }
126 }
127
128 /**
129 * Handle keystrokes.
130 *
131 * @param keypress keystroke event
132 */
133 @Override
134 public void onKeypress(final TKeypressEvent keypress) {
135 if (keypress.equals(kbSpace)) {
136 checked = !checked;
137 return;
138 }
139
140 // Pass to parent for the things we don't care about.
141 super.onKeypress(keypress);
142 }
143
144 }