/*******************************************************************************
* Copyright (c) 2012 Google, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Google, Inc. - initial API and implementation
*******************************************************************************/
package com.windowtester.test.locator.swt.shells;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
public class TreeTestShell
{
public static final String PATH_WITH_DELIMS = "delimed/path";
public static final String PATH_WITH_DELIMS_ESCAPED = "delimed\\/path";
/*
* PackageTest [TEST\\/tags\\/packageTest\\/V1.0]"
*/
public static final String ITEM_LABEL_WITH_DELIMS = "PackageTest [TEST/tags/packageTest/V1.0]";
public static final String ITEM_LABEL_WITH_DELIMS_REGEXP = "PackageTest .*";
public static final String ITEM_LABEL_WITH_DELIMS_ESCAPED = "PackageTest [TEST\\/tags\\/packageTest\\/V1.0]";
public static final String ITEM_LABEL_WITH_DELIMS_2 = "ChildTest [TEST/tags/childTest/V1.1]";
public static final String ITEM_LABEL_WITH_DELIMS_2_REGEXP = "ChildTest .*";
public static final String ITEM_LABEL_WITH_DELIMS_ESCAPED_2 = "ChildTest [TEST\\/tags\\/childTest\\/V1.1]";
public static final String SUB_MENU_ITEM = "sub";
public static final String ITEM_LABEL_WITH_DELIMS_CHILD_2 = "child";
public Tree checkTree;
private Tree lazyTree;
public Tree tree;
public Tree emptyTree;
public Shell shell;
private String selectedMenuText;
public Shell getShell() {
return shell;
}
/**
* Launch the application
* @param args
*/
public static void main(String[] args) {
try {
TreeTestShell window = new TreeTestShell();
window.open();
//new EventRecordingWatcher(window.getShell()).watch();
final Display display = Display.getDefault();
while (!window.getShell().isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Open the window
*/
public void open() {
shell = new Shell();
createContents();
shell.open();
final Composite composite = new Composite(shell, SWT.NONE);
composite.setLayoutData(new GridData());
composite.setLayout(new GridLayout());
tree = new Tree(composite, SWT.BORDER | SWT.MULTI);
final GridData gridData = new GridData(GridData.FILL, GridData.FILL, true, true);
gridData.widthHint = 142;
gridData.heightHint = 177;
tree.setLayoutData(gridData);
/*
* escaped tree item
*/
TreeItem escaped = new TreeItem(tree, 0);
escaped.setText(ITEM_LABEL_WITH_DELIMS);
new TreeItem(escaped, 0).setText(ITEM_LABEL_WITH_DELIMS_2);
new TreeItem(escaped, 0).setText(ITEM_LABEL_WITH_DELIMS_CHILD_2);
for (int i=0; i<4; i++) {
TreeItem iItem = new TreeItem (tree, 0);
iItem.setText ("TreeItem (0) -" + i);
for (int j=0; j<4; j++) {
TreeItem jItem = new TreeItem (iItem, 0);
jItem.setText ("TreeItem (1) -" + j);
for (int k=0; k<4; k++) {
TreeItem kItem = new TreeItem (jItem, 0);
kItem.setText ("TreeItem (2) -" + k);
for (int l=0; l<4; l++) {
TreeItem lItem = new TreeItem (kItem, 0);
lItem.setText ("TreeItem (3) -" + l);
}
}
}
}
final Menu menu = new Menu (shell, SWT.POP_UP);
tree.setMenu (menu);
menu.addListener (SWT.Show, new Listener () {
public void handleEvent (Event event) {
MenuItem [] menuItems = menu.getItems ();
for (int i=0; i<menuItems.length; i++) {
menuItems [i].dispose ();
}
TreeItem [] treeItems = tree.getSelection ();
for (int i=0; i<treeItems.length; i++) {
MenuItem menuItem = new MenuItem (menu, SWT.PUSH);
final String menuText = treeItems [i].getText ();
menuItem.setText (menuText);
menuItem.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
setSelectedMenuText(menuText);
}
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
}
}
});
final Composite composite_1 = new Composite(shell, SWT.NONE);
final GridData gridData_2 = new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 3, 1);
gridData_2.widthHint = 185;
composite_1.setLayoutData(gridData_2);
composite_1.setLayout(new GridLayout());
lazyTree = new Tree(composite_1, SWT.BORDER);
for (int i=0; i < 4; i++) {
TreeItem root = new TreeItem (lazyTree, 0);
root.setText ("root " + i);
root.setData ("root" + i);
new TreeItem (root, 0);
}
lazyTree.addListener (SWT.Expand, new Listener () {
public void handleEvent (final Event event) {
final TreeItem root = (TreeItem) event.item;
TreeItem [] items = root.getItems ();
for (int i= 0; i<items.length; i++) {
if (items [i].getData () != null) return;
items [i].dispose ();
}
for (int i= 0; i<2; i++) {
TreeItem item = new TreeItem (root, 0);
item.setText ("node " + i);
item.setData ("node " + i);
if (i ==0) {
new TreeItem (item, 0);
}
}
}
});
final GridData gridData_1 = new GridData(GridData.FILL, GridData.FILL, true, true);
gridData_1.heightHint = 175;
lazyTree.setLayoutData(gridData_1);
final Composite composite_2 = new Composite(shell, SWT.NONE);
composite_2.setLayoutData(new GridData(170, 172));
composite_2.setLayout(new GridLayout());
checkTree = new Tree(composite_2, SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER | SWT.CHECK);
checkTree.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
for (int i=0; i<5; i++) {
TreeItem item = new TreeItem (checkTree, SWT.NONE);
item.setText ("parent " + i);
for (int j=0; j < 3; ++j) {
TreeItem item2 = new TreeItem (item, SWT.NONE);
item2.setText ("child/" + j);
}
}
/*
* A menu with an escaped path delim
*/
Menu menu2 = new Menu (shell, SWT.POP_UP);
MenuItem item1 = new MenuItem (menu2, SWT.PUSH);
item1.setText (PATH_WITH_DELIMS);
item1.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
setSelectedMenuText(PATH_WITH_DELIMS);
}
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
MenuItem item2 = new MenuItem (menu2, SWT.CASCADE);
item2.setText (SUB_MENU_ITEM);
Menu subMenu = new Menu (menu2);
item2.setMenu (subMenu);
MenuItem subItem1 = new MenuItem (subMenu, SWT.PUSH);
subItem1.setText (PATH_WITH_DELIMS);
subItem1.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
setSelectedMenuText(SUB_MENU_ITEM + "/" + PATH_WITH_DELIMS);
}
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
checkTree.setMenu(menu2);
final Composite composite_3 = new Composite(shell, SWT.NONE);
composite_3.setLayoutData(new GridData(185, 172));
composite_3.setLayout(new GridLayout());
emptyTree = new Tree(composite_3, SWT.MULTI | SWT.BORDER);
emptyTree.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
Menu menu3 = new Menu (shell, SWT.POP_UP);
MenuItem mitem1 = new MenuItem (menu3, SWT.PUSH);
mitem1.setText ("item1");
mitem1.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
setSelectedMenuText("item1");
}
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
MenuItem mitem2 = new MenuItem (menu3, SWT.CASCADE);
mitem2.setText ("item2");
mitem2.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
setSelectedMenuText("item2");
}
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
Menu msubMenu = new Menu (menu3);
mitem2.setMenu (msubMenu);
MenuItem msubItem1 = new MenuItem (msubMenu, SWT.PUSH);
msubItem1.setText ("subitem1");
msubItem1.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
setSelectedMenuText("subitem1");
}
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
emptyTree.setMenu (menu3);
shell.layout();
}
void createContents() {
final GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 4;
shell.setLayout(gridLayout);
shell.setSize(380, 425);
shell.setText("Tree Test");
}
/**
* Called by the menu handler for purposes of test assertion
* @param menuText the text of the menu selected
*/
private void setSelectedMenuText(String menuText) {
selectedMenuText = menuText;
}
public String getSelectedMenuText() {
return selectedMenuText;
}
public void clearSelectedMenuText() {
selectedMenuText = null;
}
}