/* * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program 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 Lesser General Public License for more details. * * Copyright 2008 - 2009 Pentaho Corporation. All rights reserved. */ package org.pentaho.pac.client.common.ui.toolbar; import java.util.ArrayList; import java.util.List; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; /** * * Represents a collection of related buttons in a {@linkplain Toolbar}. Buttons in the group can be disabled/enabled and * have their visibility changed together. * * @author nbaker */ public class ToolbarGroup { private List<ToolbarButton> buttons = new ArrayList<ToolbarButton>(); private boolean enabled = true; private boolean visible = true; private String label = null; private Image trailingSeparator = new Image( "style/images/toolbarDivider.png", 0, 0, 2, 16 ); //$NON-NLS-1$; private Image leadingSeparator = new Image( "style/images/toolbarDivider.png", 0, 0, 2, 16 ); //$NON-NLS-1$; private Label groupLabel = new Label(); public static final String CSS_ENABLED= "toolbar-group-label"; //$NON-NLS-1$ public static final String CSS_DISABLED = "toolbar-group-label-disabled"; //$NON-NLS-1$ public ToolbarGroup(){ groupLabel.setStyleName(CSS_ENABLED); } /** * Initialized the ToolbarGroup with a label description * @param groupName */ public ToolbarGroup(String groupName){ this(); setLabel(groupName); } /** * Adds a {@link ToolbarButton} to this group. * * @param btn ToolbarButton */ public void add(ToolbarButton btn){ if(!buttons.contains(btn)){ buttons.add(btn); } else { //log error } } /** * Changes the enabled status of the group. If enabled is false, the buttons will be disabled. * If enabled is true, it will consult the buttons for their current enabled state. * * @param enabled boolena flag */ public void setEnabled(boolean enabled){ if(enabled == this.enabled){ // no change return; } this.enabled = enabled; for(ToolbarButton btn : buttons){ btn.setEnabled(this.enabled); } this.groupLabel.setStyleName( (this.enabled)? CSS_ENABLED : CSS_DISABLED ); } public void setTempDisabled(boolean disable) { for(ToolbarButton btn : buttons){ btn.setTempDisabled(disable); } this.groupLabel.setStyleName( (disable)? CSS_DISABLED : CSS_ENABLED ); } /** * Returns the enabled status of this group * * @return boolean flag */ public boolean isEnabled(){ return this.enabled; } /** * Returns the collection of buttons managed by this ToolbarGroup. * * @return List of ToolbarButtons */ public List<ToolbarButton> getButtons() { return buttons; } /** * Returns the visibility of the group. * * @return boolean flag */ public boolean isVisible() { return visible; } /** * Sets the visibility of the group. If visible is false the group will be hidden. * If visible is true, the buttons will be returned to their previous visible state. * * @param visible boolean flag */ public void setVisible(boolean visible) { if(visible == this.visible){ // no change return; } this.visible = visible; for(ToolbarButton btn : buttons){ btn.setVisible(this.visible); } groupLabel.setVisible(this.visible); trailingSeparator.setVisible(this.visible); leadingSeparator.setVisible(this.visible); } /** * Returns the optional label to be displayed before the group buttons in the Toolbar. * * @return String */ public String getLabel() { return label; } /** * Sets the optional label to be displayed before the group button in the Toolbar * * @param label String to be used as a label */ public void setLabel(String label) { this.label = label; this.groupLabel.setText(this.label); } /** * Returns the image separator to be shown before the group. The ToolbarGroup * manages this object so it can toggle it's visibility. * * @return Image */ public Image getTrailingSeparator() { return trailingSeparator; } /** * Returns the image separator to be shown after the group. The ToolbarGroup * manages this object so it can toggle it's visibility. * * @return Image */ public Image getLeadingSeparator() { return leadingSeparator; } /** * Returns the Label object to be optionally displayed by the Toolbar. * The ToolbarGroup manages this object so it can toggle it's disabled/visible * state. * * @return Label */ public Label getGroupLabel() { return groupLabel; } }