/* * Jexer - Java Text User Interface * * The MIT License (MIT) * * Copyright (C) 2016 Kevin Lamonte * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * * @author Kevin Lamonte [kevin.lamonte@gmail.com] * @version 1 */ package jexer.bits; /** * This class represents a single text cell on the screen. */ public final class Cell extends CellAttributes { /** * The character at this cell. */ private char ch; /** * Getter for cell character. * * @return cell character */ public char getChar() { return ch; } /** * Setter for cell character. * * @param ch new cell character */ public void setChar(final char ch) { this.ch = ch; } /** * Reset this cell to a blank. */ @Override public void reset() { super.reset(); ch = ' '; } /** * Check to see if this cell has default attributes: white foreground, * black background, no bold/blink/reverse/underline/protect, and a * character value of ' ' (space). * * @return true if this cell has default attributes. */ public boolean isBlank() { if ((getForeColor().equals(Color.WHITE)) && (getBackColor().equals(Color.BLACK)) && !isBold() && !isBlink() && !isReverse() && !isUnderline() && !isProtect() && (ch == ' ') ) { return true; } return false; } /** * Comparison check. All fields must match to return true. * * @param rhs another Cell instance * @return true if all fields are equal */ @Override public boolean equals(final Object rhs) { if (!(rhs instanceof Cell)) { return false; } Cell that = (Cell) rhs; if (ch == that.ch) { return super.equals(rhs); } return false; } /** * Hashcode uses all fields in equals(). * * @return the hash */ @Override public int hashCode() { int A = 13; int B = 23; int hash = A; hash = (B * hash) + super.hashCode(); hash = (B * hash) + (int)ch; return hash; } /** * Set my field values to that's field. * * @param rhs an instance of either Cell or CellAttributes */ @Override public void setTo(final Object rhs) { // Let this throw a ClassCastException CellAttributes thatAttr = (CellAttributes) rhs; super.setTo(thatAttr); if (rhs instanceof Cell) { Cell that = (Cell) rhs; this.ch = that.ch; } } /** * Set my field attr values to that's field. * * @param that a CellAttributes instance */ public void setAttr(final CellAttributes that) { super.setTo(that); } /** * Public constructor sets default values of the cell to blank. * * @see #isBlank() * @see #reset() */ public Cell() { reset(); } /** * Public constructor sets the character. Attributes are the same as * default. * * @param ch character to set to * @see #reset() */ public Cell(final char ch) { reset(); this.ch = ch; } /** * Make human-readable description of this Cell. * * @return displayable String */ @Override public String toString() { return String.format("fore: %d back: %d bold: %s blink: %s ch %c", getForeColor(), getBackColor(), isBold(), isBlink(), ch); } }