LICENSE CHANGED TO MIT
[nikiroo-utils.git] / src / jexer / bits / Cell.java
CommitLineData
daa4106c 1/*
624ce48e
KL
2 * Jexer - Java Text User Interface
3 *
e16dda65 4 * The MIT License (MIT)
624ce48e 5 *
e16dda65 6 * Copyright (C) 2016 Kevin Lamonte
624ce48e 7 *
e16dda65
KL
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:
624ce48e 14 *
e16dda65
KL
15 * The above copyright notice and this permission notice shall be included in
16 * all copies or substantial portions of the Software.
624ce48e 17 *
e16dda65
KL
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.
7b5261bc
KL
25 *
26 * @author Kevin Lamonte [kevin.lamonte@gmail.com]
27 * @version 1
624ce48e
KL
28 */
29package jexer.bits;
30
31/**
7b5261bc 32 * This class represents a single text cell on the screen.
624ce48e 33 */
2b9c27db 34public final class Cell extends CellAttributes {
624ce48e
KL
35
36 /**
7b5261bc
KL
37 * The character at this cell.
38 */
39 private char ch;
40
41 /**
42 * Getter for cell character.
43 *
44 * @return cell character
45 */
2b9c27db 46 public char getChar() {
7b5261bc
KL
47 return ch;
48 }
49
50 /**
51 * Setter for cell character.
52 *
53 * @param ch new cell character
624ce48e 54 */
2b9c27db 55 public void setChar(final char ch) {
7b5261bc
KL
56 this.ch = ch;
57 }
624ce48e
KL
58
59 /**
7b5261bc 60 * Reset this cell to a blank.
624ce48e
KL
61 */
62 @Override
2b9c27db 63 public void reset() {
7b5261bc
KL
64 super.reset();
65 ch = ' ';
624ce48e
KL
66 }
67
68 /**
7b5261bc
KL
69 * Check to see if this cell has default attributes: white foreground,
70 * black background, no bold/blink/reverse/underline/protect, and a
71 * character value of ' ' (space).
72 *
73 * @return true if this cell has default attributes.
624ce48e 74 */
2b9c27db 75 public boolean isBlank() {
7b5261bc
KL
76 if ((getForeColor().equals(Color.WHITE))
77 && (getBackColor().equals(Color.BLACK))
7c870d89
KL
78 && !isBold()
79 && !isBlink()
80 && !isReverse()
81 && !isUnderline()
82 && !isProtect()
7b5261bc
KL
83 && (ch == ' ')
84 ) {
85 return true;
86 }
624ce48e 87
7b5261bc 88 return false;
624ce48e
KL
89 }
90
91 /**
7b5261bc
KL
92 * Comparison check. All fields must match to return true.
93 *
94 * @param rhs another Cell instance
95 * @return true if all fields are equal
624ce48e
KL
96 */
97 @Override
2b9c27db 98 public boolean equals(final Object rhs) {
7b5261bc
KL
99 if (!(rhs instanceof Cell)) {
100 return false;
101 }
624ce48e 102
7b5261bc
KL
103 Cell that = (Cell) rhs;
104 return (super.equals(rhs)
105 && (ch == that.ch));
624ce48e
KL
106 }
107
e826b451
KL
108 /**
109 * Hashcode uses all fields in equals().
110 *
111 * @return the hash
112 */
113 @Override
114 public int hashCode() {
115 int A = 13;
116 int B = 23;
117 int hash = A;
118 hash = (B * hash) + super.hashCode();
119 hash = (B * hash) + (int)ch;
120 return hash;
121 }
122
624ce48e 123 /**
7b5261bc
KL
124 * Set my field values to that's field.
125 *
126 * @param rhs an instance of either Cell or CellAttributes
624ce48e
KL
127 */
128 @Override
2b9c27db 129 public void setTo(final Object rhs) {
7b5261bc
KL
130 // Let this throw a ClassCastException
131 CellAttributes thatAttr = (CellAttributes) rhs;
132 super.setTo(thatAttr);
624ce48e 133
7b5261bc
KL
134 if (rhs instanceof Cell) {
135 Cell that = (Cell) rhs;
136 this.ch = that.ch;
137 }
624ce48e
KL
138 }
139
140 /**
7b5261bc
KL
141 * Set my field attr values to that's field.
142 *
143 * @param that a CellAttributes instance
624ce48e 144 */
2b9c27db 145 public void setAttr(final CellAttributes that) {
7b5261bc 146 super.setTo(that);
624ce48e
KL
147 }
148
149 /**
7b5261bc
KL
150 * Public constructor sets default values of the cell to blank.
151 *
152 * @see #isBlank()
153 * @see #reset()
624ce48e
KL
154 */
155 public Cell() {
7b5261bc 156 reset();
624ce48e
KL
157 }
158
159 /**
7b5261bc
KL
160 * Public constructor sets the character. Attributes are the same as
161 * default.
624ce48e
KL
162 *
163 * @param ch character to set to
7b5261bc 164 * @see #reset()
624ce48e 165 */
7b5261bc
KL
166 public Cell(final char ch) {
167 reset();
168 this.ch = ch;
624ce48e
KL
169 }
170
171 /**
7b5261bc
KL
172 * Make human-readable description of this Cell.
173 *
174 * @return displayable String
624ce48e
KL
175 */
176 @Override
2b9c27db 177 public String toString() {
7b5261bc 178 return String.format("fore: %d back: %d bold: %s blink: %s ch %c",
7c870d89 179 getForeColor(), getBackColor(), isBold(), isBlink(), ch);
624ce48e
KL
180 }
181}