All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jdesktop.swingx.plaf.macosx.MacOSXErrorPaneUI Maven / Gradle / Ivy

There is a newer version: 1.7.2
Show 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 org.jdesktop.swingx.JXEditorPane;
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;

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 java.awt.Component;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * 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 static final Logger LOG = Logger.getLogger(MacOSXErrorPaneUI.class.getName()); private JLabel titleLabel; private JEditorPane disclaimerText; // this is actually part of the details!!! //---------------------------------------------------------- constructor /** * Creates a new instance of BasicErrorPanelUI */ public MacOSXErrorPaneUI() { } @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")); } } 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) { LOG.log(Level.WARNING, e.getMessage(), e); } 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())); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy