Java tutorial
/*! * 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 (c) 2002-2013 Pentaho Corporation.. All rights reserved. */ package org.pentaho.gwt.widgets.client.toolbar; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.SimplePanel; import org.pentaho.gwt.widgets.client.utils.string.StringUtils; import java.util.ArrayList; import java.util.List; /** * 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 implements ToolbarPopupListener, ToolbarPopupSource { public static final int SEPARATOR = 1; public static final int GLUE = 2; // table holding the buttons protected HorizontalPanel bar = new HorizontalPanel(); // Collection of buttons protected List<ToolbarButton> buttons = new ArrayList<ToolbarButton>(); // collection of groups protected List<ToolbarGroup> groups = new ArrayList<ToolbarGroup>(); protected List<ToolbarPopupListener> popupListeners = new ArrayList<ToolbarPopupListener>(); public Toolbar() { this.setStylePrimaryName("toolbar"); //$NON-NLS-1$ this.setVerticalAlignment(ALIGN_MIDDLE); bar.setVerticalAlignment(ALIGN_MIDDLE); bar.setSpacing(1); bar.setWidth("100%"); super.add(bar); super.setCellWidth(bar, "100%"); setWidth("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.getWidgetCount() > 0) { 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 in a Label to a toolbar * * @param group * ToolbarGroup to add. */ public void add(Label lbl) { bar.add(lbl); } /** * Add a panel (spacer most likely) to the toolbar * * @param panel * ToolbarSpacer to add. */ public void add(Panel p) { bar.add(p); // spacer now passed in as panel if (p instanceof SimplePanel) { String flex = p.getElement().getAttribute("flex"); if (StringUtils.isEmpty(flex) == false && Integer.parseInt(flex) > 0) { bar.setCellWidth(p, "100%"); } } } /** * Add a Button to the Toolbar */ public void add(ToolbarButton button) { bar.add(button.getPushButton()); buttons.add(button); // register interest in popupPanel of the comboButtons if (button instanceof ToolbarComboButton) { ((ToolbarComboButton) button).addPopupPanelListener(this); } } /** * 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(GWT.getModuleBaseURL() + "images/toolbarDivider.png"); 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 } } /** * Add a special spacer element to the toolbar. * * @param the * amount of space to add */ public void addSpacer(int spacerAmount) { SimplePanel panel = new SimplePanel(); panel.setWidth(spacerAmount + "px"); //$NON-NLS-1$ panel.addStyleName("gwt-spacer"); bar.add(panel); bar.setCellWidth(panel, spacerAmount + "px"); //$NON-NLS-1$ } /** * 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.setEnabled(enabled); button.setTempDisabled(!enabled); } for (ToolbarGroup gp : groups) { gp.setEnabled(enabled); gp.setTempDisabled(!enabled); } } catch (Exception e) { System.out.println("Error with Disable: " + e); //$NON-NLS-1$ e.printStackTrace(System.out); } } public void addPopupPanelListener(ToolbarPopupListener listener) { if (popupListeners.contains(listener) == false) { popupListeners.add(listener); } } public void removePopupPanelListener(ToolbarPopupListener listener) { if (popupListeners.contains(listener)) { popupListeners.remove(listener); } } public void popupClosed(PopupPanel panel) { for (ToolbarPopupListener listener : popupListeners) { listener.popupClosed(panel); } } public void popupOpened(PopupPanel panel) { for (ToolbarPopupListener listener : popupListeners) { listener.popupOpened(panel); } } public void removeAll() { bar.clear(); buttons.clear(); } }