Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.pentaho.ui.xul.swt.tags;
  
 import java.util.List;
 
 
 import  org.eclipse.swt.SWT;
 import  org.eclipse.swt.widgets.Combo;
 import  org.eclipse.swt.widgets.Composite;
 import  org.eclipse.swt.events.SelectionAdapter;
 import  org.eclipse.swt.events.SelectionEvent;
 
 //TODO: Move creation of combobox to late initialization to support switching from editable to non-editable.
 public class SwtMenuList<T> extends AbstractSwtXulContainer implements XulMenuList<T> {
 
   private Combo combobox;
 
 
   private static final Log logger = LogFactory.getLog(SwtMenuList.class);
 
   private boolean loaded = false;
 
   private String binding;
 
   private Object previousSelectedItem = null;
   
   private SwtMenupopup popup;
   
   private SwtMenuitem selectedItem = null;
 
   private boolean editable = false;
   
   private String command;
 
   private XulComponent parent;
   private Collection<T> elements;
 
   public SwtMenuList(Element selfXulComponent parentXulDomContainer domContainerString tagName) {
     super("menulist");
 
     this. = domContainer;
     this. = parent;
     setupCombobox();
 
   }
 
 
   private void setupCombobox(){
 
 
     if(){
        = new Combo((Composite).getManagedObject(), SWT.DROP_DOWN);
     } else {
        = new Combo((Composite).getManagedObject(), SWT.DROP_DOWN | SWT.READ_ONLY);
     }
 
 
     .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
 
       public void widgetSelected(SelectionEvent e) {
         fireSelectedEvents();
 
       }
 
     });
   }
   
 
   @Override
   public void addChild(Element ele) {
     super.addChild(ele);
     if(ele instanceof XulMenupopup){
        = (SwtMenupopupele;
    }
  }
  public void layout() {
    .removeAll();
     = null//clear selection
    
    for (XulComponent item : .getChildNodes()) {
      SwtMenuitem mItem = (SwtMenuitemitem;
      if(mItem.isSelected()){
        this. = mItem;
      }
      .add(mItem.getLabel());
    }
    int idx = -1;
    if( != null){
      idx = .indexOf(.toString());
    } else if.getChildNodes().size() > 0){
      idx = 0;
    }
    this.setSelectedIndex(idx);
    
     = true;
  }
  /*
   * Swaps out the managed list.  Effectively replaces the SwingMenupopup child component.
   * (non-Javadoc)
   * @see org.pentaho.ui.xul.components.XulMenuList#replaceAll(java.util.List)
   */
  public void replaceAllItems(Collection<T> tees) {
    setElements(tees);
  }
  public String getSelectedItem() {
    int idx = .getSelectionIndex();
    return (idx > -1 && idx < this..getItemCount())? this..getItem(idx) : null;
  }
  public void setSelectedItem(T t) {
    if(t == null){
      this..deselectAll();
      return;
    }
    if(this. != null){
      this..select(new ArrayList(this.).indexOf(t));
    } else {
      this..select(.indexOf(t.toString()));
    }
    this. = null;
  }
  public void setOncommand(final String command) {
    this. = command;
  }
  public Collection<T> getElements() {
    return (Collection.getChildNodes();
  }
  public String getBinding() {
    return ;
  }
  public void setBinding(String binding) {
    this. = binding;
  }
  private String extractLabel(T t) {
    String attribute = getBinding();
    if (StringUtils.isEmpty(attribute)) {
      return t.toString();
    } else {
      String getter = "get" + (String.valueOf(attribute.charAt(0)).toUpperCase()) + attribute.substring(1);
      try {
        return new Expression(tgetternull).getValue().toString();
      } catch (Exception e) {
        throw new RuntimeException(e);
      }
    }
  }
  public void setElements(Collection<T> tees) {
    this. = tees;
    for (XulComponent menuItem : .getChildNodes()) {
      .removeChild(menuItem);
    }
    if(tees == null){
      return;
    }
    for (T t : tees) {
      try{
        XulMenuitem item = (XulMenuitem.getDocumentRoot().createElement("menuitem");
        String attribute = getBinding();
        item.setLabel(extractLabel(t));
  
        .addChild(item);
      } catch(XulException e){
        .error("Unable to create new menulist menuitem: "e);
      }
    }
    layout();
  }
  public int getSelectedIndex() {
    return this..getSelectionIndex();
  }
  public void setSelectedIndex(int idx) {
    if(idx == -1){
      this..clearSelection();
    } else {
      this..select(idx);
    }
  }
  private void fireSelectedEvents(){
    int idx = getSelectedIndex();
    if(idx >= 0){
      Object newSelectedItem = (idx >= 0) ? ( != null)? .toArray()[idx] : getSelectedItem() : getSelectedItem();
      .firePropertyChange("selectedItem",
          newSelectedItem
      );
      this. = newSelectedItem;
    }
    .firePropertyChange("selectedIndex"null
        , .getSelectionIndex());
    if(SwtMenuList.this. != null
        && getDocument() != null){    //make sure we're on the dom tree (initialized)
      invoke(SwtMenuList.this.new Object[] {});
    }
  }
  public void setEditable(boolean editable) {
    this. = editable;
  }
  public boolean getEditable() {
    return ;
  }
  public String getValue() {
    return getSelectedItem();
  }
  public void setValue(String value) {
    .setText(value);
  }
  public void setDisabled(boolean disabled) {
    super.setDisabled(disabled);
    .setEnabled(!disabled);
  }
  
  
New to GrepCode? Check out our FAQ X