/* * File : ProgressDialog.java * Created : 10-dec-2002 14:40 * By : fbusquets * * JClic - Authoring and playing system for educational activities * * Copyright (C) 2000 - 2005 Francesc Busquets & Departament * d'Educacio de la Generalitat de Catalunya * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details (see the LICENSE file). */ package edu.xtec.util; import javax.swing.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.io.InputStream; /** * * @author Francesc Busquets (fbusquets@xtec.net) */ public class ProgressDialog extends ExtendedJDialog implements ProgressInputStream.ProgressInputStreamListener{ protected Options options=null; protected SwingWorker worker=null; protected boolean progressActive=false; protected boolean cancellable=false; protected boolean saving=false; /** Creates new form ProgressDialog */ public ProgressDialog(JComponent parent, Options options) { //super(parent, "", true); super(parent, "", true); this.options=options; initComponents(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() {//GEN-BEGIN:initComponents java.awt.GridBagConstraints gridBagConstraints; mainPanel = new javax.swing.JPanel(); label = new javax.swing.JLabel(); fileLabel = new javax.swing.JLabel(); progressBar = new javax.swing.JProgressBar(); cancelButton = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE); mainPanel.setLayout(new java.awt.GridBagLayout()); label.setText(" "); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(12, 5, 0, 5); mainPanel.add(label, gridBagConstraints); fileLabel.setText(" "); fileLabel.setFont(new java.awt.Font("Dialog", 0, 12)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5); mainPanel.add(fileLabel, gridBagConstraints); progressBar.setPreferredSize(new java.awt.Dimension(250, 22)); progressBar.setStringPainted(true); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); mainPanel.add(progressBar, gridBagConstraints); cancelButton.setText(options.getMsg("CANCEL")); cancelButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cancelButtonActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); mainPanel.add(cancelButton, gridBagConstraints); getContentPane().add(mainPanel, java.awt.BorderLayout.CENTER); pack(); }//GEN-END:initComponents private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed if(cancellable && worker!=null){ worker.cancel(); //worker.interrupt(); } }//GEN-LAST:event_cancelButtonActionPerformed public void start(String titleKey, String msgKey, SwingWorker worker, boolean showProgressBar, boolean cancellable, boolean saving){ this.worker=worker; this.cancellable=cancellable; this.saving=saving; setTitle(titleKey!=null ? options.getMsg(titleKey) : ""); label.setText(options.getMsg(msgKey!=null ? msgKey : "WORKING")); cancelButton.setVisible(cancellable && worker!=null); progressBar.setVisible(showProgressBar); setProgressValue(0); mainPanel.revalidate(); pack(); centerOver(getParent()); if(worker!=null){ worker.startLater(); } setVisible(true); } public void setText(String txt){ label.setText(txt); mainPanel.revalidate(); } public void setFileLabel(String txt){ fileLabel.setText(txt==null ? "" : txt); } public void startProgress(String name){ setProgressValue(0); name=(name==null ? "" : name.replace('\\', '/')); int i=name.lastIndexOf('/'); if(i>0) name=name.substring(i+1); fileLabel.setText(name==null ? "" : options.getMsg(saving ? "SAVING_FILE" : "LOADING_FILE")+" "+name); progressActive=true; } public void endProgress() { progressActive=false; } public void setProgressMax(int max) { progressBar.setMaximum(max); } public void setProgressValue(int value) { progressBar.setValue(value); } public InputStream getProgressInputStream(InputStream is, int expectedLength, String name){ InputStream result=null; if(!progressActive){ ProgressInputStream pi=new ProgressInputStream(is, expectedLength, name); pi.addProgressInputStreamListener(this); result=pi; } else{ result=is; } return result; } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton cancelButton; private javax.swing.JLabel fileLabel; private javax.swing.JLabel label; private javax.swing.JPanel mainPanel; private javax.swing.JProgressBar progressBar; // End of variables declaration//GEN-END:variables }