low-level text cell bits
[fanfix.git] / src / jexer / bits / CellAttributes.java
diff --git a/src/jexer/bits/CellAttributes.java b/src/jexer/bits/CellAttributes.java
new file mode 100644 (file)
index 0000000..5bfa847
--- /dev/null
@@ -0,0 +1,201 @@
+/**
+ * Jexer - Java Text User Interface
+ *
+ * Version: $Id$
+ *
+ * Author: Kevin Lamonte, <a href="mailto:kevin.lamonte@gmail.com">kevin.lamonte@gmail.com</a>
+ *
+ * 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));
+    }
+
+}
+