package com.marinilli.b2.c7.launcher;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.event.*;

/**
 * Chapter 7 - shows the user the installation progress
 *
 * @author Mauro Marinilli
 * @version 1.0
 */
public class InstallationProgressDialog extends InstallerDialog {
  private final static String TITLE_HEADER = "Installing.. ";
  private JProgressBar progressBar;
  private Timer timer;

  /**
   *  Constructor
   */
  public InstallationProgressDialog(CDLauncher inst) {
    super(inst, TITLE_HEADER);
  }

  /**
   *  GUI initialization
   */
  void graphInit() {
    setModal(false);
    JPanel panel1 = new JPanel();
    JLabel imageLabel = new JLabel();
    progressBar = new JProgressBar();
    progressBar.setBorder(BorderFactory.createEmptyBorder(2,6,10,6));
    progressBar.setStringPainted(true);
    int totalSteps = installer.getTotalItemsToInstall() + 1 ;//last step for custom inst.
    if (installer.isInstallJre())
      totalSteps++;
    progressBar.setMaximum(totalSteps);
    ImageIcon img = new ImageIcon(CDLauncher.SETUP_DIR + "installer.gif");
    imageLabel.setIcon(img);
    panel1.setLayout(new BorderLayout());
    panel1.add(progressBar, BorderLayout.SOUTH);
    panel1.add(imageLabel, BorderLayout.CENTER);
    getContentPane().add(panel1);

    progressBar.setValue(0);
    timer = new Timer(1000, new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        int n = installer.getAlreadyInstalled();
        if (n < 0) {
          Toolkit.getDefaultToolkit().beep();
          timer.stop();
          dispose();
        }
        progressBar.setValue(n);
        setTitle(TITLE_HEADER + "N="+installer.getAlreadyInstalled()+" - "+installer.getTotalItemsToInstall());
      }
    });

    pack();
    setVisible(true);
    setCursor(new Cursor(Cursor.WAIT_CURSOR));
    setResizable(false);
    // last, start the timer
    timer.start();
  }

}