Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.pentaho.ui.xul.swt.tags;
  
  import java.awt.Color;
  import java.awt.Component;
  import java.awt.Insets;
 
 
 import  org.eclipse.swt.SWT;
 import  org.eclipse.swt.graphics.Image;
 import  org.eclipse.swt.layout.GridData;
 import  org.eclipse.swt.layout.GridLayout;
 import  org.eclipse.swt.widgets.Composite;
 import  org.eclipse.swt.widgets.Control;
User: nbaker Date: Apr 14, 2009
 
 public class SwtGrid extends AbstractSwtXulContainer implements XulGrid {
   private static final Log logger = LogFactory.getLog(SwtGrid.class);
   private SwtRows rows;
   private SwtColumns cols;
   private String background;
   private Composite grid;
 
   public SwtGrid(Element selfXulComponent parentXulDomContainer domContainerString tagName) {
 		super("grid");
 
 		this. = domContainer;
 		int style = SWT.None;
 		if(self.getAttributeValue("border") != null){
 		  style = SWT.BORDER;
 		}
 
 		 = new Composite((Composite) parent.getManagedObject(), style);
 		.setBackgroundMode(SWT.INHERIT_DEFAULT);
 	}
   
   @Override
   public void addChild(Element e) {
     super.addChild(e);
     if(e instanceof SwtRows){
        = (SwtRowse;
     } else if(e instanceof SwtColumns){
        = (SwtColumnse;
     }
   }
 
   @Override
   public void addChildAt(Element cint pos) {
     super.addChildAt(cpos);
     if(c instanceof SwtRows){
        = (SwtRowsc;
     } else if(c instanceof SwtColumns){
        = (SwtColumnsc;
     }
   }
 
   @Override
   public void layout() {
 
     if(this.getChildNodes().size() < 2){
       .warn("Grid does not contain Column and Row children");
       return;
     }
 
     XulComponent columns = this.getChildNodes().get(0);
     XulComponent rows = this.getChildNodes().get(1);
 
     int totalFlex = 0;
     int thisFlex = 0;
     boolean everyChildIsFlexing = true;
 
     for (Object child : .getChildNodes()) {
       thisFlex = ((SwtElementchild).getFlex();
       if (thisFlex <= 0) {
         everyChildIsFlexing = false;
      }
      totalFlex += thisFlex;
    }
    
    Composite container = (Composite) getManagedObject();
    
    
    int columnCount = .getChildNodes().size() + totalFlex;
    
    GridLayout layout = new GridLayout(columnCounteveryChildIsFlexing);
    if(this.getPadding() > -1){
      layout.marginWidth = this.getPadding(); 
      layout.marginHeight = this.getPadding();
    }
    if(this.getSpacing() > -1){
      layout.horizontalSpacing = this.getSpacing();
      layout.verticalSpacing = this.getSpacing();
    }
    container.setLayout(layout);
    
    boolean atLeastOneRowIsFlexed = false;
    
    for (XulComponent row : rows.getChildNodes()) {
      if(row.getFlex() >= 1){
        atLeastOneRowIsFlexed = true;
      }
      for(Element cell : row.getChildNodes()){
        SwtElement swtChild = (SwtElementcell;
  
        // some children have no object they are managing... skip these kids!
  
        Object mo = swtChild.getManagedObject();
        if (mo == null || !(mo instanceof Control) || swtChild instanceof XulDialog){
          continue;
        }
  
        Control c = (Control) swtChild.getManagedObject();
  
        GridData data = new GridData();
  
        // How many columns or rows should the control span? Use the flex value plus
        // 1 "point" for the child itself. 
  
        data.horizontalSpan = .getChildNodes().get(row.getChildNodes().indexOf(cell)).getFlex() + 1;
        data.verticalSpan = row.getFlex() + 1;
  
        if(row.getFlex() >= 1){
          data.verticalAlignment = SWT.FILL;
          data.grabExcessVerticalSpace = true;
        }
        
        if (swtChild.getFlex() > 0 && swtChild.getWidth() == 0){
          data.grabExcessHorizontalSpace = true;
          data.horizontalAlignment = SWT.FILL;
        }
  
        if(swtChild.getWidth() > 0){
          data.widthHint = swtChild.getWidth();
        }
  
        if(swtChild.getHeight() > 0){
          data.heightHint = swtChild.getHeight();
        }
  
        // And finally, deal with the align attribute...
        // Align is the PARENT'S attribute, and affects the 
        // opposite direction of the orientation.
  
        if (swtChild.getFlex() <= 0 && swtChild.getAlign() != null) {
          SwtAlign swtAlign = SwtAlign.valueOf(swtChild.getAlign().toString());
          switch(swtAlign){
            case :
              data.horizontalAlignment = GridData.BEGINNING;
              break;
            case :
              data.horizontalAlignment = GridData.END;
              break;
            case :
              data.horizontalAlignment = GridData.CENTER;
              break;
          }
        }
        if (.equals(.)) {
          if(swtChild.getHeight() < 0){
            data.grabExcessVerticalSpace = true;
          }
        } else { //Orient.VERTICAL
          if(swtChild.getWidth() < 0){
            data.grabExcessHorizontalSpace = true;
          }
        }
        c.setLayoutData(data);
      }
    }
    if(atLeastOneRowIsFlexed == false){ //Add placeholder row to push others up
      
    }
    container.layout(true);
    
    this. = true;
  }
  /* (non-Javadoc)
   * @see org.pentaho.ui.xul.containers.XulGrid#update()
   */
  public void update() {
    layout();
  }
  
  public String getBgcolor() {
    return ;
  }
  public void setBgcolor(String bgcolor) {
    this. = bgcolor;
    Color c = Color.decode(bgcolor);
    .setBackground(new org.eclipse.swt.graphics.Color(.getDisplay(), c.getRed(), c.getGreen(), c.getBlue() ));
    .setBackgroundMode(SWT.INHERIT_DEFAULT);
  }
New to GrepCode? Check out our FAQ X