/**************************************************************************
OmegaT - Computer Assisted Translation (CAT) tool
with fuzzy matching, translation memory, keyword search,
glossaries, and translation leveraging into updated projects.
Copyright (C) 2010 Alex Buloichik, Aaron Madlon-Kay
2012 Aaron Madlon-Kay
2014 Briac Pilpre
2015 Aaron Madlon-Kay
Home page: http://www.omegat.org/
Support center: http://groups.yahoo.com/group/OmegaT/
This file is part of OmegaT.
OmegaT is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OmegaT 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 General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
**************************************************************************/
package org.omegat.util.gui;
import java.awt.Color;
import java.util.MissingResourceException;
import java.util.logging.Logger;
import javax.swing.UIManager;
import javax.swing.text.AttributeSet;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import org.omegat.util.Log;
import org.omegat.util.OStrings;
import org.omegat.util.Preferences;
/**
* Static attributes for text.
*
* @author Alex Buloichik (alex73mail@gmail.com)
* @author Aaron Madlon-Kay
* @author Briac Pilpre
*/
public final class Styles {
private static final Logger LOGGER = Logger.getLogger(EditorColor.class.getName());
private Styles() {
}
public enum EditorColor {
COLOR_BACKGROUND(UIManager.getColor("TextPane.background")), // Also used for EditorPane.background
COLOR_FOREGROUND(UIManager.getColor("TextPane.foreground")),
COLOR_ACTIVE_SOURCE("#c0ffc0"),
COLOR_ACTIVE_SOURCE_FG((Color) null),
COLOR_ACTIVE_TARGET((Color) null),
COLOR_ACTIVE_TARGET_FG((Color) null),
COLOR_SEGMENT_MARKER_FG((Color) null),
COLOR_SEGMENT_MARKER_BG((Color) null),
COLOR_SOURCE("#c0ffc0"),
COLOR_SOURCE_FG((Color) null),
COLOR_NOTED("#c0ffff"),
COLOR_NOTED_FG((Color) null),
COLOR_UNTRANSLATED("#c0c0ff"),
COLOR_UNTRANSLATED_FG((Color) null),
COLOR_TRANSLATED("#ffff99"),
COLOR_TRANSLATED_FG((Color) null),
COLOR_NON_UNIQUE("#808080"),
COLOR_NON_UNIQUE_BG((Color) null),
COLOR_MOD_INFO((Color) null),
COLOR_MOD_INFO_FG((Color) null),
COLOR_PLACEHOLDER("#969696"),
COLOR_REMOVETEXT_TARGET("#ff0000"),
COLOR_NBSP("#c8c8c8"),
COLOR_WHITESPACE("#808080"),
COLOR_BIDIMARKERS("#c80000"),
COLOR_MARK_COMES_FROM_TM("#fa8072"), // Salmon red
COLOR_MARK_COMES_FROM_TM_XICE("#af76df"), // Purple
COLOR_MARK_COMES_FROM_TM_X100PC("#ff9408"), // Dark Orange
COLOR_MARK_COMES_FROM_TM_XAUTO("#ffd596"), // Orange
COLOR_REPLACE("#0000ff"), // Blue
COLOR_LANGUAGE_TOOLS("#0000ff"),
COLOR_TRANSTIPS("#0000ff"),
COLOR_SPELLCHECK("#ff0000"),
COLOR_MATCHES_CHANGED("#0000ff"),
COLOR_MATCHES_UNCHANGED("#00ff00"),
COLOR_MATCHES_DEL_ACTIVE((Color) null),
COLOR_MATCHES_DEL_INACTIVE((Color) null),
COLOR_MATCHES_INS_ACTIVE("#0000ff"),
COLOR_MATCHES_INS_INACTIVE("#808080"), // Color.gray
COLOR_HYPERLINK("#0000ff"), // Blue
COLOR_NOTIFICATION_MIN("#fff2d4"), // Light orange
COLOR_NOTIFICATION_MAX("#ff9900"), // Dark orange
COLOR_ALIGNER_ACCEPTED("#15bb45"), // Green
COLOR_ALIGNER_NEEDSREVIEW(Color.RED),
COLOR_ALIGNER_HIGHLIGHT(Color.YELLOW),
COLOR_ALIGNER_TABLE_ROW_HIGHLIGHT("#c8c8c8"); // Gray
private static final String DEFAULT_COLOR = "__DEFAULT__";
private Color color;
private Color defaultColor;
EditorColor(Color defaultColor) {
this.color = defaultColor;
this.defaultColor = defaultColor;
String prefColor = Preferences.getPreferenceDefault(name(), null);
if (prefColor != null && !DEFAULT_COLOR.equals(prefColor)) {
try {
this.color = Color.decode(prefColor);
} catch (NumberFormatException e) {
Log.logDebug(LOGGER, "Cannot set custom color for {0}, default to {1}.", name(),
prefColor);
}
}
}
EditorColor(String defaultColor) {
this(Color.decode(defaultColor));
}
public String toHex() {
return String.format("#%02x%02x%02x", color.getRed(), color.getGreen(), color.getBlue());
}
public Color getColor() {
return color;
}
public Color getDefault() {
return defaultColor;
}
public String getDisplayName() {
try {
return OStrings.getString(name());
} catch (MissingResourceException ex) {
Log.log(ex);
return name();
}
}
public void setColor(Color newColor) {
if (newColor == null || newColor.equals(defaultColor)) {
color = defaultColor;
Preferences.setPreference(name(), DEFAULT_COLOR);
} else {
color = newColor;
Preferences.setPreference(name(), toHex());
}
}
}
/**
* Construct required attributes set.
*
* Since we need many attributes combinations, it's not good idea to have
* variable to each attributes set. There is no sense to store created
* attributes in the cache, because calculate hash for cache require about
* 2-3 time more than just create attributes set from scratch.
*
* 1000000 attributes creation require about 305 ms - it's enough fast.
*/
public static AttributeSet createAttributeSet(Color foregroundColor, Color backgroundColor, Boolean bold,
Boolean italic) {
MutableAttributeSet r = new SimpleAttributeSet();
if (foregroundColor != null) {
StyleConstants.setForeground(r, foregroundColor);
}
if (backgroundColor != null) {
StyleConstants.setBackground(r, backgroundColor);
}
if (bold != null) {
StyleConstants.setBold(r, bold);
}
if (italic != null) {
StyleConstants.setItalic(r, italic);
}
return r;
}
public static AttributeSet createAttributeSet(Color foregroundColor, Color backgroundColor, Boolean bold,
Boolean italic, Boolean strikethrough, Boolean underline) {
MutableAttributeSet r = (MutableAttributeSet) createAttributeSet(foregroundColor, backgroundColor, bold,
italic);
if (strikethrough != null) {
StyleConstants.setStrikeThrough(r, strikethrough);
}
if (underline != null) {
StyleConstants.setUnderline(r, underline);
}
return r;
}
}