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

org.pushingpixels.radiance.component.api.common.RichTooltip Maven / Gradle / Ivy

/*
 * Copyright (c) 2005-2022 Radiance Kirill Grouchnikov. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *  o Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 *
 *  o Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 *
 *  o Neither the name of the copyright holder nor the names of
 *    its contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package org.pushingpixels.radiance.component.api.common;

import org.jdesktop.swingx.icon.RadianceIcon;

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

/**
 * Rich tooltip for command buttons.
 *
 * 

* In its most basic form, the rich tooltip has a title and one (possible multiline) description * text: *

* *
 * +--------------------------------+
 * | Title                          |
 * |        Some description text   |
 * +--------------------------------+
 * 
* *

* The {@link Builder#addDescriptionSection(String)} can be used to add multiple * sections to the description: *

* *
 * +--------------------------------+
 * | Title                          |
 * |        First multiline         |
 * |        description section     |
 * |                                |
 * |        Second multiline        |
 * |        description section     |
 * |                                |
 * |        Third multiline         |
 * |        description section     |
 * +--------------------------------+
 * 
* *

* The {@link Builder#setMainIconFactory(RadianceIcon.Factory)} can be used to place an image below * the title and to the left of the description sections: *

* *
 * +--------------------------------+
 * | Title                          |
 * | *******  First multiline       |
 * | *image*  description section   |
 * | *******                        |
 * |          Second multiline      |
 * |          description section   |
 * +--------------------------------+
 * 
* *

* The {@link Builder#addFooterSection(String)} can be used to add (possibly) multiple * footer sections that will be shown below a horizontal separator: *

* *
 * +--------------------------------+
 * | Title                          |
 * |        First multiline         |
 * |        description section     |
 * |                                |
 * |        Second multiline        |
 * |        description section     |
 * |--------------------------------|
 * | A multiline footer section     |
 * | placed below a separator       |
 * +--------------------------------+
 * 
* *

* The {@link Builder#setFooterIconFactory(RadianceIcon.Factory)} can be used to place an image to * the left of the footer sections: *

* *
 * +--------------------------------+
 * | Title                          |
 * |        First multiline         |
 * |        description section     |
 * |                                |
 * |        Second multiline        |
 * |        description section     |
 * |--------------------------------|
 * | *******  A multiline           |
 * | *image*  footer section        |
 * | *******                        |
 * +--------------------------------+
 * 
* *

* Here is a fully fledged rich tooltip that shows all these APIs in action: *

* *
 * +--------------------------------+
 * | Title                          |
 * | *******  First multiline       |
 * | *image*  description section   |
 * | *******                        |
 * |          Second multiline      |
 * |          description section   |
 * |--------------------------------|
 * | *******  First multiline       |
 * | *image*  footer section        |
 * | *******                        |
 * |          Second multiline      |
 * |          footer section        |
 * +--------------------------------+
 * 
* * @author Kirill Grouchnikov */ public class RichTooltip { /** * The main title of this tooltip. * * @see #getTitle() */ private String title; /** * The main icon of this tooltip. Can be null. * * @see #getMainIcon() */ private RadianceIcon mainIcon; /** * The description sections of this tooltip. * * @see #getDescriptionSections() */ private List descriptionSections; /** * The ooter icon of this tooltip. Can be null. * * @see #getFooterIcon() */ private RadianceIcon footerIcon; /** * The footer sections of this tooltip. Can be empty. * * @see #getFooterSections() */ private List footerSections; private RichTooltip() { } /** * Returns the main title of this tooltip. * * @return The main title of this tooltip. */ public String getTitle() { return this.title; } /** * Returns the main icon of this tooltip. Can return null. * * @return The main icon of this tooltip. * @see #getDescriptionSections() */ public RadianceIcon getMainIcon() { return this.mainIcon; } /** * Returns an unmodifiable list of description sections of this tooltip. Guaranteed to return a * non-null list. * * @return An unmodifiable list of description sections of this tooltip. * @see #getTitle() * @see #getMainIcon() */ public List getDescriptionSections() { return this.descriptionSections; } /** * Returns the footer icon of this tooltip. Can return null. * * @return The footer icon of this tooltip. * @see #getFooterSections() */ public RadianceIcon getFooterIcon() { return this.footerIcon; } /** * Returns an unmodifiable list of footer sections of this tooltip. Guaranteed to return a * non-null list. * * @return An unmodifiable list of footer sections of this tooltip. * @see #getFooterIcon() */ public List getFooterSections() { return this.footerSections; } public static Builder builder() { return new Builder(); } public static class Builder { private String title; private RadianceIcon.Factory mainIconFactory; private List descriptionSections; private RadianceIcon.Factory footerIconFactory; private List footerSections; @SuppressWarnings("unchecked") public RichTooltip build() { RichTooltip richTooltip = new RichTooltip(); richTooltip.title = this.title; richTooltip.mainIcon = (this.mainIconFactory != null) ? this.mainIconFactory.createNewIcon() : null; richTooltip.descriptionSections = (this.descriptionSections != null) ? Collections.unmodifiableList(this.descriptionSections) : Collections.EMPTY_LIST; richTooltip.footerIcon = (this.footerIconFactory != null) ? this.footerIconFactory.createNewIcon() : null; richTooltip.footerSections = (this.footerSections != null) ? Collections.unmodifiableList(this.footerSections) : Collections.EMPTY_LIST; return richTooltip; } public Builder setTitle(String title) { this.title = title; return this; } public Builder setMainIconFactory(RadianceIcon.Factory mainIconFactory) { this.mainIconFactory = mainIconFactory; return this; } public Builder addDescriptionSection(String section) { if (this.descriptionSections == null) { this.descriptionSections = new LinkedList<>(); } this.descriptionSections.add(section); return this; } public Builder setFooterIconFactory(RadianceIcon.Factory footerIconFactory) { this.footerIconFactory = footerIconFactory; return this; } public Builder addFooterSection(String section) { if (this.footerSections == null) { this.footerSections = new LinkedList<>(); } this.footerSections.add(section); return this; } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy