/* * 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.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.SimplePanel; /** * Displays a collection of buttons in a standard toolbar view. Also supports * ToolbarGroup objects that manage related buttons. * * @author nbaker */ public class Toolbar extends HorizontalPanel{ public static final int SEPARATOR = 1; public static final int GLUE = 2; //table holding the buttons private HorizontalPanel bar = new HorizontalPanel(); //Collection of buttons private List<ToolbarButton> buttons = new ArrayList<ToolbarButton>(); //collection of groups private List<ToolbarGroup> groups = new ArrayList<ToolbarGroup>(); public Toolbar(){ this.setStylePrimaryName("toolbar"); //$NON-NLS-1$ add(bar); bar.setSpacing(1); setWidth("100%"); //$NON-NLS-1$ setHeight("100%"); //$NON-NLS-1$ } /** * Add in a collection of buttons assembled as a ToolbarGroup * * @param group ToolbarGroup to add. */ public void add(ToolbarGroup group){ //check to see if there's already a separator added before this group if( !(bar.getWidget(bar.getWidgetCount()-1) instanceof Image)){ bar.add(group.getLeadingSeparator()); bar.setCellVerticalAlignment(group.getLeadingSeparator(), ALIGN_MIDDLE); } //if the group has a label tag, add it before the buttons if(group.getLabel() != null){ bar.add(group.getGroupLabel()); bar.setCellVerticalAlignment(group.getGroupLabel(), ALIGN_MIDDLE); } //add the buttons to the bar and buttons collection for(ToolbarButton btn : group.getButtons()){ bar.add(btn.getPushButton()); } bar.add(group.getTrailingSeparator()); bar.setCellVerticalAlignment(group.getTrailingSeparator(), ALIGN_MIDDLE); groups.add(group); } /** * Add a Button to the Toolbar */ public void add(ToolbarButton button){ bar.add(button.getPushButton()); buttons.add(button); } /** * Add a special element to the toolbar. Support for separator and glue. * @param key id of element to add */ public void add(int key){ switch(key){ case Toolbar.SEPARATOR: Image img = new Image( "style/images/toolbarDivider.png"); //$NON-NLS-1$ bar.add(img); bar.setCellVerticalAlignment(img, ALIGN_MIDDLE); break; case Toolbar.GLUE: SimplePanel panel = new SimplePanel(); bar.add(panel); bar.setCellWidth(panel, "100%"); //$NON-NLS-1$ break; default: //add error logging message } } /** * Enable or Disable the toolbar. If passed in false it will disable all buttons, if true it * will restore the buttons to their previous state. * * @param enabled boolean flag */ public void setEnabled(boolean enabled){ try{ for(ToolbarButton button : this.buttons){ button.setTempDisabled(enabled); } for(ToolbarGroup gp : groups){ gp.setTempDisabled(enabled); } } catch(Exception e){ System.out.println("Error with Disable: "+e); //$NON-NLS-1$ e.printStackTrace(System.out); } } }