All Downloads are FREE. Search and download functionalities are using the official Maven repository.

info.joseluismartin.vaadin.ui.ListPane Maven / Gradle / Ivy

There is a newer version: 2.0.0
Show newest version
/*
 * Copyright 2009-2011 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package info.joseluismartin.vaadin.ui;

import java.util.ArrayList;
import java.util.List;

import com.vaadin.event.MouseEvents.ClickEvent;
import com.vaadin.event.MouseEvents.ClickListener;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Component;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Embedded;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Panel;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.themes.Reindeer;

/**
 * ListPane
 * 
 * @author Jose Luis Martin - ([email protected])
 */
public class ListPane extends CustomComponent implements ClickListener {

	private List components = new ArrayList();
	private HorizontalLayout main = new HorizontalLayout();
	private VerticalLayout menu = new VerticalLayout();
	private Panel selected = new Panel();
	private MenuItem itemSelected;
	
	
	public void init() {
		
		menu.setWidth("150px");
		
		for (ComponentHolder holder : components) {
			MenuItem e = new MenuItem(holder);
			e.addListener(this);
			menu.addComponent(e);
			if (itemSelected == null)
				select(e);
		}
		
		main.addComponent(menu);
		selected.setSizeFull();
		main.addComponent(selected);
		main.setExpandRatio(selected, 1.0f);
		main.setSizeFull();
		main.setSpacing(true);
		this.setCompositionRoot(main);
	}

	/**
	 * @return the components
	 */
	public List getComponents() {
		return components;
	}

	/**
	 * @param components the components to set
	 */
	public void setComponents(List components) {
		this.components = components;
	}

	/**
	 * {@inheritDoc}
	 */
	public void click(ClickEvent event) {
		select((MenuItem) event.getSource());
	}

	private void select(MenuItem item) {
		if (item.equals(itemSelected))
			return; // nothing to do
		
		selected.setCaption(item.getCaption());
		selected.removeAllComponents();
		Component c = item.getComponent();
		selected.addComponent(c);
		if (c instanceof ListPaneAware) {
			((ListPaneAware) c).show();
		}
		item.setStyleName("menuItem-selected");
	
		if (itemSelected != null)
			itemSelected.setStyleName("menuItem");
		
		itemSelected = item;
	}
	
	public interface ListPaneAware {
		void show();
		void hide();
	}
}

class MenuItem extends Panel {

	public MenuItem(ComponentHolder holder) {
		HorizontalLayout layout = new HorizontalLayout();
		layout.setSpacing(true);
		setContent(layout);
		Embedded e = new Embedded("", holder.getIcon());
		addComponent(e);
		Label l = new Label(holder.getName());
		l.setStyleName(Reindeer.LABEL_H2);
		addComponent(l);
		layout.setComponentAlignment(l, Alignment.BOTTOM_LEFT);
		layout.setComponentAlignment(e, Alignment.BOTTOM_LEFT);
		setStyleName("menuItem");
		this.component = holder.getComponent();
	}


	private Component component;

	/**
	 * @return the component
	 */
	public Component getComponent() {
		return component;
	}

	/**
	 * @param component the component to set
	 */
	public void setComponent(Component component) {
		this.component = component;
	}

}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy