1 /******************************************************************************* 2 * Copyright (c) 2003, 2015 IBM Corporation and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * IBM Corporation - initial API and implementation 13 *******************************************************************************/ 14 package org.eclipse.jface.preference; 15 16 import org.eclipse.jface.viewers.ITreeContentProvider; 17 import org.eclipse.jface.viewers.Viewer; 18 19 /** 20 * Provides a tree model for <code>PreferenceManager</code> content. 21 * 22 * @since 3.0 23 */ 24 public class PreferenceContentProvider implements ITreeContentProvider { 25 26 private PreferenceManager manager; 27 28 @Override dispose()29 public void dispose() { 30 manager = null; 31 } 32 33 /** 34 * Find the parent of the provided node. Will search recursivly through the 35 * preference tree. 36 * 37 * @param parent the possible parent node. 38 * @param target the target child node. 39 * @return the parent node of the child node. 40 */ findParent(IPreferenceNode parent, IPreferenceNode target)41 private IPreferenceNode findParent(IPreferenceNode parent, 42 IPreferenceNode target) { 43 if (parent.getId().equals(target.getId())) { 44 return null; 45 } 46 47 IPreferenceNode found = parent.findSubNode(target.getId()); 48 if (found != null) { 49 return parent; 50 } 51 52 IPreferenceNode[] children = parent.getSubNodes(); 53 54 for (IPreferenceNode element : children) { 55 found = findParent(element, target); 56 if (found != null) { 57 return found; 58 } 59 } 60 61 return null; 62 } 63 64 @Override getChildren(Object parentElement)65 public Object[] getChildren(Object parentElement) {//must be an instance of <code>IPreferenceNode</code>. 66 return ((IPreferenceNode) parentElement).getSubNodes(); 67 } 68 69 @Override getElements(Object inputElement)70 public Object[] getElements(Object inputElement) {// must be an instance of <code>PreferenceManager</code>. 71 return getChildren(((PreferenceManager) inputElement).getRoot()); 72 } 73 74 @Override getParent(Object element)75 public Object getParent(Object element) {//must be an instance of <code>IPreferenceNode</code>. 76 IPreferenceNode targetNode = (IPreferenceNode) element; 77 IPreferenceNode root = manager.getRoot(); 78 return findParent(root, targetNode); 79 } 80 81 @Override hasChildren(Object element)82 public boolean hasChildren(Object element) { 83 return getChildren(element).length > 0; 84 } 85 86 @Override inputChanged(Viewer viewer, Object oldInput, Object newInput)87 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { 88 manager = (PreferenceManager) newInput; 89 } 90 /** 91 * Set the manager for the preferences. 92 * @param manager The manager to set. 93 * 94 * @since 3.1 95 */ setManager(PreferenceManager manager)96 protected void setManager(PreferenceManager manager) { 97 this.manager = manager; 98 } 99 } 100