/*
* This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
*
* Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium.
*
* The program is available in open source according to the GNU Affero
* General Public License. All contributions in this program are covered
* by the Geomajas Contributors License Agreement. For full licensing
* details, see LICENSE.txt in the project root.
*/
package org.geomajas.widget.utility.gwt.client.ribbon;
import java.util.ArrayList;
import java.util.List;
import org.geomajas.gwt.client.action.ToolbarBaseAction;
import org.geomajas.gwt.client.action.toolbar.DropDownButtonAction;
import org.geomajas.gwt.client.widget.MapWidget;
import org.geomajas.widget.utility.common.client.ribbon.RibbonColumn;
import org.geomajas.widget.utility.gwt.client.action.ButtonAction;
import org.geomajas.widget.utility.gwt.client.action.ToolbarButtonAction;
import org.geomajas.widget.utility.gwt.client.action.ToolbarButtonCanvas;
import org.geomajas.widget.utility.gwt.client.ribbon.dropdown.DropDownRibbonButton;
import com.google.gwt.user.client.ui.Widget;
import com.smartgwt.client.widgets.layout.VStack;
/**
* RibbonColumn implementation that displays a vertical list of {@link RibbonButton}s. Actions such as title alignment
* and toggling of titles will be applied on all buttons in the list.
*
* @author Pieter De Graef
*/
public class ActionListRibbonColumn extends VStack implements RibbonColumn {
private List<RibbonButton> buttons;
// ------------------------------------------------------------------------
// Constructors:
// ------------------------------------------------------------------------
/**
* Initialize this vertical button list by immediately providing the full list of {@link ButtonAction}s.
*
* @param actionList
* The list of {@link ButtonAction}s to translate into a vertical list of {@link RibbonButton}s.
*/
public ActionListRibbonColumn(List<ButtonAction> actionList, MapWidget mapWidget) {
this(actionList, 16, mapWidget);
}
/**
* Initialize this vertical button list by immediately providing the full list of {@link ButtonAction}s.
*
* @param actionList
* The list of {@link ButtonAction}s to translate into a vertical list of {@link RibbonButton}s.
* @param iconSize
* The width and height of the icons used in the vertical list. Expressed in pixels.
* @param mapWidget
*/
public ActionListRibbonColumn(List<ButtonAction> actionList, int iconSize, MapWidget mapWidget) {
buttons = new ArrayList<RibbonButton>(actionList.size());
for (ButtonAction action : actionList) {
if (action instanceof ToolbarButtonCanvas) {
new IllegalArgumentException("ButtonAction " +
((ToolbarButtonCanvas) action).getToolbarAction().getClass() +
" has a predefined widget, which is not allowed in a list of actions");
}
RibbonButton button = null;
ToolbarBaseAction toolbarAction = ((ToolbarButtonAction) action).getToolbarAction();
if (toolbarAction instanceof DropDownButtonAction) {
DropDownButtonAction ddAction = (DropDownButtonAction) toolbarAction;
button = new DropDownRibbonButton(ddAction, iconSize,
TitleAlignment.RIGHT, ddAction.getTools(), mapWidget);
} else {
button = new RibbonButton(action, iconSize, TitleAlignment.RIGHT);
}
addMember(button);
buttons.add(button);
}
}
// ------------------------------------------------------------------------
// Class specific methods:
// ------------------------------------------------------------------------
@Override
public void setButtonBaseStyle(String buttonBaseStyle) {
for (RibbonButton button : buttons) {
button.setButtonBaseStyle(buttonBaseStyle);
}
}
// ------------------------------------------------------------------------
// RibbonColumn implementation:
// ------------------------------------------------------------------------
@Override
public Widget asWidget() {
return this;
}
@Override
public void setShowTitles(boolean showTitles) {
for (RibbonButton button : buttons) {
button.setShowTitles(showTitles);
}
}
@Override
public boolean isShowTitles() {
return buttons.size() > 0 && buttons.get(0).isShowTitles();
}
@Override
public void setTitleAlignment(TitleAlignment titleAlignment) {
for (RibbonButton button : buttons) {
button.setTitleAlignment(titleAlignment);
}
}
@Override
public TitleAlignment getTitleAlignment() {
if (buttons.size() > 0) {
return buttons.get(0).getTitleAlignment();
}
return TitleAlignment.BOTTOM;
}
@Override
public boolean isEnabled() {
return !isDisabled();
}
@Override
public void setEnabled(boolean enabled) {
setDisabled(!enabled);
}
@Override
public void configure(String key, String value) {
for (RibbonButton button : buttons) {
button.configure(key, value);
}
}
}