1   /*
2    *  WaitDialog.java
3    *
4    *  Copyright (c) 1998-2001, The University of Sheffield.
5    *
6    *  This file is part of GATE (see http://gate.ac.uk/), and is free
7    *  software, licenced under the GNU Library General Public License,
8    *  Version 2, June 1991 (in the distribution as file licence.html,
9    *  and also available at http://gate.ac.uk/gate/licence.html).
10   *
11   *  Valentin Tablan, 12/07/2000
12   *
13   *  $Id: WaitDialog.java,v 1.3 2001/05/16 14:26:28 valyt Exp $
14   */
15  
16  package gate.swing;
17  
18  import java.awt.*;
19  import javax.swing.*;
20  import javax.swing.border.*;
21  
22  /**
23   * A small window used to show messages to the user during processing.
24   * This component is intended as a nicer alternative
25   * to a status bar/progress bar.
26   * The window has its own thread for updating the animated pictures displayed.
27   *
28   */
29  public class WaitDialog extends JWindow implements Runnable {
30  
31    /** Debug flag
32     */
33    private static final boolean DEBUG = false;
34  
35    /**    *
36     */
37    Box centerBox;
38  
39    /**    */
40    public WaitDialog(Frame frame, String title) {
41      super(frame);
42      this.icon = new ImageIcon(ClassLoader.getSystemResource(
43                  "gate/resources/img/working.gif"));
44      this.frame = frame;
45      try  {
46        jbInit();
47        pack();
48      }
49      catch(Exception ex) {
50        ex.printStackTrace();
51      }
52    }
53  
54    /**
55     * Shows the window containing labels for the texts provided as attributes.
56     *
57     * @param texts
58     */
59    public synchronized void showDialog(String[] texts) {
60      centerBox.removeAll();
61  
62      for(int i =0; i < texts.length; i++){
63        centerBox.add(new JLabel(texts[i]));
64      }
65  
66      centerBox.validate();
67      pack();
68  /*
69      Point loc = frame.getLocation();
70      loc.move(frame.getSize().width - getSize().width / 2 ,
71               frame.getSize().height - getSize().height /2 );
72      setLocation(loc);
73  */
74      stop = false;
75      Thread thread = new Thread(Thread.currentThread().getThreadGroup(),
76                                 this,
77                                 "WaitDialog1");
78      thread.setPriority(Thread.MAX_PRIORITY);
79      thread.start();
80      show();
81    }
82  
83    /**
84     * Shows the window containing the components provided as attributes.
85     *
86     * @param components
87     */
88    public synchronized void showDialog(Component[] components) {
89      centerBox.removeAll();
90      for(int i =0; i < components.length; i++){
91        centerBox.add(components[i]);
92      }
93      centerBox.validate();
94      pack();
95  /*
96      Point loc = frame.getLocation();
97      setLocation(loc.x + (frame.getSize().width - getSize().width) / 2 ,
98                  loc.y + (frame.getSize().height - getSize().height) /2);
99  */
100     stop = false;
101     Thread thread = new Thread(Thread.currentThread().getThreadGroup(),
102                                this,
103                                "WaitDialog2");
104     thread.setPriority(Thread.MAX_PRIORITY);
105     thread.start();
106     show();
107   }
108 
109   /**    */
110   void jbInit() throws Exception {
111     JPanel centerPanel = new JPanel();
112     Container content = getContentPane();
113     centerBox = Box.createVerticalBox();
114     centerPanel.setLayout(borderLayout1);
115     //centerPanel.setBorder(new LineBorder(Color.darkGray, 2));
116 //    centerPanel.setBackground(Color.white);
117 //    centerBox.setBackground(Color.white);
118     picture = new JLabel(icon);
119     picture.setOpaque(false);
120     centerPanel.add(centerBox, BorderLayout.CENTER);
121     centerPanel.add(picture, BorderLayout.WEST);
122     centerPanel.add(Box.createVerticalStrut(5), BorderLayout.NORTH);
123     centerPanel.add(Box.createVerticalStrut(5), BorderLayout.SOUTH);
124     centerPanel.add(Box.createHorizontalStrut(8), BorderLayout.EAST);
125     getContentPane().add(centerPanel, BorderLayout.CENTER);
126     centerPanel.setOpaque(false);
127   }
128 
129   /**
130    * Hides the window.
131    *
132    */
133   public void goAway() {
134     stop = true;
135   }
136 
137   /**    *
138    */
139   public void run() {
140     while(!stop){
141       try{
142         Thread.sleep(300);
143         centerBox.validate();
144         pack();
145         /*
146         Point loc = frame.getLocation();
147         setLocation(loc.x + (frame.getSize().width - getSize().width) / 2 ,
148                     loc.y + (frame.getSize().height - getSize().height) /2);
149         */
150         picture.paintImmediately(picture.getVisibleRect());
151       }catch(InterruptedException ie){}
152     }
153     this.setVisible(false);
154   }
155 
156 
157   boolean stop = false;
158 
159   BorderLayout borderLayout1 = new BorderLayout();
160 
161   Frame frame;
162 
163   JLabel picture;
164 
165   Icon icon;
166 
167 } // class WaitDialog
168