package statalign.ui;
import javax.swing.*;
//import javax.swing.filechooser.FileFilter;
//import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
//import java.io.*;
/**
* A dialog window for showing error messages.
* All handled error messages that users have to be notified about are shown on the screen by
* this class.
*/
public class ErrorMessage extends JDialog implements ActionListener {
/**
*
*/
public static void showPane(JFrame owner, String message, String title, boolean error) {
JOptionPane.showMessageDialog(owner, message, title == null ? (error ? "Error" : "Message") : title, error ? JOptionPane.ERROR_MESSAGE : JOptionPane.INFORMATION_MESSAGE);
}
private static final long serialVersionUID = 1L;
Container cp = getContentPane();
private JButton btOK;
protected static String except2String(Exception ex) {
StackTraceElement[] ste = ex.getStackTrace();
String s = "";
for(int i = 0; i < ste.length; i++){
s += ste[i].toString()+"\n";
}
return ex.toString()+" in \n"+s;
}
public ErrorMessage(JFrame owner, Exception ex, boolean error) {
this(owner, except2String(ex), error);
}
public static void showPane(JFrame owner, Exception ex, boolean error) {
showPane(owner, except2String(ex), error);
}
public static void showPane(JFrame owner, String message, boolean error) {
JOptionPane.showMessageDialog(owner, message, error ? "Error" : "Message", error ? JOptionPane.ERROR_MESSAGE : JOptionPane.INFORMATION_MESSAGE);
}
/**
* It constructs a dialog window.
*
* @param owner The owner frame. The owner cannot get the focus until the dialog window is closed.
* @param message The message to be displayed on the dialog window.
* @param error If true, it is an error message, if false then it is a message.
*/
public ErrorMessage(JFrame owner, String message, boolean error){
super(owner,error ? "Error!!!" : "Message",true);
String printedMessage = printed(message);
JTextArea ta;
setLocation(getParent().getX()+80,getParent().getY()+60);
setSize(600,600);
setResizable(false);
cp.setBackground(SystemColor.controlHighlight);
cp.setLayout(new BorderLayout(2,1));
cp.add(ta = new JTextArea(printedMessage),"North");
ta.setFont(new Font("Monospaced",Font.PLAIN,14));
ta.setEnabled(false);
ta.setCaretPosition(0);
//System.out.println(message);
// cp.add(new JLabel("Can I see this???"));
JPanel panel = new JPanel();
btOK = new JButton("OK");
panel.add(btOK);
cp.add(panel);
btOK.addActionListener(this);
pack();
setVisible(true);
}
/**
* This function is for closing the window
*/
public void actionPerformed(ActionEvent e){
dispose();
}
String printed(String message){
String p = "";
int curpos = 0;
int nextpos = curpos;
int prevpos = nextpos;
while(curpos < message.length()){
while((nextpos = nextWhiteSpace(message,prevpos)) < message.length() && nextpos - curpos < 50){
prevpos = nextpos + 1;
}
if(nextpos < message.length()){
if(curpos != prevpos){
p += message.substring(curpos,prevpos)+'\n';
curpos = prevpos;
}
else{
p += message.substring(curpos,nextpos)+'\n';
curpos = nextpos;
}
}
else{
if(nextpos - curpos < 50){
p += message.substring(curpos,nextpos)+'\n';
curpos = nextpos+1;
}
else{
p += message.substring(curpos,prevpos)+'\n'+message.substring(prevpos,nextpos);
curpos = nextpos+1;
}
}
}
// System.out.println(p);
return p;
}
int nextWhiteSpace(String m, int curpos){
int i = curpos;
while(i < m.length() && m.charAt(i) != ' ' && m.charAt(i) != '\t' && m.charAt(i) != '\n'){
i++;
}
return i;
}
}