import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;
private static final int DIALOG_MAX_HEIGHT = 500;
- public CdmErrorDialog(Shell parentShell, String dialogTitle,
- String message, IStatus status) {
- super(parentShell,
- dialogTitle,
- message, status,
- IStatus.OK| IStatus.INFO | IStatus.WARNING | IStatus.ERROR);
- }
+ private Button copyButton;
+ private final String stackTrace;
+
+ /**
+ * The current clipboard. To be disposed when closing the dialog.
+ */
+ private Clipboard clipboard;
+
+ /**
+ * @param parentShell
+ * @param dialogTitle
+ * @param message
+ * @param status
+ * @param stackTrace
+ */
+ public CdmErrorDialog(Shell parentShell,
+ String dialogTitle,
+ String message,
+ IStatus status,
+ String stackTrace,
+ boolean showStatusMessage) {
+ super(parentShell,
+ dialogTitle,
+ message, status,
+ IStatus.OK| IStatus.INFO | IStatus.WARNING | IStatus.ERROR);
+ this.stackTrace = stackTrace;
+ String statusMessage = "";
+ if(showStatusMessage) {
+ statusMessage = status.getMessage();
+ }
+ this.message = message == null ? statusMessage : message + "\n " + statusMessage;
+ }
+
+ /**
+ * @param parentShell
+ * @param dialogTitle
+ * @param message
+ * @param status
+ */
+ public CdmErrorDialog(Shell parentShell,
+ String dialogTitle,
+ String message,
+ IStatus status) {
+ this(parentShell, dialogTitle, message, status, "", true);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.ErrorDialog#buttonPressed(int)
+ */
@Override
protected void buttonPressed(int id) {
super.buttonPressed(id);
}
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.ErrorDialog#createDropDownList(org.eclipse.swt.widgets.Composite)
+ */
@Override
protected List createDropDownList(Composite parent) {
List list = super.createDropDownList(parent);
list.getMenu().getItem(0).setText(JFaceResources.getString("copy all"));
return list;
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.ErrorDialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected void createButtonsForButtonBar(Composite parent) {
+ copyButton = createButton(parent, 2000,"Copy Error", false);
+ copyButton.addSelectionListener(new SelectionListener() {
+ /*
+ * @see SelectionListener.widgetSelected (SelectionEvent)
+ */
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ copyStackTraceToClipboard();
+ }
+ /*
+ * @see SelectionListener.widgetDefaultSelected(SelectionEvent)
+ */
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ copyStackTraceToClipboard();
+ }
+ });
+ super.createButtonsForButtonBar(parent);
+ }
+
+
+ /**
+ * Copies the stack trace to the clipboard
+ *
+ */
+ private void copyStackTraceToClipboard() {
+ if(stackTrace != null && !stackTrace.isEmpty()) {
+ if (clipboard != null) {
+ clipboard.dispose();
+ }
+ clipboard = new Clipboard(copyButton.getDisplay());
+ clipboard.setContents(new Object[] { stackTrace },
+ new Transfer[] { TextTransfer.getInstance() });
+ }
+ }
+
+
}