1 19 20 21 package ca.mcgill.sable.soot.editors; 22 23 import java.io.*; 24 import java.util.ArrayList ; 25 26 27 import org.eclipse.core.resources.IFile; 28 import org.eclipse.core.runtime.CoreException; 29 import org.eclipse.jface.viewers.ISelectionChangedListener; 30 import org.eclipse.jface.viewers.IStructuredSelection; 31 import org.eclipse.jface.viewers.SelectionChangedEvent; 32 import org.eclipse.jface.viewers.TreeViewer; 33 import org.eclipse.swt.widgets.Composite; 34 35 import org.eclipse.ui.views.contentoutline.*; 36 37 import ca.mcgill.sable.soot.editors.parser.JimpleFile; 38 39 public class JimpleContentOutlinePage extends ContentOutlinePage implements ISelectionChangedListener { 40 41 private IFile input; 42 private JimpleEditor ed; 43 private JimpleFile jimpleFileParser; 44 private TreeViewer viewer; 45 46 public JimpleContentOutlinePage(IFile file, JimpleEditor ed) { 47 super(); 48 setInput(file); 49 setEd(ed); 50 51 } 52 53 public void createControl(Composite parent) { 54 super.createControl(parent); 55 56 setViewer(getTreeViewer()); 57 getViewer().setContentProvider(new JimpleOutlineContentProvider()); 58 getViewer().setLabelProvider(new JimpleOutlineLabelProvider()); 59 getViewer().setInput(getContentOutline()); 60 getViewer().expandAll(); 61 62 getViewer().addSelectionChangedListener(this); 63 64 } 65 66 public JimpleOutlineObject getContentOutline(){ 67 68 try { 69 BufferedReader br = new BufferedReader(new InputStreamReader(getInput().getContents())); 70 ArrayList text = new ArrayList (); 71 while (true) { 72 String nextLine = br.readLine(); 73 if (nextLine == null) break; text.add(nextLine); 75 } 76 getViewer().getLabelProvider().dispose(); 77 setJimpleFileParser(new JimpleFile(text)); 78 return getJimpleFileParser().getOutline(); 79 } 80 catch (IOException e) { 81 return null; 82 } 83 catch (CoreException e) { 84 return null; 85 } 86 } 87 88 public void selectionChanged(SelectionChangedEvent event) { 89 IStructuredSelection selection = (IStructuredSelection)event.getSelection(); 90 if (!selection.isEmpty()) { 91 Object elem = selection.getFirstElement(); 92 if (elem instanceof JimpleOutlineObject) { 93 String toHighlight = ((JimpleOutlineObject)elem).getLabel(); 94 int start = getJimpleFileParser().getStartOfSelected(toHighlight); 95 int length = getJimpleFileParser().getLength(toHighlight); 96 getEd().selectAndReveal(start, length); 97 } 98 } 99 } 100 101 104 public IFile getInput() { 105 return input; 106 } 107 108 112 public void setInput(IFile input) { 113 this.input = input; 114 } 115 116 119 public JimpleEditor getEd() { 120 return ed; 121 } 122 123 126 public void setEd(JimpleEditor editor) { 127 ed = editor; 128 } 129 130 133 public JimpleFile getJimpleFileParser() { 134 return jimpleFileParser; 135 } 136 137 140 public void setJimpleFileParser(JimpleFile file) { 141 jimpleFileParser = file; 142 } 143 144 147 public TreeViewer getViewer() { 148 return viewer; 149 } 150 151 154 public void setViewer(TreeViewer viewer) { 155 this.viewer = viewer; 156 } 157 158 } 159 | Popular Tags |