/* 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
}