annotate dwtx/jface/viewers/TreeViewer.d @ 43:ea8ff534f622

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