/** * Jexer - Java Text User Interface * * Version: $Id$ * * Author: Kevin Lamonte, kevin.lamonte@gmail.com * * License: LGPLv3 or later * * Copyright: This module is licensed under the GNU Lesser General * Public License Version 3. Please see the file "COPYING" in this * directory for more information about the GNU Lesser General Public * License Version 3. * * Copyright (C) 2015 Kevin Lamonte * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 3 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, see * http://www.gnu.org/licenses/, or write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA */ package jexer.bits; /** * The attributes used by a Cell: color, bold, blink, etc. */ public class CellAttributes { /** * Bold */ public boolean bold; /** * Blink */ public boolean blink; /** * Reverse */ public boolean reverse; /** * Underline */ public boolean underline; /** * Protected */ public boolean protect; /** * Foreground color. Color.WHITE, Color.RED, etc. */ public Color foreColor; /** * Background color. Color.WHITE, Color.RED, etc. */ public Color backColor; /** * Set to default not-bold, white foreground on black background. */ public void reset() { bold = false; blink = false; reverse = false; protect = false; underline = false; foreColor = Color.WHITE; backColor = Color.BLACK; } /** * Public constructor */ public CellAttributes() { reset(); } /** * Comparison. All fields must match to return true. */ @Override public boolean equals(Object rhs) { if (!(rhs instanceof CellAttributes)) { return false; } CellAttributes that = (CellAttributes)rhs; return ((bold == that.bold) && (blink == that.blink) && (reverse == that.reverse) && (underline == that.underline) && (protect == that.protect) && (foreColor == that.foreColor) && (backColor == that.backColor)); } /** * Set my field values to that's field */ public void setTo(Object rhs) { CellAttributes that = (CellAttributes)rhs; this.bold = that.bold; this.blink = that.blink; this.reverse = that.reverse; this.underline = that.underline; this.protect = that.protect; this.foreColor = that.foreColor; this.backColor = that.backColor; } /** * Convert enum to string * * @param color Color.RED, Color.BLUE, etc. * @return "red", "blue", etc. */ static public String stringFromColor(Color color) { if (color.equals(Color.BLACK)) { return "black"; } else if (color.equals(Color.WHITE)) { return "white"; } else if (color.equals(Color.RED)) { return "red"; } else if (color.equals(Color.CYAN)) { return "cyan"; } else if (color.equals(Color.GREEN)) { return "green"; } else if (color.equals(Color.MAGENTA)) { return "magenta"; } else if (color.equals(Color.BLUE)) { return "blue"; } else if (color.equals(Color.YELLOW)) { return "yellow"; } throw new IllegalArgumentException("Invalid Color value: " + color.value); } /** * Convert string to enum * * @param color "red", "blue", etc. * @return Color.RED, Color.BLUE, etc. */ static private Color colorFromString(String color) { switch (color.toLowerCase()) { case "black": return Color.BLACK; case "white": return Color.WHITE; case "red": return Color.RED; case "cyan": return Color.CYAN; case "green": return Color.GREEN; case "magenta": return Color.MAGENTA; case "blue": return Color.BLUE; case "yellow": return Color.YELLOW; case "brown": return Color.YELLOW; default: // Let unknown strings become white return Color.WHITE; } } /** * Make human-readable description of this CellAttributes */ @Override public String toString() { return String.format("%s%s on %s", bold ? "bold " : "", stringFromColor(foreColor), stringFromColor(backColor)); } }