Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.pentaho.ui.xul.swt.tags;
  
  import  org.eclipse.swt.SWT;
  import  org.eclipse.swt.custom.CTabFolder;
  import  org.eclipse.swt.custom.CTabFolder2Listener;
  import  org.eclipse.swt.custom.CTabFolderEvent;
  import  org.eclipse.swt.custom.CTabItem;
  import  org.eclipse.swt.events.SelectionAdapter;
 import  org.eclipse.swt.events.SelectionEvent;
 import  org.eclipse.swt.graphics.Color;
 import  org.eclipse.swt.layout.GridData;
 import  org.eclipse.swt.widgets.Composite;
 import  org.eclipse.swt.widgets.Control;
 
 public class SwtTabbox extends AbstractSwtXulContainer implements XulTabbox {
 
   private CTabFolder tabFolder;
 
   private SwtTabpanels panels;
 
   private SwtTabs tabs;
 
   private int selectedIndex = -1;
 
   private boolean closable;
 
   private String onclose;
 
   
   // used to prevent recursing. 
   private boolean suppressRemoveEvents;
 
   public SwtTabbox(Element selfXulComponent parentXulDomContainer domContainerString tagName) {
     super("tabbox");
     int style = SWT.MULTI;
     if (self.getAttributeValue("closable") != null && self.getAttributeValue("closable").equals("true")) {
       style |= SWT.CLOSE;
     }
     this. = domContainer;
 
      = new CTabFolder((Composite) parent.getManagedObject(), style);
     .setLayoutData(new GridData(GridData.FILL_BOTH));
 
     .setSimple(false);
     .setUnselectedImageVisible(true);
     .setUnselectedCloseVisible(true);
     .setBorderVisible(true);
 
     .addSelectionListener(new SelectionAdapter() {
 
       @Override
       public void widgetSelected(SelectionEvent arg0) {
         int prevVal = ;
          = .getSelectionIndex();
 
         // expect to find exactly one tabs child node of this tabbox node
         XulTabs tabs = null;
         for (XulComponent c : getChildNodes()) {
           if (c instanceof XulTabs) {
             tabs = (XulTabsc;
           }
         }
 
         XulTab tab = (XulTabtabs.getChildNodes().get();
         if (StringUtils.isNotBlank(tab.getOnclick())) {
           SwtTabbox.this.invoke(tab.getOnclick());
         }
 
         SwtTabbox.this..firePropertyChange("selectedIndex"prevVal);
       }
 
     });
 
     .addCTabFolder2Listener(new CTabFolder2Listener() {
 
       public void close(CTabFolderEvent arg0) {
         if ( != null) {
           try {
             int pos = 0;
             for (int i = 0; i < .getItems().length; i++) {
               if (.getItems()[i] == arg0.item) {
                 pos = i;
                 break;
               }
             }
             Boolean returnVal = (BooleanSwtTabbox.this..invoke(new Object[] { pos });
             if (returnVal == true) {
              remove(pos);
            } else {
              arg0.doit = false;
            }
          } catch (XulException e) {
            e.printStackTrace();
          }
        } else {
          remove(.getSelectionIndex());
        }
      }
      public void maximize(CTabFolderEvent arg0) {
      }
      public void minimize(CTabFolderEvent arg0) {
      }
      public void restore(CTabFolderEvent arg0) {
      }
      public void showList(CTabFolderEvent arg0) {
      }
    });
    // Set a small vertical gradient
    .setSelectionBackground(new Color[] {
        .getDisplay().getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW),
        .getDisplay().getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW), }, new int[] { 55, }, true);
  }
  private void remove(int pos) {
     = true;
    this..removeChild(this..getChildNodes().get(pos));
    this..removeChild(this..getChildNodes().get(pos));
    if (.getChildNodes().size() == 0) { // last one doesn't fire selection event. Manually do that here
      setSelectedIndex(-1);
    }
     = false;
  }
  public void addChild(Element ele) {
    super.addChild(ele);
    if (ele instanceof SwtTabs) {
      this. = (SwtTabsele;
    } else if (ele instanceof SwtTabpanels) {
      this. = (SwtTabpanelsele;
    }
  }
  public int getSelectedIndex() {
    return .getSelectionIndex();
  }
  }
  public XulTabpanels getTabpanels() {
    return ;
  }
  public XulTabs getTabs() {
    return ;
  }
  public void setSelectedIndex(int index) {
    int prevVal = ;
     = index;
    SwtTabbox.this..firePropertyChange("selectedIndex"prevVal);
    if () { // component instantiated
      .setSelection();
      // Programatic set selectedIndex does not fire listener.
      int sel = .getSelectionIndex();
    }
  }
  public void layout() {
    CTabItem[] t = .getItems();
    for (int i = 0; i < t.length; i++) {
      t[i].dispose();
    }
    for (int i = 0; i < .getChildNodes().size(); i++) {
      int style = SWT.None;
      int tabIndex = 0;
      if (isClosable()) {
        style = SWT.Close;
      }
      SwtTab tab = (SwtTab.getChildNodes().get(i);
      if (tab.isVisible()) {
        CTabItem item = new CTabItem(style);
        item.setText(.getTabByIndex(i).getLabel());
        // There could be a chance that the tabs have been added but tab panel are still
        // not there. In this case we need to break from this layout routine
        if (.getChildNodes().size() <= i) {
          break;
        }
        item.setControl((Control) .getTabpanelByIndex(i).getManagedObject());
        .getItem(tabIndex++).getControl().setEnabled(!.getTabByIndex(i).isDisabled());
      }
    }
     = true;
    .layout(truetrue);
    if ( < 0 && .getItemCount() > 0) {
       = 0;
    }
  }
  public void setTabDisabledAt(boolean flagint pos) {
    .getItem(pos).getControl().setEnabled(!flag);
  }
  public void setTabVisibleAt(boolean flagint pos) {
    .getItem(pos).getControl().setVisible(flag);
  }
  public void updateTabState() {
    for (int i = 0; i < .getChildNodes().size(); i++) {
      .getItem(i).setText("" + .getTabByIndex(i).getLabel());
      Control control = .getItem(i).getControl();
      if(control != null){
        .getItem(i).getControl().setEnabled(!.getTabByIndex(i).isDisabled());
      }
    }
  }
  public void removeTab(int idx) {
      return;
    }
    if (.getItemCount() >= idx) {
      .getItem(idx).dispose();
    }
  }
  public void removeTabpanel(int idx) {
      return;
    }
    if (.getItemCount() > idx) {
      .getItem(idx).getControl().dispose();
    }
  }
  public void addTab(int idx) {
    int style = SWT.None;
    if (isClosable()) {
      style = SWT.Close;
    }
    CTabItem item = new CTabItem(style);
    String lbl = .getTabByIndex(idx).getLabel();
    if (lbl != null) {
      item.setText(lbl);
    }
    //may have been added after panel
    //addTabpanel(idx);
    if ( < 0) {
       = 0;
    }
  }
  public void addTabpanel(int idx) {
    //not sure if the tab has been added first, ignore if not
    if (.getItemCount() <= idx || .getChildNodes().size() <= idx) {
      return;
    }
    CTabItem item = .getItem(idx);
    Control control = (Control) .getTabpanelByIndex(idx).getManagedObject();
    if (control.getParent() != ) {
      control.setParent();
    }
    item.setControl(control);
    item.getControl().setEnabled(!.getTabByIndex(idx).isDisabled());
  }
  public void setClosable(boolean flag) {
    this. = flag;
  }
  public boolean isClosable() {
    return this.;
  }
  public void setOnclose(String command) {
    this. = command;
  }
New to GrepCode? Check out our FAQ X