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

org.pushingpixels.flamingo.api.ribbon.RibbonApplicationMenuEntryPrimary Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2005-2010 Flamingo 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 Flamingo Kirill Grouchnikov 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.flamingo.api.ribbon;

import java.awt.event.ActionListener;
import java.util.*;

import javax.swing.JPanel;

import org.pushingpixels.flamingo.api.common.JCommandButton.CommandButtonKind;
import org.pushingpixels.flamingo.api.common.icon.ResizableIcon;

/**
 * Metadata description for the primary menu entries of the
 * {@link RibbonApplicationMenu}. The primary menu entries at runtime are
 * represented by command menu buttons placed in the left panel of the
 * application menu.
 * 
 * 

* There are three different types of primary entries: *

* *
    *
  • Associated {@link ActionListener} passed to the * {@link RibbonApplicationMenuEntryPrimary#RibbonApplicationMenuEntryPrimary(ResizableIcon, String, ActionListener, CommandButtonKind)} * . When this entry is armed (with mouse rollover or via keyboard navigation), * the contents of the secondary area are cleared. The Quit menu * item is an example of such a primary menu entry.
  • *
  • Associated {@link PrimaryRolloverCallback} set by the * {@link #setRolloverCallback(PrimaryRolloverCallback)} . When this entry is * armed (with mouse rollover or via keyboard navigation), the contents of the * secondary area are populated by the application callback implementation of * {@link PrimaryRolloverCallback#menuEntryActivated(javax.swing.JPanel)}. The * Open menu item is an example of such a primary menu entry, * showing a list of recently opened files.
  • *
  • Associated list of {@link RibbonApplicationMenuEntrySecondary}s added * with the * {@link #addSecondaryMenuGroup(String, RibbonApplicationMenuEntrySecondary...)} * API. When this entry is armed (with mouse rollover or via keyboard * navigation), the secondary area shows menu buttons for the registered * secondary menu entries. The Save As menu item is an example of * such a primary menu item, showing a list of default save formats.
  • *
* * @author Kirill Grouchnikov */ public class RibbonApplicationMenuEntryPrimary extends RibbonApplicationMenuEntry { /** * An optional rollover callback. It allows the application to place custom * content in the secondary panel of the {@link RibbonApplicationMenu} when * this primary menu entry is activated. * * @see #setRolloverCallback(PrimaryRolloverCallback) * @see #getRolloverCallback() */ protected PrimaryRolloverCallback rolloverCallback; /** * Callback that allows application code to provide custom content on the * secondary panel of the {@link RibbonApplicationMenu}. * * @author Kirill Grouchnikov */ public static interface PrimaryRolloverCallback { /** * Called when the matching primary menu item is activated. * * @param targetPanel * The secondary panel of the {@link RibbonApplicationMenu}. * Note that the application code must not * change the parent hierarchy of this panel. */ public void menuEntryActivated(JPanel targetPanel); } /** * List of titles for all menu groups. */ protected List groupTitles; /** * List of all menu groups. */ protected List> groupEntries; /** * Creates the metadata description of a {@link RibbonApplicationMenu} * primary menu entry. * * @param icon * The icon of this menu entry. Must be non-null. * @param text * The text of this menu entry. Must be non-null. * @param mainActionListener * The main action listener for this menu entry. If the entry * kind is {@link CommandButtonKind#POPUP_ONLY}, this listener * will be ignored. * @param entryKind * The kind of the command button that will represent this menu * entry. Must be non- null. */ public RibbonApplicationMenuEntryPrimary(ResizableIcon icon, String text, ActionListener mainActionListener, CommandButtonKind entryKind) { super(icon, text, mainActionListener, entryKind); this.groupTitles = new ArrayList(); this.groupEntries = new ArrayList>(); } /** * Adds a titled group of secondary menu entries. * * @param groupTitle * The title of the group. * @param entries * The secondary menu entries belonging to this group. * @return The index of the newly added menu group. * @see #getSecondaryGroupCount() * @see #getSecondaryGroupTitleAt(int) * @see #getSecondaryGroupEntries(int) */ public synchronized int addSecondaryMenuGroup(String groupTitle, RibbonApplicationMenuEntrySecondary... entries) { this.groupTitles.add(groupTitle); List entryList = new ArrayList(); this.groupEntries.add(entryList); for (RibbonApplicationMenuEntrySecondary entry : entries) { entryList.add(entry); } return this.groupTitles.size() - 1; } /** * Returns the number of secondary menu groups of this primary menu entry. * * @return The number of secondary menu groups of this primary menu entry. * @see #addSecondaryMenuGroup(String, * RibbonApplicationMenuEntrySecondary...) * @see #getSecondaryGroupTitleAt(int) * @see #getSecondaryGroupEntries(int) */ public int getSecondaryGroupCount() { return this.groupTitles.size(); } /** * Returns the title of the secondary menu group at the specified index. * * @param groupIndex * The index of a secondary menu group. * @return The title of the secondary menu group at the specified index. * @see #addSecondaryMenuGroup(String, * RibbonApplicationMenuEntrySecondary...) * @see #getSecondaryGroupCount() * @see #getSecondaryGroupEntries(int) */ public String getSecondaryGroupTitleAt(int groupIndex) { return this.groupTitles.get(groupIndex); } /** * Returns an unmodifiable list of menu entries of the secondary menu group * at the specified index. * * @param groupIndex * The index of a secondary menu group. * @return An unmodifiable list of menu entries of the secondary menu group * at the specified index. * @see #addSecondaryMenuGroup(String, * RibbonApplicationMenuEntrySecondary...) * @see #getSecondaryGroupCount() * @see #getSecondaryGroupTitleAt(int) */ public List getSecondaryGroupEntries( int groupIndex) { return Collections.unmodifiableList(this.groupEntries.get(groupIndex)); } /** * Sets the rollover callback that allows the application to place custom * content in the secondary panel of the {@link RibbonApplicationMenu} when * this primary menu entry is activated. * * @param rolloverCallback * The new rollover callback for populating the secondary panel * of the {@link RibbonApplicationMenu}. * @see #getRolloverCallback() */ public void setRolloverCallback(PrimaryRolloverCallback rolloverCallback) { this.rolloverCallback = rolloverCallback; } /** * Returns the current application callback that allows placing custom * content in the secondary panel of the {@link RibbonApplicationMenu} when * this primary menu entry is activated. * * @return The current rollover callback for populating the secondary panel * of the {@link RibbonApplicationMenu}. * @see #setRolloverCallback(PrimaryRolloverCallback) */ public PrimaryRolloverCallback getRolloverCallback() { return rolloverCallback; } /** * Changes the title of the specified group. * * @param groupIndex * Group index. * @param newTitle * New title for the specified group. */ public synchronized void setSecondaryGroupTitle(int groupIndex, String newTitle) { this.groupTitles.set(groupIndex, newTitle); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy