2 * Jexer - Java Text User Interface
4 * The MIT License (MIT)
6 * Copyright (C) 2019 Kevin Lamonte
8 * Permission is hereby granted, free of charge, to any person obtaining a
9 * copy of this software and associated documentation files (the "Software"),
10 * to deal in the Software without restriction, including without limitation
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
15 * The above copyright notice and this permission notice shall be included in
16 * all copies or substantial portions of the Software.
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24 * DEALINGS IN THE SOFTWARE.
26 * @author Kevin Lamonte [kevin.lamonte@gmail.com]
32 * The attributes used by a Cell: color, bold, blink, etc.
34 public class CellAttributes
{
36 // ------------------------------------------------------------------------
37 // Variables --------------------------------------------------------------
38 // ------------------------------------------------------------------------
48 private boolean blink
;
53 private boolean reverse
;
56 * Underline attribute.
58 private boolean underline
;
61 * Protected attribute.
63 private boolean protect
;
66 * Foreground color. Color.WHITE, Color.RED, etc.
68 private Color foreColor
;
71 * Background color. Color.WHITE, Color.RED, etc.
73 private Color backColor
;
76 * Foreground color as 24-bit RGB value. Negative value means not set.
78 private int foreColorRGB
= -1;
81 * Background color as 24-bit RGB value. Negative value means not set.
83 private int backColorRGB
= -1;
85 // ------------------------------------------------------------------------
86 // Constructors -----------------------------------------------------------
87 // ------------------------------------------------------------------------
90 * Public constructor sets default values of the cell to white-on-black,
91 * no bold/blink/reverse/underline/protect.
95 public CellAttributes() {
100 * Public constructor makes a copy from another instance.
102 * @param that another CellAttributes instance
105 public CellAttributes(final CellAttributes that
) {
109 // ------------------------------------------------------------------------
110 // CellAttributes ---------------------------------------------------------
111 // ------------------------------------------------------------------------
118 public final boolean isBold() {
125 * @param bold new bold value
127 public final void setBold(final boolean bold
) {
134 * @return blink value
136 public final boolean isBlink() {
143 * @param blink new blink value
145 public final void setBlink(final boolean blink
) {
150 * Getter for reverse.
152 * @return reverse value
154 public final boolean isReverse() {
159 * Setter for reverse.
161 * @param reverse new reverse value
163 public final void setReverse(final boolean reverse
) {
164 this.reverse
= reverse
;
168 * Getter for underline.
170 * @return underline value
172 public final boolean isUnderline() {
177 * Setter for underline.
179 * @param underline new underline value
181 public final void setUnderline(final boolean underline
) {
182 this.underline
= underline
;
186 * Getter for protect.
188 * @return protect value
190 public final boolean isProtect() {
195 * Setter for protect.
197 * @param protect new protect value
199 public final void setProtect(final boolean protect
) {
200 this.protect
= protect
;
204 * Getter for foreColor.
206 * @return foreColor value
208 public final Color
getForeColor() {
213 * Setter for foreColor.
215 * @param foreColor new foreColor value
217 public final void setForeColor(final Color foreColor
) {
218 this.foreColor
= foreColor
;
222 * Getter for backColor.
224 * @return backColor value
226 public final Color
getBackColor() {
231 * Setter for backColor.
233 * @param backColor new backColor value
235 public final void setBackColor(final Color backColor
) {
236 this.backColor
= backColor
;
240 * Getter for foreColor RGB.
242 * @return foreColor value. Negative means unset.
244 public final int getForeColorRGB() {
249 * Setter for foreColor RGB.
251 * @param foreColorRGB new foreColor RGB value
253 public final void setForeColorRGB(final int foreColorRGB
) {
254 this.foreColorRGB
= foreColorRGB
;
258 * Getter for backColor RGB.
260 * @return backColor value. Negative means unset.
262 public final int getBackColorRGB() {
267 * Setter for backColor RGB.
269 * @param backColorRGB new backColor RGB value
271 public final void setBackColorRGB(final int backColorRGB
) {
272 this.backColorRGB
= backColorRGB
;
276 * See if this cell uses RGB or ANSI colors.
278 * @return true if this cell has a RGB color
280 public final boolean isRGB() {
281 return (foreColorRGB
>= 0) || (backColorRGB
>= 0);
285 * Set to default: white foreground on black background, no
286 * bold/underline/blink/rever/protect.
288 public void reset() {
294 foreColor
= Color
.WHITE
;
295 backColor
= Color
.BLACK
;
301 * Comparison check. All fields must match to return true.
303 * @param rhs another CellAttributes instance
304 * @return true if all fields are equal
307 public boolean equals(final Object rhs
) {
308 if (!(rhs
instanceof CellAttributes
)) {
312 CellAttributes that
= (CellAttributes
) rhs
;
313 return ((foreColor
== that
.foreColor
)
314 && (backColor
== that
.backColor
)
315 && (foreColorRGB
== that
.foreColorRGB
)
316 && (backColorRGB
== that
.backColorRGB
)
317 && (bold
== that
.bold
)
318 && (reverse
== that
.reverse
)
319 && (underline
== that
.underline
)
320 && (blink
== that
.blink
)
321 && (protect
== that
.protect
));
325 * Hashcode uses all fields in equals().
330 public int hashCode() {
334 hash
= (B
* hash
) + (bold ?
1 : 0);
335 hash
= (B
* hash
) + (blink ?
1 : 0);
336 hash
= (B
* hash
) + (underline ?
1 : 0);
337 hash
= (B
* hash
) + (reverse ?
1 : 0);
338 hash
= (B
* hash
) + (protect ?
1 : 0);
339 hash
= (B
* hash
) + foreColor
.hashCode();
340 hash
= (B
* hash
) + backColor
.hashCode();
341 hash
= (B
* hash
) + foreColorRGB
;
342 hash
= (B
* hash
) + backColorRGB
;
347 * Set my field values to that's field.
349 * @param rhs another CellAttributes instance
351 public void setTo(final Object rhs
) {
352 CellAttributes that
= (CellAttributes
) rhs
;
354 this.bold
= that
.bold
;
355 this.blink
= that
.blink
;
356 this.reverse
= that
.reverse
;
357 this.underline
= that
.underline
;
358 this.protect
= that
.protect
;
359 this.foreColor
= that
.foreColor
;
360 this.backColor
= that
.backColor
;
361 this.foreColorRGB
= that
.foreColorRGB
;
362 this.backColorRGB
= that
.backColorRGB
;
366 * Make human-readable description of this CellAttributes.
368 * @return displayable String
371 public String
toString() {
372 if ((foreColorRGB
>= 0) || (backColorRGB
>= 0)) {
373 return String
.format("RGB: #%06x on #%06x",
374 (foreColorRGB
& 0xFFFFFF),
375 (backColorRGB
& 0xFFFFFF));
377 return String
.format("%s%s%s on %s", (bold
== true ?
"bold " : ""),
378 (blink
== true ?
"blink " : ""), foreColor
, backColor
);