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         }