/* Copyright 2004-2014 Jim Voris * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.qumasoft.guitools.qwin.dialog; import com.qumasoft.guitools.qwin.ProgressDialogInterface; import com.qumasoft.guitools.qwin.QWinUtility; import java.util.logging.Level; import javax.swing.SwingUtilities; /** * A progress dialog. * @author Jim Voris */ public final class ProgressDialog extends AbstractQWinCommandDialog implements ProgressDialogInterface { private static final long serialVersionUID = -1022716362362449375L; private boolean isCancelledFlag = false; private boolean autoCloseFlag = true; private int progressMax; private boolean progressDialogVisibleFlag = false; /** * Create a new progress dialog. * @param parent the parent frame. * @param modal is it modal. * @param min the minimum value for indicating progress. * @param max the maximum value for indicating progress. */ public ProgressDialog(java.awt.Frame parent, boolean modal, int min, int max) { super(parent, modal); initComponents(); initProgressBar(min, max); getRootPane().setDefaultButton(cancelButton); cancelButton.requestFocusInWindow(); setFont(); center(); } /** 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. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { leftBottomAnchor = new javax.swing.JLabel(); progressBar = new javax.swing.JProgressBar(); actionLabel = new javax.swing.JLabel(); activityLabel = new javax.swing.JLabel(); jPanel1 = new javax.swing.JPanel(); cancelButton = new javax.swing.JButton(); setTitle("Progress"); setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N setResizable(false); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { closeDialog(evt); } }); leftBottomAnchor.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N leftBottomAnchor.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); leftBottomAnchor.setEnabled(false); leftBottomAnchor.setFocusable(false); leftBottomAnchor.setMaximumSize(new java.awt.Dimension(12, 12)); leftBottomAnchor.setMinimumSize(new java.awt.Dimension(12, 12)); leftBottomAnchor.setPreferredSize(new java.awt.Dimension(12, 12)); progressBar.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N actionLabel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N actionLabel.setText("Action"); activityLabel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N activityLabel.setText("Activity"); org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(0, 120, Short.MAX_VALUE) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(0, 50, Short.MAX_VALUE) ); cancelButton.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N cancelButton.setText("Cancel"); cancelButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cancelButtonActionPerformed(evt); } }); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(leftBottomAnchor, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(93, 93, 93) .add(cancelButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(layout.createSequentialGroup() .add(10, 10, 10) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(actionLabel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 510, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(activityLabel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 510, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(progressBar, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 510, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))) .addContainerGap(14, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(10, 10, 10) .add(actionLabel) .add(6, 6, 6) .add(activityLabel) .add(6, 6, 6) .add(progressBar, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(40, 40, 40) .add(leftBottomAnchor, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(layout.createSequentialGroup() .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) .add(cancelButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))) ); pack(); }// </editor-fold>//GEN-END:initComponents private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cancelButtonActionPerformed {//GEN-HEADEREND:event_cancelButtonActionPerformed closeDialog(null); }//GEN-LAST:event_cancelButtonActionPerformed @Override public void dismissDialog() { cancelButtonActionPerformed(null); } @Override public void initProgressBar(int min, int max) { progressBar.setMinimum(min); progressBar.setMaximum(max); progressMax = max; } @Override public void setProgress(final int progress) { Runnable set = new Runnable() { @Override public void run() { privateSetProgress(progress); } }; try { SwingUtilities.invokeLater(set); } catch (Exception e) { QWinUtility.logProblem(Level.WARNING, "Caught exception: " + e.getClass().toString() + " : " + e.getLocalizedMessage()); } } private void privateSetProgress(final int progress) { progressBar.setValue(progress); if (getAutoClose()) { if (progress >= progressMax) { closeDialog(null); } } } @Override public void setAction(final String action) { Runnable set = new Runnable() { @Override public void run() { privateSetAction(action); } }; try { SwingUtilities.invokeLater(set); } catch (Exception e) { QWinUtility.logProblem(Level.WARNING, "Caught exception: " + e.getClass().toString() + " : " + e.getLocalizedMessage()); } } private void privateSetAction(final String action) { actionLabel.setText(action); } @Override public void setActivity(final String activity) { Runnable set = new Runnable() { @Override public void run() { privateSetActivity(activity); } }; try { SwingUtilities.invokeLater(set); } catch (Exception e) { QWinUtility.logProblem(Level.WARNING, "Caught exception: " + e.getClass().toString() + " : " + e.getLocalizedMessage()); } } private void privateSetActivity(final String activity) { activityLabel.setText(activity); } /** * Close the progress dialog. */ public void close() { Runnable close = new Runnable() { @Override public void run() { closeDialog(null); } }; try { SwingUtilities.invokeLater(close); } catch (Exception e) { QWinUtility.logProblem(Level.WARNING, "Caught exception: " + e.getClass().toString() + " : " + e.getLocalizedMessage()); } } @Override public boolean getIsCancelled() { return isCancelledFlag; } boolean getAutoClose() { return autoCloseFlag; } /** * Set the auto-close flag. * @param flag true means auto-close; false means not auto-close. */ public void setAutoClose(boolean flag) { autoCloseFlag = flag; } @Override public void setProgressDialogVisibleFlag(boolean flag) { progressDialogVisibleFlag = flag; } @Override public boolean getProgressDialogVisibleFlag() { return progressDialogVisibleFlag; } /** Closes the dialog */ private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeDialog setVisible(false); isCancelledFlag = true; dispose(); }//GEN-LAST:event_closeDialog // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel actionLabel; private javax.swing.JLabel activityLabel; private javax.swing.JButton cancelButton; private javax.swing.JPanel jPanel1; private javax.swing.JLabel leftBottomAnchor; private javax.swing.JProgressBar progressBar; // End of variables declaration//GEN-END:variables }