Package com.mucommander.ui.layout

Source Code of com.mucommander.ui.layout.InformationPane

/*
* This file is part of muCommander, http://www.mucommander.com
* Copyright (C) 2002-2012 Maxence Bernard
*
* muCommander is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* muCommander 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

package com.mucommander.ui.layout;

import com.mucommander.ui.text.MultiLineLabel;

import javax.swing.*;
import java.awt.*;

/**
* InformationPane is a panel which is suitable for use in dialogs, to give information about the action that the
* dialog is about to perform.<br>
* It is made of 3 components:
* <ul>
<li>A 'main' label which provides a brief description of the action to be performed.
* By default, this label uses the standard label's font size and a bold style.
<li>A 'caption' label which is displayed under the main label and provides additional information about the action
* to be performed. This label uses a smaller font size and plain style.
<li>An optional icon displayed to the left of labels. InformationPane makes it easy to use one of the standard
* <code>JOptionPane</code> icons: error, information, warning, question.
* </ul>
*
* <p>Here is a textual representation of the layout, all components are vertically aligned to the top:
* <pre>
*
* --------------------------
* | [ICON] | Main label    |
* |        | Caption label |
* |________|_______________|
*
* </pre>
* </p>
*
* @author Maxence Bernard
*/
public class InformationPane extends JPanel {

    /** Label used to display the icon, can be null if no icon is used */
    private JLabel iconLabel;
    /** Label used to display the main message */
    private MultiLineLabel mainLabel;
    /** Label used to display the caption message */
    private MultiLineLabel captionLabel;

    /** Designates the 'error' predefined icon */
    public final static int ERROR_ICON = 1;
    /** Designates the 'information' predefined icon */
    public final static int INFORMATION_ICON = 2;
    /** DesignateS the 'warning' predefined icon */
    public final static int WARNING_ICON = 3;
    /** Designates the 'question' predefined icon */
    public final static int QUESTION_ICON = 4;

    /**
     * Creates a new InformationPane with no main and caption message.
     */
    public InformationPane() {
        this("", "");
    }

    /**
     * Creates a new InformationPane using the given main and caption messages and no icon. The font style for the main
     * label is set to <code>Font.BOLD</code>.
     *
     * @param mainMessage the message to display in the main label
     * @param captionMessage the message to display in the caption label
     */
    public InformationPane(String mainMessage, String captionMessage) {
        this(mainMessage, captionMessage, Font.BOLD, null);
    }

    /**
     * Creates a new InformationPane using the given main message, caption message, main label font style and
     * predefined icon.
     *
     * @param mainMessage the message to display in the main label
     * @param captionMessage the message to display in the caption label
     * @param mainMessageFontStyle the font style to use in the main label
     * @param predefinedIconId an id designating the predefined icon to display, see constant fields for allowed values
     */
    public InformationPane(String mainMessage, String captionMessage, int mainMessageFontStyle, int predefinedIconId) {
        this(mainMessage, captionMessage, mainMessageFontStyle, getPredefinedIcon(predefinedIconId));
    }

    /**
     * Creates a new InformationPane using the given main message, caption message, main label font style and icon.
     *
     * @param mainMessage the message to display in the main label
     * @param captionMessage the message to display in the caption label
     * @param mainMessageFontStyle the font style to use in the main label
     * @param icon an icon to display, null for no icon
     */
    public InformationPane(String mainMessage, String captionMessage, int mainMessageFontStyle, Icon icon) {
        super(new BorderLayout());

        if(icon!=null)
            setIcon(icon);

        YBoxPanel yPanel = new YBoxPanel(5);

        mainLabel = new MultiLineLabel(mainMessage);
        if(mainMessageFontStyle!=Font.PLAIN)
            setMainLabelFontStyle(mainMessageFontStyle);
        yPanel.add(mainLabel);

        yPanel.addSpace(5);

        captionLabel = new MultiLineLabel(captionMessage);
        Font labelFont = mainLabel.getFont();
        captionLabel.setFont(labelFont.deriveFont(Font.PLAIN, labelFont.getSize()-2));
        yPanel.add(captionLabel);

        add(yPanel, BorderLayout.CENTER);
    }

    /**
     * Returns an <code>Icon</code> instance corresponding to the given predefined icon id.
     *
     * @param predefinedIconId an id designating a predefined icon, see constant fields for allowed values
     * @return an Icon instance corresponding to the given predefined icon id
     */
    public static Icon getPredefinedIcon(int predefinedIconId) {
        String optionPaneIcon;

        switch(predefinedIconId) {
            case ERROR_ICON:
                optionPaneIcon = "errorIcon";
                break;

            case INFORMATION_ICON:
                optionPaneIcon = "informationIcon";
                break;

            case WARNING_ICON:
                optionPaneIcon = "warningIcon";
                break;

            case QUESTION_ICON:
                optionPaneIcon = "questionIcon";
                break;

            default:
                return null;
        }

        return UIManager.getIcon("OptionPane."+optionPaneIcon);
    }

    /**
     * Returns the main label displayed in this InformationPane.
     *
     * @return the main label displayed in this InformationPane
     */
    public MultiLineLabel getMainLabel() {
        return mainLabel;
    }

    /**
     * Returns the caption label displayed in this InformationPane.
     *
     * @return the caption label displayed in this InformationPane
     */
    public MultiLineLabel getCaptionLabel() {
        return captionLabel;
    }

    /**
     * Changes the icon displayed in this InformationPane to the given one. If <code>null</code> is specified, this
     * InformationPane will not display any icon.
     *
     * @param icon the new icon to display, null for no icon
     */
    public void setIcon(Icon icon) {
        if(icon==null) {
            if(iconLabel!=null) {
                remove(iconLabel);
                iconLabel = null;
            }
        }
        else {
            if(iconLabel==null) {
                iconLabel = new JLabel(" ");
                add(iconLabel, BorderLayout.WEST);
            }

            iconLabel.setIcon(icon);
        }
    }

    /**
     * Changes the font style used by the main label. Allowed values are <code>Font.PLAIN</code>,
     * <code>Font.BOLD</code> and <code>Font.ITALIC</code> or a mix of those combined as a bitwise mask.
     *
     * @param fontStyle the new font style for the main label
     */
    public void setMainLabelFontStyle(int fontStyle) {
        Font labelFont = mainLabel.getFont();
        mainLabel.setFont(labelFont.deriveFont(fontStyle, labelFont.getSize()));
    }

    /**
     * Returns the font style used by the main label as a bitwise mask.
     *
     * @return the font style used by the main label as a bitwise mask
     */
    public int getMainLabelFontStyle() {
        return mainLabel.getFont().getStyle();
    }

}
TOP

Related Classes of com.mucommander.ui.layout.InformationPane

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.