//Send questions, comments, bug reports, etc. to the authors:
//Rob Warner (rwarner@interspatial.com)
//Robert Harris (rbrt_harris@yahoo.com)
import org.eclipse.swt.*;
import org.eclipse.swt.custom.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
/**
* This class demonstrates CTabFolder
*/
public class ShowCTabFolder {
// Since CTabFolder does not have a getInsertMark() method,
// store the value so we can keep track of it
private int insertMark = -1;
private CTabFolder tabFolder;
/**
* Runs the application
*/
public void run() {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Show CTabFolder");
createContents(shell);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
/**
* Creates the window's contents
*
* @param shell the parent shell
*/
private void createContents(Shell shell) {
shell.setLayout(new GridLayout(1, true));
// Create the buttons to create tabs
Composite composite = new Composite(shell, SWT.NONE);
composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
composite.setLayout(new RowLayout());
createButtons(composite);
// Create the tabs
tabFolder = new CTabFolder(shell, SWT.TOP);
tabFolder.setBorderVisible(true);
tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
Display display = shell.getDisplay();
// Set up a gradient background for the selected tab
tabFolder.setSelectionBackground(new Color[] {
display.getSystemColor(SWT.COLOR_WIDGET_DARK_SHADOW),
display.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW),
display.getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW)}, new int[] { 50,
100});
// Add a listener to get the close button on each tab
tabFolder.addCTabFolderListener(new CTabFolderAdapter() {
public void itemClosed(CTabFolderEvent event) {}
});
}
/**
* Creates the buttons for moving the insert mark and adding a tab
*
* @param composite the parent composite
*/
private void createButtons(Composite composite) {
// Move mark left
Button button = new Button(composite, SWT.PUSH);
button.setText("<<");
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
if (insertMark > -1) {
--insertMark;
resetInsertMark();
}
}
});
// Move mark right
button = new Button(composite, SWT.PUSH);
button.setText(">>");
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
if (insertMark < tabFolder.getItemCount() - 1) {
++insertMark;
resetInsertMark();
}
}
});
// Add a tab
button = new Button(composite, SWT.PUSH);
button.setText("Add Tab");
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
new CTabItem(tabFolder, SWT.NONE, insertMark + 1).setText("Tab ("
+ (insertMark + 1) + ")");
}
});
}
/**
* Moves the insert mark to the new location
*/
private void resetInsertMark() {
tabFolder.setInsertMark(insertMark, true);
// Workaround for bug #32846
if (insertMark == -1) {
tabFolder.redraw();
}
}
/**
* The application entry point
*
* @param args the command line arguments
*/
public static void main(String[] args) {
new ShowCTabFolder().run();
}
}