<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">/*
 * 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&lt;ToolbarButton&gt; buttons = new ArrayList&lt;ToolbarButton&gt;();
  
  //collection of groups
  private List&lt;ToolbarGroup&gt; groups = new ArrayList&lt;ToolbarGroup&gt;();
  
  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);
    }
  }
  
  
}
</pre></body></html>