/******************************************************************************* * Copyright (c) 2012 EclipseSource and others. * 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: * EclipseSource - initial API and implementation ******************************************************************************/ package org.eclipse.rap.examples.internal; import java.util.List; import org.eclipse.rap.examples.ExampleUtil; import org.eclipse.rap.examples.IExampleContribution; import org.eclipse.rap.rwt.RWT; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; public abstract class Navigation { private final Composite composite; public Navigation( Composite parent ) { composite = new Composite( parent, SWT.NONE ); composite.setLayout( ExampleUtil.createGridLayoutWithoutMargin( 9, false ) ); composite.setData( RWT.CUSTOM_VARIANT, "navigation" ); createNavigationControls( composite ); } public Control getControl() { return composite; } private void createNavigationControls( Composite parent ) { List<ExampleCategory> categories = Examples.getInstance().getCategories(); for( ExampleCategory category : categories ) { createNavigationDropDown( parent, category ); } } private void createNavigationDropDown( Composite parent, ExampleCategory category ) { new DropDownNavigation( parent, category ) { @Override protected void contributionSelected( IExampleContribution contribution ) { Navigation.this.selectContribution( contribution ); } }; } protected abstract void selectContribution( IExampleContribution contribution ); public void selectNavigationEntry( IExampleContribution contribution ) { Control[] children = composite.getChildren(); for( Control control : children ) { if( control instanceof DropDownNavigation ) { changeSelectedDropDownEntry( contribution, (DropDownNavigation) control ); } } } private void changeSelectedDropDownEntry( IExampleContribution contribution, DropDownNavigation navEntry ) { boolean belongsToDropDownNav = contributionBelongsToDropDownNav( contribution, navEntry ); ToolItem item = ( (ToolBar) navEntry.getChildren()[ 0 ] ).getItem( 0 ); if( belongsToDropDownNav ) { item.setData( RWT.CUSTOM_VARIANT, "selected" ); } else { item.setData( RWT.CUSTOM_VARIANT, "navigation" ); } } private boolean contributionBelongsToDropDownNav( IExampleContribution contribution, DropDownNavigation navEntry ) { ExampleCategory category = navEntry.getCategory(); return category.getContributionIds().contains( contribution.getId() ); } }