package view;
import main.Main;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Rectangle;
import java.lang.reflect.InvocationTargetException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import javax.swing.border.EtchedBorder;
import main.Configuracao;
import org.jdesktop.swingx.JXBusyLabel;
import org.pushingpixels.substance.api.SubstanceLookAndFeel;
public final class SplashView {
private JFrame frmSplash;
private JPanel contentPane = null;
private JProgressBar progressBar = null;
private JLabel lblImagemFundo = null;
private JXBusyLabel lblMensagem = null;
private Main mainFrame;
private int i;
public SplashView(Main pMainFrame) {
try {
Configuracao.getInstance();
} catch (Exception ex) {
ex.printStackTrace();
}
mainFrame = pMainFrame;
frmSplash = new JFrame();
createFrame();
try {
Thread.sleep(50);
createProgressBar();
run();
} catch (InterruptedException e) {
}
frmSplash.dispose();
}
private JFrame createFrame() {
frmSplash.setSize(465, 272);
frmSplash.setBackground(Color.black);
frmSplash.setCursor(new Cursor(Cursor.WAIT_CURSOR));
frmSplash.setContentPane(createContentPane());
frmSplash.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frmSplash.setLocationRelativeTo(null);
frmSplash.setUndecorated(true);
frmSplash.setVisible(true);
frmSplash.setAlwaysOnTop(true);
return frmSplash;
}
private JPanel createContentPane() {
lblMensagem = new JXBusyLabel();
setText("Iniciando...");
lblMensagem.setBounds(new Rectangle(9, 190, 266, 30));
lblMensagem.setHorizontalAlignment(SwingConstants.LEADING);
lblMensagem.setForeground(Color.WHITE);
lblMensagem.setFont(new Font("Tahoma", Font.PLAIN, 11));
lblMensagem.setDelay(160);
lblMensagem.setIconTextGap(10);
lblImagemFundo = new JLabel();
Rectangle imgSize = frmSplash.getBounds();
imgSize.setSize(frmSplash.getWidth(), frmSplash.getHeight() - 15);
lblImagemFundo.setBounds(imgSize);
lblImagemFundo.setIcon(new ImageIcon(Configuracao.getPath() + "images/splash.jpg"));
contentPane = new JPanel();
contentPane.setLayout(null);
contentPane.setBackground(Color.white);
contentPane.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
contentPane.add(lblMensagem, null);
contentPane.add(lblImagemFundo, null);
return contentPane;
}
private JProgressBar createProgressBar() {
if (progressBar == null) {
progressBar = new JProgressBar(0, 100);
progressBar.setBackground(new Color(55, 28, 0));
progressBar.setBounds(new Rectangle(2, 256, 462, 15));
contentPane.add(createProgressBar(), null);
}
return progressBar;
}
public void setText(String text) {
frmSplash.setTitle(text);
lblMensagem.setText(text);
}
public void run() {
lblMensagem.setBusy(true);
if (Configuracao.useLaf()) {
try {
EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
SubstanceLookAndFeel.setSkin(Configuracao.getLaf());
setText("Configurando aparência...");
}
});
} catch (InterruptedException | InvocationTargetException ex) {
Logger.getLogger(SplashView.class.getName()).log(Level.SEVERE, null, ex);
}
}
for (i = 0; i <= 100; i++) {
if (i == 25) {
setText("Carregando dados do Sistema...");
}
if (i == 60) {
setText("Atualizando últimas configurações");
}
if (i == 95) {
setText("Finalizando...");
}
try {
EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
progressBar.setValue(i);
}
});
} catch (InterruptedException | InvocationTargetException ex) {
Logger.getLogger(SplashView.class.getName()).log(Level.SEVERE, null, ex);
}
try {
Thread.sleep(20);
} catch (InterruptedException e) {
}
}
new Thread(new Runnable() {
@Override
public void run() {
try {
EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
mainFrame.setVisible(true);
}
});
} catch (InterruptedException | InvocationTargetException ex) {
Logger.getLogger(SplashView.class.getName()).log(Level.SEVERE, null, ex);
}
}
}).start();
}
}