/******************************************************************************* * 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.eclipse.ui.inspector; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.forms.events.ExpansionAdapter; import org.eclipse.ui.forms.events.ExpansionEvent; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.forms.widgets.TableWrapData; import com.windowtester.recorder.event.user.IWidgetDescription; /** * Section describing Locator details. */ public class LocatorSection extends AbstractSection { public void addTo(IWidgetDescription description, final ScrolledForm form, InspectorFormToolkit toolkit) { final Section section = createSection(form, toolkit); section.setText(getExpandedTitle()); final Tree tree = LocatorTree.forLocatorInComposite(description.getLocator(), section); section.setClient(tree); toolkit.adapt(tree); // TableWrapData layoutData = setLayoutAdjustingForTreeHeight(section, tree); expandAll(tree); // tree.setLayoutData(layoutData); TableWrapData td = new TableWrapData(); td.align = TableWrapData.FILL; td.grabHorizontal = true; tree.setLayoutData(td); section.setLayoutData(td); //tree.layout(); section.addExpansionListener(new ExpansionAdapter() { public void expansionStateChanged(ExpansionEvent e) { if (e.getState() == false) { TreeItem[] items = tree.getItems(); if (items.length > 0) { section.setText(items[0].getText()); section.layout(); } } else { section.setText(getExpandedTitle()); section.layout(); } form.getShell().pack(true); } }); // tree.addListener(SWT.Expand, new Listener() { // public void handleEvent(Event event) { // section.layout(true,true); // //form.getShell().pack(true); // tree.layout(); // // } // }); // tree.addListener(SWT.Collapse, new Listener() { // public void handleEvent(Event event) { // tree.layout(true); // tree.pack(true); // section.layout(true,true); // section.pack(); // } // }); } private String getExpandedTitle() { return "Locator"; } // private TableWrapData setLayoutAdjustingForTreeHeight(Section section, Tree tree) { // TableWrapData td = new TableWrapData(); // td.align = TableWrapData.FILL; // td.grabHorizontal = true; // int itemHeight = tree.getItemHeight(); // System.out.println(itemHeight); // int numberOfItems = getTreeDepth(tree); // System.out.println(numberOfItems); // //// td.heightHint = 50 + childCount*30; //cheesy but locators are getting cut off... // td.heightHint = 50 + numberOfItems*itemHeight; // // System.out.println(td.heightHint); // section.setLayoutData(td); // return td; // } // private int getTreeDepth(Tree tree) { // int depth = 0; // TreeItem item = tree.getTopItem(); // while (item != null) { // ++depth; // item = item.getItemCount() > 0 ? item.getItem(0) : null; // } // return depth; // } private void expandAll(Tree tree) { TreeItem[] items = tree.getItems(); expandAll(items); } private void expandAll(TreeItem[] items) { for (int i = 0; i < items.length; i++) { items[i].setExpanded(true); expandAll(items[i].getItems()); } } }