/*******************************************************************************
* Copyright (c) 2004 Berthold Daum. All rights reserved. This program and the
* accompanying materials are made available under the terms of the Common
* Public License v1.0 which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors: Berthold Daum
******************************************************************************/
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.events.ArmEvent;
import org.eclipse.swt.events.ArmListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.printing.PrintDialog;
import org.eclipse.swt.printing.Printer;
import org.eclipse.swt.printing.PrinterData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.CoolBar;
import org.eclipse.swt.widgets.CoolItem;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
public class widgetTest3 {
public static void main(String[] args) {
// Create display instance
final Display display = new Display();
// Create top level shell (pass display as parent)
final Shell toplevelShell = new Shell(display);
// Set title
toplevelShell.setText("TopLevel.Titelzeile");
// Fill the shell completely with content
toplevelShell.setLayout(new FillLayout());
// Create tabbed folder
TabFolder folder = new TabFolder(toplevelShell, SWT.NONE);
// Protocol selection event
folder.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
System.out.println("Tab selected: "
+ ((TabItem) (e.item)).getText());
}
});
// Fill tabbed folder completely with content
folder.setLayout(new FillLayout());
Composite page1 = createTabPage(folder, "tab1");
// We can now place more GUI elements onto page1
//...
Composite page2 = createTabPage(folder, "tab2");
// We can now place more GUI elements onto page2
//...
// Display shell
toplevelShell.open();
// Event loop
while (!toplevelShell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
private static Composite createTabPage(TabFolder folder, String label) {
// Create and label a new tab
TabItem tab = new TabItem(folder, SWT.NONE);
tab.setText(label);
// Create a new page as a Composite instance
Composite page = new Composite(folder, SWT.NONE);
//... and assign to tab
tab.setControl(page);
return page;
}
/** * Menu ** */
public static Menu createMenu(final Shell toplevelShell) {
// Menuleiste anlegen
Menu menuBar = new Menu(toplevelShell, SWT.BAR);
toplevelShell.setMenuBar(menuBar);
// Menutitel anlegen
MenuItem fileTitle = new MenuItem(menuBar, SWT.CASCADE);
fileTitle.setText("File");
// Untermenu fur diesen Menutitel anlegen
Menu fileMenu = new Menu(toplevelShell, SWT.DROP_DOWN);
fileTitle.setMenu(fileMenu);
// Menueintrag anlegen
MenuItem item = new MenuItem(fileMenu, SWT.NULL);
item.setText("Exit");
// Ereignisverarbeitung fur Menueintrag
item.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
toplevelShell.close();
}
});
return menuBar;
}
/** * Coolbar ** */
public CoolBar createCoolBar(Composite composite) {
// Create CoolBar
final CoolBar coolbar = new CoolBar(composite, SWT.NULL);
// Create ToolBar as a component of CoolBar
final ToolBar toolbar1 = new ToolBar(coolbar, SWT.NULL);
// Create pushbutton
final ToolItem toolitem1 = new ToolItem(toolbar1, SWT.PUSH);
toolitem1.setText("Push");
toolitem1.setToolTipText("Push button");
// Create event processing for pushbutton
toolitem1.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
System.out.println("Tool button was pressed: "
+ toolitem1.getText());
}
});
// Create check button
final ToolItem toolitem2 = new ToolItem(toolbar1, SWT.CHECK);
toolitem2.setText("Check");
toolitem2.setToolTipText("Check button");
// Create CoolItem instance
final CoolItem coolitem1 = new CoolItem(coolbar, SWT.NULL);
// Assign this tool bar to the CoolItem instance
coolitem1.setControl(toolbar1);
// Compute size of tool bar
Point size = toolbar1.computeSize(SWT.DEFAULT, SWT.DEFAULT);
// Compute required size of CoolItems instance
size = coolitem1.computeSize(size.x, size.y);
// Set size for this CoolItem instance
coolitem1.setSize(size);
// The minimum size of the CoolItem is the width of the first button
coolitem1.setMinimumSize(toolitem1.getWidth(), size.y);
// Create second ToolBar instance
final ToolBar toolbar2 = new ToolBar(coolbar, SWT.NULL);
// Create two radio buttons
final ToolItem toolitem3a = new ToolItem(toolbar2, SWT.RADIO);
toolitem3a.setText("Radio");
toolitem3a.setToolTipText("Radio button a");
final ToolItem toolitem3b = new ToolItem(toolbar2, SWT.RADIO);
toolitem3b.setText("Radio");
toolitem3b.setToolTipText("Radio button b");
// Create separator
new ToolItem(toolbar2, SWT.SEPARATOR);
// Create drop-down menu button
final ToolItem toolitem5 = new ToolItem(toolbar2, SWT.DROP_DOWN);
toolitem5.setText("Drop-down-Menu");
// Add event processing to drop-down menu button
toolitem5.addSelectionListener(
// In class DropDownSelectionListener we construct the menu
new DropDownSelectionListener(composite.getShell()));
// Create second CoolItem, assing Toolbar to it and set size
final CoolItem coolitem2 = new CoolItem(coolbar, SWT.NULL);
coolitem2.setControl(toolbar2);
size = toolbar2.computeSize(SWT.DEFAULT, SWT.DEFAULT);
size = coolitem2.computeSize(size.x, size.y);
coolitem2.setSize(size);
coolitem2.setMinimumSize(toolitem3a.getWidth(), size.y);
return coolbar;
}
class DropDownSelectionListener extends SelectionAdapter {
private Menu menu;
private Composite parent;
public DropDownSelectionListener(Composite parent) {
this.parent = parent;
}
public void widgetSelected(final SelectionEvent e) {
// Create menu lazily
if (menu == null) {
menu = new Menu(parent);
final MenuItem menuItem1 = new MenuItem(menu, SWT.NULL);
menuItem1.setText("Item1");
// Set SelectionListener for menuItem1
menuItem1.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent m) {
processMenuEvent(e, menuItem1);
}
});
menuItem1.addArmListener(new ArmListener() {
public void widgetArmed(ArmEvent m) {
System.out.println("Mouse is over menu item 1");
}
});
final MenuItem menuItem2 = new MenuItem(menu, SWT.NULL);
menuItem2.setText("Item2");
// Set SelectionListener foYr menuItem1
menuItem2.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent m) {
processMenuEvent(e, menuItem2);
}
});
menuItem2.addArmListener(new ArmListener() {
public void widgetArmed(ArmEvent m) {
System.out.println("Mouse is over menu item 2");
}
});
}
// Check, if it was the arrow button that was pressed
if (e.detail == SWT.ARROW) {
if (menu.isVisible()) {
// Set visible menu invisible
menu.setVisible(false);
} else {
// Retrieve ToolItem and ToolBar from the event object
final ToolItem toolItem = (ToolItem) e.widget;
final ToolBar toolBar = toolItem.getParent();
// Get position and size of the ToolItem
Rectangle toolItemBounds = toolItem.getBounds();
// Convert relative position to absolute position
Point point = toolBar.toDisplay(new Point(toolItemBounds.x,
toolItemBounds.y));
// Set menu position
menu.setLocation(point.x, point.y + toolItemBounds.height);
// Make menu visible
menu.setVisible(true);
}
} else {
final ToolItem toolItem = (ToolItem) e.widget;
System.out.println("Tool button was pressed: "
+ toolItem.getText());
}
}
private void processMenuEvent(final SelectionEvent e,
final MenuItem item) {
// Get text of menu item
final String s = item.getText();
// Get ToolItem
final ToolItem toolItem = (ToolItem) e.widget;
// Replace ToolItem label with text of the menu item
toolItem.setText(s);
// Hide menu
menu.setVisible(false);
}
}
/** * SashForm ** */
public static SashForm createSashForm(Shell toplevelShell) {
// Create outer SashForm
SashForm sf1 = new SashForm(toplevelShell, SWT.HORIZONTAL);
// Create inner SashForm
SashForm sf2 = new SashForm(sf1, SWT.VERTICAL);
// Create content for vertical SashForm
List list1 = new List(sf2, SWT.NONE);
list1.setItems(new String[] { "red", "green", "blue" });
List list2 = new List(sf2, SWT.NONE);
list2.setItems(new String[] { "A", "B", "C" });
// Apply even weights
sf2.setWeights(new int[] { 100, 100 });
// Create content for horizontal SashForm
List list3 = new List(sf1, SWT.NONE);
list3.setItems(new String[] { "one", "two", "three", "four", "five",
"six" });
// Apply uneven weights
sf1.setWeights(new int[] { 100, 200 });
return sf1;
}
/** * StackLayout ** */
public static void createStackLayout(Composite composite) {
// Neues Composite erzeugen
final Composite stackComposite = new Composite(composite, SWT.NULL);
final StackLayout stackLayout = new StackLayout();
// Text-Buttons erzeugen
final Button buttonA = new Button(stackComposite, SWT.PUSH);
buttonA.setText("Taste A");
final Button buttonB = new Button(stackComposite, SWT.PUSH);
buttonB.setText("Taste B");
// Auf Klickereignisse reagieren
buttonA.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
stackLayout.topControl = buttonB;
// Neues Layout erzwingen
stackComposite.layout();
// Fokus auf sichtbare Taste setzen
buttonB.setFocus();
}
});
buttonB.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
stackLayout.topControl = buttonA;
// Neues Layout erzwingen
stackComposite.layout();
// Fokus auf sichtbare Taste setzen
buttonA.setFocus();
}
});
// Layout initialisieren
stackLayout.topControl = buttonA;
stackLayout.marginWidth = 10;
stackLayout.marginHeight = 5;
// Layout setzen
stackComposite.setLayout(stackLayout);
}
/** * PaintListener ** */
public static void addPaintListener(Composite composite) {
composite.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent event) {
// Get Display intsance from event object
Display display = event.display;
// Get a green system color object - we don't
// need to dispose that
Color green = display.getSystemColor(SWT.COLOR_DARK_GREEN);
// Get the graphics context from the event object
GC gc = event.gc;
// Set line color
gc.setForeground(green);
// Get size of the Composite's client area
Rectangle rect = ((Composite) event.widget).getClientArea();
// Now draw an rectangle
gc.drawRectangle(rect.x + 2, rect.y + 2, rect.width - 4,
rect.height - 4);
}
});
}
/** * Fonts ** */
public static void drawItalic(Composite composite, GC gc) {
// Get Display instance
Display display = composite.getDisplay();
// Fetch system font
Font systemFont = display.getSystemFont();
// FontData objects contain the font properties.
// With some operating systems a font may possess multiple
// FontData instances. We only use the first one.
FontData[] data = systemFont.getFontData();
FontData data0 = data[0];
// Set the font style to italic
data0.setStyle(SWT.ITALIC);
// Create a new font
Font italicFont = new Font(display, data0);
// Set the new font in the graphics context
gc.setFont(italicFont);
// TODO: call italicFont.dispose() in the DisposeListener
// of composite
// Draw text at position (4,4) with a transparent background (true).
gc.drawText("Hello", 4, 4, true);
}
/** * Images ** */
public static void doubleBuffering(Composite composite) {
// Create canvas
final Canvas canvas = new Canvas(composite, SWT.BORDER);
// Get white system color
Color white = canvas.getDisplay().getSystemColor(SWT.COLOR_WHITE);
// Set canvas background to white
canvas.setBackground(white);
// Add paint listener
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
// Get Display instance from the event object
Display display = e.display;
// Get black and red system color - don't dispose these
Color black = display.getSystemColor(SWT.COLOR_BLACK);
Color red = display.getSystemColor(SWT.COLOR_RED);
// Get the graphics context from event object
GC gc = e.gc;
// Get the widget that caused the event
Composite source = (Composite) e.widget;
// Get the size of this widgets client area
Rectangle rect = source.getClientArea();
// Create buffer for double buffering
Image buffer = new Image(display, rect.width, rect.height);
// Create graphics context for this buffer
GC bufferGC = new GC(buffer);
// perform drawing operations
bufferGC.setBackground(red);
bufferGC.fillRectangle(5, 5, rect.width - 10, rect.height - 10);
bufferGC.setForeground(black);
bufferGC.drawRectangle(5, 5, rect.width - 10, rect.height - 10);
bufferGC.setBackground(source.getBackground());
bufferGC.fillRectangle(10, 10, rect.width - 20,
rect.height - 20);
// Now draw the buffered image to the target drawable
gc.drawImage(buffer, 0, 0);
// Dispose of the buffer's graphics context
bufferGC.dispose();
// Dispose of the buffer
buffer.dispose();
}
});
}
/** * Printing ** */
public static void createPrintButton(final Composite composite) {
// Create button for starting printing process
final Button printButton = new Button(composite, SWT.PUSH);
printButton.setText("Print");
// React to clicks
printButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
// Get Shell instance
Shell shell = composite.getShell();
// Create printer selection dialog
PrintDialog printDialog = new PrintDialog(shell);
// and open it
PrinterData printerData = printDialog.open();
// Check if OK was pressed
if (printerData != null) {
// Create new Printer instance
Printer printer = new Printer(printerData);
// Create graphics context for this printer
GC gc = new GC(printer);
// Open printing task
if (!printer.startJob("Hello"))
System.out.println("Starting printer task failed");
else {
// Print first page
if (!printer.startPage())
System.out.println("Printing of page 1 failed");
else {
// Get green system color from printer
// and set it as text color
Color green = printer
.getSystemColor(SWT.COLOR_DARK_GREEN);
gc.setForeground(green);
// Draw text
gc.drawText("Hello World", 4, 4, true);
// Close page
printer.endPage();
}
// Print second page
if (!printer.startPage())
System.out.println("Printing of page 2 failed");
else {
// Get blue system color from printer
// and set it as text color
Color blue = printer.getSystemColor(SWT.COLOR_BLUE);
gc.setForeground(blue);
// Draw text
gc.drawText("Hello Eclipse", 4, 4, true);
// Close page
printer.endPage();
}
// Close printing task
printer.endJob();
}
// Release operating system resources
gc.dispose();
printer.dispose();
}
}
});
}
}
|