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

com.alee.demo.content.container.WebBreadcrumbExample Maven / Gradle / Ivy

There is a newer version: 1.2.8
Show newest version
/*
 * This file is part of WebLookAndFeel library.
 *
 * WebLookAndFeel library 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.
 *
 * WebLookAndFeel 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with WebLookAndFeel library.  If not, see .
 */

package com.alee.demo.content.container;

import com.alee.api.annotations.NotNull;
import com.alee.api.jdk.BiConsumer;
import com.alee.demo.api.example.*;
import com.alee.demo.api.example.wiki.WebLafWikiPage;
import com.alee.demo.api.example.wiki.WikiPage;
import com.alee.demo.skin.DemoIcons;
import com.alee.extended.breadcrumb.WebBreadcrumb;
import com.alee.extended.breadcrumb.element.BreadcrumbElementData;
import com.alee.extended.button.WebSplitButton;
import com.alee.extended.checkbox.WebTristateCheckBox;
import com.alee.extended.date.WebDateField;
import com.alee.extended.label.WebStyledLabel;
import com.alee.extended.layout.HorizontalFlowLayout;
import com.alee.extended.layout.VerticalFlowLayout;
import com.alee.extended.link.WebLink;
import com.alee.laf.button.WebButton;
import com.alee.laf.button.WebToggleButton;
import com.alee.laf.checkbox.CheckState;
import com.alee.laf.checkbox.WebCheckBox;
import com.alee.laf.combobox.ComboBoxCellParameters;
import com.alee.laf.combobox.WebComboBox;
import com.alee.laf.combobox.WebComboBoxRenderer;
import com.alee.laf.label.WebLabel;
import com.alee.laf.menu.WebMenuItem;
import com.alee.laf.menu.WebPopupMenu;
import com.alee.laf.panel.WebPanel;
import com.alee.laf.radiobutton.WebRadioButton;
import com.alee.laf.text.WebFormattedTextField;
import com.alee.laf.text.WebPasswordField;
import com.alee.laf.text.WebTextField;
import com.alee.managers.animation.easing.Quadratic;
import com.alee.managers.animation.transition.*;
import com.alee.managers.language.LM;
import com.alee.managers.style.StyleId;
import com.alee.utils.CollectionUtils;
import com.alee.utils.CoreSwingUtils;
import com.alee.utils.swing.UnselectableButtonGroup;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Date;
import java.util.List;

/**
 * @author Mikle Garin
 */
public class WebBreadcrumbExample extends AbstractStylePreviewExample
{
    @NotNull
    @Override
    public String getId ()
    {
        return "breadcrumb";
    }

    @NotNull
    @Override
    protected String getStyleFileName ()
    {
        return "breadcrumb";
    }

    @NotNull
    @Override
    public FeatureType getFeatureType ()
    {
        return FeatureType.swing;
    }

    @NotNull
    @Override
    public WikiPage getWikiPage ()
    {
        return new WebLafWikiPage ( "How to Use WebBreadcrumb" );
    }

    @NotNull
    @Override
    protected List createPreviews ()
    {
        return CollectionUtils.asList (
                new BreadcrumbPreview ( "basic", FeatureState.release, StyleId.breadcrumb ),
                new BreadcrumbPreview ( "undecorated", FeatureState.release, StyleId.breadcrumbUndecorated ),
                new BreadcrumbPreview ( "separated", FeatureState.release, StyleId.breadcrumbSeparated ),
                new BreadcrumbPreview ( "separated-undecorated", FeatureState.release, StyleId.breadcrumbSeparatedUndecorated )
        );
    }

    /**
     * Breadcrumb preview.
     */
    protected class BreadcrumbPreview extends AbstractStylePreview
    {
        /**
         * Constructs new style preview.
         *
         * @param id           preview ID
         * @param featureState feature state
         * @param styleId      preview {@link StyleId}
         */
        public BreadcrumbPreview ( final String id, final FeatureState featureState, final StyleId styleId )
        {
            super ( WebBreadcrumbExample.this, id, featureState, styleId );
        }

