fShell.addControlListener(new ControlAdapter() {  public void controlMoved(ControlEvent e) { fBounds= fShell.getBounds(); }   public void controlResized(ControlEvent e) { fBounds= fShell.getBounds(); } });
	public AbstractInformationControl(Shell parent, int shellStyle, int treeStyle, String invokingCommandId, boolean showStatusField) {		if (invokingCommandId != null) {			ICommandManager commandManager= PlatformUI.getWorkbench().getCommandSupport().getCommandManager();			fInvokingCommand= commandManager.getCommand(invokingCommandId);			if (fInvokingCommand != null && !fInvokingCommand.isDefined())				fInvokingCommand= null;		}				fShell= new Shell(parent, shellStyle);		Display display= fShell.getDisplay();		fShell.setBackground(display.getSystemColor(SWT.COLOR_BLACK));		// Composite for filter text and tree				fComposite= new Composite(fShell,SWT.RESIZE);		GridLayout layout= new GridLayout(1, false);		fComposite.setLayout(layout);		fComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));				fFilterText= createFilterText(fComposite);		fTreeViewer= createTreeViewer(fComposite, treeStyle);				if (showStatusField)			createStatusField(fComposite);				final Tree tree= fTreeViewer.getTree();		tree.addKeyListener(new KeyListener() {			public void keyPressed(KeyEvent e)  {				if (e.character == 0x1B) // ESC					dispose();			}			public void keyReleased(KeyEvent e) {				// do nothing			}		});		tree.addSelectionListener(new SelectionListener() {			public void widgetSelected(SelectionEvent e) {				// do nothing			}			public void widgetDefaultSelected(SelectionEvent e) {				gotoSelectedElement();			}		});		tree.addMouseMoveListener(new MouseMoveListener()	 {			TreeItem fLastItem= null;			public void mouseMove(MouseEvent e) {				if (tree.equals(e.getSource())) {					Object o= tree.getItem(new Point(e.x, e.y));					if (o instanceof TreeItem) {						if (!o.equals(fLastItem)) {							fLastItem= (TreeItem)o;							tree.setSelection(new TreeItem[] { fLastItem });						} else if (e.y < tree.getItemHeight() / 4) {							// Scroll up							Point p= tree.toDisplay(e.x, e.y);							Item item= fTreeViewer.scrollUp(p.x, p.y);							if (item instanceof TreeItem) {								fLastItem= (TreeItem)item;								tree.setSelection(new TreeItem[] { fLastItem });							}														} else if (e.y > tree.getBounds().height - tree.getItemHeight() / 4) {							// Scroll down							Point p= tree.toDisplay(e.x, e.y);							Item item= fTreeViewer.scrollDown(p.x, p.y);							if (item instanceof TreeItem) {								fLastItem= (TreeItem)item;								tree.setSelection(new TreeItem[] { fLastItem });							}														}					}				}			}		});		tree.addMouseListener(new MouseAdapter() {			public void mouseUp(MouseEvent e) {				if (tree.getSelectionCount() < 1)					return;								if (e.button != 1)					return;				if (tree.equals(e.getSource())) {					Object o= tree.getItem(new Point(e.x, e.y));					TreeItem selection= tree.getSelection()[0];					if (selection.equals(o))						gotoSelectedElement();				}			}		});		int border= ((shellStyle & SWT.NO_TRIM) == 0) ? 0 : BORDER;		fShell.setLayout(new BorderFillLayout(border));				fComposite.setTabList(new Control[] {fFilterText, fTreeViewer.getTree()});				setInfoSystemColor();		installFilter();				addDisposeListener(this);	}