diff --git a/component/src/main/java/org/pushingpixels/radiance/component/api/common/model/BaseCommand.java b/component/src/main/java/org/pushingpixels/radiance/component/api/common/model/BaseCommand.java index f24adc13a..1112f6229 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/api/common/model/BaseCommand.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/api/common/model/BaseCommand.java @@ -235,6 +235,10 @@ public Object getTag() { return this.tag; } + public void setTag(Object tag) { + this.tag = tag; + } + @Override public void addChangeListener(ChangeListener l) { this.weakChangeSupport.addChangeListener(l); diff --git a/component/src/main/java/org/pushingpixels/radiance/component/api/ribbon/JRibbon.java b/component/src/main/java/org/pushingpixels/radiance/component/api/ribbon/JRibbon.java index 6cdb70473..b439c5a90 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/api/ribbon/JRibbon.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/api/ribbon/JRibbon.java @@ -806,7 +806,7 @@ public synchronized void setApplicationMenuCommand( if (applicationMenuCommandProjection == null) { this.applicationMenuProjection = null; } else { - RibbonApplicationMenu ribbonApplicationMenu = (RibbonApplicationMenu) + RibbonApplicationMenu ribbonApplicationMenu = applicationMenuCommandProjection.getContentModel().getSecondaryContentModel(); RibbonApplicationMenuProjection ribbonApplicationMenuProjection = new RibbonApplicationMenuProjection( diff --git a/component/src/main/java/org/pushingpixels/radiance/component/api/ribbon/JRibbonFrame.java b/component/src/main/java/org/pushingpixels/radiance/component/api/ribbon/JRibbonFrame.java index 99f0fc2eb..18e3a35d5 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/api/ribbon/JRibbonFrame.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/api/ribbon/JRibbonFrame.java @@ -36,13 +36,11 @@ import org.pushingpixels.radiance.component.api.common.CommandButtonLayoutManager; import org.pushingpixels.radiance.component.api.common.CommandButtonPresentationState; import org.pushingpixels.radiance.component.api.common.JCommandButton; -import org.pushingpixels.radiance.component.api.common.model.BaseCommand; -import org.pushingpixels.radiance.component.api.common.model.Command; -import org.pushingpixels.radiance.component.api.common.model.CommandButtonPresentationModel; -import org.pushingpixels.radiance.component.api.common.model.CommandMenuContentModel; +import org.pushingpixels.radiance.component.api.common.model.*; import org.pushingpixels.radiance.component.api.common.popup.JCommandPopupMenuPanel; import org.pushingpixels.radiance.component.api.common.popup.JPopupPanel; import org.pushingpixels.radiance.component.api.common.popup.PopupPanelManager; +import org.pushingpixels.radiance.component.api.common.popup.model.BaseCommandPopupMenuPresentationModel; import org.pushingpixels.radiance.component.api.common.popup.model.CommandPopupMenuPresentationModel; import org.pushingpixels.radiance.component.api.common.projection.BaseCommandButtonProjection; import org.pushingpixels.radiance.component.api.common.projection.CommandButtonProjection; @@ -53,7 +51,6 @@ import org.pushingpixels.radiance.component.api.ribbon.synapse.projection.ComponentProjection; import org.pushingpixels.radiance.component.internal.theming.ribbon.ui.RadianceRibbonFrameTitlePane; import org.pushingpixels.radiance.component.internal.ui.common.CommandButtonUI; -import org.pushingpixels.radiance.component.internal.ui.common.RadianceInternalButton; import org.pushingpixels.radiance.component.internal.ui.ribbon.*; import org.pushingpixels.radiance.component.internal.ui.ribbon.appmenu.JRibbonApplicationMenuPopupPanel; import org.pushingpixels.radiance.component.internal.utils.ComponentUtilities; @@ -748,19 +745,25 @@ private void handlePopupTrigger(MouseEvent event, Component c) { menuContentModel = onShowContextualMenuListener.getContextualMenuContentModel( ribbon, component.getProjection()); } else { - if ((c instanceof JCommandButton) && - (!(c instanceof RadianceInternalButton))) { - BaseCommandButtonProjection projection = ((JCommandButton) c).getProjection(); - if (SwingUtilities.getAncestorOfClass(JRibbonApplicationMenuPopupPanel.class, c) != null) { - // App menu link - Command appMenuCommand = (Command) projection.getContentModel(); - menuContentModel = - onShowContextualMenuListener.getContextualMenuContentModel( - ribbon, appMenuCommand); - } else { - menuContentModel = - onShowContextualMenuListener.getContextualMenuContentModel( - ribbon, projection); + if (c instanceof JCommandButton) { + BaseCommandButtonProjection, + ? extends BaseCommandMenuContentModel, + ? extends BaseCommandButtonPresentationModel, + ? extends BaseCommandPopupMenuPresentationModel> projection = + ((JCommandButton) c).getProjection(); + BaseCommand command = projection.getContentModel(); + if (!BasicRibbonUI.INTERNAL.equals(command.getTag())) { + if (SwingUtilities.getAncestorOfClass(JRibbonApplicationMenuPopupPanel.class, c) != null) { + // App menu link + Command appMenuCommand = (Command) projection.getContentModel(); + menuContentModel = + onShowContextualMenuListener.getContextualMenuContentModel( + ribbon, appMenuCommand); + } else { + menuContentModel = + onShowContextualMenuListener.getContextualMenuContentModel( + ribbon, projection); + } } } } diff --git a/component/src/main/java/org/pushingpixels/radiance/component/api/ribbon/model/RibbonApplicationMenuCommand.java b/component/src/main/java/org/pushingpixels/radiance/component/api/ribbon/model/RibbonApplicationMenuCommand.java index 081bbfdee..cc614c247 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/api/ribbon/model/RibbonApplicationMenuCommand.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/api/ribbon/model/RibbonApplicationMenuCommand.java @@ -31,6 +31,7 @@ import org.pushingpixels.radiance.component.api.common.model.BaseCommand; import org.pushingpixels.radiance.component.api.ribbon.RibbonApplicationMenu; +import org.pushingpixels.radiance.component.internal.ui.ribbon.BasicRibbonUI; public class RibbonApplicationMenuCommand extends BaseCommand { public static Builder builder() { @@ -44,7 +45,7 @@ public static class Builder extends BaseBuilder { /** - * Builds a color selector command from this builder. + * Builds a ribbon application menu command from this builder. * * @return Command. */ @@ -53,6 +54,7 @@ public RibbonApplicationMenuCommand build() { RibbonApplicationMenuCommand command = new RibbonApplicationMenuCommand(); this.configureBaseCommand(command); + command.setTag(BasicRibbonUI.INTERNAL); return command; } diff --git a/component/src/main/java/org/pushingpixels/radiance/component/api/ribbon/projection/RibbonApplicationMenuCommandButtonProjection.java b/component/src/main/java/org/pushingpixels/radiance/component/api/ribbon/projection/RibbonApplicationMenuCommandButtonProjection.java index a18529d65..7a40f45a5 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/api/ribbon/projection/RibbonApplicationMenuCommandButtonProjection.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/api/ribbon/projection/RibbonApplicationMenuCommandButtonProjection.java @@ -51,7 +51,6 @@ public class RibbonApplicationMenuCommandButtonProjection extends BaseCommandBut RibbonApplicationMenuCommand, RibbonApplicationMenu, CommandButtonPresentationModel, CommandPopupMenuPresentationModel> { - //JRibbonApplicationMenuPopupPanel> { public static final CommandButtonPresentationState RIBBON_APP_MENU_SECONDARY_LEVEL = new CommandButtonPresentationState("Ribbon application menu tile level 2", 32) { @Override @@ -77,7 +76,6 @@ public Map getSecondaryLevelCommandPres return this.secondaryLevelCommandPresentationState; } - //@Override public RibbonApplicationMenuCommandButtonProjection reproject( CommandButtonPresentationModel newCommandPresentation) { RibbonApplicationMenuCommandButtonProjection result = diff --git a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/BasicCommandButtonStripUI.java b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/BasicCommandButtonStripUI.java index e64623808..c29676735 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/BasicCommandButtonStripUI.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/BasicCommandButtonStripUI.java @@ -32,11 +32,11 @@ import org.pushingpixels.radiance.component.api.common.CommandAction; import org.pushingpixels.radiance.component.api.common.JCommandButton; import org.pushingpixels.radiance.component.api.common.JCommandButtonStrip; -import org.pushingpixels.radiance.component.api.common.model.*; -import org.pushingpixels.radiance.component.api.common.popup.model.BaseCommandPopupMenuPresentationModel; -import org.pushingpixels.radiance.component.api.common.projection.BaseCommandButtonProjection; +import org.pushingpixels.radiance.component.api.common.model.Command; +import org.pushingpixels.radiance.component.api.common.model.CommandButtonPresentationModel; +import org.pushingpixels.radiance.component.api.common.model.CommandGroup; +import org.pushingpixels.radiance.component.api.common.model.CommandStripPresentationModel; import org.pushingpixels.radiance.component.api.common.projection.CommandButtonProjection; -import org.pushingpixels.radiance.component.api.common.projection.Projection; import javax.swing.*; import javax.swing.border.EmptyBorder; diff --git a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/BasicCommandButtonUI.java b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/BasicCommandButtonUI.java index 67c691f96..d84470823 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/BasicCommandButtonUI.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/BasicCommandButtonUI.java @@ -29,23 +29,21 @@ */ package org.pushingpixels.radiance.component.internal.ui.common; +import org.pushingpixels.radiance.common.api.AsynchronousLoading; +import org.pushingpixels.radiance.common.api.RadianceCommonCortex; +import org.pushingpixels.radiance.common.api.icon.RadianceIcon; import org.pushingpixels.radiance.component.api.common.*; import org.pushingpixels.radiance.component.api.common.CommandButtonLayoutManager.CommandButtonLayoutInfo; import org.pushingpixels.radiance.component.api.common.model.BaseCommand; import org.pushingpixels.radiance.component.api.common.model.Command; -import org.pushingpixels.radiance.component.api.common.model.CommandButtonPresentationModel; import org.pushingpixels.radiance.component.api.common.model.PopupButtonModel; import org.pushingpixels.radiance.component.api.common.popup.JCommandPopupMenuPanel; import org.pushingpixels.radiance.component.api.common.popup.JPopupPanel; import org.pushingpixels.radiance.component.api.common.popup.PopupPanelCallback; import org.pushingpixels.radiance.component.api.common.popup.PopupPanelManager; -import org.pushingpixels.radiance.common.api.AsynchronousLoading; -import org.pushingpixels.radiance.common.api.RadianceCommonCortex; -import org.pushingpixels.radiance.common.api.icon.RadianceIcon; import org.pushingpixels.radiance.theming.api.RadianceThemingCortex; import org.pushingpixels.radiance.theming.api.RadianceThemingSlices; import org.pushingpixels.radiance.theming.internal.utils.RadianceCoreUtilities; -import org.pushingpixels.radiance.theming.internal.utils.RadianceSizeUtils; import javax.swing.*; import javax.swing.border.Border; diff --git a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/BasicRichTooltipPanelUI.java b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/BasicRichTooltipPanelUI.java index c9248ec8d..055416aeb 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/BasicRichTooltipPanelUI.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/BasicRichTooltipPanelUI.java @@ -29,10 +29,10 @@ */ package org.pushingpixels.radiance.component.internal.ui.common; +import org.pushingpixels.radiance.common.api.icon.RadianceIcon; import org.pushingpixels.radiance.component.api.common.RichTooltip; import org.pushingpixels.radiance.component.api.common.model.RichTooltipPresentationModel; import org.pushingpixels.radiance.component.internal.utils.ComponentUtilities; -import org.pushingpixels.radiance.common.api.icon.RadianceIcon; import org.pushingpixels.radiance.theming.api.RadianceThemingCortex; import org.pushingpixels.radiance.theming.internal.utils.border.RadianceBorder; diff --git a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/BasicSwitchUI.java b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/BasicSwitchUI.java index 67d42f184..4416c7067 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/BasicSwitchUI.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/BasicSwitchUI.java @@ -30,20 +30,10 @@ package org.pushingpixels.radiance.component.internal.ui.common; import org.pushingpixels.radiance.common.api.RadianceCommonCortex; -import org.pushingpixels.radiance.common.api.model.TriStateButtonModel; -import org.pushingpixels.radiance.common.api.model.TriStateSelectionChangeEvent; -import org.pushingpixels.radiance.common.api.model.TriStateSelectionChangeListener; -import org.pushingpixels.radiance.common.api.model.TriStateSelectionCycler; import org.pushingpixels.radiance.component.api.common.JSwitch; -import org.pushingpixels.radiance.component.api.common.JTriStateCheckBox; -import org.pushingpixels.radiance.component.internal.theming.common.tristate.RolloverTriStateListener; import org.pushingpixels.radiance.theming.internal.animation.StateTransitionTracker; import org.pushingpixels.radiance.theming.internal.animation.TransitionAwareUI; -import org.pushingpixels.radiance.theming.internal.blade.BladeColorScheme; -import org.pushingpixels.radiance.theming.internal.utils.RadianceMetricsUtilities; -import org.pushingpixels.radiance.theming.internal.utils.RadianceSizeUtils; import org.pushingpixels.radiance.theming.internal.utils.RolloverButtonListener; -import org.pushingpixels.radiance.theming.internal.utils.border.RadianceBorder; import javax.swing.*; import javax.swing.border.Border; @@ -52,7 +42,6 @@ import javax.swing.plaf.basic.BasicButtonListener; import javax.swing.plaf.basic.BasicToggleButtonUI; import java.awt.*; -import java.awt.event.ItemEvent; import java.awt.event.MouseEvent; import java.beans.PropertyChangeListener; diff --git a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/CommandButtonLayoutManagerBig.java b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/CommandButtonLayoutManagerBig.java index 8dd2bbf55..7ebfc07f5 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/CommandButtonLayoutManagerBig.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/CommandButtonLayoutManagerBig.java @@ -29,13 +29,13 @@ */ package org.pushingpixels.radiance.component.internal.ui.common; +import org.pushingpixels.radiance.common.api.RadianceCommonCortex; +import org.pushingpixels.radiance.common.api.icon.RadianceIcon; import org.pushingpixels.radiance.component.api.common.CommandButtonLayoutManager; import org.pushingpixels.radiance.component.api.common.CommandButtonPresentationState; import org.pushingpixels.radiance.component.api.common.JCommandButton; import org.pushingpixels.radiance.component.api.common.model.BaseCommandButtonPresentationModel; import org.pushingpixels.radiance.component.internal.utils.ComponentUtilities; -import org.pushingpixels.radiance.common.api.RadianceCommonCortex; -import org.pushingpixels.radiance.common.api.icon.RadianceIcon; import org.pushingpixels.radiance.theming.internal.utils.RadianceMetricsUtilities; import javax.swing.*; diff --git a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/CommandButtonLayoutManagerMedium.java b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/CommandButtonLayoutManagerMedium.java index f0f250563..782ee65c0 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/CommandButtonLayoutManagerMedium.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/CommandButtonLayoutManagerMedium.java @@ -29,13 +29,13 @@ */ package org.pushingpixels.radiance.component.internal.ui.common; +import org.pushingpixels.radiance.common.api.RadianceCommonCortex; import org.pushingpixels.radiance.common.api.icon.RadianceIcon; import org.pushingpixels.radiance.component.api.common.CommandButtonLayoutManager; import org.pushingpixels.radiance.component.api.common.JCommandButton; import org.pushingpixels.radiance.component.api.common.model.BaseCommandButtonPresentationModel; import org.pushingpixels.radiance.component.internal.ui.common.popup.BasicCommandPopupMenuPanelUI; import org.pushingpixels.radiance.component.internal.utils.ComponentUtilities; -import org.pushingpixels.radiance.common.api.RadianceCommonCortex; import org.pushingpixels.radiance.theming.internal.utils.RadianceMetricsUtilities; import javax.swing.*; diff --git a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/CommandButtonLayoutManagerSmall.java b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/CommandButtonLayoutManagerSmall.java index 0b61a1e5f..88dff1030 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/CommandButtonLayoutManagerSmall.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/CommandButtonLayoutManagerSmall.java @@ -29,12 +29,12 @@ */ package org.pushingpixels.radiance.component.internal.ui.common; +import org.pushingpixels.radiance.common.api.RadianceCommonCortex; +import org.pushingpixels.radiance.common.api.icon.RadianceIcon; import org.pushingpixels.radiance.component.api.common.CommandButtonLayoutManager; import org.pushingpixels.radiance.component.api.common.JCommandButton; import org.pushingpixels.radiance.component.api.common.model.BaseCommandButtonPresentationModel; import org.pushingpixels.radiance.component.internal.utils.ComponentUtilities; -import org.pushingpixels.radiance.common.api.RadianceCommonCortex; -import org.pushingpixels.radiance.common.api.icon.RadianceIcon; import org.pushingpixels.radiance.theming.internal.utils.RadianceMetricsUtilities; import javax.swing.*; diff --git a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/CommandButtonLayoutManagerTile.java b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/CommandButtonLayoutManagerTile.java index 22852cfae..9f73867c1 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/CommandButtonLayoutManagerTile.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/CommandButtonLayoutManagerTile.java @@ -29,12 +29,12 @@ */ package org.pushingpixels.radiance.component.internal.ui.common; +import org.pushingpixels.radiance.common.api.RadianceCommonCortex; +import org.pushingpixels.radiance.common.api.icon.RadianceIcon; import org.pushingpixels.radiance.component.api.common.CommandButtonLayoutManager; import org.pushingpixels.radiance.component.api.common.JCommandButton; import org.pushingpixels.radiance.component.api.common.model.BaseCommandButtonPresentationModel; import org.pushingpixels.radiance.component.internal.utils.ComponentUtilities; -import org.pushingpixels.radiance.common.api.RadianceCommonCortex; -import org.pushingpixels.radiance.common.api.icon.RadianceIcon; import org.pushingpixels.radiance.theming.internal.utils.RadianceMetricsUtilities; import javax.swing.*; diff --git a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/RadianceInternalButton.java b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/RadianceInternalButton.java deleted file mode 100644 index e70440652..000000000 --- a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/RadianceInternalButton.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2005-2023 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.internal.ui.common; - -public interface RadianceInternalButton { -} diff --git a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/popup/BasicCommandPopupMenuPanelUI.java b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/popup/BasicCommandPopupMenuPanelUI.java index edb7b2f90..3f8b2d40b 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/popup/BasicCommandPopupMenuPanelUI.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/common/popup/BasicCommandPopupMenuPanelUI.java @@ -33,7 +33,6 @@ import org.pushingpixels.radiance.component.api.common.JCommandButton; import org.pushingpixels.radiance.component.api.common.JCommandButtonPanel; import org.pushingpixels.radiance.component.api.common.JScrollablePanel; -import org.pushingpixels.radiance.component.api.common.model.CommandPanelPresentationModel; import org.pushingpixels.radiance.component.api.common.model.CommandPopupMenuPanelPresentationModel; import org.pushingpixels.radiance.component.api.common.model.panel.PanelLayoutSpec; import org.pushingpixels.radiance.component.api.common.model.panel.PanelRowFillSpec; diff --git a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/BasicRibbonUI.java b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/BasicRibbonUI.java index cbc5b92f9..1cd93a7b3 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/BasicRibbonUI.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/BasicRibbonUI.java @@ -30,10 +30,7 @@ package org.pushingpixels.radiance.component.internal.ui.ribbon; import org.pushingpixels.radiance.common.api.RadianceCommonCortex; -import org.pushingpixels.radiance.component.api.common.CommandButtonPresentationState; -import org.pushingpixels.radiance.component.api.common.JCommandButton; -import org.pushingpixels.radiance.component.api.common.JScrollablePanel; -import org.pushingpixels.radiance.component.api.common.RichTooltipManager; +import org.pushingpixels.radiance.component.api.common.*; import org.pushingpixels.radiance.component.api.common.model.Command; import org.pushingpixels.radiance.component.api.common.model.CommandButtonPresentationModel; import org.pushingpixels.radiance.component.api.common.model.CommandToggleGroupModel; @@ -42,9 +39,9 @@ import org.pushingpixels.radiance.component.api.common.popup.PopupPanelManager.PopupEvent; import org.pushingpixels.radiance.component.api.common.projection.CommandButtonProjection; import org.pushingpixels.radiance.component.api.ribbon.*; +import org.pushingpixels.radiance.component.api.ribbon.projection.RibbonApplicationMenuCommandButtonProjection; import org.pushingpixels.radiance.component.api.ribbon.resize.RibbonBandResizePolicy; import org.pushingpixels.radiance.component.api.ribbon.resize.RibbonBandResizeSequencingPolicy; -import org.pushingpixels.radiance.component.internal.ui.ribbon.appmenu.JRibbonApplicationMenuButton; import org.pushingpixels.radiance.component.internal.utils.ComponentUtilities; import org.pushingpixels.radiance.component.internal.utils.KeyTipManager; import org.pushingpixels.radiance.theming.api.RadianceThemingCortex; @@ -69,7 +66,8 @@ * @author Kirill Grouchnikov */ public abstract class BasicRibbonUI extends RibbonUI { - private static final String JUST_MINIMIZED = "ribbon.internal.justMinimized"; + private static final String JUST_MINIMIZED = "radiance.internal.ribbon.justMinimized"; + public static final String INTERNAL = "radiance.internal.ribbon.internal"; /** * The associated ribbon. @@ -80,7 +78,7 @@ public abstract class BasicRibbonUI extends RibbonUI { protected JScrollablePanel taskToggleButtonsScrollablePanel; - protected JRibbonApplicationMenuButton applicationMenuButton; + protected JCommandButton applicationMenuButton; private Container anchoredButtons; @@ -150,8 +148,7 @@ protected void installListeners() { boolean isShowingAppMenuButton = (ribbon.getApplicationMenuProjection() != null); if (isShowingAppMenuButton) { - this.applicationMenuButton = new JRibbonApplicationMenuButton( - this.ribbon.getApplicationMenuCommandProjection()); + this.applicationMenuButton = createApplicationMenuButton(); this.applicationMenuButton.applyComponentOrientation( this.ribbon.getComponentOrientation()); this.syncApplicationMenuTips(); @@ -251,8 +248,7 @@ protected void installComponents() { boolean isShowingAppMenuButton = (ribbon.getApplicationMenuProjection() != null); if (isShowingAppMenuButton) { - this.applicationMenuButton = new JRibbonApplicationMenuButton( - this.ribbon.getApplicationMenuCommandProjection()); + this.applicationMenuButton = createApplicationMenuButton(); this.applicationMenuButton.applyComponentOrientation( this.ribbon.getComponentOrientation()); this.syncApplicationMenuTips(); @@ -265,8 +261,92 @@ protected void installComponents() { } } + private final static CommandButtonPresentationState APP_MENU_BUTTON_STATE = + new CommandButtonPresentationState("Ribbon Application Menu Button", 16) { + @Override + public CommandButtonLayoutManager createLayoutManager(JCommandButton + commandButton) { + return new CommandButtonLayoutManager() { + @Override + public Dimension getPreferredIconSize(JCommandButton commandButton) { + return null; + } + + @Override + public CommandButtonLayoutInfo getLayoutInfo( + JCommandButton commandButton) { + CommandButtonLayoutInfo result = new CommandButtonLayoutInfo(); + result.actionClickArea = new Rectangle(0, 0, 0, 0); + result.popupActionRect = new Rectangle(0, 0, 0, 0); + result.isTextInActionArea = false; + + FontMetrics fm = RadianceMetricsUtilities.getFontMetrics( + RadianceCommonCortex.getScaleFactor(commandButton), + commandButton.getFont()); + int labelHeight = fm.getAscent() + fm.getDescent(); + + int availableWidth = commandButton.getWidth(); + int textWidth = fm.stringWidth(commandButton.getText()); + + TextLayoutInfo lineLayoutInfo = new TextLayoutInfo(); + lineLayoutInfo.text = commandButton.getText(); + lineLayoutInfo.textRect = new Rectangle(); + result.textLayoutInfoList = new ArrayList<>(); + result.textLayoutInfoList.add(lineLayoutInfo); + + lineLayoutInfo.textRect.x = (availableWidth - textWidth) / 2; + lineLayoutInfo.textRect.y = + (commandButton.getHeight() - labelHeight) / 2; + lineLayoutInfo.textRect.width = textWidth; + lineLayoutInfo.textRect.height = labelHeight; + + result.popupClickArea = new Rectangle(0, 0, availableWidth, + commandButton.getHeight()); + + return result; + } + + @Override + public Dimension getPreferredSize( + JCommandButton commandButton) { + return new Dimension(40, 20); + } + + @Override + public Point getActionKeyTipAnchorCenterPoint( + JCommandButton commandButton) { + return null; + } + + @Override + public Point getPopupKeyTipAnchorCenterPoint( + JCommandButton commandButton) { + // center at the middle of the bottom edge to be consistent with + // the location of key tips of the task toggle buttons + return new Point(commandButton.getWidth() / 2, + commandButton.getHeight()); + } + }; + } + }; + + private JCommandButton createApplicationMenuButton() { + RibbonApplicationMenuCommandButtonProjection applicationMenuCommandButtonProjection = + this.ribbon.getApplicationMenuCommandProjection(); + return new JCommandButton( + applicationMenuCommandButtonProjection.reproject( + CommandButtonPresentationModel.builder() + .setPresentationState(APP_MENU_BUTTON_STATE) + .setHorizontalAlignment(SwingConstants.CENTER) + .setPopupRichTooltipPresentationModel( + applicationMenuCommandButtonProjection.getPresentationModel(). + getPopupRichTooltipPresentationModel()) + .build()) + ); + } + @Override - public JRibbonApplicationMenuButton getApplicationMenuButton() { + public JCommandButton getApplicationMenuButton() { return this.applicationMenuButton; } @@ -1109,6 +1189,7 @@ private void syncRibbonState() { .setAction(commandActionEvent -> SwingUtilities.invokeLater(() -> processTaskSelection(task, (JRibbonTaskToggleButton) commandActionEvent.getButtonSource()))) + .setTag(BasicRibbonUI.INTERNAL) .build(); // And create a specific projection diff --git a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/JRibbonTaskToggleButton.java b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/JRibbonTaskToggleButton.java index 82a89d98a..35f5e69e4 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/JRibbonTaskToggleButton.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/JRibbonTaskToggleButton.java @@ -30,13 +30,13 @@ package org.pushingpixels.radiance.component.internal.ui.ribbon; import org.pushingpixels.radiance.component.api.common.JCommandButton; -import org.pushingpixels.radiance.component.api.common.model.*; +import org.pushingpixels.radiance.component.api.common.model.BaseCommand; +import org.pushingpixels.radiance.component.api.common.model.BaseCommandButtonPresentationModel; +import org.pushingpixels.radiance.component.api.common.model.BaseCommandMenuContentModel; import org.pushingpixels.radiance.component.api.common.popup.model.BaseCommandPopupMenuPresentationModel; import org.pushingpixels.radiance.component.api.common.projection.BaseCommandButtonProjection; -import org.pushingpixels.radiance.component.api.common.projection.Projection; import org.pushingpixels.radiance.component.api.ribbon.RibbonTask; import org.pushingpixels.radiance.component.internal.theming.ribbon.ui.RadianceRibbonTaskToggleButtonUI; -import org.pushingpixels.radiance.component.internal.ui.common.RadianceInternalButton; import java.awt.*; @@ -46,8 +46,7 @@ * * @author Kirill Grouchnikov */ -public class JRibbonTaskToggleButton extends JCommandButton - implements RadianceInternalButton { +public class JRibbonTaskToggleButton extends JCommandButton { /** * The UI class ID string. */ diff --git a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/RibbonUI.java b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/RibbonUI.java index d691f9573..ca91502ba 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/RibbonUI.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/RibbonUI.java @@ -29,9 +29,9 @@ */ package org.pushingpixels.radiance.component.internal.ui.ribbon; +import org.pushingpixels.radiance.component.api.common.JCommandButton; import org.pushingpixels.radiance.component.api.ribbon.JRibbon; import org.pushingpixels.radiance.component.api.ribbon.RibbonContextualTaskGroup; -import org.pushingpixels.radiance.component.internal.ui.ribbon.appmenu.JRibbonApplicationMenuButton; import javax.swing.plaf.ComponentUI; import java.awt.*; @@ -56,5 +56,5 @@ public abstract class RibbonUI extends ComponentUI { public abstract void handleMouseWheelEvent(MouseWheelEvent e); - public abstract JRibbonApplicationMenuButton getApplicationMenuButton(); + public abstract JCommandButton getApplicationMenuButton(); } diff --git a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/appmenu/BasicRibbonApplicationMenuPopupPanelUI.java b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/appmenu/BasicRibbonApplicationMenuPopupPanelUI.java index 5ffeb56bc..78e2fb378 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/appmenu/BasicRibbonApplicationMenuPopupPanelUI.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/appmenu/BasicRibbonApplicationMenuPopupPanelUI.java @@ -29,7 +29,10 @@ */ package org.pushingpixels.radiance.component.internal.ui.ribbon.appmenu; -import org.pushingpixels.radiance.component.api.common.*; +import org.pushingpixels.radiance.component.api.common.CommandButtonLayoutManager; +import org.pushingpixels.radiance.component.api.common.CommandButtonPresentationState; +import org.pushingpixels.radiance.component.api.common.JCommandButton; +import org.pushingpixels.radiance.component.api.common.JScrollablePanel; import org.pushingpixels.radiance.component.api.common.model.Command; import org.pushingpixels.radiance.component.api.common.model.CommandButtonPresentationModel; import org.pushingpixels.radiance.component.api.common.model.CommandGroup; @@ -55,7 +58,7 @@ import java.util.Map; /** - * Basic UI for ribbon application menu button {@link JRibbonApplicationMenuButton}. + * Basic UI for ribbon application menu button. * * @author Kirill Grouchnikov */ diff --git a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/appmenu/JRibbonApplicationMenuButton.java b/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/appmenu/JRibbonApplicationMenuButton.java deleted file mode 100644 index d7ade30b7..000000000 --- a/component/src/main/java/org/pushingpixels/radiance/component/internal/ui/ribbon/appmenu/JRibbonApplicationMenuButton.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (c) 2005-2023 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.internal.ui.ribbon.appmenu; - -import org.pushingpixels.radiance.component.api.common.CommandButtonLayoutManager; -import org.pushingpixels.radiance.component.api.common.CommandButtonPresentationState; -import org.pushingpixels.radiance.component.api.common.JCommandButton; -import org.pushingpixels.radiance.component.api.common.model.CommandButtonPresentationModel; -import org.pushingpixels.radiance.component.api.ribbon.JRibbon; -import org.pushingpixels.radiance.component.api.ribbon.JRibbonFrame; -import org.pushingpixels.radiance.component.api.ribbon.projection.RibbonApplicationMenuCommandButtonProjection; -import org.pushingpixels.radiance.component.internal.ui.common.RadianceInternalButton; -import org.pushingpixels.radiance.common.api.RadianceCommonCortex; -import org.pushingpixels.radiance.theming.internal.utils.RadianceMetricsUtilities; - -import javax.swing.*; -import java.awt.*; -import java.util.ArrayList; - -/** - * The main application menu button for {@link JRibbon} component placed in a - * {@link JRibbonFrame}. This class is for internal use only. - * - * @author Kirill Grouchnikov - */ -public class JRibbonApplicationMenuButton extends JCommandButton - implements RadianceInternalButton { - private final static CommandButtonPresentationState APP_MENU_BUTTON_STATE = - new CommandButtonPresentationState("Ribbon Application Menu Button", 16) { - @Override - public CommandButtonLayoutManager createLayoutManager(JCommandButton - commandButton) { - return new CommandButtonLayoutManager() { - @Override - public Dimension getPreferredIconSize(JCommandButton commandButton) { - return null; - } - - @Override - public CommandButtonLayoutInfo getLayoutInfo( - JCommandButton commandButton) { - CommandButtonLayoutInfo result = new CommandButtonLayoutInfo(); - result.actionClickArea = new Rectangle(0, 0, 0, 0); - result.popupActionRect = new Rectangle(0, 0, 0, 0); - result.isTextInActionArea = false; - - FontMetrics fm = RadianceMetricsUtilities.getFontMetrics( - RadianceCommonCortex.getScaleFactor(commandButton), - commandButton.getFont()); - int labelHeight = fm.getAscent() + fm.getDescent(); - - int availableWidth = commandButton.getWidth(); - int textWidth = fm.stringWidth(commandButton.getText()); - - TextLayoutInfo lineLayoutInfo = new TextLayoutInfo(); - lineLayoutInfo.text = commandButton.getText(); - lineLayoutInfo.textRect = new Rectangle(); - result.textLayoutInfoList = new ArrayList<>(); - result.textLayoutInfoList.add(lineLayoutInfo); - - lineLayoutInfo.textRect.x = (availableWidth - textWidth) / 2; - lineLayoutInfo.textRect.y = - (commandButton.getHeight() - labelHeight) / 2; - lineLayoutInfo.textRect.width = textWidth; - lineLayoutInfo.textRect.height = labelHeight; - - result.popupClickArea = new Rectangle(0, 0, availableWidth, - commandButton.getHeight()); - - return result; - } - - @Override - public Dimension getPreferredSize( - JCommandButton commandButton) { - return new Dimension(40, 20); - } - - @Override - public Point getActionKeyTipAnchorCenterPoint( - JCommandButton commandButton) { - return null; - } - - @Override - public Point getPopupKeyTipAnchorCenterPoint( - JCommandButton commandButton) { - // center at the middle of the bottom edge to be consistent with - // the location of key tips of the task toggle buttons - return new Point(commandButton.getWidth() / 2, - commandButton.getHeight()); - } - }; - } - }; - - public JRibbonApplicationMenuButton( - RibbonApplicationMenuCommandButtonProjection ribbonApplicationMenuCommandProjection) { - // Reproject the command so that the button uses our custom state and centered text - super(ribbonApplicationMenuCommandProjection.reproject( - CommandButtonPresentationModel.builder() - .setPresentationState(APP_MENU_BUTTON_STATE) - .setHorizontalAlignment(SwingConstants.CENTER) - .setPopupRichTooltipPresentationModel( - ribbonApplicationMenuCommandProjection.getPresentationModel(). - getPopupRichTooltipPresentationModel()) - .build())); - } -} diff --git a/component/src/main/java/org/pushingpixels/radiance/component/internal/utils/KeyTipManager.java b/component/src/main/java/org/pushingpixels/radiance/component/internal/utils/KeyTipManager.java index 626083c01..5ce9f300d 100644 --- a/component/src/main/java/org/pushingpixels/radiance/component/internal/utils/KeyTipManager.java +++ b/component/src/main/java/org/pushingpixels/radiance/component/internal/utils/KeyTipManager.java @@ -42,7 +42,6 @@ import org.pushingpixels.radiance.component.internal.ui.ribbon.BasicRibbonUI; import org.pushingpixels.radiance.component.internal.ui.ribbon.JRibbonComponent; import org.pushingpixels.radiance.component.internal.ui.ribbon.RibbonUI; -import org.pushingpixels.radiance.component.internal.ui.ribbon.appmenu.JRibbonApplicationMenuButton; import org.pushingpixels.radiance.component.internal.ui.ribbon.appmenu.JRibbonApplicationMenuPopupPanel; import javax.swing.FocusManager; @@ -191,8 +190,7 @@ public void showRootKeyTipChain(JRibbonFrame ribbonFrame) { KeyTipChain root = new KeyTipChain(ribbon); // application menu button - final JRibbonApplicationMenuButton appMenuButton = - ribbon.getUI().getApplicationMenuButton(); + final JCommandButton appMenuButton = ribbon.getUI().getApplicationMenuButton(); if ((appMenuButton != null) && (ribbon.getApplicationMenuCommandProjection() .getPresentationModel().getPopupKeyTip() != null)) { final KeyTipLink appMenuButtonLink = new KeyTipLink();