        @NotNull
        @Override
        protected LayoutManager createPreviewLayout ()
        {
            return new VerticalFlowLayout ( VerticalFlowLayout.MIDDLE, 8, false, false );
        }

        @NotNull
        @Override
        protected List createPreviewElements ()
        {
            final String sampleKey = getExampleLanguageKey ( "data.sample" );
            final String breadcrumb = "Breadcrumb";
            final String elementsKey = getExampleLanguageKey ( "data.elements" );

            // todo Panel example

            final WebBreadcrumb labels = new WebBreadcrumb ( getStyleId () );
            labels.add ( new WebLabel ( sampleKey, DemoIcons.fire16, SwingConstants.CENTER ) );
            labels.add ( new WebLabel ( breadcrumb ) );
            labels.add ( new WebLabel ( "JLabel", DemoIcons.fire16, SwingConstants.CENTER ) );
            labels.add ( new WebLabel ( elementsKey ) );

            final WebBreadcrumb styledLabels = new WebBreadcrumb ( getStyleId () );
            styledLabels.add ( new WebStyledLabel ( sampleKey, DemoIcons.fire16 ) );
            styledLabels.add ( new WebStyledLabel ( "{" + breadcrumb + ":u}" ) );
            styledLabels.add ( new WebStyledLabel ( "{WebStyledLabel:c(99,99,99)}", DemoIcons.fire16 ) );
            styledLabels.add ( new WebStyledLabel ( elementsKey ) );

            final WebBreadcrumb links = new WebBreadcrumb ( getStyleId () );
            links.add ( new WebLink ( DemoIcons.fire16, sampleKey ) );
            links.add ( new WebLink ( breadcrumb ) );
            links.add ( new WebLink ( DemoIcons.fire16, "WebLink" ) );
            links.add ( new WebLink ( elementsKey ) );

            final WebBreadcrumb buttons = new WebBreadcrumb ( getStyleId () );
            buttons.add ( new WebButton ( sampleKey, DemoIcons.fire16 ) );
            buttons.add ( new WebButton ( breadcrumb ) );
            buttons.add ( new WebButton ( "JButton", DemoIcons.fire16 ) );
            buttons.add ( new WebButton ( elementsKey ) );

            final WebBreadcrumb toggleButtons = new WebBreadcrumb ( getStyleId () );
            toggleButtons.add ( new WebToggleButton ( sampleKey, DemoIcons.fire16 ) );
            toggleButtons.add ( new WebToggleButton ( breadcrumb ) );
            toggleButtons.add ( new WebToggleButton ( "JToggleButton", DemoIcons.fire16 ) );
            toggleButtons.add ( new WebToggleButton ( elementsKey ) );

            final WebBreadcrumb splitbuttons = new WebBreadcrumb ( getStyleId () );
            splitbuttons.add ( new WebSplitButton ( sampleKey ) );
            splitbuttons.add ( new WebSplitButton ( breadcrumb ) );
            splitbuttons.add ( new WebSplitButton ( "WebSplitButton" ) );
            splitbuttons.add ( new WebSplitButton ( elementsKey ) );
            splitbuttons.forEach ( new BiConsumer ()
            {
                @Override
                public void accept ( final Integer index, final WebSplitButton splitButton )
                {
                    final WebPopupMenu menu = new WebPopupMenu ();
                    menu.add ( new WebMenuItem ( getExampleLanguageKey ( "data.menu1" ), DemoIcons.fire16 ) );
                    menu.add ( new WebMenuItem ( getExampleLanguageKey ( "data.menu2" ), DemoIcons.brush16 ) );
                    menu.add ( new WebMenuItem ( getExampleLanguageKey ( "data.menu3" ), DemoIcons.menu16 ) );
                    splitButton.setPopupMenu ( menu );
                }
            } );

            final WebBreadcrumb comboboxes = new WebBreadcrumb ( getStyleId () );
            comboboxes.add ( new WebComboBox ( new String[]{ sampleKey } ) );
            comboboxes.add ( new WebComboBox ( new String[]{ breadcrumb } ) );
            comboboxes.add ( new WebComboBox ( new String[]{ "JComboBox" } ) );
            comboboxes.add ( new WebComboBox ( new String[]{ elementsKey } ) );
            comboboxes.forEach ( new BiConsumer ()
            {
                @Override
                public void accept ( final Integer index, final WebComboBox comboBox )
                {
                    comboBox.setRenderer ( new WebComboBoxRenderer> ()
                    {
                        @Override
                        protected String textForValue ( final ComboBoxCellParameters parameters )
                        {
                            return LM.get ( parameters.value () );
                        }
                    } );
                }
            } );

            final WebBreadcrumb datefields = new WebBreadcrumb ( getStyleId () );
            datefields.add ( new WebDateField ( new Date () ) );
            datefields.add ( new WebDateField ( new Date () ) );
            datefields.add ( new WebDateField ( new Date () ) );
            datefields.add ( new WebDateField ( new Date () ) );

            final WebBreadcrumb checkboxes = new WebBreadcrumb ( getStyleId () );
            checkboxes.add ( new WebCheckBox ( sampleKey, true ) );
            checkboxes.add ( new WebCheckBox ( breadcrumb, false ) );
            checkboxes.add ( new WebCheckBox ( "JCheckBox", false ) );
            checkboxes.add ( new WebCheckBox ( elementsKey, true ) );

            final WebBreadcrumb tristatecheckboxes = new WebBreadcrumb ( getStyleId () );
            tristatecheckboxes.add ( new WebTristateCheckBox ( sampleKey, CheckState.checked ) );
            tristatecheckboxes.add ( new WebTristateCheckBox ( breadcrumb, CheckState.mixed ) );
            tristatecheckboxes.add ( new WebTristateCheckBox ( "WebTristateCheckBox", CheckState.unchecked ) );
            tristatecheckboxes.add ( new WebTristateCheckBox ( elementsKey ) );

            final WebBreadcrumb radiobuttons = new WebBreadcrumb ( getStyleId () );
            radiobuttons.add ( new WebRadioButton ( sampleKey, true ) );
            radiobuttons.add ( new WebRadioButton ( breadcrumb ) );
            radiobuttons.add ( new WebRadioButton ( "JRadioButton" ) );
            radiobuttons.add ( new WebRadioButton ( elementsKey ) );
            UnselectableButtonGroup.group ( radiobuttons );

            final WebBreadcrumb textfields = new WebBreadcrumb ( getStyleId () );
            textfields.add ( new WebTextField ( 10 ) );
            textfields.add ( new WebTextField ( breadcrumb, 10 ) );
            textfields.add ( new WebTextField ( "JTextField", 10 ) );
            textfields.add ( new WebTextField ( 10 ) );
            textfields.forEach ( new BiConsumer ()
            {
                @Override
                public void accept ( final Integer index, final WebTextField textField )
                {
                    if ( index == 0 )
                    {
                        textField.setLanguage ( sampleKey );
                    }
                    if ( index == 3 )
                    {
                        textField.setLanguage ( elementsKey );
                    }
                }
            } );

            final WebBreadcrumb passwordfields = new WebBreadcrumb ( getStyleId () );
            passwordfields.add ( new WebPasswordField ( 10 ) );
            passwordfields.add ( new WebPasswordField ( breadcrumb, 10 ) );
            passwordfields.add ( new WebPasswordField ( "JPasswordField", 10 ) );
            passwordfields.add ( new WebPasswordField ( 10 ) );
            passwordfields.forEach ( new BiConsumer ()
            {
                @Override
                public void accept ( final Integer index, final WebPasswordField passwordField )
                {
                    if ( index == 0 )
                    {
                        passwordField.setLanguage ( sampleKey );
                    }
                    if ( index == 3 )
                    {
                        passwordField.setLanguage ( elementsKey );
                    }
                }
            } );

            final WebBreadcrumb formattedtextfields = new WebBreadcrumb ( getStyleId () );
            formattedtextfields.add ( new WebFormattedTextField () );
            formattedtextfields.add ( new WebFormattedTextField ( breadcrumb ) );
            formattedtextfields.add ( new WebFormattedTextField ( "JFormattedTextField" ) );
            formattedtextfields.add ( new WebFormattedTextField () );
            formattedtextfields.forEach ( new BiConsumer ()
            {
                @Override
                public void accept ( final Integer index, final WebFormattedTextField formattedTextField )
                {
                    formattedTextField.setColumns ( 10 );
                    if ( index == 0 )
                    {
                        formattedTextField.setLanguage ( sampleKey );
                    }
                    if ( index == 3 )
                    {
                        formattedTextField.setLanguage ( elementsKey );
                    }
                }
            } );

            final WebBreadcrumb panels = new WebBreadcrumb ( getStyleId () );
            panels.add ( new WebPanel ( new BorderLayout () ) );
            panels.add ( new WebPanel ( new BorderLayout () ) );
            panels.add ( new WebPanel ( new BorderLayout () ) );
            panels.add ( new WebPanel ( new BorderLayout () ) );
            panels.forEach ( new BiConsumer ()
            {
                @Override
                public void accept ( final Integer index, final WebPanel panel )
                {
                    panel.add ( new WebLabel ( index == 0 ? sampleKey : index == 1 ? breadcrumb : index == 2 ? "JPanel" : elementsKey ) );
                }
            } );

            return CollectionUtils.asList (
                    addProgressControlts ( labels ),
                    addProgressControlts ( styledLabels ),
                    addProgressControlts ( links ),
                    addProgressControlts ( buttons ),
                    addProgressControlts ( toggleButtons ),
                    addProgressControlts ( splitbuttons ),
                    addProgressControlts ( comboboxes ),
                    addProgressControlts ( datefields ),
                    addProgressControlts ( checkboxes ),
                    addProgressControlts ( tristatecheckboxes ),
                    addProgressControlts ( radiobuttons ),
                    addProgressControlts ( textfields ),
                    addProgressControlts ( passwordfields ),
                    addProgressControlts ( formattedtextfields ),
                    addProgressControlts ( panels )
            );
        }

