/*
* EncodingProgressBar.java
*
* Created on 15. januar 2007, 16:04
*/
package krut.KRUT_GUI;
/**
*
* @author Jonas
*/
/** This Class provides a JProgressBar that gives at least a
* sense of progress during encoding and merging of the
* movie files.
*
* It needs to have a DataList object assigned to it, and
* this is currently done by the ScreenGrabber object
* (in the EncodeThread constructor).
*
* The EncodingProgressBar has three values for currentStatus:
* ENCODING, MERGING and ABORTING. currentStatus
* has to be set through the setStatus(int status)
* method.
*
* The EncodingProgressBar can cancel encoding of movies
* fairly easy, by telling the DataList object that there
* are no more frames. This is done in the private cancelAction()
* method.
*
* The cancellation of the merging process is just done
* by setting the cancelled flag to true.
* The EncodingProgressBar is given as an argument
* to the Merge object (in the method Run_KRUT.stopAction()),
* so the run() method of the Merge object will monitor
* the cancelled flag. If cancelled is true, the Merge
* object will attempt to stop it's merging Thread.
* The ugly way. This is done in the Merge.doMerge() method.
*/
public class EncodingProgressBar extends javax.swing.JFrame {
/** This is the DataList used to cancel the
* encoding of the movies. This is set
* from the ScreenGrabber in the EncodeThread
* constructor.
*/
public krut.KRUT_Recording.DataList myDataList;
/** The output window for this EncodingProgressBar.
*/
public OutputText myOutput;
/** The cancelled flag. This can be used to monitor
* if the encoding or merging have been requested to
* cancel.
*/
public boolean cancelled = false;
/** The current status of this EncodingProgressBar
*/
protected int currentStatus;
/** The ENCODING status. */
static final public int ENCODING = 1;
/** The MERGING status. */
static final public int MERGING = 2;
/** The ABORTING status. */
static final public int ABORTING = 3;
/** Sets the current status.
*
* @param status The current status of the program.
*/
public void setStatus(int status) {
if (status == ENCODING) {
this.jProgressBar1.setString("Encoding video...");
} else if (status == MERGING) {
this.jProgressBar1.setString("Merging mov file...");
} else if (status == ABORTING) {
this.jProgressBar1.setString("Aborting...");
}
currentStatus = status;
}
/** This method tries to cancel the encoding of the movie.
* The myDataList and myOutput paramaters must be non-null
* at this point, or this method will just pring an error
* message.
*/
private void cancelAction() {
/** Setting the cancelled flag to true
* causes Merge to be cancelled in the Merge.doMerge() method. */
cancelled = true;
try {
if (currentStatus == ENCODING) {
/** Setting the myDataList.finished flag to true,
* will cause the DataList to signal the end of
* the movie file, and in that way stop encoding
* smoothly.
*/
myDataList.finished = true;
myOutput.out("Encoding of video interrupted");
myOutput.out("Recording cancelled");
}
if (currentStatus == MERGING) {
myOutput.out("Merging of video and audio interrupted");
myOutput.out("Recording cancelled");
}
} catch (NullPointerException npe) {
System.out.println("cancelled uninitiated progress bar");
}
myOutput.out("");
setStatus(ABORTING);
}
/** Creates new form EncodingProgressBar */
public EncodingProgressBar() {
initComponents();
}
/** Creates new form EncodingProgressBar
*
* @param out The output window for this progress bar
*/
public EncodingProgressBar(OutputText out) {
myOutput = out;
initComponents();
setVisible(true);
}
/** 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() {
jProgressBar1 = new javax.swing.JProgressBar();
jButton1 = new javax.swing.JButton();
getContentPane().setLayout(new java.awt.GridBagLayout());
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
setTitle("Krut data processing");
jProgressBar1.setIndeterminate(true);
jProgressBar1.setPreferredSize(new java.awt.Dimension(200, 18));
jProgressBar1.setString("");
jProgressBar1.setStringPainted(true);
getContentPane().add(jProgressBar1, new java.awt.GridBagConstraints());
jButton1.setText("Cancel");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
getContentPane().add(jButton1, new java.awt.GridBagConstraints());
pack();
}
// </editor-fold>//GEN-END:initComponents
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
// TODO add your handling code here:
cancelAction();
}//GEN-LAST:event_jButton1ActionPerformed
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new EncodingProgressBar().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jButton1;
private javax.swing.JProgressBar jProgressBar1;
// End of variables declaration//GEN-END:variables
}