annotate dwtx/jface/viewers/TreeViewer.d @ 90:7ffeace6c47f

Update 3.4M7 to 3.4
author Frank Benoit <benoit@tionex.de>
date Sun, 06 Jul 2008 23:30:07 +0200
parents 46a6e0e6ccd4
children 04b47443bb01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
90
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
2 * Copyright (c) 2004, 2008 IBM Corporation and others.
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Tom Schindl <tom.schindl@bestsolution.at> - concept of ViewerRow,
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
11 * refactoring (bug 153993), bug 167323, 191468, 205419
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
12 * Matthew Hall - bug 221988
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 * Port to the D programming language:
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14 * Frank Benoit <benoit@tionex.de>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 *******************************************************************************/
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 module dwtx.jface.viewers.TreeViewer;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 import dwtx.jface.viewers.AbstractTreeViewer;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwtx.jface.viewers.TreeViewerRow;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwtx.jface.viewers.IBaseLabelProvider;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwtx.jface.viewers.ColumnViewerEditor;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwtx.jface.viewers.IContentProvider;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwtx.jface.viewers.TreeSelection;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwtx.jface.viewers.ViewerRow;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwtx.jface.viewers.ISelection;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwtx.jface.viewers.TreeViewerEditor;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import dwtx.jface.viewers.ColumnViewerEditorActivationStrategy;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import dwtx.jface.viewers.ColumnViewerEditorActivationEvent;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import dwtx.jface.viewers.ILazyTreeContentProvider;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 import dwtx.jface.viewers.ILazyTreePathContentProvider;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 import dwtx.jface.viewers.TreePath;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 import dwtx.jface.viewers.TreeExpansionEvent;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 import dwtx.jface.viewers.ViewerCell;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 import tango.util.collection.LinkSeq;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 import tango.util.collection.model.Seq;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 import tango.util.collection.model.SeqView;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 import dwt.DWT;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 import dwt.events.DisposeEvent;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 import dwt.events.DisposeListener;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 import dwt.events.TreeEvent;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 import dwt.events.TreeListener;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 import dwt.graphics.Point;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 import dwt.widgets.Composite;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 import dwt.widgets.Control;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 import dwt.widgets.Event;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 import dwt.widgets.Item;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 import dwt.widgets.Listener;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 import dwt.widgets.Tree;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 import dwt.widgets.TreeItem;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 import dwt.widgets.Widget;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 import dwtx.jface.util.Policy;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 import dwt.dwthelper.utils;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 import dwt.dwthelper.Runnable;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 * A concrete viewer based on an DWT <code>Tree</code> control.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 * This class is not intended to be subclassed outside the viewer framework. It
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 * is designed to be instantiated with a pre-existing DWT tree control and
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 * configured with a domain-specific content provider, label provider, element
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 * filter (optional), and element sorter (optional).
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 * </p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 * Content providers for tree viewers must implement either the
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 * {@link ITreeContentProvider} interface, (as of 3.2) the
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 * {@link ILazyTreeContentProvider} interface, or (as of 3.3) the
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 * {@link ILazyTreePathContentProvider}. If the content provider is an
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 * <code>ILazyTreeContentProvider</code> or an
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 * <code>ILazyTreePathContentProvider</code>, the underlying Tree must be
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
74 * created using the {@link DWT#VIRTUAL} style bit, the tree viewer will not
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
75 * support sorting or filtering, and hash lookup must be enabled by calling
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
76 * {@link #setUseHashlookup(bool)}.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
77 * </p>
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
78 * <p>
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
79 * Users setting up an editable tree with more than 1 column <b>have</b> to pass the
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
80 * DWT.FULL_SELECTION style bit
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 * </p>
90
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
82 * @noextend This class is not intended to be subclassed by clients.
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 public class TreeViewer : AbstractTreeViewer {
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
85 alias AbstractTreeViewer.addTreeListener addTreeListener;
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
86 alias AbstractTreeViewer.getLabelProvider getLabelProvider;
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
87 alias AbstractTreeViewer.getSelection getSelection;
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
88 alias AbstractTreeViewer.preservingSelection preservingSelection;
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
89 alias AbstractTreeViewer.remove remove;
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
90 alias AbstractTreeViewer.setSelection setSelection;
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 private static final String VIRTUAL_DISPOSE_KEY = Policy.JFACE
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 ~ ".DISPOSE_LISTENER"; //$NON-NLS-1$
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 * This viewer's control.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 private Tree tree;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 * Flag for whether the tree has been disposed of.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 private bool treeIsDisposed = false;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 private bool contentProviderIsLazy;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 private bool contentProviderIsTreeBased;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 * The row object reused
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 private TreeViewerRow cachedRow;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 * true if we are inside a preservingSelection() call
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 private bool preservingSelection_;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 * Creates a tree viewer on a newly-created tree control under the given
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 * parent. The tree control is created using the DWT style bits
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 * <code>MULTI, H_SCROLL, V_SCROLL,</code> and <code>BORDER</code>. The
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 * viewer has no input, no content provider, a default label provider, no
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 * sorter, and no filters.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 * @param parent
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 * the parent control
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 public this(Composite parent) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 this(parent, DWT.MULTI | DWT.H_SCROLL | DWT.V_SCROLL | DWT.BORDER);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 * Creates a tree viewer on a newly-created tree control under the given
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 * parent. The tree control is created using the given DWT style bits. The
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 * viewer has no input, no content provider, a default label provider, no
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 * sorter, and no filters.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 * @param parent
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 * the parent control
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 * @param style
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 * the DWT style bits used to create the tree.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 public this(Composite parent, int style) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 this(new Tree(parent, style));
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 * Creates a tree viewer on the given tree control. The viewer has no input,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 * no content provider, a default label provider, no sorter, and no filters.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 * @param tree
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 * the tree control
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 public this(Tree tree) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 super();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 this.tree = tree;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 hookControl(tree);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 * (non-Javadoc) Method declared in AbstractTreeViewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
164 protected override void addTreeListener(Control c, TreeListener listener) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 (cast(Tree) c).addTreeListener(listener);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 * (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 * @see dwtx.jface.viewers.ColumnViewer#getColumnViewerOwner(int)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
173 protected override Widget getColumnViewerOwner(int columnIndex) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 if (columnIndex < 0 || ( columnIndex > 0 && columnIndex >= getTree().getColumnCount() ) ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 return null;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 if (getTree().getColumnCount() is 0)// Hang it off the table if it
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 return getTree();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 return getTree().getColumn(columnIndex);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 * (non-Javadoc) Method declared in AbstractTreeViewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
187 protected override Item[] getChildren(Widget o) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 if (auto ti = cast(TreeItem)o ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 return ti.getItems();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 if (auto t = cast(Tree)o ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 return t.getItems();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 return null;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 * (non-Javadoc) Method declared in Viewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
200 public override Control getControl() {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 return tree;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 * (non-Javadoc) Method declared in AbstractTreeViewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
207 protected override bool getExpanded(Item item) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 return (cast(TreeItem) item).getExpanded();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 * (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 * @see dwtx.jface.viewers.ColumnViewer#getItemAt(dwt.graphics.Point)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
216 protected override Item getItemAt(Point p) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 TreeItem[] selection = tree.getSelection();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 if( selection.length is 1 ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 int columnCount = tree.getColumnCount();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 for( int i = 0; i < columnCount; i++ ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 if( selection[0].getBounds(i).contains(p) ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 return selection[0];
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 return getTree().getItem(p);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 * (non-Javadoc) Method declared in AbstractTreeViewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
235 protected override int getItemCount(Control widget) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 return (cast(Tree) widget).getItemCount();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 * (non-Javadoc) Method declared in AbstractTreeViewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
242 protected override int getItemCount(Item item) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 return (cast(TreeItem) item).getItemCount();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 * (non-Javadoc) Method declared in AbstractTreeViewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
249 protected override Item[] getItems(Item item) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 return (cast(TreeItem) item).getItems();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 * The tree viewer implementation of this <code>Viewer</code> framework
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 * method ensures that the given label provider is an instance of either
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 * <code>ITableLabelProvider</code> or <code>ILabelProvider</code>. If
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 * it is an <code>ITableLabelProvider</code>, then it provides a separate
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 * label text and image for each column. If it is an
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 * <code>ILabelProvider</code>, then it provides only the label text and
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 * image for the first column, and any remaining columns are blank.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
262 public override IBaseLabelProvider getLabelProvider() {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 return super.getLabelProvider();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 * (non-Javadoc) Method declared in AbstractTreeViewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
269 protected override Item getParentItem(Item item) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 return (cast(TreeItem) item).getParentItem();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 * (non-Javadoc) Method declared in AbstractTreeViewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
276 protected override Item[] getSelection(Control widget) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 return (cast(Tree) widget).getSelection();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 * Returns this tree viewer's tree control.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 * @return the tree control
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 public Tree getTree() {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 return tree;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 * (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 * @see dwtx.jface.viewers.AbstractTreeViewer#hookControl(dwt.widgets.Control)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
294 protected override void hookControl(Control control) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295 super.hookControl(control);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 Tree treeControl = cast(Tree) control;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 if ((treeControl.getStyle() & DWT.VIRTUAL) !is 0) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 treeControl.addDisposeListener(new class DisposeListener {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 public void widgetDisposed(DisposeEvent e) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 treeIsDisposed = true;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 unmapAllElements();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 });
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 treeControl.addListener(DWT.SetData, new class Listener {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 public void handleEvent(Event event) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 if (contentProviderIsLazy) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 TreeItem item = cast(TreeItem) event.item;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 TreeItem parentItem = item.getParentItem();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 int index = event.index;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 virtualLazyUpdateWidget(
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 parentItem is null ? cast(Widget) getTree()
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 : parentItem, index);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 });
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
322 protected override ColumnViewerEditor createViewerEditor() {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 return new TreeViewerEditor(this,null,new ColumnViewerEditorActivationStrategy(this),ColumnViewerEditor.DEFAULT);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 * (non-Javadoc) Method declared in AbstractTreeViewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
329 protected override Item newItem(Widget parent, int flags, int ix) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 TreeItem item;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 if ( cast(TreeItem)parent ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 item = cast(TreeItem) createNewRowPart(getViewerRowFromItem(parent),
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334 flags, ix).getItem();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 item = cast(TreeItem) createNewRowPart(null, flags, ix).getItem();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 return item;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 * (non-Javadoc) Method declared in AbstractTreeViewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
345 protected override void removeAll(Control widget) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 (cast(Tree) widget).removeAll();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 * (non-Javadoc) Method declared in AbstractTreeViewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
352 protected override void setExpanded(Item node, bool expand) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353 (cast(TreeItem) node).setExpanded(expand);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 if (contentProviderIsLazy) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
355 // force repaints to happen
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356 getControl().update();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 * (non-Javadoc) Method declared in AbstractTreeViewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
363 protected override void setSelection(SeqView!(Item) items) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365 Item[] current = getSelection(getTree());
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367 // Don't bother resetting the same selection
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 if (isSameSelection(items, current)) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369 return;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 getTree().setSelection( cast(TreeItem[]) items.toArray());
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 * (non-Javadoc) Method declared in AbstractTreeViewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
378 protected override void showItem(Item item) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379 getTree().showItem(cast(TreeItem) item);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 * (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 * @see dwtx.jface.viewers.AbstractTreeViewer#getChild(dwt.widgets.Widget,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 * int)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
388 protected override Item getChild(Widget widget, int index) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
389 if (auto ti = cast(TreeItem)widget ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390 return ti.getItem(index);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
392 if (auto t = cast(Tree)widget ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
393 return t.getItem(index);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 return null;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
398 protected override void assertContentProviderType(IContentProvider provider) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 if ( null !is cast(ILazyTreeContentProvider)provider
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 || null !is cast(ILazyTreePathContentProvider)provider ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 return;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 super.assertContentProviderType(provider);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
406 protected override Object[] getRawChildren(Object parent) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 if (contentProviderIsLazy) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 return new Object[0];
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 return super.getRawChildren(parent);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
413 override void preservingSelection(Runnable updateCode, bool reveal) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 if (preservingSelection_){
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415 // avoid preserving the selection if called reentrantly,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 // see bug 172640
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 updateCode.run();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 return;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 preservingSelection_ = true;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 try {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422 super.preservingSelection(updateCode, reveal);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
423 } finally {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 preservingSelection_ = false;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 * For a TreeViewer with a tree with the VIRTUAL style bit set, set the
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 * number of children of the given element or tree path. To set the number
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 * of children of the invisible root of the tree, you can pass the input
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432 * object or an empty tree path.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 * @param elementOrTreePath
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435 * the element, or tree path
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 * @param count
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 * @since 3.2
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 public void setChildCount(Object elementOrTreePath, int count) {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
441 if (checkBusy())
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 return;
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 10
diff changeset
443 preservingSelection(new class(elementOrTreePath,count) Runnable {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 Object elementOrTreePath_;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 int count_;
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 10
diff changeset
446 this(Object a,int b){
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 10
diff changeset
447 elementOrTreePath_=a;
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 10
diff changeset
448 count_=b;
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
450 public void run() {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
451 if (internalIsInputOrEmptyPath(elementOrTreePath_)) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
452 getTree().setItemCount(count_);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
453 return;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
454 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 Widget[] items = internalFindItems(elementOrTreePath_);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
456 for (int i = 0; i < items.length; i++) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
457 TreeItem treeItem = cast(TreeItem) items[i];
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
458 treeItem.setItemCount(count_);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
459 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461 });
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
464 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465 * For a TreeViewer with a tree with the VIRTUAL style bit set, replace the
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
466 * given parent's child at index with the given element. If the given parent
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467 * is this viewer's input or an empty tree path, this will replace the root
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
468 * element at the given index.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470 * This method should be called by implementers of ILazyTreeContentProvider
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
471 * to populate this viewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
472 * </p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
473 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
474 * @param parentElementOrTreePath
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
475 * the parent of the element that should be updated, or the tree
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
476 * path to that parent
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
477 * @param index
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
478 * the index in the parent's children
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
479 * @param element
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
480 * the new element
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
481 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
482 * @see #setChildCount(Object, int)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
483 * @see ILazyTreeContentProvider
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
484 * @see ILazyTreePathContentProvider
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
485 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
486 * @since 3.2
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
487 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
488 public void replace(Object parentElementOrTreePath, int index,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
489 Object element) {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
490 if (checkBusy())
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
491 return;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
492 Item[] selectedItems = getSelection(getControl());
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
493 TreeSelection selection = cast(TreeSelection) getSelection();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
494 Widget[] itemsToDisassociate;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
495 if (auto tp = cast(TreePath)parentElementOrTreePath ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
496 TreePath elementPath = tp
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
497 .createChildPath(element);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
498 itemsToDisassociate = internalFindItems(elementPath);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
499 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
500 itemsToDisassociate = internalFindItems(element);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
501 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
502 if (internalIsInputOrEmptyPath(parentElementOrTreePath)) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
503 if (index < tree.getItemCount()) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
504 TreeItem item = tree.getItem(index);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
505 selection = adjustSelectionForReplace(selectedItems, selection, item, element, getRoot());
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
506 // disassociate any different item that represents the
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
507 // same element under the same parent (the tree)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
508 for (int i = 0; i < itemsToDisassociate.length; i++) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
509 if (auto itemToDisassociate = cast(TreeItem)itemsToDisassociate[i]) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
510 if (itemToDisassociate !is item
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
511 && itemToDisassociate.getParentItem() is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
512 int indexToDisassociate = getTree().indexOf(
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
513 itemToDisassociate);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
514 disassociate(itemToDisassociate);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
515 getTree().clear(indexToDisassociate, true);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
516 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
517 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
518 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
519 Object oldData = item.getData();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
520 updateItem(item, element);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
521 if (!/+TreeViewer.this.+/opEquals(oldData, element)) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
522 item.clearAll(true);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
523 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
524 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
525 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
526 Widget[] parentItems = internalFindItems(parentElementOrTreePath);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
527 for (int i = 0; i < parentItems.length; i++) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
528 TreeItem parentItem = cast(TreeItem) parentItems[i];
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
529 if (index < parentItem.getItemCount()) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
530 TreeItem item = parentItem.getItem(index);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
531 selection = adjustSelectionForReplace(selectedItems, selection, item, element, parentItem.getData());
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
532 // disassociate any different item that represents the
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
533 // same element under the same parent (the tree)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
534 for (int j = 0; j < itemsToDisassociate.length; j++) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
535 if ( auto itemToDisassociate = cast(TreeItem)itemsToDisassociate[j] ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
536 if (itemToDisassociate !is item
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
537 && itemToDisassociate.getParentItem() is parentItem) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
538 int indexToDisaccociate = parentItem
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
539 .indexOf(itemToDisassociate);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
540 disassociate(itemToDisassociate);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
541 parentItem.clear(indexToDisaccociate, true);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
542 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
543 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
544 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
545 Object oldData = item.getData();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
546 updateItem(item, element);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
547 if (!/+TreeViewer.this.+/opEquals(oldData, element)) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
548 item.clearAll(true);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
549 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
550 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
551 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
552 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
553 // Restore the selection if we are not already in a nested preservingSelection:
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
554 if (!preservingSelection_) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
555 setSelectionToWidget(selection, false);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
556 // send out notification if old and new differ
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
557 ISelection newSelection = getSelection();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
558 if (!(cast(Object)newSelection).opEquals(cast(Object)selection)) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
559 handleInvalidSelection(selection, newSelection);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
560 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
561 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
562 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
563
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
564 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
565 * Fix for bug 185673: If the currently replaced item was selected, add it
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
566 * to the selection that is being restored. Only do this if its getData() is
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
567 * currently null
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
568 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
569 * @param selectedItems
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
570 * @param selection
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
571 * @param item
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
572 * @param element
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
573 * @return
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
574 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
575 private TreeSelection adjustSelectionForReplace(Item[] selectedItems,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
576 TreeSelection selection, TreeItem item, Object element, Object parentElement) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
577 if (item.getData() !is null || selectedItems.length is selection.size()
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
578 || parentElement is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
579 // Don't do anything - we are not seeing an instance of bug 185673
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
580 return selection;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
581 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
582 for (int i = 0; i < selectedItems.length; i++) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
583 if (item is selectedItems[i]) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
584 // The current item was selected, but its data is null.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
585 // The data will be replaced by the given element, so to keep
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
586 // it selected, we have to add it to the selection.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
587 TreePath[] originalPaths = selection.getPaths();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
588 int length_ = originalPaths.length;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
589 TreePath[] paths = new TreePath[length_ + 1];
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
590 System.arraycopy(originalPaths, 0, paths, 0, length_);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
591 // set the element temporarily so that we can call getTreePathFromItem
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
592 item.setData(element);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
593 paths[length_] = getTreePathFromItem(item);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
594 item.setData(null);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
595 return new TreeSelection(paths, selection.getElementComparer());
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
596 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
597 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
598 // The item was not selected, return the given selection
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
599 return selection;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
600 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
601
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
602 public override bool isExpandable(Object element) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
603 if (contentProviderIsLazy) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
604 TreeItem treeItem = cast(TreeItem) internalExpand(element, false);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
605 if (treeItem is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
606 return false;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
607 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
608 virtualMaterializeItem(treeItem);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
609 return treeItem.getItemCount() > 0;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
610 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
611 return super.isExpandable(element);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
612 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
613
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
614 protected override Object getParentElement(Object element) {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
615 bool oldBusy = isBusy();
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
616 setBusy(true);
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
617 try {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
618 if (contentProviderIsLazy && !contentProviderIsTreeBased && !(cast(TreePath)element )) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
619 ILazyTreeContentProvider lazyTreeContentProvider = cast(ILazyTreeContentProvider) getContentProvider();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
620 return lazyTreeContentProvider.getParent(element);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
621 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
622 if (contentProviderIsLazy && contentProviderIsTreeBased && !(cast(TreePath)element )) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
623 ILazyTreePathContentProvider lazyTreePathContentProvider = cast(ILazyTreePathContentProvider) getContentProvider();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
624 TreePath[] parents = lazyTreePathContentProvider
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
625 .getParents(element);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
626 if (parents !is null && parents.length > 0) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
627 return parents[0];
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
628 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
629 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
630 return super.getParentElement(element);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
631 } finally {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
632 setBusy(oldBusy);
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
633 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
634 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
635
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
636 protected override void createChildren(Widget widget) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
637 if (contentProviderIsLazy) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
638 Object element = widget.getData();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
639 if (element is null && cast(TreeItem)widget ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
640 // parent has not been materialized
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
641 virtualMaterializeItem(cast(TreeItem) widget);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
642 // try getting the element now that updateElement was called
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
643 element = widget.getData();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
644 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
645 if (element is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
646 // give up because the parent is still not materialized
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
647 return;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
648 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
649 Item[] children = getChildren(widget);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
650 if (children.length is 1 && children[0].getData() is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
651 // found a dummy node
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
652 virtualLazyUpdateChildCount(widget, children.length);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
653 children = getChildren(widget);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
654 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
655 // touch all children to make sure they are materialized
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
656 for (int i = 0; i < children.length; i++) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
657 if (children[i].getData() is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
658 virtualLazyUpdateWidget(widget, i);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
659 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
660 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
661 return;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
662 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
663 super.createChildren(widget);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
664 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
665
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
666 protected override void internalAdd(Widget widget, Object parentElement,
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
667 Object[] childElements) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
668 if (contentProviderIsLazy) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
669 if (auto ti = cast(TreeItem)widget ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
670 int count = ti.getItemCount() + childElements.length;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
671 ti.setItemCount(count);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
672 ti.clearAll(false);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
673 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
674 Tree t = cast(Tree) widget;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
675 t.setItemCount(t.getItemCount() + childElements.length);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
676 t.clearAll(false);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
677 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
678 return;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
679 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
680 super.internalAdd(widget, parentElement, childElements);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
681 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
682
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
683 private void virtualMaterializeItem(TreeItem treeItem) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
684 if (treeItem.getData() !is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
685 // already materialized
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
686 return;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
687 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
688 if (!contentProviderIsLazy) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
689 return;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
690 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
691 int index;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
692 Widget parent = treeItem.getParentItem();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
693 if (parent is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
694 parent = treeItem.getParent();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
695 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
696 Object parentElement = parent.getData();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
697 if (parentElement !is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
698 if ( auto t = cast(Tree)parent ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
699 index = t.indexOf(treeItem);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
700 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
701 index = (cast(TreeItem) parent).indexOf(treeItem);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
702 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
703 virtualLazyUpdateWidget(parent, index);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
704 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
705 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
706
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
707 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
708 * (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
709 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
710 * @see dwtx.jface.viewers.AbstractTreeViewer#internalRefreshStruct(dwt.widgets.Widget,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
711 * java.lang.Object, bool)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
712 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
713 protected override void internalRefreshStruct(Widget widget, Object element,
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
714 bool updateLabels) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
715 if (contentProviderIsLazy) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
716 // clear all starting with the given widget
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
717 if (auto t = cast(Tree)widget ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
718 t.clearAll(true);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
719 } else if (cast(TreeItem)widget ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
720 (cast(TreeItem) widget).clearAll(true);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
721 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
722 int index = 0;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
723 Widget parent = null;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
724 if (auto treeItem = cast(TreeItem)widget ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
725 parent = treeItem.getParentItem();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
726 if (parent is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
727 parent = treeItem.getParent();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
728 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
729 if (cast(Tree)parent ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
730 index = (cast(Tree) parent).indexOf(treeItem);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
731 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
732 index = (cast(TreeItem) parent).indexOf(treeItem);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
733 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
734 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
735 virtualRefreshExpandedItems(parent, widget, element, index);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
736 return;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
737 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
738 super.internalRefreshStruct(widget, element, updateLabels);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
739 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
740
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
741 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
742 * Traverses the visible (expanded) part of the tree and updates child
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
743 * counts.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
744 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
745 * @param parent the parent of the widget, or <code>null</code> if the widget is the tree
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
746 * @param widget
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
747 * @param element
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
748 * @param index the index of the widget in the children array of its parent, or 0 if the widget is the tree
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
749 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
750 private void virtualRefreshExpandedItems(Widget parent, Widget widget, Object element, int index) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
751 if ( cast(Tree)widget ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
752 if (element is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
753 (cast(Tree) widget).setItemCount(0);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
754 return;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
755 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
756 virtualLazyUpdateChildCount(widget, getChildren(widget).length);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
757 } else if ((cast(TreeItem) widget).getExpanded()) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
758 // prevent SetData callback
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
759 (cast(TreeItem)widget).setText(" "); //$NON-NLS-1$
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
760 virtualLazyUpdateWidget(parent, index);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
761 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
762 return;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
763 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
764 Item[] items = getChildren(widget);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
765 for (int i = 0; i < items.length; i++) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
766 Item item = items[i];
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
767 Object data = item.getData();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
768 virtualRefreshExpandedItems(widget, item, data, i);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
769 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
770 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
771
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
772 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
773 * To unmap elements correctly, we need to register a dispose listener with
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
774 * the item if the tree is virtual.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
775 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
776 protected override void mapElement(Object element, Widget item) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
777 super.mapElement(element, item);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
778 // make sure to unmap elements if the tree is virtual
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
779 if ((getTree().getStyle() & DWT.VIRTUAL) !is 0) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
780 // only add a dispose listener if item hasn't already on assigned
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
781 // because it is reused
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
782 if (item.getData(VIRTUAL_DISPOSE_KEY) is null) {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
783 item.setData(VIRTUAL_DISPOSE_KEY, Boolean.TRUE);
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 10
diff changeset
784 item.addDisposeListener(new class(item) DisposeListener {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
785 Widget item_;
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 10
diff changeset
786 this(Widget a){
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 10
diff changeset
787 item_=a;
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
788 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
789 public void widgetDisposed(DisposeEvent e) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
790 if (!treeIsDisposed) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
791 Object data = item_.getData();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
792 if (usingElementMap() && data !is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
793 unmapElement(data, item_);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
794 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
795 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
796 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
797 });
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
798 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
799 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
800 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
801
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
802 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
803 * (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
804 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
805 * @see dwtx.jface.viewers.ColumnViewer#getRowPartFromItem(dwt.widgets.Widget)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
806 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
807 protected override ViewerRow getViewerRowFromItem(Widget item) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
808 if( cachedRow is null ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
809 cachedRow = new TreeViewerRow(cast(TreeItem) item);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
810 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
811 cachedRow.setItem(cast(TreeItem) item);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
812 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
813
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
814 return cachedRow;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
815 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
816
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
817 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
818 * Create a new ViewerRow at rowIndex
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
819 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
820 * @param parent
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
821 * @param style
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
822 * @param rowIndex
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
823 * @return ViewerRow
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
824 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
825 private ViewerRow createNewRowPart(ViewerRow parent, int style, int rowIndex) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
826 if (parent is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
827 if (rowIndex >= 0) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
828 return getViewerRowFromItem(new TreeItem(tree, style, rowIndex));
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
829 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
830 return getViewerRowFromItem(new TreeItem(tree, style));
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
831 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
832
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
833 if (rowIndex >= 0) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
834 return getViewerRowFromItem(new TreeItem(cast(TreeItem) parent.getItem(),
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
835 DWT.NONE, rowIndex));
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
836 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
837
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
838 return getViewerRowFromItem(new TreeItem(cast(TreeItem) parent.getItem(),
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
839 DWT.NONE));
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
840 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
841
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
842 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
843 * (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
844 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
845 * @see dwtx.jface.viewers.AbstractTreeViewer#internalInitializeTree(dwt.widgets.Control)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
846 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
847 protected override void internalInitializeTree(Control widget) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
848 if (contentProviderIsLazy) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
849 if (cast(Tree)widget && widget.getData() !is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
850 virtualLazyUpdateChildCount(widget, 0);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
851 return;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
852 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
853 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
854 super.internalInitializeTree(tree);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
855 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
856
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
857 /*
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
858 * (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
859 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
860 * @see dwtx.jface.viewers.AbstractTreeViewer#updatePlus(dwt.widgets.Item,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
861 * java.lang.Object)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
862 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
863 protected override void updatePlus(Item item, Object element) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
864 if (contentProviderIsLazy) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
865 Object data = item.getData();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
866 int itemCount = 0;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
867 if (data !is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
868 // item is already materialized
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
869 itemCount = (cast(TreeItem) item).getItemCount();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
870 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
871 virtualLazyUpdateHasChildren(item, itemCount);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
872 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
873 super.updatePlus(item, element);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
874 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
875 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
876
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
877 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
878 * Removes the element at the specified index of the parent. The selection is updated if required.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
879 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
880 * @param parentOrTreePath the parent element, the input element, or a tree path to the parent element
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
881 * @param index child index
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
882 * @since 3.3
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
883 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
884 public void remove(Object parentOrTreePath_, int index_) {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
885 if (checkBusy())
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
886 return;
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 10
diff changeset
887 preservingSelection(new class((cast(TreeSelection) getSelection()).getPaths(),parentOrTreePath_,index_) Runnable {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
888 Seq!(TreePath) oldSelection;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
889 Object parentOrTreePath;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
890 int index;
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 10
diff changeset
891 this(TreePath[] a,Object b,int c){
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 10
diff changeset
892 parentOrTreePath=b;
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 10
diff changeset
893 index=c;
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
894 oldSelection = new LinkSeq!(TreePath);
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 10
diff changeset
895 foreach( p; a){
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
896 oldSelection.append( p );
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
897 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
898 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
899 public void run() {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
900 TreePath removedPath = null;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
901 if (internalIsInputOrEmptyPath(parentOrTreePath)) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
902 Tree tree = cast(Tree) getControl();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
903 if (index < tree.getItemCount()) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
904 TreeItem item = tree.getItem(index);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
905 if (item.getData() !is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
906 removedPath = getTreePathFromItem(item);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
907 disassociate(item);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
908 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
909 item.dispose();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
910 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
911 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
912 Widget[] parentItems = internalFindItems(parentOrTreePath);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
913 for (int i = 0; i < parentItems.length; i++) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
914 TreeItem parentItem = cast(TreeItem) parentItems[i];
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
915 if (parentItem.isDisposed())
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
916 continue;
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
917 if (index < parentItem.getItemCount()) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
918 TreeItem item = parentItem.getItem(index);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
919 if (item.getData() !is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
920 removedPath = getTreePathFromItem(item);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
921 disassociate(item);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
922 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
923 item.dispose();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
924 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
925 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
926 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
927 if (removedPath !is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
928 bool removed = false;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
929 int delIdx = 0;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
930 foreach ( path; oldSelection.dup ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
931 if (path.startsWith(removedPath, getComparer())) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
932 oldSelection.removeAt(delIdx);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
933 removed = true;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
934 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
935 delIdx++;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
936 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
937 if (removed) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
938 setSelection(new TreeSelection(
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
939 oldSelection.toArray(), getComparer()),
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
940 false);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
941 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
942
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
943 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
944 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
945 });
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
946 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
947
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
948 /* (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
949 * @see dwtx.jface.viewers.AbstractTreeViewer#handleTreeExpand(dwt.events.TreeEvent)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
950 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
951 protected override void handleTreeExpand(TreeEvent event) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
952 if (contentProviderIsLazy) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
953 if (event.item.getData() !is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
954 Item[] children = getChildren(event.item);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
955 if (children.length is 1 && children[0].getData() is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
956 // we have a dummy child node, ask for an updated child
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
957 // count
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
958 virtualLazyUpdateChildCount(event.item, children.length);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
959 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
960 fireTreeExpanded(new TreeExpansionEvent(this, event.item
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
961 .getData()));
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
962 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
963 return;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
964 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
965 super.handleTreeExpand(event);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
966 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
967
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
968 /* (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
969 * @see dwtx.jface.viewers.AbstractTreeViewer#setContentProvider(dwtx.jface.viewers.IContentProvider)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
970 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
971 public override void setContentProvider(IContentProvider provider) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
972 contentProviderIsLazy = (cast(ILazyTreeContentProvider)provider )
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
973 || (cast(ILazyTreePathContentProvider)provider );
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
974 contentProviderIsTreeBased = null !is cast(ILazyTreePathContentProvider)provider ;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
975 super.setContentProvider(provider);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
976 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
977
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
978 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
979 * For a TreeViewer with a tree with the VIRTUAL style bit set, inform the
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
980 * viewer about whether the given element or tree path has children. Avoid
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
981 * calling this method if the number of children has already been set.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
982 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
983 * @param elementOrTreePath
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
984 * the element, or tree path
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
985 * @param hasChildren
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
986 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
987 * @since 3.3
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
988 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
989 public void setHasChildren(Object elementOrTreePath_, bool hasChildren_) {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
990 if (checkBusy())
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
991 return;
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 10
diff changeset
992 preservingSelection(new class(elementOrTreePath_,hasChildren_) Runnable {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
993 Object elementOrTreePath;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
994 bool hasChildren;
39
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 10
diff changeset
995 this(Object a,bool b){
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 10
diff changeset
996 elementOrTreePath=a;
644f1334b451 fix anon classes
Frank Benoit <benoit@tionex.de>
parents: 10
diff changeset
997 hasChildren=b;
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
998 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
999 public void run() {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1000 if (internalIsInputOrEmptyPath(elementOrTreePath)) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1001 if (hasChildren) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1002 virtualLazyUpdateChildCount(getTree(),
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1003 getChildren(getTree()).length);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1004 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1005 setChildCount(elementOrTreePath, 0);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1006 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1007 return;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1008 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1009 Widget[] items = internalFindItems(elementOrTreePath);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1010 for (int i = 0; i < items.length; i++) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1011 TreeItem item = cast(TreeItem) items[i];
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1012 if (!hasChildren) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1013 item.setItemCount(0);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1014 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1015 if (!item.getExpanded()) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1016 item.setItemCount(1);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1017 TreeItem child = item.getItem(0);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1018 if (child.getData() !is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1019 disassociate(child);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1020 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1021 item.clear(0, true);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1022 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1023 virtualLazyUpdateChildCount(item, item.getItemCount());
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1024 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1025 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1026 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1027 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1028 });
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1029 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1030
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1031 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1032 * Update the widget at index.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1033 * @param widget
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1034 * @param index
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1035 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1036 private void virtualLazyUpdateWidget(Widget widget, int index) {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1037 bool oldBusy = isBusy();
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1038 setBusy(false);
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1039 try {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1040 if (contentProviderIsTreeBased) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1041 TreePath treePath;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1042 if ( auto i = cast(Item)widget ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1043 if (widget.getData() is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1044 // we need to materialize the parent first
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1045 // see bug 167668
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1046 // however, that would be too risky
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1047 // see bug 182782 and bug 182598
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1048 // so we just ignore this call altogether
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1049 // and don't do this: virtualMaterializeItem((TreeItem) widget);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1050 return;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1051 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1052 treePath = getTreePathFromItem(i);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1053 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1054 treePath = TreePath.EMPTY;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1055 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1056 (cast(ILazyTreePathContentProvider) getContentProvider())
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1057 .updateElement(treePath, index);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1058 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1059 (cast(ILazyTreeContentProvider) getContentProvider()).updateElement(
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1060 widget.getData(), index);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1061 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1062 } finally {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1063 setBusy(oldBusy);
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1064 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1065 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1066
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1067 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1068 * Update the child count
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1069 * @param widget
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1070 * @param currentChildCount
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1071 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1072 private void virtualLazyUpdateChildCount(Widget widget, int currentChildCount) {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1073 bool oldBusy = isBusy();
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1074 setBusy(false);
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1075 try {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1076 if (contentProviderIsTreeBased) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1077 TreePath treePath;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1078 if (cast(Item)widget ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1079 treePath = getTreePathFromItem(cast(Item) widget);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1080 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1081 treePath = TreePath.EMPTY;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1082 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1083 (cast(ILazyTreePathContentProvider) getContentProvider())
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1084 .updateChildCount(treePath, currentChildCount);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1085 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1086 (cast(ILazyTreeContentProvider) getContentProvider()).updateChildCount(widget.getData(), currentChildCount);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1087 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1088 } finally {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1089 setBusy(oldBusy);
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1090 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1091 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1092
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1093 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1094 * Update the item with the current child count.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1095 * @param item
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1096 * @param currentChildCount
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1097 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1098 private void virtualLazyUpdateHasChildren(Item item, int currentChildCount) {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1099 bool oldBusy = isBusy();
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1100 setBusy(false);
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1101 try {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1102 if (contentProviderIsTreeBased) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1103 TreePath treePath;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1104 treePath = getTreePathFromItem(item);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1105 if (currentChildCount is 0) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1106 // item is not expanded (but may have a plus currently)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1107 (cast(ILazyTreePathContentProvider) getContentProvider())
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1108 .updateHasChildren(treePath);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1109 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1110 (cast(ILazyTreePathContentProvider) getContentProvider())
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1111 .updateChildCount(treePath, currentChildCount);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1112 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1113 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1114 (cast(ILazyTreeContentProvider) getContentProvider()).updateChildCount(item.getData(), currentChildCount);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1115 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1116 } finally {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1117 setBusy(oldBusy);
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1118 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1119 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1120
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1121 protected override void disassociate(Item item) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1122 if (contentProviderIsLazy) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1123 // avoid causing a callback:
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1124 item.setText(" "); //$NON-NLS-1$
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1125 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1126 super.disassociate(item);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1127 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1128
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1129 protected override int doGetColumnCount() {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1130 return tree.getColumnCount();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1131 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1132
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1133 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1134 * Sets a new selection for this viewer and optionally makes it visible.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1135 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1136 * <b>Currently the <code>reveal</code> parameter is not honored because
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1137 * {@link Tree} does not provide an API to only select an item without
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1138 * scrolling it into view</b>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1139 * </p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1140 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1141 * @param selection
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1142 * the new selection
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1143 * @param reveal
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1144 * <code>true</code> if the selection is to be made visible,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1145 * and <code>false</code> otherwise
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1146 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1147 public override void setSelection(ISelection selection, bool reveal) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1148 super.setSelection(selection, reveal);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1149 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1150
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
1151 public override void editElement(Object element, int column) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1152 if( cast(TreePath)element ) {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1153 try {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1154 getControl().setRedraw(false);
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1155 setSelection(new TreeSelection(cast(TreePath) element));
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1156 TreeItem[] items = tree.getSelection();
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1157
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1158 if( items.length is 1 ) {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1159 ViewerRow row = getViewerRowFromItem(items[0]);
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1160
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1161 if (row !is null) {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1162 ViewerCell cell = row.getCell(column);
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1163 if (cell !is null) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1164 triggerEditorActivationEvent(new ColumnViewerEditorActivationEvent(cell));
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1165 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1166 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1167 }
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1168 } finally {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1169 getControl().setRedraw(true);
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1170 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1171 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1172 super.editElement(element, column);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1173 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1174 }
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 54
diff changeset
1175
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1176 }