1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.support.components;
14
15 import java.awt.BorderLayout;
16 import java.awt.HeadlessException;
17 import java.awt.event.ActionEvent;
18
19 import javax.swing.AbstractAction;
20 import javax.swing.BorderFactory;
21 import javax.swing.JButton;
22 import javax.swing.JDialog;
23 import javax.swing.JLabel;
24 import javax.swing.JPanel;
25 import javax.swing.JProgressBar;
26
27 import com.eviware.soapui.support.UISupport;
28 import com.eviware.soapui.support.swing.SwingWorkerDelegator;
29 import com.eviware.x.dialogs.Worker;
30 import com.eviware.x.dialogs.XProgressDialog;
31 import com.eviware.x.dialogs.XProgressMonitor;
32 import com.jgoodies.forms.builder.ButtonBarBuilder;
33
34 /***
35 * Dialog for creating progress-dialogs
36 *
37 * @author Ole.Matzura
38 */
39
40 public class ProgressDialog extends JDialog implements XProgressDialog, XProgressMonitor
41 {
42 private JProgressBar progressBar;
43 private JLabel progressLabel;
44 private JButton cancelButton;
45 private Worker worker;
46
47 public ProgressDialog(String title, String label, int length, String initialValue, boolean allowCancel ) throws HeadlessException
48 {
49 super(UISupport.getMainFrame(), title, true);
50
51 setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
52
53 progressBar = new JProgressBar(0, length);
54 JPanel panel = UISupport.createProgressBarPanel( progressBar, 10, true );
55 progressBar.setString(initialValue );
56
57 getContentPane().setLayout(new BorderLayout());
58 progressLabel = new JLabel(label);
59 progressLabel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10));
60
61 getContentPane().add(progressLabel, BorderLayout.NORTH);
62 getContentPane().add(panel, BorderLayout.CENTER);
63
64 if( allowCancel )
65 {
66 ButtonBarBuilder builder = ButtonBarBuilder.createLeftToRightBuilder();
67 builder.addGlue();
68 cancelButton = new JButton( new CancelAction());
69 builder.addFixed( cancelButton );
70 builder.addGlue();
71 builder.setBorder( BorderFactory.createEmptyBorder(0, 10, 10, 10) );
72 getContentPane().add( builder.getPanel(), BorderLayout.SOUTH );
73 }
74
75 pack();
76 }
77
78 public void run(Worker worker)
79 {
80 this.worker = worker;
81 SwingWorkerDelegator swingWorker = new SwingWorkerDelegator(this, this, worker)
82 {
83 @Override
84 public void finished()
85 {
86 super.finished();
87 ProgressDialog.this.worker = null;
88 }
89 };
90
91 swingWorker.start();
92 setVisible( true );
93 }
94
95
96
97
98 public void setProgress( int value, String string )
99 {
100 progressBar.setValue( value );
101 progressBar.setString( string );
102 }
103
104
105
106
107 public void setVisible( boolean visible )
108 {
109 if( visible == true )
110 {
111 UISupport.centerDialog( this );
112 }
113
114 super.setVisible( visible );
115 }
116
117 private class CancelAction extends AbstractAction
118 {
119 public CancelAction()
120 {
121 super( "Cancel" );
122 }
123
124 public void actionPerformed(ActionEvent e)
125 {
126 worker.onCancel();
127 }
128 }
129
130 public void setCancelLabel(String label)
131 {
132 if( cancelButton != null )
133 cancelButton.setText( label );
134 }
135 }