annotate dwtx/jface/action/ToolBarManager.d @ 71:4878bef4a38e

Some fixing
author Frank Benoit <benoit@tionex.de>
date Thu, 22 May 2008 04:03:58 +0200
parents 46a6e0e6ccd4
children 5df4896124c7
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 tango.util.collection.ArraySeq;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 // import java.util.Iterator;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwt.DWT;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.accessibility.ACC;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.accessibility.AccessibleAdapter;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.accessibility.AccessibleEvent;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwt.accessibility.AccessibleListener;
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
28 import dwt.graphics.Point;
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import dwt.widgets.Composite;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import dwt.widgets.Control;
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
31 import dwt.widgets.CoolBar;
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
32 import dwt.widgets.CoolItem;
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 import dwt.widgets.Menu;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 import dwt.widgets.ToolBar;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 import dwt.widgets.ToolItem;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 import dwt.dwthelper.utils;
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
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
206 if (beforePack.equals(afterPack))
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();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 auto clean = new ArraySeq!(Object);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 clean.capacity(items.length);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 IContributionItem separator = null;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 // long cleanStartTime= 0;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 // if (DEBUG) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 // cleanStartTime= (new Date()).getTime();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 // }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 for (int i = 0; i < items.length; ++i) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 IContributionItem ci = items[i];
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 if (!ci.isVisible()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 continue;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 if (ci.isSeparator()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 // delay creation until necessary
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 // (handles both adjacent separators, and separator at
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 // end)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 separator = ci;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 } else {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 if (separator !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 if (clean.size() > 0) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 clean.append(cast(Object)separator);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 separator = null;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 clean.append(cast(Object)ci);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 // if (DEBUG) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 // System.out.println(" Time needed to build clean vector: " +
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 // ((new Date()).getTime() - cleanStartTime));
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 // }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 // determine obsolete items (removed or non active)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 ToolItem[] mi = toolBar.getItems();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 auto toRemove = new ArraySeq!(Object);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 toRemove.capacity(mi.length);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 for (int i = 0; i < mi.length; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 Object data = mi[i].getData();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295 if (data is null
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 || !clean.contains(data)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 || (cast(IContributionItem) data && (cast(IContributionItem) data)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 .isDynamic())) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 toRemove.append(mi[i]);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 // Turn redraw off if the number of items to be added
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 // is above a certain threshold, to minimize flicker,
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 // otherwise the toolbar can be seen to redraw after each item.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 // Do this before any modifications are made.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 // We assume each contribution item will contribute at least one
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 // toolbar item.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 bool useRedraw = (clean.size() - (mi.length - toRemove
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 .size())) >= 3;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 try {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 if (useRedraw) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 toolBar.setRedraw(false);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 // remove obsolete items
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 for (int i = toRemove.size(); --i >= 0;) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 ToolItem item = cast(ToolItem) toRemove.get(i);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 if (!item.isDisposed()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 Control ctrl = item.getControl();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 if (ctrl !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 item.setControl(null);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 ctrl.dispose();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 item.dispose();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 // add new items
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 IContributionItem src, dest;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 mi = toolBar.getItems();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 int srcIx = 0;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 int destIx = 0;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334 foreach( e; clean ){
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 src = cast(IContributionItem) e;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 // get corresponding item in DWT widget
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 if (srcIx < mi.length) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 dest = cast(IContributionItem) mi[srcIx].getData();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 } else {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 dest = null;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 if (dest !is null && (cast(Object)src).opEquals(cast(Object)dest)) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345 srcIx++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 destIx++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 continue;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 if (dest !is null && dest.isSeparator()
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 && src.isSeparator()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352 mi[srcIx].setData(cast(Object)src);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353 srcIx++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 destIx++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
355 continue;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 int start = toolBar.getItemCount();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 src.fill(toolBar, destIx);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 int newItems = toolBar.getItemCount() - start;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 for (int i = 0; i < newItems; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 ToolItem item = toolBar.getItem(destIx++);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363 item.setData(cast(Object)src);
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
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367 // remove any old tool items not accounted for
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 for (int i = mi.length; --i >= srcIx;) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369 ToolItem item = mi[i];
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 if (!item.isDisposed()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 Control ctrl = item.getControl();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 if (ctrl !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 item.setControl(null);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 ctrl.dispose();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 item.dispose();
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
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 setDirty(false);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 // turn redraw back on if we turned it off above
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 } finally {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 if (useRedraw) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 toolBar.setRedraw(true);
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
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
389 int newCount = toolBar.getItemCount();
71
4878bef4a38e Some fixing
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
390
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
391 // 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
392 if (force)
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 25
diff changeset
393 oldCount = newCount+1;
71
4878bef4a38e Some fixing
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
394
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 relayout(toolBar, oldCount, newCount);
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
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 // if (DEBUG) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 // System.out.println(" Time needed for update: " + ((new
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 // Date()).getTime() - startTime));
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 // System.out.println();
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 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 * Returns the control of the Menu Manager. If the menu manager does not
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 * have a control then one is created.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 * @return menu widget associated with manager
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413 private Menu getContextMenuControl() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 if ((contextMenuManager !is null) && (toolBar !is null)) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415 Menu menuWidget = contextMenuManager.getMenu();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 if ((menuWidget is null) || (menuWidget.isDisposed())) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 menuWidget = contextMenuManager.createContextMenu(toolBar);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419 return menuWidget;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 return null;
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 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 * Returns the context menu manager for this tool bar manager.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 * @return the context menu manager, or <code>null</code> if none
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 * @since 3.0
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 public MenuManager getContextMenuManager() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 return contextMenuManager;
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 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435 * Sets the context menu manager for this tool bar manager to the given menu
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 * manager. If the tool bar control exists, it also adds the menu control to
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 * the tool bar.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 * @param contextMenuManager
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 * the context menu manager, or <code>null</code> if none
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441 * @since 3.0
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 public void setContextMenuManager(MenuManager contextMenuManager) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 this.contextMenuManager = contextMenuManager;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 if (toolBar !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
446 toolBar.setMenu(getContextMenuControl());
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
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
450 }