Package org.jdesktop.swingx.plaf.macosx

Source Code of org.jdesktop.swingx.plaf.macosx.MacOSXErrorPaneUI

/*
* $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()));
    }
}
TOP

Related Classes of org.jdesktop.swingx.plaf.macosx.MacOSXErrorPaneUI

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.