//Send questions, comments, bug reports, etc. to the authors:
//Rob Warner (rwarner@interspatial.com)
//Robert Harris (rbrt_harris@yahoo.com)
import java.io.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.SWT;
public class CoolBarTest {
private static final String IMAGE_PATH = "images"
+ System.getProperty("file.separator");
private Image circle;
private Image square;
private Image star;
private Image triangle;
/**
* Runs the application
*/
public void run() {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("CoolBar Test");
createImages(shell);
createContents(shell);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
disposeImages();
display.dispose();
}
/**
* Creates the window contents
*
* @param shell the parent shell
*/
private void createContents(Shell shell) {
shell.setLayout(new GridLayout(1, false));
CoolBar coolbar = createCoolBar(shell);
coolbar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
}
/**
* Creates the CoolBar
*
* @param shell the parent shell
* @return CoolBar
*/
private CoolBar createCoolBar(Shell shell) {
CoolBar coolbar = new CoolBar(shell, SWT.NONE);
// Create toolbar coolitem
final CoolItem item = new CoolItem(coolbar, SWT.DROP_DOWN);
item.setControl(createToolBar(coolbar));
calcSize(item);
// Add a listener to handle clicks on the chevron button
item.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
calcSize(item);
}
});
// Create combo coolitem
CoolItem item2 = new CoolItem(coolbar, SWT.NONE);
item2.setControl(createCombo(coolbar));
calcSize(item2);
// Create a dropdown coolitem
item2 = new CoolItem(coolbar, SWT.NONE);
item2.setControl(createStackedButtons(coolbar));
calcSize(item2);
return coolbar;
}
/**
* Creates the ToolBar
*
* @param composite the parent composite
* @return Control
*/
private Control createToolBar(Composite composite) {
ToolBar toolBar = new ToolBar(composite, SWT.NONE);
ToolItem item = new ToolItem(toolBar, SWT.PUSH);
item.setImage(circle);
item = new ToolItem(toolBar, SWT.PUSH);
item.setImage(square);
item = new ToolItem(toolBar, SWT.PUSH);
item.setImage(star);
item = new ToolItem(toolBar, SWT.PUSH);
item.setImage(triangle);
return toolBar;
}
/**
* Creates the Combo
*
* @param composite the parent composite
* @return Control
*/
private Control createCombo(Composite composite) {
// A bug with Windows causes the Combo not to drop
// down if you add it directly to the CoolBar.
// To work around this, create a Composite, add the
// Combo to it, and add the Composite to the CoolBar.
// This should work both on Windows and on all other
// platforms.
Composite c = new Composite(composite, SWT.NONE);
c.setLayout(new FillLayout());
Combo combo = new Combo(c, SWT.DROP_DOWN);
combo.add("Option One");
combo.add("Option Two");
combo.add("Option Three");
return c;
}
/**
* Creates two stacked buttons
*
* @param composite the parent composite
* @return Control
*/
private Control createStackedButtons(Composite composite) {
Composite c = new Composite(composite, SWT.NONE);
c.setLayout(new GridLayout(1, false));
new Button(c, SWT.PUSH).setText("Button One");
new Button(c, SWT.PUSH).setText("Button Two");
return c;
}
/**
* Helper method to calculate the size of the cool item
*
* @param item the cool item
*/
private void calcSize(CoolItem item) {
Control control = item.getControl();
Point pt = control.computeSize(SWT.DEFAULT, SWT.DEFAULT);
pt = item.computeSize(pt.x, pt.y);
item.setSize(pt);
}
/**
* Creates the images
*
* @param shell the parent shell
*/
private void createImages(Shell shell) {
try {
circle = new Image(shell.getDisplay(), new FileInputStream(IMAGE_PATH
+ "circle.gif"));
square = new Image(shell.getDisplay(), new FileInputStream(IMAGE_PATH
+ "square.gif"));
star = new Image(shell.getDisplay(), new FileInputStream(IMAGE_PATH
+ "star.gif"));
triangle = new Image(shell.getDisplay(), new FileInputStream(IMAGE_PATH
+ "triangle.gif"));
} catch (IOException e) {
// Images not found; handle gracefully
}
}
/**
* Disposes the images
*/
private void disposeImages() {
if (circle != null)
circle.dispose();
if (square != null)
square.dispose();
if (star != null)
star.dispose();
if (triangle != null)
triangle.dispose();
}
/**
* The entry point for the application
*
* @param args the command line arguments
*/
public static void main(String[] args) {
new CoolBarTest().run();
}
}
|