blob: 9e755143ad177b6ee08a8bd37edc47b5a869f8ff [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Michael Scharf (Wind River) - initial API and implementation
*******************************************************************************/
package org.eclipse.tm.terminal.model;
import java.util.HashMap;
import java.util.Map;
/**
* @author scharf
* Flyweight
* Threadsafe.
*
*/
// TODO add an Object for user data, use weak map to keep track of styles with associated
// user data
public class Style {
private final StyleColor fForground;
private final StyleColor fBackground;
private final boolean fBold;
private final boolean fBlink;
private final boolean fUnderline;
private final boolean fReverse;
private final static Map fgStyles=new HashMap();
private Style(StyleColor forground, StyleColor background, boolean bold, boolean blink, boolean underline, boolean reverse) {
fForground = forground;
fBackground = background;
fBold = bold;
fBlink = blink;
fUnderline = underline;
fReverse = reverse;
}
public static Style getStyle(StyleColor forground, StyleColor background, boolean bold, boolean blink, boolean underline, boolean reverse) {
Style style = new Style(forground,background, bold, blink,underline,reverse);
Style cached;
synchronized (fgStyles) {
cached=(Style) fgStyles.get(style);
if(cached==null) {
cached=style;
fgStyles.put(cached, cached);
}
}
return cached;
}
public static Style getStyle(String forground, String background) {
return getStyle(StyleColor.getStyleColor(forground), StyleColor.getStyleColor(background),false,false,false,false);
}
public static Style getStyle(StyleColor forground, StyleColor background) {
return getStyle(forground, background,false,false,false,false);
}
public Style setForground(StyleColor forground) {
return getStyle(forground,fBackground,fBold,fBlink,fUnderline,fReverse);
}
public Style setBackground(StyleColor background) {
return getStyle(fForground,background,fBold,fBlink,fUnderline,fReverse);
}
public Style setForground(String colorName) {
return getStyle(StyleColor.getStyleColor(colorName),fBackground,fBold,fBlink,fUnderline,fReverse);
}
public Style setBackground(String colorName) {
return getStyle(fForground,StyleColor.getStyleColor(colorName),fBold,fBlink,fUnderline,fReverse);
}
public Style setBold(boolean bold) {
return getStyle(fForground,fBackground,bold,fBlink,fUnderline,fReverse);
}
public Style setBlink(boolean blink) {
return getStyle(fForground,fBackground,fBold,blink,fUnderline,fReverse);
}
public Style setUnderline(boolean underline) {
return getStyle(fForground,fBackground,fBold,fBlink,underline,fReverse);
}
public Style setReverse(boolean reverse) {
return getStyle(fForground,fBackground,fBold,fBlink,fUnderline,reverse);
}
public StyleColor getBackground() {
return fBackground;
}
public boolean isBlink() {
return fBlink;
}
public boolean isBold() {
return fBold;
}
public StyleColor getForground() {
return fForground;
}
public boolean isReverse() {
return fReverse;
}
public boolean isUnderline() {
return fUnderline;
}
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((fBackground == null) ? 0 : fBackground.hashCode());
result = prime * result + (fBlink ? 1231 : 1237);
result = prime * result + (fBold ? 1231 : 1237);
result = prime * result + ((fForground == null) ? 0 : fForground.hashCode());
result = prime * result + (fReverse ? 1231 : 1237);
result = prime * result + (fUnderline ? 1231 : 1237);
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Style other = (Style) obj;
// background == is the same as equals
if (fBackground != other.fBackground)
return false;
if (fBlink != other.fBlink)
return false;
if (fBold != other.fBold)
return false;
if (fForground != other.fForground)
return false;
if (fReverse != other.fReverse)
return false;
if (fUnderline != other.fUnderline)
return false;
return true;
}
public String toString() {
StringBuffer result=new StringBuffer();
result.append("Style(foreground="); //$NON-NLS-1$
result.append(fForground);
result.append(", background="); //$NON-NLS-1$
result.append(fBackground);
if(fBlink)
result.append(", blink"); //$NON-NLS-1$
if(fBold)
result.append(", bold"); //$NON-NLS-1$
if(fBlink)
result.append(", blink"); //$NON-NLS-1$
if(fReverse)
result.append(", reverse"); //$NON-NLS-1$
if(fUnderline)
result.append(", underline"); //$NON-NLS-1$
result.append(")"); //$NON-NLS-1$
return result.toString();
}
}