// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea
// Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com
// Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology
// Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/
/*
* Splash.java
*
* Created on September 19, 2005, 8:09 PM
*/
package graphtea.platform;
import graphtea.platform.core.exception.ExceptionHandler;
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.net.URL;
/**
* an splash screen for showing when the program is loading,
* it simply redirects the System.out, so every thing you write
* on System.out will be written on the splash!
*
* @author azin
*/
public class GSplash extends javax.swing.JFrame {
/**
*
*/
private static final long serialVersionUID = 7023272493672748876L;
public PrintWriter pp;
private BufferedReader br;
private boolean show;
private PrintStream defaultOut;
private PrintStream out;
/**
* Creates new form Splash
*/
GSplash() {
initComponents();
// pack();
PipedOutputStream src = new PipedOutputStream();
PipedInputStream p = null;
try {
p = new PipedInputStream(src);
} catch (IOException e) {
ExceptionHandler.catchException(e);
}
pp = new PrintWriter(src);
BufferedInputStream bbr = new BufferedInputStream(p);
br = new BufferedReader(new InputStreamReader(bbr));
out = new PrintStream(src);
defaultOut = System.err;
}
public PrintWriter getOut() {
return pp;
}
void showMessages() {
show = true;
setVisible(true);
System.setErr(out);
new Thread(() -> {
String s = "";
long time = System.currentTimeMillis();
while (show) {
try {
String l = br.readLine();
s = l + "\n" + s;
text.setText(s);
defaultOut.println(l);
if (time + 4000 > System.currentTimeMillis())
toFront();
} catch (Exception e) {
System.err.println("err?");
show = false;
}
}
}).start();
}
void stopShowing() {
show = false;
System.setErr(defaultOut);
}
/**
* This method is called from within the constructor to
* initialize the form.
*/
private void initComponents() {
text = new javax.swing.JTextArea();
JLabel bg = new JLabel();
getContentPane().setLayout(null);
// setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
// setAlwaysOnTop(true);
toFront();
setResizable(false);
setUndecorated(true);
text.setEditable(false);
text.setFont(new java.awt.Font("dialog", 20, 9));
text.setOpaque(false);
add(text);
text.setBounds(40, 200, 400, 150);
bg.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
Class<? extends GSplash> clazz = getClass();
URL resource = clazz.getResource("splash.jpg");
if (resource == null)
resource = clazz.getResource("splash.gif");
if (resource == null)
resource = clazz.getResource("splash.png");
if (resource == null)
resource = clazz.getResource("splash.bmp");
if (resource != null) {
ImageIcon icon = new ImageIcon(resource);
bg.setIcon(icon);
bg.setBounds(0, 0, icon.getIconWidth(), icon.getIconHeight());
}
bg.setVerticalAlignment(javax.swing.SwingConstants.TOP);
add(bg);
super.setPreferredSize(bg.getSize());
super.setSize(bg.getSize());
Dimension sz = Toolkit.getDefaultToolkit().getScreenSize();
Dimension s = getSize();
setLocation((sz.width - s.width) / 2, (sz.height - s.height) / 2);
}
private javax.swing.JTextArea text;
// End of variables declaration
}