Package org.yaac.client.widget

Source Code of org.yaac.client.widget.ToggleButtonGroup$SelectionChangeListener

package org.yaac.client.widget;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
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.ToggleButton;

/**
* @author Max Zhu (thebbsky@gmail.com)
*
*/
public class ToggleButtonGroup<T> {
 
  public static interface SelectionChangeListener<T> {
    void onSelect(T selectedVal);
  }
 
  private Map<T, ToggleButton> buttonsMap;
 
  private List<SelectionChangeListener<T>> listeners;
 
  public ToggleButtonGroup() {
    this.buttonsMap = new HashMap<T, ToggleButton>();
    this.listeners = new LinkedList<SelectionChangeListener<T>>();
  }
 
  public void addButton(T t, final ToggleButton btn) {
    this.buttonsMap.put(t, btn);
   
    btn.addClickHandler(new ClickHandler() {
      @Override
      public void onClick(ClickEvent event) {
        if (btn.isDown()) {
          select(btn);
        } else {
          // ignore the action
          btn.setDown(true);
        }
      }
    });
  }
 
  public void subscribe(SelectionChangeListener<T> listener) {
    this.listeners.add(listener);
  }
 
  public void select(T key) {
    this.select(buttonsMap.get(key));
  }
 
  private void select(ToggleButton btn) {
    // update UI
    for (T key : buttonsMap.keySet()) {
      ToggleButton otherBtn = buttonsMap.get(key);
     
      if (btn == otherBtn) { // notify listeners
        btn.setDown(true)// may be triggered in code level
        for (SelectionChangeListener<T> listener : listeners) {
          listener.onSelect(key);
        }
      } else // reset other button
        otherBtn.setDown(false);
      }
    }
  }
}
TOP

Related Classes of org.yaac.client.widget.ToggleButtonGroup$SelectionChangeListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.