Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewBreadcrumb.java')
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewBreadcrumb.java840
1 files changed, 420 insertions, 420 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewBreadcrumb.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewBreadcrumb.java
index 338adc355..ccb12f2c1 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewBreadcrumb.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewBreadcrumb.java
@@ -66,497 +66,497 @@ import org.eclipse.ui.progress.UIJob;
*/
public class LaunchViewBreadcrumb extends AbstractBreadcrumb implements IDebugContextListener, ILabelUpdateListener {
- private static class Input {
- final TreePath fPath;
+ private static class Input {
+ final TreePath fPath;
- Input(TreePath path) {
- fPath = path;
- }
+ Input(TreePath path) {
+ fPath = path;
+ }
- @Override
+ @Override
public boolean equals(Object obj) {
- return obj instanceof Input &&
- ((fPath == null && ((Input)obj).fPath == null) ||
- (fPath != null && fPath.equals( ((Input)obj).fPath )));
- }
+ return obj instanceof Input &&
+ ((fPath == null && ((Input)obj).fPath == null) ||
+ (fPath != null && fPath.equals( ((Input)obj).fPath )));
+ }
- @Override
+ @Override
public int hashCode() {
- return fPath == null ? 0 : fPath.hashCode();
- }
- }
+ return fPath == null ? 0 : fPath.hashCode();
+ }
+ }
- private static class ContentProvider implements ITreePathContentProvider {
+ private static class ContentProvider implements ITreePathContentProvider {
- private static final Object[] EMPTY_ELEMENTS_ARRAY = new Object[0];
+ private static final Object[] EMPTY_ELEMENTS_ARRAY = new Object[0];
- public Input fInput;
+ public Input fInput;
- @Override
+ @Override
public Object[] getChildren(TreePath parentPath) {
- if (hasChildren(parentPath)) {
- return new Object[] { fInput.fPath.getSegment(parentPath.getSegmentCount()) };
- }
- return EMPTY_ELEMENTS_ARRAY;
- }
+ if (hasChildren(parentPath)) {
+ return new Object[] { fInput.fPath.getSegment(parentPath.getSegmentCount()) };
+ }
+ return EMPTY_ELEMENTS_ARRAY;
+ }
- @Override
+ @Override
public TreePath[] getParents(Object element) {
- // Not supported
- return new TreePath[] { TreePath.EMPTY };
- }
+ // Not supported
+ return new TreePath[] { TreePath.EMPTY };
+ }
- @Override
+ @Override
public boolean hasChildren(TreePath parentPath) {
- if ( parentPath.getSegmentCount() == 0) {
- return fInput != null;
- } else if (fInput != null &&
- fInput.fPath != null &&
- fInput.fPath.getSegmentCount() > parentPath.getSegmentCount())
- {
- for (int i = 0; i < parentPath.getSegmentCount(); i++) {
- if (i >= fInput.fPath.getSegmentCount()) {
- return false;
- } else {
- Object parentElement = parentPath.getSegment(i);
- Object contextElement = fInput.fPath.getSegment(i);
- if (!parentElement.equals(contextElement)) {
- return false;
- }
- }
- }
- return true;
- }
- return false;
- }
-
- @Override
+ if ( parentPath.getSegmentCount() == 0) {
+ return fInput != null;
+ } else if (fInput != null &&
+ fInput.fPath != null &&
+ fInput.fPath.getSegmentCount() > parentPath.getSegmentCount())
+ {
+ for (int i = 0; i < parentPath.getSegmentCount(); i++) {
+ if (i >= fInput.fPath.getSegmentCount()) {
+ return false;
+ } else {
+ Object parentElement = parentPath.getSegment(i);
+ Object contextElement = fInput.fPath.getSegment(i);
+ if (!parentElement.equals(contextElement)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ @Override
public Object[] getElements(Object inputElement) {
- if (fInput != null &&
- fInput.fPath != null)
- {
- return getChildren(TreePath.EMPTY);
- } else {
- return new Object[] { fgEmptyDebugContextElement };
- }
- }
-
- @Override
+ if (fInput != null &&
+ fInput.fPath != null)
+ {
+ return getChildren(TreePath.EMPTY);
+ } else {
+ return new Object[] { fgEmptyDebugContextElement };
+ }
+ }
+
+ @Override
public void dispose() {
- fInput = null;
- }
+ fInput = null;
+ }
- @Override
+ @Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- if (newInput instanceof Input) {
- fInput = ((Input)newInput);
- } else {
- fInput = null;
- }
- }
- }
-
- private class LabelProvider extends BaseLabelProvider implements ITreePathLabelProvider {
- @Override
+ if (newInput instanceof Input) {
+ fInput = ((Input)newInput);
+ } else {
+ fInput = null;
+ }
+ }
+ }
+
+ private class LabelProvider extends BaseLabelProvider implements ITreePathLabelProvider {
+ @Override
public void updateLabel(ViewerLabel label, TreePath elementPath) {
- if (fgEmptyDebugContextElement.equals(elementPath.getLastSegment())) {
- label.setText(LaunchViewMessages.Breadcrumb_NoActiveContext);
- label.setImage(null);
- } else {
- ViewerLabel treeViewerLabel = fTreeViewer.getElementLabel(elementPath, null);
- if (treeViewerLabel == null) {
- label.setText(LaunchViewMessages.Breadcrumb_NoActiveContext);
- label.setImage(null);
- } else {
- label.setText(treeViewerLabel.getText());
- label.setTooltipText(treeViewerLabel.getText());
- label.setImage(treeViewerLabel.getImage());
- label.setFont(treeViewerLabel.getFont());
- label.setForeground(treeViewerLabel.getForeground());
- label.setBackground(treeViewerLabel.getBackground());
-
- }
- }
- }
- }
-
- private final LaunchView fView;
- private final TreeModelViewer fTreeViewer;
- private final IDebugContextProvider fTreeViewerContextProvider;
- private Input fBreadcrumbInput;
- static final private Object fgEmptyDebugContextElement = new Object();
- private BreadcrumbViewer fViewer;
- private boolean fRefreshBreadcrumb = false;
-
- private class BreadcrumbContextProvider extends AbstractDebugContextProvider implements IDebugContextListener, ISelectionChangedListener {
-
- private ISelection fBreadcrumbSelection = null;
-
- BreadcrumbContextProvider() {
- super(fView);
- fViewer.addSelectionChangedListener(this);
- fBreadcrumbSelection = fViewer.getSelection();
- fTreeViewerContextProvider.addDebugContextListener(this);
- }
-
- @Override
+ if (fgEmptyDebugContextElement.equals(elementPath.getLastSegment())) {
+ label.setText(LaunchViewMessages.Breadcrumb_NoActiveContext);
+ label.setImage(null);
+ } else {
+ ViewerLabel treeViewerLabel = fTreeViewer.getElementLabel(elementPath, null);
+ if (treeViewerLabel == null) {
+ label.setText(LaunchViewMessages.Breadcrumb_NoActiveContext);
+ label.setImage(null);
+ } else {
+ label.setText(treeViewerLabel.getText());
+ label.setTooltipText(treeViewerLabel.getText());
+ label.setImage(treeViewerLabel.getImage());
+ label.setFont(treeViewerLabel.getFont());
+ label.setForeground(treeViewerLabel.getForeground());
+ label.setBackground(treeViewerLabel.getBackground());
+
+ }
+ }
+ }
+ }
+
+ private final LaunchView fView;
+ private final TreeModelViewer fTreeViewer;
+ private final IDebugContextProvider fTreeViewerContextProvider;
+ private Input fBreadcrumbInput;
+ static final private Object fgEmptyDebugContextElement = new Object();
+ private BreadcrumbViewer fViewer;
+ private boolean fRefreshBreadcrumb = false;
+
+ private class BreadcrumbContextProvider extends AbstractDebugContextProvider implements IDebugContextListener, ISelectionChangedListener {
+
+ private ISelection fBreadcrumbSelection = null;
+
+ BreadcrumbContextProvider() {
+ super(fView);
+ fViewer.addSelectionChangedListener(this);
+ fBreadcrumbSelection = fViewer.getSelection();
+ fTreeViewerContextProvider.addDebugContextListener(this);
+ }
+
+ @Override
public ISelection getActiveContext() {
- if (fBreadcrumbSelection != null && !fBreadcrumbSelection.isEmpty()) {
- return fBreadcrumbSelection;
- } else {
- ISelection treeViewerSelection = fTreeViewerContextProvider.getActiveContext();
- return treeViewerSelection != null ? treeViewerSelection : StructuredSelection.EMPTY;
- }
- }
-
- void dispose() {
- fViewer.removeSelectionChangedListener(this);
- fTreeViewerContextProvider.removeDebugContextListener(this);
- }
-
- @Override
+ if (fBreadcrumbSelection != null && !fBreadcrumbSelection.isEmpty()) {
+ return fBreadcrumbSelection;
+ } else {
+ ISelection treeViewerSelection = fTreeViewerContextProvider.getActiveContext();
+ return treeViewerSelection != null ? treeViewerSelection : StructuredSelection.EMPTY;
+ }
+ }
+
+ void dispose() {
+ fViewer.removeSelectionChangedListener(this);
+ fTreeViewerContextProvider.removeDebugContextListener(this);
+ }
+
+ @Override
public void debugContextChanged(DebugContextEvent event) {
- fire(new DebugContextEvent(this, getActiveContext(), event.getFlags()));
- }
+ fire(new DebugContextEvent(this, getActiveContext(), event.getFlags()));
+ }
- @Override
+ @Override
public void selectionChanged(SelectionChangedEvent event) {
- ISelection oldContext = getActiveContext();
- fBreadcrumbSelection = event.getSelection();
- if (!getActiveContext().equals(oldContext)) {
- fire(new DebugContextEvent(this, getActiveContext(), DebugContextEvent.ACTIVATED));
- }
- }
- }
-
- private BreadcrumbContextProvider fBreadcrumbContextProvider;
-
- public LaunchViewBreadcrumb(LaunchView view, TreeModelViewer treeViewer, IDebugContextProvider contextProvider) {
- fView = view;
- fTreeViewer = treeViewer;
- fTreeViewer.addLabelUpdateListener(this);
- fTreeViewerContextProvider = contextProvider;
- fBreadcrumbInput = new Input( getPathForSelection(fTreeViewerContextProvider.getActiveContext()) );
- fTreeViewerContextProvider.addDebugContextListener(this);
- }
-
- @Override
+ ISelection oldContext = getActiveContext();
+ fBreadcrumbSelection = event.getSelection();
+ if (!getActiveContext().equals(oldContext)) {
+ fire(new DebugContextEvent(this, getActiveContext(), DebugContextEvent.ACTIVATED));
+ }
+ }
+ }
+
+ private BreadcrumbContextProvider fBreadcrumbContextProvider;
+
+ public LaunchViewBreadcrumb(LaunchView view, TreeModelViewer treeViewer, IDebugContextProvider contextProvider) {
+ fView = view;
+ fTreeViewer = treeViewer;
+ fTreeViewer.addLabelUpdateListener(this);
+ fTreeViewerContextProvider = contextProvider;
+ fBreadcrumbInput = new Input( getPathForSelection(fTreeViewerContextProvider.getActiveContext()) );
+ fTreeViewerContextProvider.addDebugContextListener(this);
+ }
+
+ @Override
protected void activateBreadcrumb() {
- }
+ }
- @Override
+ @Override
protected void deactivateBreadcrumb() {
- if (fViewer.isDropDownOpen()) {
- Shell shell = fViewer.getDropDownShell();
- if (shell != null && !shell.isDisposed()) {
- shell.close();
- }
- }
- }
-
- @Override
+ if (fViewer.isDropDownOpen()) {
+ Shell shell = fViewer.getDropDownShell();
+ if (shell != null && !shell.isDisposed()) {
+ shell.close();
+ }
+ }
+ }
+
+ @Override
protected BreadcrumbViewer createViewer(Composite parent) {
- fViewer = new BreadcrumbViewer(parent, SWT.NONE) {
- @Override
+ fViewer = new BreadcrumbViewer(parent, SWT.NONE) {
+ @Override
protected Control createDropDown(Composite dropDownParent, IBreadcrumbDropDownSite site, TreePath path) {
- return createDropDownControl(dropDownParent, site, path);
- }
- };
+ return createDropDownControl(dropDownParent, site, path);
+ }
+ };
- // Force the layout of the breadcrumb viewer so that we may calcualte
- // its proper size.
- parent.pack(true);
+ // Force the layout of the breadcrumb viewer so that we may calcualte
+ // its proper size.
+ parent.pack(true);
- fViewer.setContentProvider(new ContentProvider());
- fViewer.setLabelProvider(new LabelProvider());
+ fViewer.setContentProvider(new ContentProvider());
+ fViewer.setLabelProvider(new LabelProvider());
- createMenuManager();
+ createMenuManager();
- fViewer.setInput(getCurrentInput());
+ fViewer.setInput(getCurrentInput());
- fBreadcrumbContextProvider = new BreadcrumbContextProvider();
+ fBreadcrumbContextProvider = new BreadcrumbContextProvider();
- return fViewer;
- }
+ return fViewer;
+ }
- protected void createMenuManager() {
- MenuManager menuMgr = new MenuManager("#PopUp"); //$NON-NLS-1$
- menuMgr.setRemoveAllWhenShown(true);
- menuMgr.addMenuListener(new IMenuListener() {
- @Override
+ protected void createMenuManager() {
+ MenuManager menuMgr = new MenuManager("#PopUp"); //$NON-NLS-1$
+ menuMgr.setRemoveAllWhenShown(true);
+ menuMgr.addMenuListener(new IMenuListener() {
+ @Override
public void menuAboutToShow(IMenuManager mgr) {
- fView.fillContextMenu(mgr);
- }
- });
- final Menu menu= menuMgr.createContextMenu(fViewer.getControl());
-
- // register the context menu such that other plug-ins may contribute to it
- if (fView.getSite() != null) {
- fView.getSite().registerContextMenu(menuMgr, fViewer);
- }
- fView.addContextMenuManager(menuMgr);
-
- fViewer.addMenuDetectListener(new MenuDetectListener() {
- @Override
+ fView.fillContextMenu(mgr);
+ }
+ });
+ final Menu menu= menuMgr.createContextMenu(fViewer.getControl());
+
+ // register the context menu such that other plug-ins may contribute to it
+ if (fView.getSite() != null) {
+ fView.getSite().registerContextMenu(menuMgr, fViewer);
+ }
+ fView.addContextMenuManager(menuMgr);
+
+ fViewer.addMenuDetectListener(new MenuDetectListener() {
+ @Override
public void menuDetected(MenuDetectEvent event) {
- menu.setLocation(event.x + 10, event.y + 10);
- menu.setVisible(true);
- while (!menu.isDisposed() && menu.isVisible()) {
- if (!menu.getDisplay().readAndDispatch()) {
+ menu.setLocation(event.x + 10, event.y + 10);
+ menu.setVisible(true);
+ while (!menu.isDisposed() && menu.isVisible()) {
+ if (!menu.getDisplay().readAndDispatch()) {
menu.getDisplay().sleep();
}
- }
- }
- });
- }
+ }
+ }
+ });
+ }
- @Override
+ @Override
protected Object getCurrentInput() {
- return fBreadcrumbInput;
- }
+ return fBreadcrumbInput;
+ }
- @Override
+ @Override
protected boolean open(ISelection selection) {
- // Let the drop-down control implementation itself handle activating a new context.
- return false;
- }
+ // Let the drop-down control implementation itself handle activating a new context.
+ return false;
+ }
- @Override
+ @Override
public void dispose() {
- fTreeViewerContextProvider.removeDebugContextListener(this);
- fTreeViewer.removeLabelUpdateListener(this);
- if (fBreadcrumbContextProvider != null) {
- fBreadcrumbContextProvider.dispose();
- fBreadcrumbContextProvider = null;
- }
- fViewer = null;
- super.dispose();
- }
-
- @Override
+ fTreeViewerContextProvider.removeDebugContextListener(this);
+ fTreeViewer.removeLabelUpdateListener(this);
+ if (fBreadcrumbContextProvider != null) {
+ fBreadcrumbContextProvider.dispose();
+ fBreadcrumbContextProvider = null;
+ }
+ fViewer = null;
+ super.dispose();
+ }
+
+ @Override
public void debugContextChanged(DebugContextEvent event) {
- if (fView.isBreadcrumbVisible()) {
- fBreadcrumbInput = new Input(getPathForSelection(event.getContext()));
- if ((event.getFlags() & DebugContextEvent.ACTIVATED) != 0) {
- setInput(getCurrentInput());
-
- // If the context was activated, then clear the selection in breadcrumb
- // so that the activated context will become the active context for the
- // window.
- fViewer.setSelection(StructuredSelection.EMPTY);
- } else {
- refresh();
- }
- }
- }
-
- @Override
+ if (fView.isBreadcrumbVisible()) {
+ fBreadcrumbInput = new Input(getPathForSelection(event.getContext()));
+ if ((event.getFlags() & DebugContextEvent.ACTIVATED) != 0) {
+ setInput(getCurrentInput());
+
+ // If the context was activated, then clear the selection in breadcrumb
+ // so that the activated context will become the active context for the
+ // window.
+ fViewer.setSelection(StructuredSelection.EMPTY);
+ } else {
+ refresh();
+ }
+ }
+ }
+
+ @Override
public void labelUpdateStarted(ILabelUpdate update) {
- }
+ }
- @Override
+ @Override
public void labelUpdateComplete(ILabelUpdate update) {
- if (fBreadcrumbInput != null && fBreadcrumbInput.fPath != null) {
- if (fBreadcrumbInput.fPath.startsWith(update.getElementPath(), null)) {
- synchronized (this) {
- fRefreshBreadcrumb = true;
- }
- }
- }
- }
-
- @Override
+ if (fBreadcrumbInput != null && fBreadcrumbInput.fPath != null) {
+ if (fBreadcrumbInput.fPath.startsWith(update.getElementPath(), null)) {
+ synchronized (this) {
+ fRefreshBreadcrumb = true;
+ }
+ }
+ }
+ }
+
+ @Override
public void labelUpdatesBegin() {
- }
+ }
- @Override
+ @Override
public void labelUpdatesComplete() {
- boolean refresh = false;
- synchronized(this) {
- refresh = fRefreshBreadcrumb;
- fRefreshBreadcrumb = false;
- }
- if (fView.isBreadcrumbVisible() && refresh) {
- new UIJob(fViewer.getControl().getDisplay(), "refresh breadcrumb") { //$NON-NLS-1$
- { setSystem(true); }
- @Override
+ boolean refresh = false;
+ synchronized(this) {
+ refresh = fRefreshBreadcrumb;
+ fRefreshBreadcrumb = false;
+ }
+ if (fView.isBreadcrumbVisible() && refresh) {
+ new UIJob(fViewer.getControl().getDisplay(), "refresh breadcrumb") { //$NON-NLS-1$
+ { setSystem(true); }
+ @Override
public IStatus runInUIThread(IProgressMonitor monitor) {
- refresh();
- return Status.OK_STATUS;
- }
- }.schedule();
- }
- }
+ refresh();
+ return Status.OK_STATUS;
+ }
+ }.schedule();
+ }
+ }
- IDebugContextProvider getContextProvider() {
- return fBreadcrumbContextProvider;
- }
+ IDebugContextProvider getContextProvider() {
+ return fBreadcrumbContextProvider;
+ }
- int getHeight() {
- return fViewer.getControl().getSize().y;
- }
+ int getHeight() {
+ return fViewer.getControl().getSize().y;
+ }
- void clearSelection() {
- fViewer.setSelection(StructuredSelection.EMPTY);
- }
+ void clearSelection() {
+ fViewer.setSelection(StructuredSelection.EMPTY);
+ }
- private TreePath getPathForSelection(ISelection selection) {
- if (selection instanceof ITreeSelection && !selection.isEmpty()) {
- return ((ITreeSelection)selection).getPaths()[0];
- }
- return null;
- }
+ private TreePath getPathForSelection(ISelection selection) {
+ if (selection instanceof ITreeSelection && !selection.isEmpty()) {
+ return ((ITreeSelection)selection).getPaths()[0];
+ }
+ return null;
+ }
- public Control createDropDownControl(Composite parent, final IBreadcrumbDropDownSite site, TreePath paramPath) {
+ public Control createDropDownControl(Composite parent, final IBreadcrumbDropDownSite site, TreePath paramPath) {
- TreeViewerDropDown dropDownTreeViewer = new TreeViewerDropDown() {
+ TreeViewerDropDown dropDownTreeViewer = new TreeViewerDropDown() {
- SubTreeModelViewer fDropDownViewer;
+ SubTreeModelViewer fDropDownViewer;
- @Override
+ @Override
protected TreeViewer createTreeViewer(Composite composite, int style, final TreePath path) {
- fDropDownViewer = new SubTreeModelViewer(
- composite, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.VIRTUAL | SWT.POP_UP,
- fTreeViewer.getPresentationContext());
-
- Object launchViewInput = fTreeViewer.getInput();
- fDropDownViewer.setInput(launchViewInput, path.getParentPath());
-
- ViewerFilter[] filters = fTreeViewer.getFilters();
- fDropDownViewer.setFilters(filters);
-
- ModelDelta stateDelta = new ModelDelta(launchViewInput, IModelDelta.NO_CHANGE);
- fTreeViewer.saveElementState(TreePath.EMPTY, stateDelta, IModelDelta.EXPAND | IModelDelta.SELECT);
-
- // If we do not want to expand the elements in the drop-down.
- // Prune the delta to only select the element in the
- // top-most list.
- if (!fView.getBreadcrumbDropDownAutoExpand()) {
- final ModelDelta prunedDelta = new ModelDelta(launchViewInput, IModelDelta.NO_CHANGE);
- stateDelta.accept(new IModelDeltaVisitor() {
- ModelDelta copy = prunedDelta;
- @Override
+ fDropDownViewer = new SubTreeModelViewer(
+ composite, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.VIRTUAL | SWT.POP_UP,
+ fTreeViewer.getPresentationContext());
+
+ Object launchViewInput = fTreeViewer.getInput();
+ fDropDownViewer.setInput(launchViewInput, path.getParentPath());
+
+ ViewerFilter[] filters = fTreeViewer.getFilters();
+ fDropDownViewer.setFilters(filters);
+
+ ModelDelta stateDelta = new ModelDelta(launchViewInput, IModelDelta.NO_CHANGE);
+ fTreeViewer.saveElementState(TreePath.EMPTY, stateDelta, IModelDelta.EXPAND | IModelDelta.SELECT);
+
+ // If we do not want to expand the elements in the drop-down.
+ // Prune the delta to only select the element in the
+ // top-most list.
+ if (!fView.getBreadcrumbDropDownAutoExpand()) {
+ final ModelDelta prunedDelta = new ModelDelta(launchViewInput, IModelDelta.NO_CHANGE);
+ stateDelta.accept(new IModelDeltaVisitor() {
+ ModelDelta copy = prunedDelta;
+ @Override
public boolean visit(IModelDelta delta, int depth) {
- TreePath deltaPath = getViewerTreePath(delta);
- if (deltaPath.getSegmentCount() == 0) {
- // skip copying the root element, only copy it's child count
- copy.setChildCount(delta.getChildCount());
- } else if (deltaPath.getSegmentCount() != 0 && path.startsWith(deltaPath, null) ) {
- // Build up the delta copy along the path of the drop-down element.
- copy = copy.addNode(
- delta.getElement(), delta.getIndex(), delta.getFlags(), delta.getChildCount());
- }
-
- // If the delta is for the drop-down element, set its select flag and stop traversing
- // the delta..
- if (deltaPath.equals(path)) {
- copy.setFlags(IModelDelta.SELECT | IModelDelta.REVEAL);
- return false;
- }
-
- // Continue traversing the delta.
- return true;
- }
-
- private TreePath getViewerTreePath(IModelDelta node) {
+ TreePath deltaPath = getViewerTreePath(delta);
+ if (deltaPath.getSegmentCount() == 0) {
+ // skip copying the root element, only copy it's child count
+ copy.setChildCount(delta.getChildCount());
+ } else if (deltaPath.getSegmentCount() != 0 && path.startsWith(deltaPath, null) ) {
+ // Build up the delta copy along the path of the drop-down element.
+ copy = copy.addNode(
+ delta.getElement(), delta.getIndex(), delta.getFlags(), delta.getChildCount());
+ }
+
+ // If the delta is for the drop-down element, set its select flag and stop traversing
+ // the delta..
+ if (deltaPath.equals(path)) {
+ copy.setFlags(IModelDelta.SELECT | IModelDelta.REVEAL);
+ return false;
+ }
+
+ // Continue traversing the delta.
+ return true;
+ }
+
+ private TreePath getViewerTreePath(IModelDelta node) {
ArrayList<Object> list = new ArrayList<>();
- IModelDelta parentDelta = node.getParentDelta();
- while (parentDelta != null) {
- list.add(0, node.getElement());
- node = parentDelta;
- parentDelta = node.getParentDelta();
- }
- return new TreePath(list.toArray());
- }
- });
- stateDelta = prunedDelta;
- }
-
- fDropDownViewer.updateViewer(stateDelta);
-
- fDropDownViewer.addLabelUpdateListener(new ILabelUpdateListener() {
- @Override
+ IModelDelta parentDelta = node.getParentDelta();
+ while (parentDelta != null) {
+ list.add(0, node.getElement());
+ node = parentDelta;
+ parentDelta = node.getParentDelta();
+ }
+ return new TreePath(list.toArray());
+ }
+ });
+ stateDelta = prunedDelta;
+ }
+
+ fDropDownViewer.updateViewer(stateDelta);
+
+ fDropDownViewer.addLabelUpdateListener(new ILabelUpdateListener() {
+ @Override
public void labelUpdateComplete(ILabelUpdate update) {}
- @Override
+ @Override
public void labelUpdatesBegin() {}
- @Override
+ @Override
public void labelUpdateStarted(ILabelUpdate update) {}
- @Override
+ @Override
public void labelUpdatesComplete() {
- new UIJob(fViewer.getControl().getDisplay(), "resize breadcrub dropdown") { //$NON-NLS-1$
- { setSystem(true); }
- @Override
+ new UIJob(fViewer.getControl().getDisplay(), "resize breadcrub dropdown") { //$NON-NLS-1$
+ { setSystem(true); }
+ @Override
public IStatus runInUIThread(IProgressMonitor monitor) {
- site.updateSize();
- return Status.OK_STATUS;
- }
- }.schedule();
- }
- });
+ site.updateSize();
+ return Status.OK_STATUS;
+ }
+ }.schedule();
+ }
+ });
- return fDropDownViewer;
- }
+ return fDropDownViewer;
+ }
- @Override
+ @Override
protected void openElement(ISelection selection) {
- if (fTreeViewer.getControl().isDisposed()) {
- return;
- }
-
- if (selection != null && (selection instanceof ITreeSelection) && !selection.isEmpty()) {
- // Create the path to the root element of the drop-down viewer. Need to calcualte
- // indexes and counts for the delta in order for the selection from the drop-down
- // viewer to work properly.
- TreeModelContentProvider contentProvider = (TreeModelContentProvider)fTreeViewer.getContentProvider();
- TreePath path = TreePath.EMPTY;
- int count = fTreeViewer.getChildCount(path);
- count = contentProvider.viewToModelCount(path, count);
- ModelDelta rootDelta =
- new ModelDelta(fTreeViewer.getInput(), -1, IModelDelta.NO_CHANGE, count);
- TreePath rootPath = fDropDownViewer.getRootPath();
- ModelDelta delta = rootDelta;
- for (int i = 0; i < rootPath.getSegmentCount(); i++) {
- Object element = rootPath.getSegment(i);
- int index = fTreeViewer.findElementIndex(path, element);
- index = contentProvider.viewToModelIndex(path, index);
- path = path.createChildPath(element);
- count = fTreeViewer.getChildCount(path);
- count = contentProvider.viewToModelCount(path, count);
- delta = delta.addNode(rootPath.getSegment(i), index, IModelDelta.NO_CHANGE, count);
- }
-
- // Create the delta and save the drop-down viewer's state to it.
- fDropDownViewer.saveElementState(TreePath.EMPTY, delta, IModelDelta.EXPAND | IModelDelta.SELECT);
-
- // Add the IModelDelta.FORCE flag to override the current selection in view.
- rootDelta.accept(new IModelDeltaVisitor(){
- @Override
+ if (fTreeViewer.getControl().isDisposed()) {
+ return;
+ }
+
+ if (selection != null && (selection instanceof ITreeSelection) && !selection.isEmpty()) {
+ // Create the path to the root element of the drop-down viewer. Need to calcualte
+ // indexes and counts for the delta in order for the selection from the drop-down
+ // viewer to work properly.
+ TreeModelContentProvider contentProvider = (TreeModelContentProvider)fTreeViewer.getContentProvider();
+ TreePath path = TreePath.EMPTY;
+ int count = fTreeViewer.getChildCount(path);
+ count = contentProvider.viewToModelCount(path, count);
+ ModelDelta rootDelta =
+ new ModelDelta(fTreeViewer.getInput(), -1, IModelDelta.NO_CHANGE, count);
+ TreePath rootPath = fDropDownViewer.getRootPath();
+ ModelDelta delta = rootDelta;
+ for (int i = 0; i < rootPath.getSegmentCount(); i++) {
+ Object element = rootPath.getSegment(i);
+ int index = fTreeViewer.findElementIndex(path, element);
+ index = contentProvider.viewToModelIndex(path, index);
+ path = path.createChildPath(element);
+ count = fTreeViewer.getChildCount(path);
+ count = contentProvider.viewToModelCount(path, count);
+ delta = delta.addNode(rootPath.getSegment(i), index, IModelDelta.NO_CHANGE, count);
+ }
+
+ // Create the delta and save the drop-down viewer's state to it.
+ fDropDownViewer.saveElementState(TreePath.EMPTY, delta, IModelDelta.EXPAND | IModelDelta.SELECT);
+
+ // Add the IModelDelta.FORCE flag to override the current selection in view.
+ rootDelta.accept(new IModelDeltaVisitor(){
+ @Override
public boolean visit(IModelDelta paramDelta, int depth) {
- if ((paramDelta.getFlags() & IModelDelta.SELECT) != 0) {
- ((ModelDelta)paramDelta).setFlags(paramDelta.getFlags() | IModelDelta.FORCE);
- }
- return true;
- }
- });
-
- // If elements in the drop-down were auto-expanded, then collapse the drop-down's sub tree in the
- // full viewer. After the drop-down's full expansion state is saved out to the tree viewer, the
- // tree viewer will accurately reflect the state changes made by the user.
- if (fView.getBreadcrumbDropDownAutoExpand()) {
- fTreeViewer.collapseToLevel(rootPath, AbstractTreeViewer.ALL_LEVELS);
- }
-
- // Save the state of the drop-down out into the tree viewer.
- fTreeViewer.updateViewer(rootDelta);
- fViewer.setSelection(StructuredSelection.EMPTY);
- site.close();
- }
-
- super.openElement(selection);
- }
- };
-
-
- return dropDownTreeViewer.createDropDown(parent, site, paramPath);
- }
+ if ((paramDelta.getFlags() & IModelDelta.SELECT) != 0) {
+ ((ModelDelta)paramDelta).setFlags(paramDelta.getFlags() | IModelDelta.FORCE);
+ }
+ return true;
+ }
+ });
+
+ // If elements in the drop-down were auto-expanded, then collapse the drop-down's sub tree in the
+ // full viewer. After the drop-down's full expansion state is saved out to the tree viewer, the
+ // tree viewer will accurately reflect the state changes made by the user.
+ if (fView.getBreadcrumbDropDownAutoExpand()) {
+ fTreeViewer.collapseToLevel(rootPath, AbstractTreeViewer.ALL_LEVELS);
+ }
+
+ // Save the state of the drop-down out into the tree viewer.
+ fTreeViewer.updateViewer(rootDelta);
+ fViewer.setSelection(StructuredSelection.EMPTY);
+ site.close();
+ }
+
+ super.openElement(selection);
+ }
+ };
+
+
+ return dropDownTreeViewer.createDropDown(parent, site, paramPath);
+ }
}

Back to the top