// $Id: HegemonDisplayProperties.java,v 1.3 1999/06/05 23:29:12 greear Exp $
// $Revision: 1.3 $ $Author: greear $ $Date: 1999/06/05 23:29:12 $
//
//Hegemon Client Code: Java Client for ScryMUD Server Code
//Copyright (C) 1998 Ben Greear
//
//This program 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 2
//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 General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// To contact the Author, Ben Greear: greear@cyberhighway.net, (preferred)
// greearb@agcs.com
//
import java.util.*;
import java.awt.*;
class HegemonDisplayProperties extends Object {
HegemonManager hm = null;
Stack fonts;
Stack colors;
Stack modes; // PRE, NORMAL....un-used right now
Stack text_sizes;
Stack context_modes; // Help Page, Mstat, normal...used in InputFilter
Graphics g;
Integer mode;
Font font;
Color color;
Integer text_size;
Integer context_mode;
Font dflt_font;
Color dflt_color;
int tabs = 0;
public static final Integer MODE_PRE = new Integer(0);
public static final Integer MODE_NORMAL = new Integer(1);
public HegemonDisplayProperties(HegemonManager h, Graphics gr) {
super();
hm = h;
fonts = new Stack();
colors = new Stack();
text_sizes = new Stack();
modes = new Stack();
context_modes = new Stack();
dflt_font = font = new Font("Dialog", Font.PLAIN, 12);
if (font == null) {
dflt_font = font = new Font("curier", Font.PLAIN, 12);
Log.instance().err("ERROR: couldn't get a default font, trying Dialog font.\n");
}//if
if (gr != null) {
g = gr;
}//else
if (hm != null) {
color = dflt_color = hm.getColorSelectionMgr().getOtherSelection();
}
else {
color = dflt_color = new Color(0, 0, 0);
}
//Log.instance().dbg("Other Color: " + color);
text_size = new Integer(4);
mode = MODE_PRE;
context_mode = HegemonInputFilter.MODE_NORMAL;
context_modes.push(context_mode);
fonts.push(font);
colors.push(color);
text_sizes.push(text_size);
modes.push(MODE_NORMAL);
modes.push(mode);
}//constructor
// Reset things to an initial state...
public void reset() {
//Log.it("Resetting the Properties..");
fonts = new Stack();
colors = new Stack();
text_sizes = new Stack();
modes = new Stack();
context_modes = new Stack();
dflt_font = font = new Font("Dialog", Font.PLAIN, 12);
if (font == null) {
dflt_font = font = new Font("courier", Font.PLAIN, 12);
Log.instance().err("ERROR: couldn't get Dialog font, trying courier.\n");
}//if
if (hm != null) {
color = dflt_color = hm.getColorSelectionMgr().getOtherSelection();
}
else {
color = dflt_color = new Color(0, 0, 0);
}
//Log.it("OtherColor: " + color);
text_size = new Integer(4);
mode = MODE_PRE;
context_mode = HegemonInputFilter.MODE_NORMAL;
context_modes.push(context_mode);
fonts.push(font);
colors.push(color);
text_sizes.push(text_size);
modes.push(MODE_NORMAL);
modes.push(mode);
}//reset
final public int getTabs() {
return tabs;
}
final public Integer getTextSize() {
return text_size;
}
final public Integer getContextMode() {
return context_mode;
}
public int figurePointSize(int i) {
return Math.min(Math.max(5, (20 - i*2)), 20);
}
public FontMetrics getFontMetrics() {
if (g != null) {
g.setFont(getFont());
return g.getFontMetrics();
}
return null;
}
public void setGraphics(Graphics gr) {
//Log.it("in setGraphics: font: " + gr.getFont());
g = gr;
}//setGraphics
public Graphics getGraphics() {
return g;
}//getGraphics
public void pushColor(Color c) {
//Log.it("In pushColor: olc:" + color + " new: " + c);
if (colors.size() < 50) {
//Log.it("Pushed it.");
colors.push(c);
}
color = c;
}//pushColor
public void popColor() {
//Log.it("In popColor: " + color);
if (colors.size() > 1) {
colors.pop();
color = (Color)colors.peek();
//Log.it("Popped it: " + color);
}
}//popColor
public void pushTextSize(Integer i) {
if (text_sizes.size() < 50) {
text_sizes.push(i);
if (i != text_size) {
String name = font.getName();
int style = font.getStyle();
int pt_size = figurePointSize(i.intValue());
Font new_fnt = new Font(name, style, pt_size);
if (new_fnt != null) {
pushFont(new_fnt);
}
else {
pushFont(font);
}
}//if
else {
pushFont(font);
}
}//if
text_size = i;
}//pushTextSize
public void popTextSize() {
if (text_sizes.size() > 1) {
text_sizes.pop();
text_size = (Integer)(text_sizes.peek());
popFont(); // because we pushed one earlier
}
}//popColor
public void pushContextMode(Integer i) {
if (context_modes.size() < 50) {
context_modes.push(i);
}
context_mode = i;
}//pushTextSize
public void popContextMode() {
if (context_modes.size() > 1) {
context_modes.pop();
context_mode = (Integer)(context_modes.peek());
}
}//popColor
public void pushMode(Integer i) {
if ((i == MODE_PRE) || (i == MODE_NORMAL)) {
if (modes.size() < 50) {
modes.push(i);
}
mode = i;
}
}//pushMode
public void popMode() {
if (modes.size() > 1) {
modes.pop();
mode = (Integer)(modes.peek());
}
}//popMode
public void pushTab() {
if (tabs < 5)
tabs++;
}//pushTab
public void popTab() {
if (tabs > 0)
tabs--;
}//popTab
public void pushFont(Font f) {
Log.instance().dbg("DisplayProperties.pushFont: " + font.getName());
if (fonts.size() < 50) {
fonts.push(f);
}
font = f;
g.setFont(f);
}//pushFont
public void popFont() {
if (fonts.size() > 1) {
fonts.pop();
font = (Font)fonts.peek();
g.setFont(font);
}
}//popFont
public Color getColor() {
return color;
}
public Font getFont() {
return font;
}
public boolean isModePRE() {
if (mode == MODE_PRE)
return true;
return false;
}
public boolean isModeNormal() {
if (mode == MODE_NORMAL)
return true;
return false;
}
}//HegemonDisplayProperties