/******************************************************************************* * Copyright (c) 2008, 2011 Obeo. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Obeo - initial API and implementation *******************************************************************************/ package org.eclipse.emf.eef.runtime.ui.gwt.editor.part; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.FlowPanel; /** * @author glefur * */ public class EEFEditorToolbar extends FlowPanel { public final static int CREATE = 0; public final static int DELETE = 1; public final static int VALIDATE = 2; public final static int SAVE = 3; public final static int UNDO = 4; public final static int REDO = 5; public final static int CUT = 6; public final static int COPY = 7; public final static int PASTE = 8; public final static int UP = 9; public final static int DOWN = 10; public final static int NAVIGATE = 11; private Collection<ToolbarListener> listeners; private Map<Integer, Button> buttons; /** * */ public EEFEditorToolbar() { super(); listeners = new ArrayList<EEFEditorToolbar.ToolbarListener>(); buttons = new HashMap<Integer, Button>(); this.setStyleName("ToolBar", true); addButton(CREATE, "Create..."); addButton(DELETE, "Delete"); addButton(VALIDATE, "Validate"); addButton(SAVE, "Save"); addButton(UNDO, "Undo"); addButton(REDO, "Redo"); addButton(CUT, "Cut"); addButton(COPY, "Copy"); addButton(PASTE, "Paste"); addButton(UP, "Up"); addButton(DOWN, "Down"); addButton(NAVIGATE, "Navigate"); } protected void addButton(final int id, final String buttonText) { final Button button = new Button(); button.setText(buttonText); button.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { ToolbarEvent tbEvent = new ToolbarEvent(); tbEvent.kind = id; fireToolbarEvent(tbEvent); } }); button.setStyleName("ToolBarButtonLeftMargin"); this.add(button); buttons.put(id, button); } /** * Add a toolbar listener. * @param listener */ public void addListener(final ToolbarListener listener) { listeners.add(listener); } /** * Remove a toolbar listener. * @param listener */ public void removeListener(final ToolbarListener listener) { listeners.remove(listener); } /** * @param id */ public void setEnabledButton(boolean state ,int... id) { for (int i : id) { if (buttons.get(i) != null) { buttons.get(i).setEnabled(false); } } } /** * Fire all the toolbar listeners for an event. * @param event the event to propagate. */ private void fireToolbarEvent(final ToolbarEvent event) { for (ToolbarListener listener : listeners) { listener.fireToolbarEvent(event); } } /** * Interface for toolbar listeners * @author glefur * */ public interface ToolbarListener { public void fireToolbarEvent(ToolbarEvent event); } /** * Event throw by the toolbar. * @author glefur * */ public class ToolbarEvent { public int kind; } }