Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/text/editor/DartOutlinePage_NEW.java

Issue 242513008: Outline view for information from analysis server. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013, the Dart project authors. 2 * Copyright (c) 2014, the Dart project authors.
3 * 3 *
4 * Licensed under the Eclipse Public License v1.0 (the "License"); you may not u se this file except 4 * Licensed under the Eclipse Public License v1.0 (the "License"); you may not u se this file except
5 * in compliance with the License. You may obtain a copy of the License at 5 * in compliance with the License. You may obtain a copy of the License at
6 * 6 *
7 * http://www.eclipse.org/legal/epl-v10.html 7 * http://www.eclipse.org/legal/epl-v10.html
8 * 8 *
9 * Unless required by applicable law or agreed to in writing, software distribut ed under the License 9 * Unless required by applicable law or agreed to in writing, software distribut ed under the License
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY K IND, either express 10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY K IND, either express
11 * or implied. See the License for the specific language governing permissions a nd limitations under 11 * or implied. See the License for the specific language governing permissions a nd limitations under
12 * the License. 12 * the License.
13 */ 13 */
14 package com.google.dart.tools.ui.internal.text.editor; 14 package com.google.dart.tools.ui.internal.text.editor;
15 15
16 import com.google.common.base.Objects; 16 import com.google.common.base.Objects;
17 import com.google.dart.engine.ast.CompilationUnit; 17 import com.google.dart.server.Outline;
18 import com.google.dart.server.OutlineKind;
18 import com.google.dart.tools.core.DartCore; 19 import com.google.dart.tools.core.DartCore;
19 import com.google.dart.tools.internal.search.ui.DartSearchActionGroup; 20 import com.google.dart.tools.internal.search.ui.DartSearchActionGroup;
21 import com.google.dart.tools.ui.DartElementImageDescriptor;
20 import com.google.dart.tools.ui.DartPluginImages; 22 import com.google.dart.tools.ui.DartPluginImages;
21 import com.google.dart.tools.ui.DartToolsPlugin; 23 import com.google.dart.tools.ui.DartToolsPlugin;
22 import com.google.dart.tools.ui.actions.InstrumentedAction; 24 import com.google.dart.tools.ui.actions.InstrumentedAction;
23 import com.google.dart.tools.ui.actions.OpenViewActionGroup; 25 import com.google.dart.tools.ui.actions.OpenViewActionGroup;
24 import com.google.dart.tools.ui.actions.RefactorActionGroup; 26 import com.google.dart.tools.ui.actions.RefactorActionGroup;
25 import com.google.dart.tools.ui.instrumentation.UIInstrumentationBuilder; 27 import com.google.dart.tools.ui.instrumentation.UIInstrumentationBuilder;
26 import com.google.dart.tools.ui.internal.text.DartHelpContextIds; 28 import com.google.dart.tools.ui.internal.text.DartHelpContextIds;
27 import com.google.dart.tools.ui.internal.util.SWTUtil; 29 import com.google.dart.tools.ui.internal.util.SWTUtil;
28 import com.google.dart.tools.ui.internal.viewsupport.ColoredViewersManager; 30 import com.google.dart.tools.ui.internal.viewsupport.ColoredViewersManager;
31 import com.google.dart.tools.ui.internal.viewsupport.ImageDescriptorRegistry;
29 32
33 import org.apache.commons.lang3.StringUtils;
30 import org.eclipse.core.runtime.Assert; 34 import org.eclipse.core.runtime.Assert;
31 import org.eclipse.core.runtime.IProgressMonitor;
32 import org.eclipse.core.runtime.IStatus;
33 import org.eclipse.core.runtime.ListenerList; 35 import org.eclipse.core.runtime.ListenerList;
34 import org.eclipse.core.runtime.Status;
35 import org.eclipse.jface.action.IAction; 36 import org.eclipse.jface.action.IAction;
36 import org.eclipse.jface.action.IMenuListener; 37 import org.eclipse.jface.action.IMenuListener;
37 import org.eclipse.jface.action.IMenuManager; 38 import org.eclipse.jface.action.IMenuManager;
38 import org.eclipse.jface.action.IToolBarManager; 39 import org.eclipse.jface.action.IToolBarManager;
39 import org.eclipse.jface.action.MenuManager; 40 import org.eclipse.jface.action.MenuManager;
40 import org.eclipse.jface.preference.IPreferenceStore; 41 import org.eclipse.jface.preference.IPreferenceStore;
42 import org.eclipse.jface.resource.ImageDescriptor;
41 import org.eclipse.jface.util.IPropertyChangeListener; 43 import org.eclipse.jface.util.IPropertyChangeListener;
42 import org.eclipse.jface.util.PropertyChangeEvent; 44 import org.eclipse.jface.util.PropertyChangeEvent;
45 import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider;
46 import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelP rovider;
43 import org.eclipse.jface.viewers.DoubleClickEvent; 47 import org.eclipse.jface.viewers.DoubleClickEvent;
44 import org.eclipse.jface.viewers.IDoubleClickListener; 48 import org.eclipse.jface.viewers.IDoubleClickListener;
45 import org.eclipse.jface.viewers.ISelection; 49 import org.eclipse.jface.viewers.ISelection;
46 import org.eclipse.jface.viewers.ISelectionChangedListener; 50 import org.eclipse.jface.viewers.ISelectionChangedListener;
47 import org.eclipse.jface.viewers.IStructuredSelection; 51 import org.eclipse.jface.viewers.IStructuredSelection;
52 import org.eclipse.jface.viewers.ITreeContentProvider;
53 import org.eclipse.jface.viewers.LabelProvider;
48 import org.eclipse.jface.viewers.SelectionChangedEvent; 54 import org.eclipse.jface.viewers.SelectionChangedEvent;
49 import org.eclipse.jface.viewers.StructuredSelection; 55 import org.eclipse.jface.viewers.StructuredSelection;
56 import org.eclipse.jface.viewers.StyledString;
50 import org.eclipse.jface.viewers.TreeViewer; 57 import org.eclipse.jface.viewers.TreeViewer;
51 import org.eclipse.jface.viewers.Viewer; 58 import org.eclipse.jface.viewers.Viewer;
59 import org.eclipse.jface.viewers.ViewerComparator;
52 import org.eclipse.jface.viewers.ViewerFilter; 60 import org.eclipse.jface.viewers.ViewerFilter;
53 import org.eclipse.swt.SWT; 61 import org.eclipse.swt.SWT;
54 import org.eclipse.swt.custom.BusyIndicator; 62 import org.eclipse.swt.custom.BusyIndicator;
63 import org.eclipse.swt.graphics.Image;
64 import org.eclipse.swt.graphics.Point;
55 import org.eclipse.swt.widgets.Composite; 65 import org.eclipse.swt.widgets.Composite;
56 import org.eclipse.swt.widgets.Control; 66 import org.eclipse.swt.widgets.Control;
57 import org.eclipse.swt.widgets.Display; 67 import org.eclipse.swt.widgets.Display;
58 import org.eclipse.swt.widgets.Event; 68 import org.eclipse.swt.widgets.Event;
59 import org.eclipse.swt.widgets.Menu; 69 import org.eclipse.swt.widgets.Menu;
60 import org.eclipse.swt.widgets.Tree; 70 import org.eclipse.swt.widgets.Tree;
61 import org.eclipse.ui.IActionBars; 71 import org.eclipse.ui.IActionBars;
62 import org.eclipse.ui.PlatformUI; 72 import org.eclipse.ui.PlatformUI;
63 import org.eclipse.ui.actions.ActionContext; 73 import org.eclipse.ui.actions.ActionContext;
64 import org.eclipse.ui.actions.ActionGroup; 74 import org.eclipse.ui.actions.ActionGroup;
65 import org.eclipse.ui.part.IPageSite; 75 import org.eclipse.ui.part.IPageSite;
66 import org.eclipse.ui.part.Page; 76 import org.eclipse.ui.part.Page;
67 import org.eclipse.ui.progress.UIJob;
68 import org.eclipse.ui.views.contentoutline.IContentOutlinePage; 77 import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
69 78
70 /** 79 /**
71 * {@link IContentOutlinePage} for {@link DartEditor}. 80 * {@link IContentOutlinePage} for {@link DartEditor}.
72 */ 81 */
73 public class DartOutlinePage extends Page implements IContentOutlinePage { 82 public class DartOutlinePage_NEW extends Page implements IContentOutlinePage {
83
84 /**
85 * {@link ViewerComparator} for {@link Outline} names.
86 */
87 public static class NameComparator extends ViewerComparator {
88 private static final int NOT_ELEMENT = 2;
89 private static final int PRIVATE_ELEMENT = 1;
90 private static final int PUBLIC_ELEMENT = 0;
91
92 @Override
93 public int category(Object e) {
94 if (!(e instanceof Outline)) {
95 return NOT_ELEMENT;
96 }
97 Outline outline = (Outline) e;
98 // TODO(scheglov)
99 // if (outline.isPrivate()) {
100 // return PRIVATE_ELEMENT;
101 // }
102 return PUBLIC_ELEMENT;
103 }
104
105 @Override
106 public int compare(Viewer viewer, Object e1, Object e2) {
107 // compare categories
108 int cat1 = category(e1);
109 int cat2 = category(e2);
110 if (cat1 != cat2) {
111 return cat1 - cat2;
112 }
113 // check types
114 if (!(e1 instanceof Outline)) {
115 return 0;
116 }
117 if (!(e2 instanceof Outline)) {
118 return 0;
119 }
120 // compare names
121 String name1 = ((Outline) e1).getName();
122 String name2 = ((Outline) e2).getName();
123 if (name1 == null || name2 == null) {
124 return 0;
125 }
126 return name1.compareTo(name2);
127 }
128 }
129
130 /**
131 * {@link ViewerComparator} for {@link Outline} positions.
132 */
133 public static class PositionComparator extends ViewerComparator {
134 @Override
135 public int compare(Viewer viewer, Object e1, Object e2) {
136 if (!(e1 instanceof Outline)) {
137 return 0;
138 }
139 if (!(e2 instanceof Outline)) {
140 return 0;
141 }
142 int offset1 = ((Outline) e1).getOffset();
143 int offset2 = ((Outline) e2).getOffset();
144 return offset1 - offset2;
145 }
146 }
74 147
75 private class CollapseAllAction extends InstrumentedAction { 148 private class CollapseAllAction extends InstrumentedAction {
76 CollapseAllAction() { 149 CollapseAllAction() {
77 super("Collapse All"); //$NON-NLS-1$ 150 super("Collapse All"); //$NON-NLS-1$
78 setDescription("Collapse All"); //$NON-NLS-1$ 151 setDescription("Collapse All"); //$NON-NLS-1$
79 setToolTipText("Collapse All"); //$NON-NLS-1$ 152 setToolTipText("Collapse All"); //$NON-NLS-1$
80 DartPluginImages.setLocalImageDescriptors(this, "collapseall.gif"); //$NON -NLS-1$ 153 DartPluginImages.setLocalImageDescriptors(this, "collapseall.gif"); //$NON -NLS-1$
81 PlatformUI.getWorkbench().getHelpSystem().setHelp( 154 PlatformUI.getWorkbench().getHelpSystem().setHelp(
82 this, 155 this,
83 DartHelpContextIds.COLLAPSE_ALL_ACTION); 156 DartHelpContextIds.COLLAPSE_ALL_ACTION);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 valueChanged(isChecked(), true); 230 valueChanged(isChecked(), true);
158 } 231 }
159 232
160 private void valueChanged(final boolean on, boolean store) { 233 private void valueChanged(final boolean on, boolean store) {
161 setChecked(on); 234 setChecked(on);
162 // set comparator 235 // set comparator
163 BusyIndicator.showWhile(viewer.getControl().getDisplay(), new Runnable() { 236 BusyIndicator.showWhile(viewer.getControl().getDisplay(), new Runnable() {
164 @Override 237 @Override
165 public void run() { 238 public void run() {
166 if (on) { 239 if (on) {
167 viewer.setComparator(LightNodeElements.NAME_COMPARATOR); 240 viewer.setComparator(NAME_COMPARATOR);
168 } else { 241 } else {
169 viewer.setComparator(LightNodeElements.POSITION_COMPARATOR); 242 viewer.setComparator(POSITION_COMPARATOR);
170 } 243 }
171 } 244 }
172 }); 245 });
173 // may be remember selection 246 // may be remember selection
174 if (store) { 247 if (store) {
175 DartToolsPlugin.getDefault().getPreferenceStore().setValue( 248 DartToolsPlugin.getDefault().getPreferenceStore().setValue(
176 "LexicalSortingAction.isChecked", on); //$NON-NLS-1$ 249 "LexicalSortingAction.isChecked", on); //$NON-NLS-1$
177 } 250 }
178 } 251 }
179 } 252 }
180 253
254 private static class OutlineContentProvider implements ITreeContentProvider {
255 @Override
256 public void dispose() {
257 }
258
259 @Override
260 public Object[] getChildren(Object parentElement) {
261 return ((Outline) parentElement).getChildren();
262 }
263
264 @Override
265 public Object[] getElements(Object inputElement) {
266 return ((Outline) inputElement).getChildren();
267 }
268
269 @Override
270 public Object getParent(Object element) {
271 return ((Outline) element).getParent();
272 }
273
274 @Override
275 public boolean hasChildren(Object element) {
276 return getChildren(element).length != 0;
277 }
278
279 @Override
280 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
281 }
282 }
283 private static class OutlineLabelProvider extends LabelProvider implements ISt yledLabelProvider {
284 private static final Point SIZE = new Point(22, 16);
285 private static final ImageDescriptorRegistry registry = DartToolsPlugin.getI mageDescriptorRegistry();
286 private static final String RIGHT_ARROW = " \u2192 "; //$NON-NLS-1$
287
288 private static ImageDescriptor getBaseImageDescriptor(OutlineKind kind, bool ean isPrivate) {
289 if (kind == OutlineKind.CLASS) {
290 return isPrivate ? DartPluginImages.DESC_DART_CLASS_PRIVATE
291 : DartPluginImages.DESC_DART_CLASS_PUBLIC;
292 }
293 if (kind == OutlineKind.FUNCTION_TYPE_ALIAS) {
294 return isPrivate ? DartPluginImages.DESC_DART_FUNCTIONTYPE_PRIVATE
295 : DartPluginImages.DESC_DART_FUNCTIONTYPE_PUBLIC;
296 }
297 if (kind == OutlineKind.FIELD || kind == OutlineKind.TOP_LEVEL_VARIABLE) {
298 return isPrivate ? DartPluginImages.DESC_DART_FIELD_PRIVATE
299 : DartPluginImages.DESC_DART_FIELD_PUBLIC;
300 }
301 if (kind == OutlineKind.CONSTRUCTOR || kind == OutlineKind.FUNCTION
302 || kind == OutlineKind.GETTER || kind == OutlineKind.METHOD || kind == OutlineKind.SETTER) {
303 return isPrivate ? DartPluginImages.DESC_DART_METHOD_PRIVATE
304 : DartPluginImages.DESC_DART_METHOD_PUBLIC;
305 }
306 return null;
307 }
308
309 private static ImageDescriptor getImageDescriptor(OutlineKind kind, boolean isPrivate) {
310 ImageDescriptor base = getBaseImageDescriptor(kind, isPrivate);
311 if (base == null) {
312 return null;
313 }
314 int flags = 0;
315 if (kind == OutlineKind.CONSTRUCTOR) {
316 flags |= DartElementImageDescriptor.CONSTRUCTOR;
317 }
318 if (kind == OutlineKind.GETTER) {
319 flags |= DartElementImageDescriptor.GETTER;
320 }
321 if (kind == OutlineKind.SETTER) {
322 flags |= DartElementImageDescriptor.SETTER;
323 }
324 // TODO(scheglov) Analysis Server: add flags: abstract, private, static
325 // // ClassDeclaration
326 // if (node instanceof ClassDeclaration) {
327 // ClassDeclaration classDeclaration = (ClassDeclaration) node;
328 // if (classDeclaration.getAbstractKeyword() != null) {
329 // flags |= DartElementImageDescriptor.ABSTRACT;
330 // }
331 // }
332 // // ConstructorDeclaration
333 // if (node instanceof ConstructorDeclaration) {
334 // flags |= DartElementImageDescriptor.CONSTRUCTOR;
335 // }
336 // // MethodDeclaration
337 // if (node instanceof MethodDeclaration) {
338 // MethodDeclaration method = (MethodDeclaration) node;
339 // if (method.isAbstract()) {
340 // flags |= DartElementImageDescriptor.ABSTRACT;
341 // }
342 // if (method.isStatic()) {
343 // flags |= DartElementImageDescriptor.STATIC;
344 // }
345 // if (method.isGetter()) {
346 // flags |= DartElementImageDescriptor.GETTER;
347 // }
348 // if (method.isSetter()) {
349 // flags |= DartElementImageDescriptor.SETTER;
350 // }
351 // }
352 // done
353 return new DartElementImageDescriptor(base, flags, SIZE);
354 }
355
356 @Override
357 public Image getImage(Object o) {
358 Outline outline = (Outline) o;
359 // TODO(scheglov) Analysis Server: add isPrivate() accessor
360 boolean isPrivate = outline.getName().startsWith("_");
361 ImageDescriptor descriptor = getImageDescriptor(outline.getKind(), isPriva te);
362 if (descriptor != null) {
363 return registry.get(descriptor);
364 }
365 return null;
366 }
367
368 @Override
369 public StyledString getStyledText(Object obj) {
370 Outline outline = (Outline) obj;
371 StyledString styledString = new StyledString(getText(obj));
372 // append parameters
373 String parameters = outline.getArguments();
374 if (parameters != null) {
375 styledString.append(parameters, StyledString.DECORATIONS_STYLER);
376 }
377 // append return type
378 String returnType = outline.getReturnType();
379 if (!StringUtils.isEmpty(returnType)) {
380 if (outline.getKind() == OutlineKind.FIELD
381 || outline.getKind() == OutlineKind.TOP_LEVEL_VARIABLE) {
382 styledString.append(" : " + returnType, StyledString.QUALIFIER_STYLER) ;
383 } else {
384 styledString.append(RIGHT_ARROW + returnType, StyledString.QUALIFIER_S TYLER);
385 }
386 }
387 // done
388 return styledString;
389 }
390
391 @Override
392 public String getText(Object element) {
393 return ((Outline) element).getName();
394 }
395 }
396
181 private final ListenerList selectionChangedListeners = new ListenerList(Listen erList.IDENTITY); 397 private final ListenerList selectionChangedListeners = new ListenerList(Listen erList.IDENTITY);
182 private final String contextMenuID; 398 private final String contextMenuID;
183 private DartEditor editor; 399 private DartEditor editor;
400 private Outline input;
184 private DartOutlineViewer viewer; 401 private DartOutlineViewer viewer;
402
185 private boolean ignoreSelectionChangedEvent = false; 403 private boolean ignoreSelectionChangedEvent = false;
186 private Menu contextMenu; 404 private Menu contextMenu;
405
187 private CompositeActionGroup actionGroups; 406 private CompositeActionGroup actionGroups;
407 private IPreferenceStore preferences;
188 408
189 private CompilationUnit input;
190
191 private IPreferenceStore preferences;
192 private IPropertyChangeListener propertyChangeListener = new IPropertyChangeLi stener() { 409 private IPropertyChangeListener propertyChangeListener = new IPropertyChangeLi stener() {
193 @Override 410 @Override
194 public void propertyChange(PropertyChangeEvent event) { 411 public void propertyChange(PropertyChangeEvent event) {
195 doPropertyChange(event); 412 doPropertyChange(event);
196 } 413 }
197 }; 414 };
198 415
416 private static final ViewerComparator NAME_COMPARATOR = new NameComparator();
417 private static final ViewerComparator POSITION_COMPARATOR = new PositionCompar ator();
199 private static final ViewerFilter PUBLIC_FILTER = new ViewerFilter() { 418 private static final ViewerFilter PUBLIC_FILTER = new ViewerFilter() {
200 @Override 419 @Override
201 public boolean select(Viewer viewer, Object parentElement, Object o) { 420 public boolean select(Viewer viewer, Object parentElement, Object o) {
202 if (o instanceof LightNodeElement) { 421 // TODO(scheglov)
203 LightNodeElement element = (LightNodeElement) o; 422 // if (o instanceof LightNodeElement) {
204 return !element.isPrivate(); 423 // LightNodeElement element = (LightNodeElement) o;
205 } 424 // return !element.isPrivate();
425 // }
206 return false; 426 return false;
207 } 427 }
208 }; 428 };
209 429
210 public DartOutlinePage(String contextMenuID, DartEditor editor) { 430 public DartOutlinePage_NEW(String contextMenuID, DartEditor editor) {
211 Assert.isNotNull(editor); 431 Assert.isNotNull(editor);
212 this.contextMenuID = contextMenuID; 432 this.contextMenuID = contextMenuID;
213 this.editor = editor; 433 this.editor = editor;
214 } 434 }
215 435
216 @Override 436 @Override
217 public void addSelectionChangedListener(ISelectionChangedListener listener) { 437 public void addSelectionChangedListener(ISelectionChangedListener listener) {
218 if (viewer != null) { 438 if (viewer != null) {
219 viewer.addSelectionChangedListener(listener); 439 viewer.addSelectionChangedListener(listener);
220 } else { 440 } else {
221 selectionChangedListeners.add(listener); 441 selectionChangedListeners.add(listener);
222 } 442 }
223 } 443 }
224 444
225 @Override 445 @Override
226 public void createControl(Composite parent) { 446 public void createControl(Composite parent) {
227 preferences = DartToolsPlugin.getDefault().getCombinedPreferenceStore(); 447 preferences = DartToolsPlugin.getDefault().getCombinedPreferenceStore();
228 Tree tree = new Tree(parent, SWT.MULTI | SWT.FULL_SELECTION); 448 Tree tree = new Tree(parent, SWT.MULTI | SWT.FULL_SELECTION);
229 // create "viewer" 449 // create "viewer"
230 viewer = new DartOutlineViewer(tree); 450 viewer = new DartOutlineViewer(tree);
231 ColoredViewersManager.install(viewer); 451 ColoredViewersManager.install(viewer);
232 viewer.setContentProvider(LightNodeElements.newTreeContentProvider(editor)); 452 viewer.setContentProvider(new OutlineContentProvider());
233 viewer.setLabelProvider(LightNodeElements.newLabelProvider()); 453 viewer.setLabelProvider(new DelegatingStyledCellLabelProvider(new OutlineLab elProvider()));
234 SWTUtil.bindJFaceResourcesFontToControl(tree); 454 SWTUtil.bindJFaceResourcesFontToControl(tree);
235 // install listeners added before UI creation 455 // install listeners added before UI creation
236 { 456 {
237 Object[] listeners = selectionChangedListeners.getListeners(); 457 Object[] listeners = selectionChangedListeners.getListeners();
238 for (Object listener : listeners) { 458 for (Object listener : listeners) {
239 selectionChangedListeners.remove(listener); 459 selectionChangedListeners.remove(listener);
240 viewer.addSelectionChangedListener((ISelectionChangedListener) listener) ; 460 viewer.addSelectionChangedListener((ISelectionChangedListener) listener) ;
241 } 461 }
242 } 462 }
243 // prepare context menu 463 // prepare context menu
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 }); 501 });
282 viewer.addDoubleClickListener(new IDoubleClickListener() { 502 viewer.addDoubleClickListener(new IDoubleClickListener() {
283 @Override 503 @Override
284 public void doubleClick(DoubleClickEvent event) { 504 public void doubleClick(DoubleClickEvent event) {
285 toggleExpansion(event.getSelection()); 505 toggleExpansion(event.getSelection());
286 } 506 }
287 }); 507 });
288 // update colors 508 // update colors
289 preferences.addPropertyChangeListener(propertyChangeListener); 509 preferences.addPropertyChangeListener(propertyChangeListener);
290 viewer.updateColors(); 510 viewer.updateColors();
291 // schedule update in 100ms from now, to make impression that editor opens i nstantaneously
292 new UIJob("Update Outline") {
293 @Override
294 public IStatus runInUIThread(IProgressMonitor monitor) {
295 if (viewer != null) {
296 viewer.setInput(input);
297 //LightNodeElements.expandTreeItemsTimeBoxed(viewer, 75L * 1000000L);
298 }
299 return Status.OK_STATUS;
300 }
301 }.schedule();
302 } 511 }
303 512
304 @Override 513 @Override
305 public void dispose() { 514 public void dispose() {
306 // clear "editor" 515 // clear "editor"
307 if (editor == null) { 516 if (editor == null) {
308 return; 517 return;
309 } 518 }
310 editor.outlinePageClosed(); 519 editor.outlinePageClosed();
311 editor = null; 520 editor = null;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 559
351 @Override 560 @Override
352 public void removeSelectionChangedListener(ISelectionChangedListener listener) { 561 public void removeSelectionChangedListener(ISelectionChangedListener listener) {
353 if (viewer != null) { 562 if (viewer != null) {
354 viewer.removeSelectionChangedListener(listener); 563 viewer.removeSelectionChangedListener(listener);
355 } else { 564 } else {
356 selectionChangedListeners.remove(listener); 565 selectionChangedListeners.remove(listener);
357 } 566 }
358 } 567 }
359 568
360 public void select(final LightNodeElement element) { 569 public void select(final int offset) {
361 updateViewerWithoutDraw(new Runnable() { 570 updateViewerWithoutDraw(new Runnable() {
362 @Override 571 @Override
363 public void run() { 572 public void run() {
364 setSelection(new StructuredSelection(element)); 573 // TODO(scheglov) Analysis Server: add source range
365 viewer.reveal(element); 574 // setSelection(new StructuredSelection(element));
575 // viewer.reveal(element);
366 } 576 }
367 }); 577 });
368 } 578 }
369 579
370 @Override 580 @Override
371 public void setFocus() { 581 public void setFocus() {
372 if (viewer != null) { 582 if (viewer != null) {
373 viewer.getControl().setFocus(); 583 viewer.getControl().setFocus();
374 } 584 }
375 } 585 }
376 586
377 public void setInput(final CompilationUnit input) { 587 public void setInput(final Outline input) {
378 this.input = input; 588 this.input = input;
379 updateViewerWithoutDraw(new Runnable() { 589 updateViewerWithoutDraw(new Runnable() {
380 @Override 590 @Override
381 public void run() { 591 public void run() {
382 Object[] expandedElements = viewer.getExpandedElements(); 592 Object[] expandedElements = viewer.getExpandedElements();
383 viewer.setInput(input); 593 viewer.setInput(input);
384 viewer.setExpandedElements(expandedElements); 594 viewer.setExpandedElements(expandedElements);
385 } 595 }
386 }); 596 });
387 } 597 }
(...skipping 11 matching lines...) Expand all
399 ignoreSelectionChangedEvent = false; 609 ignoreSelectionChangedEvent = false;
400 } 610 }
401 } 611 }
402 }); 612 });
403 } 613 }
404 } 614 }
405 615
406 protected void toggleExpansion(ISelection selection) { 616 protected void toggleExpansion(ISelection selection) {
407 if (selection instanceof IStructuredSelection) { 617 if (selection instanceof IStructuredSelection) {
408 Object sel = ((IStructuredSelection) selection).getFirstElement(); 618 Object sel = ((IStructuredSelection) selection).getFirstElement();
409
410 boolean expanded = viewer.getExpandedState(sel); 619 boolean expanded = viewer.getExpandedState(sel);
411
412 if (expanded) { 620 if (expanded) {
413 viewer.collapseToLevel(sel, 1); 621 viewer.collapseToLevel(sel, 1);
414 } else { 622 } else {
415 viewer.expandToLevel(sel, 1); 623 viewer.expandToLevel(sel, 1);
416 } 624 }
417 } 625 }
418 } 626 }
419 627
420 private void contextMenuAboutToShow(IMenuManager menu) { 628 private void contextMenuAboutToShow(IMenuManager menu) {
421 DartToolsPlugin.createStandardGroups(menu); 629 DartToolsPlugin.createStandardGroups(menu);
(...skipping 28 matching lines...) Expand all
450 control.setRedraw(true); 658 control.setRedraw(true);
451 } 659 }
452 }); 660 });
453 } else { 661 } else {
454 control.setRedraw(true); 662 control.setRedraw(true);
455 } 663 }
456 } 664 }
457 } 665 }
458 } 666 }
459 } 667 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698