org.jdesktop.swingx.plaf.macosx.MacOSXErrorPaneUI Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of swingx Show documentation
Show all versions of swingx Show documentation
Contains extensions to the Swing GUI toolkit, including new and enhanced components that provide functionality commonly required by rich client applications.
The newest version!
/*
* $Id: MacOSXErrorPaneUI.java 3475 2009-08-28 08:30:47Z kleopatra $
*
* Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
* Santa Clara, California 95054, U.S.A. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
package org.jdesktop.swingx.plaf.macosx;
import java.awt.Component;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.LayoutManager;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI;
import org.jdesktop.swingx.JXEditorPane;
import org.jdesktop.swingx.action.AbstractActionExt;
import org.jdesktop.swingx.error.ErrorInfo;
import org.jdesktop.swingx.error.ErrorLevel;
import org.jdesktop.swingx.plaf.UIManagerExt;
import org.jdesktop.swingx.plaf.basic.BasicErrorPaneUI;
/**
*
* Ok, the Title becomes the first line in the error dialog
*
* The text immediately follows. Then come the "Details". This is a
* toggle button with an icon and text but no border and no background. The icon
* looks like a tree toggle (arrow right or down).
*
* There is then more optional text. The best way to support this is to look
* in the client properties of the JXErrorPane for any "sub text". Ideally this
* sub text would be part of the ErrorInfo. Maybe I should just add it there?
*
* Finally come the buttons. If there is no report action and the error < fatal,
* the shown ok button should say "close". Otherwise, if there is no report action
* but the error >= fatal, it should say "Exit Application". If there is a report
* action but error < fatal, it should say "Don't Send" for ok, "Send Report" for
* the report button. If there is a report action and the error >= fatal, then
* one button should say "Exit", and the report button should say
* "Send Report and Exit".
*
* Whenever either button is clicked (ok button or report button), the "close dialog"
* procedure should occur.
*
* @author rbair
*/
public class MacOSXErrorPaneUI extends BasicErrorPaneUI {
private JLabel titleLabel;
private JEditorPane disclaimerText; // this is actually part of the details!!!
//---------------------------------------------------------- constructor
/** Creates a new instance of BasicErrorPanelUI */
public MacOSXErrorPaneUI() {
super();
}
@Override
protected void configureDetailsButton(boolean expanded) {
if (expanded) {
detailButton.setText(UIManagerExt.getString(CLASS_NAME + ".details_contract_text", detailButton.getLocale()));
detailButton.setIcon(UIManager.getIcon("Tree.expandedIcon"));
} else {
detailButton.setText(UIManagerExt.getString(CLASS_NAME + ".details_expand_text", detailButton.getLocale()));
detailButton.setIcon(UIManager.getIcon("Tree.collapsedIcon"));
}
}
@Override
protected void configureReportAction(AbstractActionExt reportAction) {
reportAction.setName(UIManagerExt.getString(CLASS_NAME + ".report_button_text", pane.getLocale()));
// reportButton.setText("Send Report To Apple");
// reportButton.setPreferredSize(new Dimension(100, 30));
// reportButton.setMinimumSize(new Dimension(100, 30));
}
public static ComponentUI createUI(JComponent c) {
return new MacOSXErrorPaneUI();
}
/**
* {@inheritDoc}
*/
@Override
public JFrame getErrorFrame(Component owner) {
JFrame frame = super.getErrorFrame(owner);
frame.setTitle(" ");
return frame;
}
/**
* {@inheritDoc}
*/
@Override
public JDialog getErrorDialog(Component owner) {
JDialog dlg = super.getErrorDialog(owner);
dlg.setTitle(" ");
return dlg;
}
/**
* {@inheritDoc}
*/
@Override
public JInternalFrame getErrorInternalFrame(Component owner) {
JInternalFrame frame = super.getErrorInternalFrame(owner);
frame.setTitle(" ");
return frame;
}
/**
* {@inheritDoc}
*/
@Override
protected LayoutManager createErrorPaneLayout() {
createExtraComponents();
GridBagLayout layout = new GridBagLayout();
try {
layout.addLayoutComponent(iconLabel, new GridBagConstraints(0, 0, 1, 2, 0.0, 0.0, GridBagConstraints.NORTH, GridBagConstraints.NONE, new Insets(0, 0, 0, 17), 0, 0));
layout.addLayoutComponent(titleLabel, new GridBagConstraints(1, 0, 2, 1, 1.0, 0.0, GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 12, 0), 0 ,0));
layout.addLayoutComponent(errorScrollPane,new GridBagConstraints(1, 1, 2, 1, 1.0, 1.0, GridBagConstraints.NORTH, GridBagConstraints.BOTH, new Insets(0, 0, 10, 0), 0, 0));
layout.addLayoutComponent(detailButton, new GridBagConstraints(0, 2, 3, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(0, 0, 6, 0), 0, 0));
layout.addLayoutComponent(detailsPanel, new GridBagConstraints(0, 3, 3, 1, 1.0, 1.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(0, 0, 6, 0), 0 ,0));
layout.addLayoutComponent(disclaimerText, new GridBagConstraints(0, 4, 3, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 6, 0), 0, 0));
layout.addLayoutComponent(closeButton, new GridBagConstraints(1, 5, 1, 1, 1.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(0, 0, 0, 5), 0, 0));
layout.addLayoutComponent(reportButton, new GridBagConstraints(2, 5, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
} catch (Exception e) {
e.printStackTrace();
}
return layout;
}
/**
* {@inheritDoc}
*/
@Override
protected LayoutManager createDetailPanelLayout() {
GridBagLayout layout = new GridBagLayout();
layout.addLayoutComponent(detailsScrollPane, new GridBagConstraints(0,0,1,1,1.0,1.0,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0));
copyToClipboardButton.setVisible(false);
return layout;
}
/**
* {@inheritDoc}
*/
@Override
protected void reinit() {
super.reinit();
ErrorInfo info = pane == null ? null : pane.getErrorInfo();
titleLabel.setText(info == null ? "Unknown Error" : info.getTitle());
Object finePrint = pane.getClientProperty("fine-print");
String text = finePrint == null ? null : finePrint.toString();
disclaimerText.setText(text);
disclaimerText.setVisible(text != null);
if (info != null && info.getErrorLevel() == ErrorLevel.FATAL) {
closeButton.setText(UIManagerExt.getString(CLASS_NAME + ".fatal_button_text", closeButton.getLocale()));
} else {
closeButton.setText(UIManagerExt.getString(CLASS_NAME + ".ok_button_text", closeButton.getLocale()));
}
}
/**
* {@inheritDoc}
*/
@Override
protected int getDetailsHeight() {
return 150;
}
private void createExtraComponents() {
titleLabel = new JLabel("Unknown Error");
titleLabel.setFont(titleLabel.getFont().deriveFont(Font.BOLD));
pane.add(titleLabel);
Font f = errorMessage.getFont();
if (f != null) {
errorMessage.setFont(f.deriveFont(f.getSize() - 2f));
}
disclaimerText = new JEditorPane();
disclaimerText.setContentType("text/html");
disclaimerText.setVisible(false);
disclaimerText.setEditable(false);
disclaimerText.setOpaque(false);
disclaimerText.putClientProperty(JXEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE);
if (f != null) {
disclaimerText.setFont(f.deriveFont(f.getSize() - 2f));
}
pane.add(disclaimerText);
detailButton.setBorderPainted(false);
detailButton.setContentAreaFilled(false);
detailButton.setBorder(BorderFactory.createEmptyBorder());
detailButton.setMargin(new Insets(0, 0, 0 ,0));
detailButton.setIcon(UIManager.getIcon("Tree.collapsedIcon"));
detailButton.setText(UIManagerExt.getString(CLASS_NAME + ".details_expand_text", detailButton.getLocale()));
closeButton.setText(UIManagerExt.getString(CLASS_NAME + ".ok_button_text", closeButton.getLocale()));
}
}