annotate dwtx/jface/action/ToolBarManager.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 5df4896124c7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2000, 2007 IBM Corporation and others.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Frank Benoit <benoit@tionex.de>
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwtx.jface.action.ToolBarManager;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import dwtx.jface.action.ContributionManager;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 import dwtx.jface.action.IToolBarManager;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwtx.jface.action.MenuManager;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import dwtx.jface.action.IContributionItem;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 // import java.util.Iterator;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwt.DWT;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwt.accessibility.ACC;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.accessibility.AccessibleAdapter;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.accessibility.AccessibleEvent;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.accessibility.AccessibleListener;
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
27 import dwt.graphics.Point;
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import dwt.widgets.Composite;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import dwt.widgets.Control;
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
30 import dwt.widgets.CoolBar;
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
31 import dwt.widgets.CoolItem;
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 import dwt.widgets.Menu;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 import dwt.widgets.ToolBar;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 import dwt.widgets.ToolItem;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 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: 72
diff changeset
37 import dwtx.dwtxhelper.Collection;
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 * A tool bar manager is a contribution manager which realizes itself and its
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 * items in a tool bar control.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 * <p>
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 * This class may be instantiated; it may also be subclassed if a more
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 * sophisticated layout is required.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 * </p>
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 public class ToolBarManager : ContributionManager,
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 IToolBarManager {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 * The tool bar items style; <code>DWT.NONE</code> by default.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 private int itemStyle = DWT.NONE;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 * The tool bat control; <code>null</code> before creation and after
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 * disposal.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 private ToolBar toolBar = null;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 * The menu manager to the context menu associated with the toolbar.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 * @since 3.0
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 private MenuManager contextMenuManager = null;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 * Creates a new tool bar manager with the default DWT button style. Use the
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 * {@link #createControl(Composite)} method to create the tool bar control.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 public this() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 //Do nothing if there are no parameters
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 * Creates a tool bar manager with the given DWT button style. Use the
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 * <code>createControl</code> method to create the tool bar control.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 * @param style
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 * the tool bar item style
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 * @see dwt.widgets.ToolBar for valid style bits
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 public this(int style) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 itemStyle = style;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 * Creates a tool bar manager for an existing tool bar control. This manager
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 * becomes responsible for the control, and will dispose of it when the
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 * manager is disposed.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 * <strong>NOTE</strong> When creating a ToolBarManager from an existing
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 * {@link ToolBar} you will not get the accessible listener provided by
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 * JFace.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 * @see #ToolBarManager()
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 * @see #ToolBarManager(int)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 * @param toolbar
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 * the tool bar control
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 public this(ToolBar toolbar) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 this();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 this.toolBar = toolbar;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 * Creates and returns this manager's tool bar control. Does not create a
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 * new control if one already exists. Also create an {@link AccessibleListener}
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 * for the {@link ToolBar}.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 * @param parent
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 * the parent control
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 * @return the tool bar control
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 public ToolBar createControl(Composite parent) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 if (!toolBarExist() && parent !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 toolBar = new ToolBar(parent, itemStyle);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 toolBar.setMenu(getContextMenuControl());
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 update(true);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 toolBar.getAccessible().addAccessibleListener(getAccessibleListener());
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 return toolBar;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 * Get the accessible listener for the tool bar.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 * @return AccessibleListener
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 * @since 3.1
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 private AccessibleListener getAccessibleListener() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 return new class AccessibleAdapter {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 public void getName(AccessibleEvent e) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 if (e.childID !is ACC.CHILDID_SELF) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 ToolItem item = toolBar.getItem(e.childID);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 if (item !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 String toolTip = item.getToolTipText();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 if (toolTip !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 e.result = toolTip;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 };
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 * Disposes of this tool bar manager and frees all allocated DWT resources.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 * Notifies all contribution items of the dispose. Note that this method
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 * does not clean up references between this tool bar manager and its
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 * associated contribution items. Use <code>removeAll</code> for that
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 * purpose.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 public void dispose() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 if (toolBarExist()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 toolBar.dispose();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 toolBar = null;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 IContributionItem[] items = getItems();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 for (int i = 0; i < items.length; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 items[i].dispose();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 if (getContextMenuManager() !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 getContextMenuManager().dispose();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 setContextMenuManager(null);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 * Returns the tool bar control for this manager.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 * @return the tool bar control, or <code>null</code> if none (before
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 * creating or after disposal)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 public ToolBar getControl() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 return toolBar;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 * Re-lays out the tool bar.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 * <p>
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 * The default implementation of this framework method re-lays out the
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
190 * parent when the number of items are different and the new count !is 0
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 * @param layoutBar
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 * the tool bar control
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 * @param oldCount
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 * the old number of items
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 * @param newCount
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 * the new number of items
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 protected void relayout(ToolBar layoutBar, int oldCount, int newCount) {
71
4878bef4a38e Some fixing
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
200 if ((oldCount !is newCount) && (newCount!is 0)) {
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
201 Point beforePack = layoutBar.getSize();
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
202 layoutBar.pack(true);
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
203 Point afterPack = layoutBar.getSize();
71
4878bef4a38e Some fixing
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
204
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
205 // If the TB didn't change size then we're done
72
5df4896124c7 JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
206 if (beforePack.opEquals(afterPack))
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
207 return;
71
4878bef4a38e Some fixing
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
208
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
209 // OK, we need to re-layout the TB
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 layoutBar.getParent().layout();
71
4878bef4a38e Some fixing
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
211
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
212 // Now, if we're in a CoolBar then change the CoolItem size as well
71
4878bef4a38e Some fixing
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
213 if (null !is cast(CoolBar)layoutBar.getParent() ) {
4878bef4a38e Some fixing
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
214 CoolBar cb = cast(CoolBar) layoutBar.getParent();
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
215 CoolItem[] items = cb.getItems();
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
216 for (int i = 0; i < items.length; i++) {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
217 if (items[i].getControl() is layoutBar) {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
218 Point curSize = items[i].getSize();
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
219 items[i].setSize(curSize.x+ (afterPack.x - beforePack.x),
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
220 curSize.y+ (afterPack.y - beforePack.y));
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
221 return;
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
222 }
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
223 }
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
224 }
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 * Returns whether the tool bar control is created and not disposed.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 * @return <code>true</code> if the control is created and not disposed,
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 * <code>false</code> otherwise
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 private bool toolBarExist() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 return toolBar !is null && !toolBar.isDisposed();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 /*
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 * (non-Javadoc) Method declared on IContributionManager.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 public void update(bool force) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 // long startTime= 0;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 // if (DEBUG) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 // dumpStatistics();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 // startTime= (new Date()).getTime();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 // }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 if (isDirty() || force) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 if (toolBarExist()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 int oldCount = toolBar.getItemCount();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 // clean contains all active items without double separators
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 IContributionItem[] items = 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: 72
diff changeset
257 ArrayList clean = new ArrayList(items.length);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 IContributionItem separator = null;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 // long cleanStartTime= 0;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 // if (DEBUG) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 // cleanStartTime= (new Date()).getTime();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 // }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 for (int i = 0; i < items.length; ++i) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 IContributionItem ci = items[i];
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 if (!ci.isVisible()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 continue;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 if (ci.isSeparator()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 // delay creation until necessary
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 // (handles both adjacent separators, and separator at
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 // end)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 separator = ci;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 } else {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 if (separator !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 if (clean.size() > 0) {
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: 72
diff changeset
276 clean.add(cast(Object)separator);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 separator = null;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 }
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: 72
diff changeset
280 clean.add(cast(Object)ci);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 // if (DEBUG) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 // System.out.println(" Time needed to build clean vector: " +
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 // ((new Date()).getTime() - cleanStartTime));
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 // }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 // determine obsolete items (removed or non active)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 ToolItem[] mi = toolBar.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: 72
diff changeset
290 ArrayList toRemove = new ArrayList(mi.length);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 for (int i = 0; i < mi.length; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 Object data = mi[i].getData();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 if (data is null
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 || !clean.contains(data)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295 || (cast(IContributionItem) data && (cast(IContributionItem) data)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 .isDynamic())) {
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: 72
diff changeset
297 toRemove.add(mi[i]);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 // Turn redraw off if the number of items to be added
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 // is above a certain threshold, to minimize flicker,
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 // otherwise the toolbar can be seen to redraw after each item.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 // Do this before any modifications are made.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 // We assume each contribution item will contribute at least one
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 // toolbar item.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 bool useRedraw = (clean.size() - (mi.length - toRemove
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 .size())) >= 3;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 try {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 if (useRedraw) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 toolBar.setRedraw(false);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 // remove obsolete items
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 for (int i = toRemove.size(); --i >= 0;) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 ToolItem item = cast(ToolItem) toRemove.get(i);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 if (!item.isDisposed()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 Control ctrl = item.getControl();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 if (ctrl !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 item.setControl(null);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 ctrl.dispose();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 item.dispose();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 // add new items
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 IContributionItem src, dest;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 mi = toolBar.getItems();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 int srcIx = 0;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 int destIx = 0;
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: 72
diff changeset
332 for (Iterator e = clean.iterator(); e.hasNext();) {
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: 72
diff changeset
333 src = cast(IContributionItem) e.next();
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: 72
diff changeset
334
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 // get corresponding item in DWT widget
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 if (srcIx < mi.length) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 dest = cast(IContributionItem) mi[srcIx].getData();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 } else {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 dest = null;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 if (dest !is null && (cast(Object)src).opEquals(cast(Object)dest)) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 srcIx++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345 destIx++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 continue;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 if (dest !is null && dest.isSeparator()
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 && src.isSeparator()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 mi[srcIx].setData(cast(Object)src);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352 srcIx++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353 destIx++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 continue;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
355 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 int start = toolBar.getItemCount();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 src.fill(toolBar, destIx);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 int newItems = toolBar.getItemCount() - start;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 for (int i = 0; i < newItems; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 ToolItem item = toolBar.getItem(destIx++);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 item.setData(cast(Object)src);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366 // remove any old tool items not accounted for
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367 for (int i = mi.length; --i >= srcIx;) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 ToolItem item = mi[i];
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369 if (!item.isDisposed()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 Control ctrl = item.getControl();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 if (ctrl !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 item.setControl(null);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 ctrl.dispose();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 item.dispose();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379 setDirty(false);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 // turn redraw back on if we turned it off above
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 } finally {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 if (useRedraw) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 toolBar.setRedraw(true);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 int newCount = toolBar.getItemCount();
71
4878bef4a38e Some fixing
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
389
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
390 // If we're forcing a change then ensure that we re-layout everything
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
391 if (force)
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
392 oldCount = newCount+1;
71
4878bef4a38e Some fixing
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
393
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 relayout(toolBar, oldCount, newCount);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 // if (DEBUG) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 // System.out.println(" Time needed for update: " + ((new
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 // Date()).getTime() - startTime));
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 // System.out.println();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 // }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 * Returns the control of the Menu Manager. If the menu manager does not
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 * have a control then one is created.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 * @return menu widget associated with manager
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 private Menu getContextMenuControl() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413 if ((contextMenuManager !is null) && (toolBar !is null)) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 Menu menuWidget = contextMenuManager.getMenu();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415 if ((menuWidget is null) || (menuWidget.isDisposed())) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 menuWidget = contextMenuManager.createContextMenu(toolBar);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 return menuWidget;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 return null;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
423 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 * Returns the context menu manager for this tool bar manager.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 * @return the context menu manager, or <code>null</code> if none
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 * @since 3.0
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 public MenuManager getContextMenuManager() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 return contextMenuManager;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 * Sets the context menu manager for this tool bar manager to the given menu
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435 * manager. If the tool bar control exists, it also adds the menu control to
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 * the tool bar.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 * @param contextMenuManager
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 * the context menu manager, or <code>null</code> if none
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 * @since 3.0
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 public void setContextMenuManager(MenuManager contextMenuManager) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 this.contextMenuManager = contextMenuManager;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 if (toolBar !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 toolBar.setMenu(getContextMenuControl());
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
446 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 }