private OutlineItem computeRoot(OutlineItem item) { while (!item.isRootItem()) { item = item.getParent(); } return item; }
public boolean visit(OutlineItem item) { if (item.isRootItem()) { return true; } if (nearest == null) { nearest = item; return true; } int itemDistance = item.distance(offset); if (itemDistance > 0) { return true; } int nearestDistance = nearest.distance(offset); nearestDistance = Math.abs(nearestDistance); itemDistance = Math.abs(itemDistance); if (itemDistance < nearestDistance) { nearest = item; } else if (itemDistance > nearestDistance) { return false; } return true; }
@Override protected void editorContextMenuAboutToShow(IMenuManager menu) { super.editorContextMenuAboutToShow(menu); final MarkupLanguage markupLanguage = getMarkupLanguage(); MenuManager markupLanguageMenu = new MenuManager(Messages.MarkupEditor_markupLanguage); for (String markupLanguageName : new TreeSet<String>(WikiText.getMarkupLanguageNames())) { markupLanguageMenu.add(new SetMarkupLanguageAction(this, markupLanguageName, markupLanguage != null && markupLanguageName.equals(markupLanguage.getName()))); } menu.prependToGroup(ITextEditorActionConstants.GROUP_SETTINGS, markupLanguageMenu); OutlineItem nearestOutlineItem = getNearestMatchingOutlineItem(); if (nearestOutlineItem != null && !nearestOutlineItem.isRootItem()) { menu.appendToGroup(ITextEditorActionConstants.GROUP_OPEN, new PreviewOutlineItemAction(this, nearestOutlineItem)); } }
/** * Indicate if this outline item contains the given outline item. The computation uses outline item offsets (the * {@link #getOffset() offset} and {@link #getSectionLength() section length}. * * @return true if and only if the offsets of the provided item lie within the offsets of this outline item. */ public boolean contains(OutlineItem item) { if (item == this || isRootItem()) { return true; } if (getOffset() <= item.getOffset()) { int end = getOffset() + getSectionLength(); int itemEnd = item.getOffset() + item.getSectionLength(); if (end >= itemEnd) { return true; } } return false; }