annotate dwtx/jface/viewers/CheckboxTableViewer.d @ 104:04b47443bb01

Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections. These new wrappers now use the tango.util.containers instead of the tango.util.collections.
author Frank Benoit <benoit@tionex.de>
date Thu, 07 Aug 2008 15:01:33 +0200
parents 7ffeace6c47f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
90
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
2 * Copyright (c) 2000, 2008 IBM Corporation and others.
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Frank Benoit <benoit@tionex.de>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwtx.jface.viewers.CheckboxTableViewer;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import dwtx.jface.viewers.ICheckable;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 import dwtx.jface.viewers.TableViewer;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwtx.jface.viewers.ICheckStateListener;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import dwtx.jface.viewers.CheckStateChangedEvent;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 import dwtx.jface.viewers.TableLayout;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwtx.jface.viewers.ColumnWeightData;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwtx.jface.viewers.CustomHashtable;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.DWT;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.events.SelectionEvent;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.widgets.Composite;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwt.widgets.Table;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import dwt.widgets.TableColumn;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import dwt.widgets.TableItem;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import dwt.widgets.Widget;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 import dwtx.core.runtime.Assert;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 import dwtx.core.runtime.ListenerList;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 import dwtx.jface.util.SafeRunnable;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 import dwt.dwthelper.utils;
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
36 import dwtx.dwtxhelper.Collection;
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 import dwt.dwthelper.Runnable;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 * A concrete viewer based on an DWT <code>Table</code>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 * control with checkboxes on each node.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 * This class is not intended to be subclassed outside the viewer framework.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 * It is designed to be instantiated with a pre-existing DWT table control and configured
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 * with a domain-specific content provider, label provider, element filter (optional),
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 * and element sorter (optional).
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 * </p>
90
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
48 * @noextend This class is not intended to be subclassed by clients.
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 public class CheckboxTableViewer : TableViewer, ICheckable {
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
51 alias TableViewer.preservingSelection preservingSelection;
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 * List of check state listeners (element type: <code>ICheckStateListener</code>).
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 private ListenerList checkStateListeners;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 * Creates a table viewer on a newly-created table control under the given parent.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 * The table control is created using the DWT style bits:
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 * <code>DWT.CHECK</code> and <code>DWT.BORDER</code>.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 * The table has one column.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 * The viewer has no input, no content provider, a default label provider,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 * no sorter, and no filters.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 * This is equivalent to calling <code>new CheckboxTableViewer(parent, DWT.BORDER)</code>.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 * See that constructor for more details.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 * </p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 * @param parent the parent control
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 * @deprecated use newCheckList(Composite, int) or new CheckboxTableViewer(Table)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 * instead (see below for details)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 public this(Composite parent) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 this(parent, DWT.BORDER);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 * Creates a table viewer on a newly-created table control under the given parent.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 * The table control is created using the given DWT style bits, plus the
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 * <code>DWT.CHECK</code> style bit.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 * The table has one column.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 * The viewer has no input, no content provider, a default label provider,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 * no sorter, and no filters.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 * This also adds a <code>TableColumn</code> for the single column,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 * and sets a <code>TableLayout</code> on the table which sizes the column to fill
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 * the table for its initial sizing, but does nothing on subsequent resizes.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 * </p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 * If the caller just needs to show a single column with no header,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 * it is preferable to use the <code>newCheckList</code> factory method instead,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 * since DWT properly handles the initial sizing and subsequent resizes in this case.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 * </p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 * If the caller adds its own columns, uses <code>Table.setHeadersVisible(true)</code>,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 * or needs to handle dynamic resizing of the table, it is recommended to
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 * create the <code>Table</code> itself, specifying the <code>DWT.CHECK</code> style bit
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 * (along with any other style bits needed), and use <code>new CheckboxTableViewer(Table)</code>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 * rather than this constructor.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 * </p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 * @param parent the parent control
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 * @param style DWT style bits
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 * @deprecated use newCheckList(Composite, int) or new CheckboxTableViewer(Table)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 * instead (see above for details)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 public this(Composite parent, int style) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 this(createTable(parent, style));
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 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 * Creates a table viewer on a newly-created table control under the given parent.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 * The table control is created using the given DWT style bits, plus the
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 * <code>DWT.CHECK</code> style bit.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 * The table shows its contents in a single column, with no header.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 * The viewer has no input, no content provider, a default label provider,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 * no sorter, and no filters.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 * No <code>TableColumn</code> is added. DWT does not require a
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 * <code>TableColumn</code> if showing only a single column with no header.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 * DWT correctly handles the initial sizing and subsequent resizes in this case.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 * @param parent the parent control
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 * @param style DWT style bits
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 * @since 2.0
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 * @return CheckboxTableViewer
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 public static CheckboxTableViewer newCheckList(Composite parent, int style) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 Table table = new Table(parent, DWT.CHECK | style);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 return new CheckboxTableViewer(table);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 * Creates a table viewer on the given table control.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 * The <code>DWT.CHECK</code> style bit must be set on the given table control.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 * The viewer has no input, no content provider, a default label provider,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 * no sorter, and no filters.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 * @param table the table control
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 public this(Table table) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 super(table);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 checkStateListeners = new ListenerList();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 /* (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 * Method declared on ICheckable.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 public void addCheckStateListener(ICheckStateListener listener) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 checkStateListeners.add(cast(Object)listener);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 * Creates a new table control with one column.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 * @param parent the parent control
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 * @param style style bits
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 * @return a new table control
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 protected static Table createTable(Composite parent, int style) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 Table table = new Table(parent, DWT.CHECK | style);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 // Although this table column is not needed, and can cause resize problems,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 // it can't be removed since this would be a breaking change against R1.0.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 // See bug 6643 for more details.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 new TableColumn(table, DWT.NONE);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 TableLayout layout = new TableLayout();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 layout.addColumnData(new ColumnWeightData(100));
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 table.setLayout(layout);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 return table;
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 * Notifies any check state listeners that a check state changed has been received.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 * Only listeners registered at the time this method is called are notified.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 * @param event a check state changed event
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 * @see ICheckStateListener#checkStateChanged
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 private void fireCheckStateChanged(CheckStateChangedEvent event) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 Object[] array = checkStateListeners.getListeners();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 for (int i = 0; i < array.length; i++) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
189 SafeRunnable.run( dgSafeRunnable( (ICheckStateListener l, CheckStateChangedEvent event_) {
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
190 l.checkStateChanged(event_);
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
191 }, cast(ICheckStateListener) array[i], event ));
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 /* (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 * Method declared on ICheckable.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 public bool getChecked(Object element) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 Widget widget = findItem(element);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 if ( auto ti = cast(TableItem) widget ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 return ti.getChecked();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 return false;
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 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 * Returns a list of elements corresponding to checked table items in this
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 * viewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 * This method is typically used when preserving the interesting
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 * state of a viewer; <code>setCheckedElements</code> is used during the restore.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 * </p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 * @return the array of checked elements
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 * @see #setCheckedElements
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 public Object[] getCheckedElements() {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 TableItem[] children = getTable().getItems();
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
219 ArrayList v = new ArrayList(children.length);
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 for (int i = 0; i < children.length; i++) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 TableItem item = children[i];
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 if (item.getChecked()) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
223 v.add(item.getData());
10
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 return v.toArray();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 * Returns the grayed state of the given element.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 * @param element the element
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 * @return <code>true</code> if the element is grayed,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 * and <code>false</code> if not grayed
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 public bool getGrayed(Object element) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 Widget widget = findItem(element);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 if ( auto ti = cast(TableItem) widget ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 return ti.getGrayed();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 return false;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 * Returns a list of elements corresponding to grayed nodes in this
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 * viewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 * This method is typically used when preserving the interesting
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 * state of a viewer; <code>setGrayedElements</code> is used during the restore.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 * </p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 * @return the array of grayed elements
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 * @see #setGrayedElements
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 public Object[] getGrayedElements() {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 TableItem[] children = getTable().getItems();
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
257 ArrayList v = new ArrayList(children.length);
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 for (int i = 0; i < children.length; i++) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 TableItem item = children[i];
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 if (item.getGrayed()) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
261 v.add(item.getData());
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 return v.toArray();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 /* (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 * Method declared on StructuredViewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
270 public override void handleSelect(SelectionEvent event) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 if (event.detail is DWT.CHECK) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 super.handleSelect(event); // this will change the current selection
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 TableItem item = cast(TableItem) event.item;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 Object data = item.getData();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 if (data !is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 fireCheckStateChanged(new CheckStateChangedEvent(this, data,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 item.getChecked()));
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 super.handleSelect(event);
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
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 /* (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 * Method declared on Viewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 39
diff changeset
288 protected override void preservingSelection(Runnable updateCode) {
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 TableItem[] children = getTable().getItems();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 CustomHashtable checked = newHashtable(children.length * 2 + 1);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 CustomHashtable grayed = newHashtable(children.length * 2 + 1);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 for (int i = 0; i < children.length; i++) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295 TableItem item = children[i];
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 Object data = item.getData();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 if (data !is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 if (item.getChecked()) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 checked.put(data, data);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 if (item.getGrayed()) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 grayed.put(data, data);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 super.preservingSelection(updateCode);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 children = getTable().getItems();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 for (int i = 0; i < children.length; i++) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 TableItem item = children[i];
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 Object data = item.getData();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 if (data !is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 item.setChecked(checked.containsKey(data));
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 item.setGrayed(grayed.containsKey(data));
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 /* (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 * Method declared on ICheckable.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 public void removeCheckStateListener(ICheckStateListener listener) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 checkStateListeners.remove(cast(Object)listener);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 * Sets to the given value the checked state for all elements in this viewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 * Does not fire events to check state listeners.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 * @param state <code>true</code> if the element should be checked,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 * and <code>false</code> if it should be unchecked
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334 public void setAllChecked(bool state) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 TableItem[] children = getTable().getItems();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 for (int i = 0; i < children.length; i++) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 TableItem item = children[i];
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 item.setChecked(state);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 * Sets to the given value the grayed state for all elements in this viewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345 * @param state <code>true</code> if the element should be grayed,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 * and <code>false</code> if it should be ungrayed
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 public void setAllGrayed(bool state) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 TableItem[] children = getTable().getItems();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 for (int i = 0; i < children.length; i++) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 TableItem item = children[i];
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352 item.setGrayed(state);
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
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356 /* (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 * Method declared on ICheckable.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 public bool setChecked(Object element, bool state) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 Assert.isNotNull(element);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 Widget widget = findItem(element);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 if ( auto ti = cast(TableItem) widget ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363 ti.setChecked(state);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364 return true;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366 return false;
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 * Sets which nodes are checked in this viewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 * The given list contains the elements that are to be checked;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 * all other nodes are to be unchecked.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 * Does not fire events to check state listeners.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 * This method is typically used when restoring the interesting
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 * state of a viewer captured by an earlier call to <code>getCheckedElements</code>.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 * </p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379 * @param elements the list of checked elements (element type: <code>Object</code>)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 * @see #getCheckedElements
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 public void setCheckedElements(Object[] elements) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 assertElementsNotNull(elements);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 CustomHashtable set = newHashtable(elements.length * 2 + 1);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 for (int i = 0; i < elements.length; ++i) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 set.put(elements[i], elements[i]);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 TableItem[] items = getTable().getItems();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
389 for (int i = 0; i < items.length; ++i) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390 TableItem item = items[i];
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 Object element = item.getData();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
392 if (element !is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
393 bool check = set.containsKey(element);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 // only set if different, to avoid flicker
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 if (item.getChecked() !is check) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396 item.setChecked(check);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 * Sets the grayed state for the given element in this viewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405 * @param element the element
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406 * @param state <code>true</code> if the item should be grayed,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 * and <code>false</code> if it should be ungrayed
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 * @return <code>true</code> if the element is visible and the gray
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 * state could be set, and <code>false</code> otherwise
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 public bool setGrayed(Object element, bool state) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 Assert.isNotNull(element);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413 Widget widget = findItem(element);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 if ( auto ti = cast(TableItem) widget ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415 ti.setGrayed(state);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 return true;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 return 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 * Sets which nodes are grayed in this viewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
423 * The given list contains the elements that are to be grayed;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 * all other nodes are to be ungrayed.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 * This method is typically used when restoring the interesting
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 * state of a viewer captured by an earlier call to <code>getGrayedElements</code>.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 * </p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 * @param elements the array of grayed elements
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432 * @see #getGrayedElements
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 public void setGrayedElements(Object[] elements) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435 assertElementsNotNull(elements);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 CustomHashtable set = newHashtable(elements.length * 2 + 1);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 for (int i = 0; i < elements.length; ++i) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 set.put(elements[i], elements[i]);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 TableItem[] items = getTable().getItems();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441 for (int i = 0; i < items.length; ++i) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 TableItem item = items[i];
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 Object element = item.getData();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 if (element !is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 bool gray = set.containsKey(element);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
446 // only set if different, to avoid flicker
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447 if (item.getGrayed() !is gray) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448 item.setGrayed(gray);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
450 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
451 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
452 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
453 }