        /**
         * Returns {@link WebBreadcrumb} with added progress state controls.
         *
         * @param breadcrumb {@link WebBreadcrumb}
         * @return {@link WebBreadcrumb} with added progress state controls
         */
        private JComponent addProgressControlts ( final WebBreadcrumb breadcrumb )
        {
            final QueueTransition progressAnimator = new QueueTransition ( true );
            progressAnimator.add ( new TimedTransition ( 0.0d, 1.0d, new Quadratic.Out (), 1500L ) );
            progressAnimator.add ( new TimedTransition ( 1.0d, 2.0d, new Quadratic.Out (), 1500L ) );
            progressAnimator.add ( new TimedTransition ( 2.0d, 3.0d, new Quadratic.Out (), 1500L ) );
            progressAnimator.add ( new TimedTransition ( 3.0d, 4.0d, new Quadratic.Out (), 1500L ) );
            progressAnimator.add ( new IdleTransition ( 4.0d, 1000L ) );
            progressAnimator.add ( new TimedTransition ( 4.0d, 3.0d, new Quadratic.Out (), 1500L ) );
            progressAnimator.add ( new TimedTransition ( 3.0d, 2.0d, new Quadratic.Out (), 1500L ) );
            progressAnimator.add ( new TimedTransition ( 2.0d, 1.0d, new Quadratic.Out (), 1500L ) );
            progressAnimator.add ( new TimedTransition ( 1.0d, 0.0d, new Quadratic.Out (), 1500L ) );
            progressAnimator.add ( new IdleTransition ( 0.0d, 1000L ) );

            final WebToggleButton determinate = new WebToggleButton ( StyleId.togglebuttonUndecorated, DemoIcons.play16, false );
            determinate.addItemListener ( new ItemListener ()
            {
                @Override
                public void itemStateChanged ( final ItemEvent e )
                {
                    if ( determinate.isSelected () )
                    {
                        // Invoking later to allow second button change to sink in
                        CoreSwingUtils.invokeLater ( new Runnable ()
                        {
                            @Override
                            public void run ()
                            {
                                determinate.setIcon ( DemoIcons.pause16 );
                                progressAnimator.play ();
                            }
                        } );
                    }
                    else
                    {
                        determinate.setIcon ( DemoIcons.play16 );
                        progressAnimator.stop ();
                    }
                }
            } );

            final WebToggleButton indeterminate = new WebToggleButton ( StyleId.togglebuttonUndecorated, DemoIcons.indeterminate16, false );
            indeterminate.addItemListener ( new ItemListener ()
            {
                @Override
                public void itemStateChanged ( final ItemEvent e )
                {
                    if ( indeterminate.isSelected () )
                    {
                        // Invoking later to allow second button change to sink in
                        CoreSwingUtils.invokeLater ( new Runnable ()
                        {
                            @Override
                            public void run ()
                            {
                                breadcrumb.forEach ( new BiConsumer ()
                                {
                                    @Override
                                    public void accept ( final Integer index, final JComponent component )
                                    {
                                        breadcrumb.setProgressType ( component, BreadcrumbElementData.ProgressType.indeterminate );
                                    }
                                } );
                            }
                        } );
                    }
                    else
                    {
                        breadcrumb.forEach ( new BiConsumer ()
                        {
                            @Override
                            public void accept ( final Integer index, final JComponent component )
                            {
                                breadcrumb.setProgressType ( component, BreadcrumbElementData.ProgressType.none );
                            }
                        } );
                    }
                }
            } );

            UnselectableButtonGroup.group ( determinate, indeterminate );

            progressAnimator.addListener ( new TransitionAdapter ()
            {
                @Override
                public void started ( final Transition transition, final Double value )
                {
                    breadcrumb.forEach ( new BiConsumer ()
                    {
                        @Override
                        public void accept ( final Integer index, final JComponent component )
                        {
                            breadcrumb.setProgressType ( component, BreadcrumbElementData.ProgressType.progress );
                        }
                    } );
                    adjusted ( transition, value );
                }

                @Override
                public void adjusted ( final Transition transition, final Double value )
                {
                    // todo This is good enough for demo, but still might improve later on
                    final double floor = Math.floor ( value );
                    final int index = ( int ) Math.round ( floor );
                    if ( index < breadcrumb.getComponentCount () )
                    {
                        final JComponent component = ( JComponent ) breadcrumb.getComponent ( index );
                        breadcrumb.setProgress ( component, value - floor );
                    }
                }

                @Override
                public void finished ( final Transition transition, final Double value )
                {
                    aborted ( transition, value );
                }

                @Override
                public void aborted ( final Transition transition, final Double value )
                {
                    breadcrumb.forEach ( new BiConsumer ()
                    {
                        @Override
                        public void accept ( final Integer index, final JComponent component )
                        {
                            breadcrumb.setProgressType ( component, BreadcrumbElementData.ProgressType.none );
                            breadcrumb.setProgress ( component, 0.0d );
                        }
                    } );
                }
            } );

            return new WebPanel ( StyleId.panelTransparent, new HorizontalFlowLayout ( 8, false ), determinate, indeterminate, breadcrumb );
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy