annotate dwtx/jface/preference/PreferenceContentProvider.d @ 34:b3c8e32d406f

preference
author Frank Benoit <benoit@tionex.de>
date Sat, 05 Apr 2008 01:45:47 +0200
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
34
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2003, 2006 IBM Corporation and others.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Frank Benoit <benoit@tionex.de>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwtx.jface.preference.PreferenceContentProvider;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import dwtx.jface.preference.IPreferenceNode;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 import dwtx.jface.preference.PreferenceManager;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import dwtx.jface.viewers.ITreeContentProvider;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 import dwtx.jface.viewers.Viewer;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwt.dwthelper.utils;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 * Provides a tree model for <code>PreferenceManager</code> content.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 * @since 3.0
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 public class PreferenceContentProvider : ITreeContentProvider {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 private PreferenceManager manager;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 /* (non-Javadoc)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 * @see dwtx.jface.viewers.IContentProvider#dispose()
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 public void dispose() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 manager = null;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 * Find the parent of the provided node. Will search recursivly through the
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 * preference tree.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 * @param parent the possible parent node.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 * @param target the target child node.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 * @return the parent node of the child node.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 private IPreferenceNode findParent(IPreferenceNode parent,
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 IPreferenceNode target) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 if (parent.getId().equals(target.getId())) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 return null;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 IPreferenceNode found = parent.findSubNode(target.getId());
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 if (found !is null) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 return parent;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 IPreferenceNode[] children = parent.getSubNodes();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 for (int i = 0; i < children.length; i++) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 found = findParent(children[i], target);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 if (found !is null) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 return found;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 return null;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 /*
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 * (non-Javadoc)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 * @see dwtx.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 public Object[] getChildren(Object parentElement) {//must be an instance of <code>IPreferenceNode</code>.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 return arraycast!(Object)((cast(IPreferenceNode) parentElement).getSubNodes());
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 /*
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 * (non-Javadoc)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 * @see dwtx.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 public Object[] getElements(Object inputElement) {// must be an instance of <code>PreferenceManager</code>.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 return getChildren(cast(Object)(cast(PreferenceManager) inputElement).getRoot_package());
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 /*
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 * (non-Javadoc)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 * @see dwtx.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 public Object getParent(Object element) {//must be an instance of <code>IPreferenceNode</code>.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 IPreferenceNode targetNode = cast(IPreferenceNode) element;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 IPreferenceNode root = manager.getRoot_package();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 return cast(Object)findParent(root, targetNode);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 /* (non-Javadoc)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 * @see dwtx.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 public bool hasChildren(Object element) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 return getChildren(element).length > 0;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 /* (non-Javadoc)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 * @see dwtx.jface.viewers.IContentProvider#inputChanged(dwtx.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 manager = cast(PreferenceManager) newInput;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 * Set the manager for the preferences.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 * @param manager The manager to set.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 * @since 3.1
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 protected void setManager(PreferenceManager manager) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 this.manager = manager;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 }