Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2010 itemis AG (http://www.itemis.eu) and others. 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 /
  
  package org.eclipse.xtext.ui.editor.outline.quickoutline;
  
 import java.util.List;
 
 import  org.eclipse.jface.action.IMenuManager;
 import  org.eclipse.jface.action.Separator;
 import  org.eclipse.jface.bindings.keys.KeyStroke;
 import  org.eclipse.jface.dialogs.Dialog;
 import  org.eclipse.jface.dialogs.IDialogSettings;
 import  org.eclipse.jface.dialogs.PopupDialog;
 import  org.eclipse.jface.viewers.ILabelProvider;
 import  org.eclipse.jface.viewers.ISelection;
 import  org.eclipse.jface.viewers.IStructuredSelection;
 import  org.eclipse.jface.viewers.ITreeContentProvider;
 import  org.eclipse.jface.viewers.StructuredSelection;
 import  org.eclipse.jface.viewers.TreeViewer;
 import  org.eclipse.jface.viewers.Viewer;
 import  org.eclipse.jface.viewers.ViewerFilter;
 import  org.eclipse.osgi.util.TextProcessor;
 import  org.eclipse.swt.SWT;
 import  org.eclipse.swt.events.DisposeEvent;
 import  org.eclipse.swt.events.DisposeListener;
 import  org.eclipse.swt.events.KeyAdapter;
 import  org.eclipse.swt.events.KeyEvent;
 import  org.eclipse.swt.events.ModifyEvent;
 import  org.eclipse.swt.events.ModifyListener;
 import  org.eclipse.swt.events.SelectionAdapter;
 import  org.eclipse.swt.events.SelectionEvent;
 import  org.eclipse.swt.graphics.Point;
 import  org.eclipse.swt.layout.GridData;
 import  org.eclipse.swt.widgets.Composite;
 import  org.eclipse.swt.widgets.Control;
 import  org.eclipse.swt.widgets.Event;
 import  org.eclipse.swt.widgets.Shell;
 import  org.eclipse.swt.widgets.Text;
 import  org.eclipse.swt.widgets.Tree;
 

Author(s):
Peter Friese - Initial contribution and API
Jan Koehnlein - Adaption to new outline architecture
 
 public class QuickOutlinePopup extends PopupDialog implements DisposeListener {
 
 	protected class NamePatternFilter extends ViewerFilter {
 
 		public NamePatternFilter() {
 		}
 
 		public boolean select(Viewer viewerObject parentElementObject element) {
 			StringMatcher matcher = getMatcher();
 			if (matcher == null || !(viewer instanceof TreeViewer))
 				return true;
 			TreeViewer treeViewer = (TreeViewer) viewer;
 
 			String matchName = ((ILabelProvider) treeViewer.getLabelProvider()).getText(element);
 			matchName = TextProcessor.deprocess(matchName);
 			if (matchName != null && matcher.match(matchName))
 				return true;
 
 			return hasUnfilteredChild(treeViewerelement);
 		}

Since:
2.1 protected
 
 		protected boolean hasUnfilteredChild(TreeViewer viewerObject element) {
 			Object[] children = ((ITreeContentProvider) viewer.getContentProvider()).getChildren(element);
 			for (int i = 0; i < children.lengthi++)
 				if (select(viewerelementchildren[i]))
 					return true;
 			return false;
 		}
 	}
 
	private int TREESTYLE = SWT.V_SCROLL | SWT.H_SCROLL;
	private TreeViewer treeViewer;
	private Text filterText;
	private KeyStroke invokingKeystroke;
	public QuickOutlinePopup() {
		this(null);
	}
	public QuickOutlinePopup(Shell parent) {
		super(parent, SWT.RESIZE, truefalsetruetruetruenull.);
	}
	protected Control createTitleControl(Composite parent) {
		return ;
	}
	protected Control createDialogArea(Composite parent) {
		final Tree tree = .getTree();
		tree.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent e) {
				if (e.character == 0x1B) { // ESC
else {
					if (e.keyCode == .getNaturalKey()
							&& e.stateMask == .getModifierKeys()) {
						e.doit = false;
					}
				}
			}
		});
		tree.addSelectionListener(new SelectionAdapter() {
			public void widgetDefaultSelected(SelectionEvent e) {
			}
		});
		return .getControl();
	}

Since:
2.2
	protected void setInfoText() {
			setInfoText("Press " +  + " to "
		else
	}
	protected TreeViewer createTreeViewer(Composite parentint style) {
		Tree tree = new Tree(parent, SWT.SINGLE | (style & ~SWT.MULTI));
		GridData gd = new GridData(GridData.FILL_BOTH);
		gd.heightHint = tree.getItemHeight() * 12;
		tree.setLayoutData(gd);
		final TreeViewer treeViewer = new TreeViewer(tree);
		treeViewer.addFilter(new NamePatternFilter());
		treeViewer.setContentProvider();
		treeViewer.setLabelProvider();
		treeViewer.setAutoExpandLevel(2);
		return treeViewer;
	}

Since:
2.7
	public void scheduleRefresh() {
		if (getTreeViewer() != null) {
				public IOutlineNode exec(XtextResource statethrows Exception {
					return rootNode;
				}
				protected void createChildrenRecursively(List<IOutlineNodenodes) {
					for (IOutlineNode node : nodes) {
					}
				}
			});
			getTreeViewer().setInput(rootNode);
		}
	}
	protected Text createFilterText(Composite parent) {
		 = new Text(parent, SWT.NONE);
		Dialog.applyDialogFont();
		GridData data = new GridData(GridData.FILL_HORIZONTAL);
		data.horizontalAlignment = GridData.FILL;
		data.verticalAlignment = GridData.CENTER;
		.setLayoutData(data);
		.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent e) {
				if (e.keyCode == 0x0D) // return
				if (e.keyCode == SWT.ARROW_DOWN)
					.getTree().setFocus();
				if (e.keyCode == SWT.ARROW_UP)
					.getTree().setFocus();
				if (e.character == 0x1B) // ESC
				if (e.keyCode == .getNaturalKey()
						&& e.stateMask == .getModifierKeys()) {
					e.doit = false;
				}
			}
		});
		return ;
	}
	protected Control getFocusControl() {
		return ;
	}

Since:
2.1 protected
	protected void installFilter() {
		.setText(""); //$NON-NLS-1$
		.addModifyListener(new ModifyListener() {
			public void modifyText(ModifyEvent e) {
				String text = ((Text) e.widget).getText();
				setMatcherString(texttrue);
			}
		});
	}
	protected StringMatcher getMatcher() {
	}
	protected boolean hasMatcher() {
		return  != null;
	}
	protected void setMatcherString(String patternboolean update) {
		if (pattern.length() == 0) {
else {
		}
		if (update)
	}
	protected void stringMatcherUpdated() {
		// refresh viewer to re-filter
		.getControl().setRedraw(false);
		.refresh();
		.expandAll();
		.getControl().setRedraw(true);
	}
	protected void selectFirstMatch() {
		Object[] rootElements = .getElements(.getInput());
		Object matchingElement = findMatchingElement(rootElements);
		ISelection selection = StructuredSelection.EMPTY;
		if (matchingElement != null) {
			selection = new StructuredSelection(matchingElement);
		}
		.setSelection(selection);
	}
	protected Object findMatchingElement(Object[] elements) {
		if (hasMatcher()) {
			for (Object element : elements) {
				String text = .getStyledStringProvider().getStyledText(element).getString();
				if (getMatcher().match(text)) {
					return element;
				}
				Object[] children = .getChildren(element);
				Object matchingChild = findMatchingElement(children);
				if (matchingChild != null) {
					return matchingChild;
				}
			}
		}
		return null;
	}
	protected Object getSelectedElement() {
		if ( == null) {
			return null;
		}
		return ((IStructuredSelection) .getSelection()).getFirstElement();
	}

Since:
2.1 protected
	protected void gotoSelectedElement() {
		Object selectedElement = getSelectedElement();
		if (selectedElement != null) {
			if (selectedElement instanceof IOutlineNode) {
			}
		}
	}
	public final void dispose() {
	}
	public void addDisposeListener(DisposeListener listener) {
		getShell().addDisposeListener(listener);
	}
	public void removeDisposeListener(DisposeListener listener) {
		getShell().removeDisposeListener(listener);
	}
	public void widgetDisposed(DisposeEvent event) {
		 = null;
		 = null;
	}
	public void setInput(IXtextDocument document) {
		this. = document;
	}
	protected Point getDefaultLocation(Point initialSize) {
		Control textWidget = (Control) .getAdapter(Control.class);
		Point size = textWidget.getSize();
		Point popupLocation = new Point((size.x / 2) - (initialSize.x / 2), (size.y / 2) - (initialSize.y / 2));
		return textWidget.toDisplay(popupLocation);
	}
	protected IDialogSettings getDialogSettings() {
		String sectionName = "xtext.quickoutline"//$NON-NLS-1$
		IDialogSettings settings = Activator.getDefault().getDialogSettings().getSection(sectionName);
		if (settings == null) {
			settings = Activator.getDefault().getDialogSettings().addNewSection(sectionName);
		}
		return settings;
	}
	public void setEditor(XtextEditor xtextEditor) {
		this. = xtextEditor;
	}

Since:
2.2
	public void setEvent(Event event) {
		this. = KeyStroke.getInstance(event.stateMask, event.keyCode);
	}

Since:
2.2
	protected void changeOutlineMode() {
			OutlineMode nextMode = modeTreeProvider.getNextMode();
			modeTreeProvider.setCurrentMode(nextMode);
		}
	}

Since:
2.7
	public TreeViewer getTreeViewer() {
		return ;
	}
	public boolean close() {
		return super.close();
	}
	protected void fillDialogMenu(IMenuManager dialogMenu) {
		super.fillDialogMenu(dialogMenu);
		dialogMenu.add(new Separator("XtextContributions"));
		.register(thisdialogMenu);
	}
New to GrepCode? Check out our FAQ X