001 package com.croftsoft.core.gui;
002
003 import com.croftsoft.core.lang.*;
004 import java.awt.*;
005
006 /*********************************************************************
007 * @version
008 * 1997-04-08
009 * @author
010 * <A HREF="http://www.alumni.caltech.edu/~croft">David W. Croft</A>
011 *********************************************************************/
012
013 public class TextDialog extends Dialog {
014 //////////////////////////////////////////////////////////////////////
015 //////////////////////////////////////////////////////////////////////
016
017 private static final int WIDTH_PAD = 13; // kludge
018
019 private Frame parent;
020 private Label [ ] labels;
021 private Dimension size_old;
022
023 //////////////////////////////////////////////////////////////////////
024 //////////////////////////////////////////////////////////////////////
025
026 public TextDialog (
027 Frame parent,
028 String title,
029 boolean modal,
030 String [ ] lines ) {
031 //////////////////////////////////////////////////////////////////////
032 super ( parent, title, modal );
033 this.parent = parent;
034
035 setBackground ( Color.lightGray );
036 setLayout ( null );
037 setResizable ( false );
038
039 labels = new Label [ lines.length ];
040 for ( int i = 0; i < labels.length; i++ ) {
041 add ( labels [ i ] = new Label ( lines [ i ], Label.CENTER ) );
042 }
043
044 show ( );
045 }
046
047 public TextDialog (
048 Frame parent,
049 String title,
050 boolean modal,
051 String line ) {
052 //////////////////////////////////////////////////////////////////////
053 this ( parent, title, modal, StringLib.toStringArray ( line ) );
054 }
055
056 public void layout ( ) {
057 //////////////////////////////////////////////////////////////////////
058 int label_width = 0;
059 int label_height = 0;
060 for ( int i = 0; i < labels.length; i++ ) {
061 Dimension preferredSize = labels [ i ].preferredSize ( );
062 label_width = ( label_width > preferredSize.width )
063 ? label_width : preferredSize.width;
064 label_height = ( label_height > preferredSize.height )
065 ? label_height : preferredSize.height;
066 }
067 Insets insets = insets ( );
068
069 for ( int i = 0; i < labels.length; i++ ) {
070 labels [ i ].reshape ( insets.left, insets.top + i * label_height,
071 label_width, label_height );
072 }
073
074 Dimension desired = new Dimension (
075 label_width + insets.left + insets.right + WIDTH_PAD,
076 labels.length * label_height + insets.top + insets.bottom );
077 Dimension size = size ( );
078 if ( ( size_old == null ) || ( size.width != desired.width )
079 || ( size.height != desired.height ) ) {
080 size_old = size;
081 WindowLib.centerAboveParent ( this, desired );
082 }
083 }
084
085 public boolean handleEvent ( Event event ) {
086 //////////////////////////////////////////////////////////////////////
087 if ( event.id == Event.WINDOW_DESTROY ) {
088 dispose ( );
089 return true;
090 }
091 return super.handleEvent ( event );
092 }
093
094 //////////////////////////////////////////////////////////////////////
095 //////////////////////////////////////////////////////////////////////
096 }