1 package eu
.etaxonomy
.taxeditor
.model
;
3 import org
.eclipse
.core
.runtime
.IStatus
;
4 import org
.eclipse
.jface
.dialogs
.ErrorDialog
;
5 import org
.eclipse
.jface
.dialogs
.IDialogConstants
;
6 import org
.eclipse
.jface
.resource
.JFaceResources
;
7 import org
.eclipse
.swt
.SWT
;
8 import org
.eclipse
.swt
.dnd
.Clipboard
;
9 import org
.eclipse
.swt
.dnd
.TextTransfer
;
10 import org
.eclipse
.swt
.dnd
.Transfer
;
11 import org
.eclipse
.swt
.events
.SelectionEvent
;
12 import org
.eclipse
.swt
.events
.SelectionListener
;
13 import org
.eclipse
.swt
.graphics
.Point
;
14 import org
.eclipse
.swt
.widgets
.Button
;
15 import org
.eclipse
.swt
.widgets
.Composite
;
16 import org
.eclipse
.swt
.widgets
.List
;
17 import org
.eclipse
.swt
.widgets
.Shell
;
20 * Error dialog class specifically implemented for the editor.
21 * The main difference with {@link org.eclipse.jface.dialogs.ErrorDialog} is that
22 * this dialog has a fixed max height.
27 public class CdmErrorDialog
extends ErrorDialog
{
29 private static final int DIALOG_MAX_HEIGHT
= 500;
31 private Button copyButton
;
32 private final String stackTrace
;
35 * The current clipboard. To be disposed when closing the dialog.
37 private Clipboard clipboard
;
46 public CdmErrorDialog(Shell parentShell
,
51 boolean showStatusMessage
) {
55 IStatus
.OK
| IStatus
.INFO
| IStatus
.WARNING
| IStatus
.ERROR
);
56 this.stackTrace
= stackTrace
;
57 String statusMessage
= "";
58 if(showStatusMessage
) {
59 statusMessage
= status
.getMessage();
61 this.message
= message
== null ? statusMessage
: message
+ "\n " + statusMessage
;
71 public CdmErrorDialog(Shell parentShell
,
75 this(parentShell
, dialogTitle
, message
, status
, "", true);
79 * @see org.eclipse.jface.dialogs.ErrorDialog#buttonPressed(int)
82 protected void buttonPressed(int id
) {
83 super.buttonPressed(id
);
84 if (id
== IDialogConstants
.DETAILS_ID
) {
85 Point oldSize
= getShell().computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
);
86 // set height to max allowed
87 if(getShell().getSize().y
> DIALOG_MAX_HEIGHT
) {
88 getShell().setSize(getShell().getSize().x
, 500);
90 getShell().setSize(getShell().getSize().x
, oldSize
.y
);
97 * @see org.eclipse.jface.dialogs.ErrorDialog#createDropDownList(org.eclipse.swt.widgets.Composite)
100 protected List
createDropDownList(Composite parent
) {
101 List list
= super.createDropDownList(parent
);
102 list
.getMenu().getItem(0).setText(JFaceResources
.getString("copy all"));
107 * @see org.eclipse.jface.dialogs.ErrorDialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
110 protected void createButtonsForButtonBar(Composite parent
) {
111 copyButton
= createButton(parent
, 2000,"Copy Error", false);
112 copyButton
.addSelectionListener(new SelectionListener() {
114 * @see SelectionListener.widgetSelected (SelectionEvent)
117 public void widgetSelected(SelectionEvent e
) {
118 copyStackTraceToClipboard();
121 * @see SelectionListener.widgetDefaultSelected(SelectionEvent)
124 public void widgetDefaultSelected(SelectionEvent e
) {
125 copyStackTraceToClipboard();
128 super.createButtonsForButtonBar(parent
);
133 * Copies the stack trace to the clipboard
136 private void copyStackTraceToClipboard() {
137 if(stackTrace
!= null && !stackTrace
.isEmpty()) {
138 if (clipboard
!= null) {
141 clipboard
= new Clipboard(copyButton
.getDisplay());
142 clipboard
.setContents(new Object
[] { stackTrace
},
143 new Transfer
[] { TextTransfer
.getInstance() });