package edu.pdx.cs410J.gwt.client.mvp;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.*;
/**
* A dialog that is popped up in response to an exception being thrown
*/
public class ExceptionDialog extends DialogBox implements ExceptionPresenter.Display {
private final Label message = new Label();
private final TextArea details = new TextArea();
public ExceptionDialog() {
setText("An error has occurred");
setAutoHideEnabled(false);
setModal(true);
DockPanel panel = new DockPanel();
panel.add(message, DockPanel.NORTH);
details.setReadOnly(true);
details.setCharacterWidth(80);
details.setVisibleLines(30);
panel.add(details, DockPanel.CENTER);
Button ok = new Button("OK");
ok.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent clickEvent) {
ExceptionDialog.this.hide();
}
});
panel.add(ok, DockPanel.SOUTH);
setWidget(panel);
}
@Override
public void setMessage(String message) {
this.message.setText(message);
}
@Override
public void setStackTrace(StackTraceElement[] trace) {
StringBuilder sb = new StringBuilder();
for (StackTraceElement line : trace) {
sb.append(" at ");
sb.append(line.getClassName()).append(".").append(line.getMethodName());
sb.append("(").append(line.getFileName()).append(":").append(line.getLineNumber()).append(")");
sb.append("\n");
}
this.details.setText(sb.toString());
}
private boolean noRecursion; // Hack?
@Override
public void show() {
if (noRecursion) {
noRecursion = false;
center();
noRecursion = true;
}
super.show();
}
}