package jqian.slicer.view.local; import java.util.Collection; import java.util.Arrays; import java.util.Iterator; import jqian.util.eclipse.JDTUtils; import org.eclipse.swt.*; import org.eclipse.swt.widgets.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.graphics.*; import org.eclipse.jface.dialogs.PopupDialog; import org.eclipse.jface.viewers.ListViewer; import org.eclipse.ui.texteditor.IDocumentProvider; import org.eclipse.ui.texteditor.ITextEditor; import org.eclipse.jface.text.*; //import org.eclipse.swt.custom.*; //import org.eclipse.swt.events.*; //import org.eclipse.jface.dialogs.MessageDialog; public class DependenceNavigator extends PopupDialog{ private int[] _lines; private ITextEditor _editor; public DependenceNavigator(Shell shell,ITextEditor editor,Collection<Integer> lines){ super(shell, SWT.CENTER, true, //got focus when open() false, false, false, null,"dependence assist"); this._editor = editor; int size = lines.size(); _lines = new int[size]; int i=0; for(Iterator<Integer> it=lines.iterator();it.hasNext();i++){ _lines[i] = it.next(); } Arrays.sort(_lines); } protected Control createDialogArea(Composite parent) { Composite composite = (Composite)super.createDialogArea(parent); composite.setLayout(new FillLayout()); List list = new List(composite, SWT.BORDER| SWT.V_SCROLL);//SWT.NO_REDRAW_RESIZE | SWT.MULTI fillList(list); list.addListener(SWT.MouseDoubleClick,new DbclickListener(list)); new ListViewer(list); /*composite.addFocusListener(new FocusListener() { public void focusGained(FocusEvent e) {} public void focusLost(FocusEvent e) { close(); } });*/ return composite; } private class DbclickListener implements Listener{ List _list; public DbclickListener(List list){ this._list = list; } public void handleEvent(Event event){ int i = _list.getSelectionIndex(); int line = _lines[i]-1; try{ IDocumentProvider provider = _editor.getDocumentProvider(); IDocument doc = provider.getDocument(_editor.getEditorInput()); IRegion region = doc.getLineInformation(line); TextSelection selection = new TextSelection(region.getOffset(),region.getLength()); _editor.getSelectionProvider().setSelection(selection); }catch(BadLocationException e){ } DependenceNavigator.this.close(); } } protected Point getInitialLocation(Point initialSize) { Point p = Display.getCurrent().getCursorLocation(); return p; } /*protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(MessageUtil.getString("Readme Sections")); ... }*/ private void fillList(List list){ int size = _lines.length; for(int i=0;i<size;i++){ int line = _lines[i]; String text = JDTUtils.getLineText(_editor, line-1,true,true); list.add(text); } //list.add("apple"); } }