/* class MultiLineLabel * * Copyright (C) 2001 R M Pitman * * This library 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 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package charva.awt.util; import java.util.Enumeration; import java.util.Vector; import charva.awt.Component; import charva.awt.Dimension; import charva.awt.Point; import charva.awt.Toolkit; import charva.awt.event.KeyEvent; /** * Implements a label that displays multiple lines of text. */ public class MultiLineLabel extends Component { public MultiLineLabel(String[] textarray_) { for (int i=0; i<textarray_.length; i++) _labeltext.add(textarray_[i]); } public Dimension minimumSize() { int width=0, height=0; Enumeration<String> e = _labeltext.elements(); while (e.hasMoreElements()) { String s = (String) e.nextElement(); if (s.length() > width) width = s.length(); height++; } return new Dimension(width, height); } public void draw(Toolkit toolkit) { /* Get the absolute origin of this component. */ Point origin = getLocationOnScreen(); // we'll sort out justification and video-attributes etc later. Enumeration<String> e = _labeltext.elements(); for (int row=0; e.hasMoreElements(); row++) { String s = (String) e.nextElement(); toolkit.setCursor(origin.addOffset(0, row)); toolkit.addString(s, 0, 0); } } /** * This may be wrong, but it'll do for now. */ public Dimension getSize() { return minimumSize(); } public int getWidth() { return getSize().width; } public int getHeight() { return getSize().height; } public synchronized void setText(String[] textarray_) { _labeltext.removeAllElements(); for (int i=0; i<textarray_.length; i++) _labeltext.add(textarray_[i]); /* If this component is already displayed, generate a PaintEvent * and post it onto the queue. */ repaint(); } public String[] getText() { String[] strings = new String[_labeltext.size()]; Enumeration<String> e = _labeltext.elements(); for (int i=0; e.hasMoreElements(); i++) { String s = (String) e.nextElement(); strings[i] = s; } return strings; } /** This component will not receive focus when Tab or Shift-Tab is pressed. */ public boolean isFocusTraversable() { return false; } /** The MultiLineLabel class ignores key events. A MultiLineLabel should * never have input focus anyway. */ public void processKeyEvent(KeyEvent ke_) { } /** * The MultiLineLabel component never gets the keyboard input focus. */ public void requestFocus() {} public void debug(int level_) { for (int i=0; i<level_; i++) System.err.print(" "); System.err.println("MultiLineLabel origin=" + _origin + " size=" + getSize() + " label=" + (String) _labeltext.elementAt(0)); } private Vector<String> _labeltext = new Vector<String>(); //private int _justification = LEFT; public static final int LEFT = 1; public static final int CENTER = 2; public static final int RIGHT = 3; }