/* ******************************************************************************
* Copyright (c) 2006-2012 XMind Ltd. and others.
*
* This file is a part of XMind 3. XMind releases 3 and
* above are dual-licensed under the Eclipse Public License (EPL),
* which is available at http://www.eclipse.org/legal/epl-v10.html
* and the GNU Lesser General Public License (LGPL),
* which is available at http://www.gnu.org/licenses/lgpl.html
* See http://www.xmind.net/license.html for details.
*
* Contributors:
* XMind Ltd. - initial API and implementation
*******************************************************************************/
package org.xmind.ui.internal.editor;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.statushandlers.StatusAdapter;
import org.eclipse.ui.statushandlers.StatusManager;
import org.xmind.ui.internal.MindMapMessages;
import org.xmind.ui.internal.statushandlers.StatusDetails;
public class ErrorDialogPane extends DialogPane {
private final StatusAdapter error;
private final String summary;
private Text summaryBoard;
public ErrorDialogPane(StatusAdapter error) {
this.error = error;
Throwable cause = StatusDetails
.getRootCause(error.getStatus().getException());
if (cause == null)
cause = new UnknownError();
this.summary = NLS.bind(
MindMapMessages.ErrorDialogPane_summaryBoard_text,
new Object[] { error.getStatus().getMessage(),
cause.getClass().getName(),
cause.getLocalizedMessage() });
}
@Override
protected Control createDialogContents(Composite parent) {
Composite composite = (Composite) super.createDialogContents(parent);
GridLayout gridLayout = new GridLayout(1, false);
gridLayout.marginWidth = 0;
gridLayout.marginHeight = 0;
gridLayout.verticalSpacing = 20;
gridLayout.horizontalSpacing = 0;
composite.setLayout(gridLayout);
createSummaryBoard(composite);
return composite;
}
@Override
protected int getPreferredWidth() {
return 500;
}
private void createSummaryBoard(Composite parent) {
Composite box = new Composite(parent, SWT.NONE);
box.setBackground(parent.getBackground());
GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, false);
gridData.widthHint = SWT.DEFAULT;
gridData.heightHint = SWT.DEFAULT;
box.setLayoutData(gridData);
GridLayout gridLayout = new GridLayout(2, false);
gridLayout.marginWidth = 5;
gridLayout.marginHeight = 5;
gridLayout.verticalSpacing = 0;
gridLayout.horizontalSpacing = 10;
box.setLayout(gridLayout);
createIcon(box);
createSummaryBox(box);
}
private void createIcon(Composite parent) {
Label iconLabel = new Label(parent, SWT.NONE);
iconLabel.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, false, true));
iconLabel.setBackground(parent.getBackground());
iconLabel.setImage(parent.getDisplay().getSystemImage(SWT.ICON_ERROR));
}
private void createSummaryBox(Composite parent) {
summaryBoard = new Text(parent, SWT.READ_ONLY | SWT.MULTI | SWT.WRAP);
summaryBoard.setBackground(parent.getBackground());
applyFont(summaryBoard);
GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
gridData.widthHint = SWT.DEFAULT;
gridData.heightHint = SWT.DEFAULT;
summaryBoard.setLayoutData(gridData);
if (summary != null) {
summaryBoard.setText(summary);
}
}
public void dispose() {
super.dispose();
summaryBoard = null;
}
public void setFocus() {
if (summaryBoard != null && !summaryBoard.isDisposed()) {
summaryBoard.setFocus();
}
}
protected void createButtonsForButtonBar(Composite buttonBar) {
createButton(buttonBar, IDialogConstants.OK_ID,
MindMapMessages.EncryptDialogPane_detailsButton_label, false);
createButton(buttonBar, IDialogConstants.CLOSE_ID,
IDialogConstants.CLOSE_LABEL, false);
getButton(IDialogConstants.OK_ID).setEnabled(error != null);
}
@Override
protected boolean closePressed() {
setReturnCode(CANCEL);
close();
return true;
}
@Override
protected boolean okPressed() {
showDetails();
return true;
}
private void showDetails() {
StatusManager.getManager().handle(error, StatusManager.SHOW);
}
protected void escapeKeyPressed() {
triggerButton(IDialogConstants.CLOSE_ID);
}
}