/* * 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.service.ClientConfigurationService; import org.geomajas.gwt.client.service.WidgetConfigurationCallback; import org.geomajas.gwt.client.widget.MapWidget; import org.geomajas.widget.utility.common.client.ribbon.RibbonBar; import org.geomajas.widget.utility.common.client.ribbon.RibbonColumn; import org.geomajas.widget.utility.common.client.ribbon.RibbonGroup; import org.geomajas.widget.utility.configuration.RibbonBarInfo; import org.geomajas.widget.utility.configuration.RibbonColumnInfo; import org.geomajas.widget.utility.configuration.RibbonGroupInfo; import org.geomajas.widget.utility.gwt.client.util.GuwLayout; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.layout.HLayout; /** * SmartGWT implementation of the {@link RibbonBar} interface. This widget is based upon a VLayout. * * @author Pieter De Graef */ public class RibbonBarLayout extends HLayout implements RibbonBar { private boolean showGroupTitles = true; private List<RibbonGroup> groups = new ArrayList<RibbonGroup>(); // ------------------------------------------------------------------------ // Constructors: // ------------------------------------------------------------------------ /** Initialize an empty ribbon bar widget. */ public RibbonBarLayout() { setMembersMargin(GuwLayout.ribbonBarInternalMargin); setStyleName("ribbon"); setOverflow(GuwLayout.ribbonBarOverflow); } /** * Create a ribbon bar widget using the given configuration information and a map. * * @param barInfo * The information from which to build the ribbon bar. In order to create the correct sub-widgets, the * {@link RibbonColumnRegistry} will be used. * @param mapWidget * The map widget onto which many actions in this ribbon apply. */ public RibbonBarLayout(RibbonBarInfo barInfo, MapWidget mapWidget) { this(); buildGui(barInfo, mapWidget); } /** * Create a ribbon bar widget using a back-end spring bean identifier and a map. * * @param mapWidget * The map widget onto which many actions in this ribbon apply. * @param application * The application wherein to search for the ribbon configuration. * @param beanId * A unique spring bean identifier for a bean of class {@link RibbonBarInfo}. This configuration is then * fetched and applied. */ public RibbonBarLayout(final MapWidget mapWidget, final String application, final String beanId) { this(); ClientConfigurationService.getApplicationWidgetInfo(application, beanId, new WidgetConfigurationCallback<RibbonBarInfo>() { @Override public void execute(RibbonBarInfo ribbonBarInfo) { if (null == ribbonBarInfo) { throw new IllegalStateException("Cannot find ribbon configuration bean " + beanId + " for application " + application); } buildGui(ribbonBarInfo, mapWidget); } }); } // ------------------------------------------------------------------------ // Ribbon implementation: // ------------------------------------------------------------------------ @Override public void addGroup(RibbonGroup ribbonGroup) { if (null == ribbonGroup) { throw new IllegalArgumentException("Cannot add RibbonGroup with null value."); } groups.add(ribbonGroup); ribbonGroup.setShowTitle(showGroupTitles); ribbonGroup.asWidget().setStyleName(getStyleName() + "Group"); addMember(ribbonGroup.asWidget()); } @Override public void addGroup(RibbonGroup ribbonGroup, int index) { if (null == ribbonGroup) { throw new IllegalArgumentException("Cannot add RibbonGroup with null value."); } groups.add(index, ribbonGroup); ribbonGroup.setShowTitle(showGroupTitles); ribbonGroup.asWidget().setStyleName(getStyleName() + "Group"); addMember(ribbonGroup.asWidget(), index); } @Override public void removeGroup(RibbonGroup ribbonGroup) { if (null == ribbonGroup) { throw new IllegalArgumentException("Cannot remove RibbonGroup with null value."); } groups.remove(ribbonGroup); removeMember((Canvas) ribbonGroup.asWidget()); } @Override public void removeGroup(int index) { removeGroup(getGroup(index)); } @Override public RibbonGroup getGroup(int index) { return groups.get(index); } @Override public void setShowGroupTitles(boolean showGroupTitles) { this.showGroupTitles = showGroupTitles; for (RibbonGroup group : groups) { group.setShowTitle(showGroupTitles); } } @Override public boolean isShowGroupTitles() { return showGroupTitles; } // ------------------------------------------------------------------------ // SmartGWT method overrides: // ------------------------------------------------------------------------ @Override public void setStyleName(String styleName) { super.setStyleName(styleName); for (RibbonGroup group : groups) { group.asWidget().setStyleName(getStyleName() + "Group"); } } // ------------------------------------------------------------------------ // Private methods: // ------------------------------------------------------------------------ private void buildGui(RibbonBarInfo barInfo, MapWidget mapWidget) { if (null == barInfo) { throw new IllegalArgumentException("RibbonBarLayout cannot be built without RibbonBarInfo configuration."); } for (RibbonGroupInfo groupInfo : barInfo.getGroups()) { RibbonGroupLayout group = new RibbonGroupLayout(groupInfo.getTitle()); for (RibbonColumnInfo columnInfo : groupInfo.getColumns()) { RibbonColumn ribbonColumn = RibbonColumnRegistry.getRibbonColumn(columnInfo.getType(), columnInfo.getTools(), columnInfo.getParameters(), mapWidget); if (ribbonColumn != null) { group.addColumn(ribbonColumn); } } addGroup(group); } } }