SWT Jface Eclipse Java

/*******************************************************************************
 * All Right Reserved. Copyright (c) 1998, 2004 Jackwind Li Guojie
 * 
 * Created on Feb 27, 2004 12:17:28 AM by JACK $Id$
 *  
 ******************************************************************************/
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.CoolBar;
import org.eclipse.swt.widgets.CoolItem;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class CoolBarExamples {
  Display display = new Display();
  Shell shell = new Shell(display);
  public CoolBarExamples() {
    shell.setLayout(new GridLayout());
    final CoolBar coolBar = new CoolBar(shell, SWT.NONE);
    coolBar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    // cool item with a text field.
    CoolItem textItem = new CoolItem(coolBar, SWT.NONE);
    Text text = new Text(coolBar, SWT.BORDER | SWT.DROP_DOWN);
    text.setText("TEXT");
    text.pack();
    Point size = text.getSize();
    textItem.setControl(text);
    textItem.setSize(textItem.computeSize(size.x, size.y));
    // cool item with a label.
    CoolItem labelItem = new CoolItem(coolBar, SWT.NONE);
    Label label = new Label(coolBar, SWT.NONE);
    label.setText("LABEL");
    label.pack();
    size = label.getSize();
    labelItem.setControl(label);
    labelItem.setSize(textItem.computeSize(size.x, size.y));
    // cool item with a button.
    CoolItem buttonItem = new CoolItem(coolBar, SWT.NONE | SWT.DROP_DOWN);
    Composite composite = new Composite(coolBar, SWT.NONE);
    composite.setLayout(new GridLayout(2, true));
    Button button1 = new Button(composite, SWT.PUSH);
    button1.setText("Button 1");
    button1.pack();
    Button button2 = new Button(composite, SWT.PUSH);
    button2.setText("Button 2");
    button2.pack();
    composite.pack();
    size = composite.getSize();
    buttonItem.setControl(composite);
    buttonItem.setSize(buttonItem.computeSize(size.x, size.y));
//    // Test cool item adding method.
//    Label label2 = new Label(coolBar, SWT.NONE);
//    label2.setText("label2");
//    addControlToCoolBar(label2, SWT.DROP_DOWN, coolBar);
    try {
      setState(coolBar, new File("coolbar.state"));
    } catch (IOException e1) {
      e1.printStackTrace();
    }
    
    shell.addListener(SWT.Close, new Listener() {
      public void handleEvent(Event event) {
        try {
          saveState(coolBar, new File("coolbar.state") );
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    });
    shell.setSize(300, 120);
    // shell.pack();
    shell.open();
    // Set up the event loop.
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        // If no more entries in event queue
        display.sleep();
      }
    }
    display.dispose();
  }
  /**
   * Creates a cool item with the given control and add the cool item to the
   * specified cool bar.
   * 
   * @param control
   * @param coolItemStyle -
   *            should be SWT.NONE or SWT.DROP_DOWN.
   * @param coolBar
   * @return the cool item created.
   */
  public static CoolItem addControlToCoolBar(
    Control control,
    int coolItemStyle,
    CoolBar coolBar) {
    CoolItem coolItem = new CoolItem(coolBar, coolItemStyle);
    Point size = control.getSize();
    if (size.x == 0 && size.y == 0) {
      // The control size has not been set yet.
      // Pack the control and recalculate its size.
      control.pack();
      size = control.getSize();
    }
    coolItem.setControl(control);
    coolItem.setSize(coolItem.computeSize(size.x, size.y));
    return coolItem;
  }
  
  // Save the display state of the given cool bar in the specified file. 
  private void saveState(CoolBar coolBar, File file) throws IOException {
    DataOutputStream out = new DataOutputStream(new FileOutputStream(file));
    
    try {
      // Orders of items. 
      System.out.println("Item order: " + intArrayToString(coolBar.getItemOrder()));
      int[] order = coolBar.getItemOrder();
      out.writeInt(order.length);
      for(int i=0; i        out.writeInt(order[i]);
      
      // Wrap indices.
      System.out.println("Wrap indices: " + intArrayToString(coolBar.getWrapIndices()));
      int[] wrapIndices = coolBar.getWrapIndices();
      out.writeInt(wrapIndices.length);
      for(int i=0; i        out.writeInt(wrapIndices[i]);
      
      // Sizes. 
      Point[] sizes = coolBar.getItemSizes();
      out.writeInt(sizes.length);
      for(int i=0; i        out.writeInt(sizes[i].x);
        out.writeInt(sizes[i].y);
      }
    } finally {
      out.close();
    }
    
  }
  
  // Sets the display state for a cool bar, using the saved information in the given file. 
  private void setState(CoolBar coolBar, File file) throws IOException {
    if(! file.exists())
      throw new IOException("File does not exist: " + file);
    
    DataInputStream in = new DataInputStream(new FileInputStream(file));
    
    try {
      // Order
      int size = in.readInt();
      int[] order = new int[size];
      for(int i=0; i        order[i] = in.readInt();
      
      // Wrap indices.
      size = in.readInt();
      int[] wrapIndices = new int[size];
      for(int i=0; i        wrapIndices[i] = in.readInt();
      
      // Sizes.
      size = in.readInt();
      Point[] sizes = new Point[size];
      for(int i=0; i        sizes[i] = new Point(in.readInt(), in.readInt());
      
      coolBar.setItemLayout(order, wrapIndices, sizes);
    } finally {
      in.close();
    }
    
  }
  public static String intArrayToString(int values[]) {
    StringBuffer sb = new StringBuffer();
    sb.append("{");
    for (int i = 0; values != null && i < values.length; i++) {
      sb.append(values[i]);
      if (i != values.length - 1)
        sb.append(", ");
    }
    sb.append("}");
    return sb.toString();
  }
  public static void main(String[] args) {
    new CoolBarExamples();
  }
}